summaryrefslogtreecommitdiffstats
path: root/testpar/t_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'testpar/t_cache.c')
-rw-r--r--testpar/t_cache.c95
1 files changed, 70 insertions, 25 deletions
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index b848827..8965cb4 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -389,8 +389,10 @@ static hbool_t serve_rw_count_reset_request(struct mssg_t * mssg_ptr);
/* call back functions & related data structures */
-static herr_t datum_get_load_size(const void * udata_ptr,
- size_t *image_len_ptr);
+static herr_t datum_get_load_size(const void *image_ptr,
+ const void *udata_ptr,
+ size_t *image_len_ptr,
+ size_t *actual_len_ptr);
static void * datum_deserialize(const void * image_ptr,
size_t len,
@@ -440,6 +442,7 @@ const H5C_class_t types[NUMBER_OF_ENTRY_TYPES] =
/* mem_type */ H5FD_MEM_DEFAULT,
/* flags */ H5AC__CLASS_SKIP_READS | H5AC__CLASS_SKIP_WRITES,
/* get_load_size */ (H5AC_get_load_size_func_t)datum_get_load_size,
+ /* verify_chksum */ NULL,
/* deserialize */ (H5AC_deserialize_func_t)datum_deserialize,
/* image_len */ (H5AC_image_len_func_t)datum_image_len,
/* pre_serialize */ (H5AC_pre_serialize_func_t)NULL,
@@ -482,7 +485,7 @@ static hbool_t setup_cache_for_test(hid_t * fid_ptr,
H5C_t ** cache_ptr_ptr,
int metadata_write_strategy);
static void setup_rand(void);
-static hbool_t take_down_cache(hid_t fid);
+static hbool_t take_down_cache(hid_t fid, H5C_t * cache_ptr);
static hbool_t verify_entry_reads(haddr_t addr, int expected_entry_reads);
static hbool_t verify_entry_writes(haddr_t addr, int expected_entry_writes);
static hbool_t verify_total_reads(int expected_total_reads);
@@ -2333,8 +2336,8 @@ serve_rw_count_reset_request(struct mssg_t * mssg_ptr)
*-------------------------------------------------------------------------
*/
static herr_t
-datum_get_load_size(const void * udata_ptr,
- size_t *image_len_ptr)
+datum_get_load_size(const void *image_ptr, const void *udata_ptr,
+ size_t *image_len_ptr, size_t *actual_len_ptr)
{
haddr_t addr = *(haddr_t *)udata_ptr;
int idx;
@@ -3052,7 +3055,7 @@ expunge_entry(H5F_t * file_ptr,
HDassert( ! ((entry_ptr->header).is_dirty) );
result = H5C_get_entry_status(file_ptr, entry_ptr->base_addr,
- NULL, &in_cache, NULL, NULL, NULL, NULL, NULL);
+ NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL);
if ( result < 0 ) {
@@ -3124,7 +3127,7 @@ insert_entry(H5C_t * cache_ptr,
entry_ptr->dirty = TRUE;
result = H5AC_insert_entry(file_ptr, H5P_DATASET_XFER_DEFAULT, &(types[0]),
- entry_ptr->base_addr, (void *)(&(entry_ptr->header)), flags);
+ entry_ptr->base_addr, (void *)(&(entry_ptr->header)), flags);
if ( ( result < 0 ) ||
( entry_ptr->header.type != &(types[0]) ) ||
@@ -4489,35 +4492,77 @@ setup_rand(void)
*
*****************************************************************************/
static hbool_t
-take_down_cache(hid_t fid)
+take_down_cache(hid_t fid, H5C_t * cache_ptr)
{
- hbool_t success = FALSE; /* will set to TRUE if appropriate. */
+ hbool_t success = TRUE; /* will set to FALSE if appropriate. */
- /* close the file and delete it */
- if ( H5Fclose(fid) < 0 ) {
+ /* flush the file -- this should write out any remaining test
+ * entries in the cache.
+ */
+ if ( ( success ) && ( H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0 ) ) {
+ success = FALSE;
nerrors++;
if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Fclose() failed.\n",
+ HDfprintf(stdout, "%d:%s: H5Fflush() failed.\n",
world_mpi_rank, FUNC);
}
+ }
- } else if ( world_mpi_rank == world_server_mpi_rank ) {
+ /* Now reset the sync point done callback. Must do this as with
+ * the SWMR mods, the cache will do additional I/O on file close
+ * un-related to the test entries, and thereby corrupt our counts
+ * of entry writes.
+ */
+ if ( success ) {
- if ( HDremove(filenames[0]) < 0 ) {
+ if ( H5AC__set_sync_point_done_callback(cache_ptr, NULL) != SUCCEED ) {
+ success = FALSE;
nerrors++;
if ( verbose ) {
- HDfprintf(stdout, "%d:%s: HDremove() failed.\n",
+ HDfprintf(stdout,
+ "%d:%s: H5AC__set_sync_point_done_callback failed.\n",
world_mpi_rank, FUNC);
}
- } else {
+ }
+
+
+ }
- success = TRUE;
+ /* close the file */
+ if ( ( success ) && ( H5Fclose(fid) < 0 ) ) {
+
+ success = FALSE;
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: H5Fclose() failed.\n",
+ world_mpi_rank, FUNC);
}
- } else {
- success = TRUE;
+ }
+
+ if ( success ) {
+
+ if ( world_mpi_rank == world_server_mpi_rank ) {
+
+ if ( HDremove(filenames[0]) < 0 ) {
+
+ success = FALSE;
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: HDremove() failed.\n",
+ world_mpi_rank, FUNC);
+ }
+ }
+ } else {
+
+ /* verify that there have been no further writes of test
+ * entries during the close
+ */
+ success = verify_total_writes(0);
+
+ }
}
return(success);
@@ -5574,7 +5619,7 @@ smoke_check_1(int metadata_write_strategy)
if ( fid >= 0 ) {
- if ( ! take_down_cache(fid) ) {
+ if ( ! take_down_cache(fid, cache_ptr) ) {
nerrors++;
if ( verbose ) {
@@ -5796,7 +5841,7 @@ smoke_check_2(int metadata_write_strategy)
if ( fid >= 0 ) {
- if ( ! take_down_cache(fid) ) {
+ if ( ! take_down_cache(fid, cache_ptr) ) {
nerrors++;
if ( verbose ) {
@@ -6119,7 +6164,7 @@ smoke_check_3(int metadata_write_strategy)
if ( fid >= 0 ) {
- if ( ! take_down_cache(fid) ) {
+ if ( ! take_down_cache(fid, cache_ptr) ) {
nerrors++;
if ( verbose ) {
@@ -6436,7 +6481,7 @@ smoke_check_4(int metadata_write_strategy)
if ( fid >= 0 ) {
- if ( ! take_down_cache(fid) ) {
+ if ( ! take_down_cache(fid, cache_ptr) ) {
nerrors++;
if ( verbose ) {
@@ -6646,7 +6691,7 @@ smoke_check_5(int metadata_write_strategy)
if ( fid >= 0 ) {
- if ( ! take_down_cache(fid) ) {
+ if ( ! take_down_cache(fid, cache_ptr) ) {
nerrors++;
if ( verbose ) {
@@ -6995,7 +7040,7 @@ trace_file_check(int metadata_write_strategy)
if ( fid >= 0 ) {
- if ( ! take_down_cache(fid) ) {
+ if ( ! take_down_cache(fid, cache_ptr) ) {
nerrors++;
if ( verbose ) {