summaryrefslogtreecommitdiffstats
path: root/testpar/t_chunk_alloc.c
diff options
context:
space:
mode:
authorAlbert Cheng <acheng@hdfgroup.org>2005-09-05 20:23:02 (GMT)
committerAlbert Cheng <acheng@hdfgroup.org>2005-09-05 20:23:02 (GMT)
commitc12eeffd9ffbb4547607800daea873508f2c1f00 (patch)
treecc9a48a131a9a932c551cbc6b9d116f8be12bb79 /testpar/t_chunk_alloc.c
parent1fa5f8bccbbb181069de79de7eae2d9fbca8a34f (diff)
downloadhdf5-c12eeffd9ffbb4547607800daea873508f2c1f00.zip
hdf5-c12eeffd9ffbb4547607800daea873508f2c1f00.tar.gz
hdf5-c12eeffd9ffbb4547607800daea873508f2c1f00.tar.bz2
[svn-r11349] Purpose:
Bug fix. Description: Some tests showed the filesize was not as expected. But the error was intermittent. This was a racing condition as some processes finish extend_chunked_dataset() sooner than others and return to the main body which proceeds to call the next test which also uses the same test data file and alters it. That messes up the "slower" processes which then see unexpected filesize. Also, the routine create_chunked_dataset() which creates test data file actually was executed by all processes. That is wrong. Solution: Added a barrier at the end of extend_chunked_dataset to make sure all processes are done with the test data file before returning. Changed create_chunked_dataset such that only one process would create the test data file. The rest does nothing but just wait for it to finish. Platforms tested: Tested in TG-NCSA in which the errors were detected. Misc. update:
Diffstat (limited to 'testpar/t_chunk_alloc.c')
-rw-r--r--testpar/t_chunk_alloc.c65
1 files changed, 40 insertions, 25 deletions
diff --git a/testpar/t_chunk_alloc.c b/testpar/t_chunk_alloc.c
index 10f8a9d..0cfa328 100644
--- a/testpar/t_chunk_alloc.c
+++ b/testpar/t_chunk_alloc.c
@@ -71,31 +71,40 @@ create_chunked_dataset(const char *filename)
MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
- /* Create the data space with unlimited dimensions. */
- dataspace = H5Screate_simple (1, dims, maxdims);
- VRFY((dataspace >= 0), "");
-
- /* Create a new file. If file exists its contents will be overwritten. */
- file = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- VRFY((file >= 0), "");
-
- /* Modify dataset creation properties, i.e. enable chunking */
- cparms = H5Pcreate (H5P_DATASET_CREATE);
- VRFY((cparms >= 0), "");
-
- hrc = H5Pset_chunk ( cparms, 1, chunk_dims);
- VRFY((hrc >= 0), "");
-
- /* Create a new dataset within the file using cparms creation properties. */
- dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, dataspace, cparms);
- VRFY((dataset >= 0), "");
-
- /* Close resources */
- hrc = H5Dclose (dataset);
- VRFY((hrc >= 0), "");
-
- hrc = H5Fclose (file);
- VRFY((hrc >= 0), "");
+ /* Only MAINPROCESS should create the file. Others just wait. */
+ if (MAINPROCESS){
+ /* Create the data space with unlimited dimensions. */
+ dataspace = H5Screate_simple (1, dims, maxdims);
+ VRFY((dataspace >= 0), "");
+
+ /* Create a new file. If file exists its contents will be overwritten. */
+ file = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ VRFY((file >= 0), "");
+
+ /* Modify dataset creation properties, i.e. enable chunking */
+ cparms = H5Pcreate (H5P_DATASET_CREATE);
+ VRFY((cparms >= 0), "");
+
+ hrc = H5Pset_chunk ( cparms, 1, chunk_dims);
+ VRFY((hrc >= 0), "");
+
+ /* Create a new dataset within the file using cparms creation properties. */
+ dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, dataspace, cparms);
+ VRFY((dataset >= 0), "");
+
+ /* Close resources */
+ hrc = H5Dclose (dataset);
+ VRFY((hrc >= 0), "");
+
+ hrc = H5Fclose (file);
+ VRFY((hrc >= 0), "");
+ }
+
+ /* Make sure all processes are done before exiting this routine. Otherwise,
+ * other tests may start and change the test data file before some processes
+ * of this test are still accessing the file.
+ */
+ MPI_Barrier(MPI_COMM_WORLD);
}
/*
@@ -160,6 +169,12 @@ extend_chunked_dataset(const char *filename)
/* Can close some plists */
hrc = H5Pclose(access_plist);
VRFY((hrc >= 0), "");
+
+ /* Make sure all processes are done before exiting this routine. Otherwise,
+ * other tests may start and change the test data file before some processes
+ * of this test are still accessing the file.
+ */
+ MPI_Barrier(MPI_COMM_WORLD);
}
void