diff options
author | vchoi-hdfgroup <55293060+vchoi-hdfgroup@users.noreply.github.com> | 2022-04-04 19:40:16 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-04 19:40:16 (GMT) |
commit | ff7fe9e9af404591d3d50f3b33d190679529bb10 (patch) | |
tree | d2bd03b84b8e97d21dbcdfaa04199c898b6ae291 /src/H5FDvfd_swmr.c | |
parent | e3ff70f44a4360b26e569f6047a906f522fb28ed (diff) | |
parent | bc62da7eb911727497475d1cc90991230f33fa3d (diff) | |
download | hdf5-ff7fe9e9af404591d3d50f3b33d190679529bb10.zip hdf5-ff7fe9e9af404591d3d50f3b33d190679529bb10.tar.gz hdf5-ff7fe9e9af404591d3d50f3b33d190679529bb10.tar.bz2 |
Merge pull request #60 from HDFGroup/feature/vfd_swmr
Feature/vfd swmr
Diffstat (limited to 'src/H5FDvfd_swmr.c')
-rw-r--r-- | src/H5FDvfd_swmr.c | 115 |
1 files changed, 44 insertions, 71 deletions
diff --git a/src/H5FDvfd_swmr.c b/src/H5FDvfd_swmr.c index 60812bd..c79a357 100644 --- a/src/H5FDvfd_swmr.c +++ b/src/H5FDvfd_swmr.c @@ -90,6 +90,7 @@ static htri_t H5FD__vfd_swmr_index_deserialize(const H5FD_vfd_swmr_t *file, H5FD static herr_t H5FD__vfd_swmr_load_hdr_and_idx(H5FD_vfd_swmr_t *, hbool_t); static const H5FD_class_t H5FD_vfd_swmr_g = { + H5FD_VFD_SWMR_VALUE, /* value */ "vfd_swmr", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ @@ -122,6 +123,7 @@ static const H5FD_class_t H5FD_vfd_swmr_g = { H5FD__vfd_swmr_lock, /* lock */ H5FD__vfd_swmr_unlock, /* unlock */ NULL, /* del */ + NULL, /* ctl */ H5FD_FLMAP_DICHOTOMY /* fl_map */ }; @@ -132,30 +134,6 @@ H5FL_DEFINE_STATIC(H5FD_vfd_swmr_t); H5FL_SEQ_DEFINE(H5FD_vfd_swmr_idx_entry_t); /*------------------------------------------------------------------------- - * Function: H5FD__init_package - * - * Purpose: Initializes any interface-specific data or routines. - * -b - * Return: Non-negative on success/Negative on failure - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD__init_package(void) -{ - herr_t ret_value = SUCCEED; - - FUNC_ENTER_STATIC - - if (H5FD_vfd_swmr_init() < 0) - HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to initialize swmr VFD") - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* H5FD__init_package() */ - -/*------------------------------------------------------------------------- * Function: H5FD_vfd_swmr_init * * Purpose: Initialize this driver by registering the driver with the @@ -164,9 +142,6 @@ done: * Return: Success: The driver ID for the VFD SWMR driver. * Failure: Negative * - * Programmer: Robb Matzke - * Thursday, July 29, 1999 - * *------------------------------------------------------------------------- */ hid_t @@ -174,7 +149,7 @@ H5FD_vfd_swmr_init(void) { hid_t ret_value = H5I_INVALID_HID; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_NOAPI_NOERR if (H5I_VFL != H5I_get_type(H5FD_VFD_SWMR_g)) H5FD_VFD_SWMR_g = H5FD_register(&H5FD_vfd_swmr_g, sizeof(H5FD_class_t), FALSE); @@ -182,7 +157,6 @@ H5FD_vfd_swmr_init(void) /* Set return value */ ret_value = H5FD_VFD_SWMR_g; -done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD_vfd_swmr_init() */ @@ -193,9 +167,6 @@ done: * * Returns: SUCCEED (Can't fail) * - * Programmer: Quincey Koziol - * Friday, Jan 30, 2004 - * *--------------------------------------------------------------------------- */ static herr_t @@ -231,15 +202,22 @@ H5Pset_fapl_vfd_swmr(hid_t fapl_id) if (NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list") - ret_value = H5P_set_driver(plist, H5FD_VFD_SWMR, NULL); + ret_value = H5P_set_driver(plist, H5FD_VFD_SWMR, NULL, NULL); done: FUNC_LEAVE_API(ret_value) } /* end H5Pset_fapl_vfd_swmr() */ -/* Perform the reader-only aspects of opening in VFD SWMR mode: - * initialize histogram of ticks spent in API calls, wait for the - * shadow file to appear, load the header and index. +/*------------------------------------------------------------------------- + * Function: H5FD__swmr_reader_open + * + * Purpose: Perform the reader-only aspects of opening in VFD SWMR mode: + * initialize histogram of ticks spent in API calls, wait for + * the shadow file to appear, load the header and index. + * + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- */ static herr_t H5FD__swmr_reader_open(H5FD_vfd_swmr_t *file) @@ -258,9 +236,9 @@ H5FD__swmr_reader_open(H5FD_vfd_swmr_t *file) HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL, "could not allocate API elapsed ticks") /* Retry on opening the metadata file */ - for (do_try = h5_retry_init(&retry, H5FD_VFD_SWMR_MD_FILE_RETRY_MAX, H5_RETRY_DEFAULT_MINIVAL, + for (do_try = H5_retry_init(&retry, H5FD_VFD_SWMR_MD_FILE_RETRY_MAX, H5_RETRY_DEFAULT_MINIVAL, H5_RETRY_DEFAULT_MAXIVAL); - do_try; do_try = h5_retry_next(&retry)) { + do_try; do_try = H5_retry_next(&retry)) { if ((file->md_fd = HDopen(file->md_file_path, O_RDONLY)) >= 0) break; } @@ -374,14 +352,23 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD__vfd_swmr_open() */ -/* Perform the reader-only aspects of closing in VFD SWMR mode: optionally - * log and always release the histogram of ticks spent in API calls, - * close the shadow file, release the shadow index. +/*------------------------------------------------------------------------- + * Function: H5FD__swmr_reader_close + * + * Purpose: Perform the reader-only aspects of closing in VFD SWMR mode: + * optionally log and always release the histogram of ticks spent + * in API calls, close the shadow file, release the shadow index. + * + * Return: void + * + *------------------------------------------------------------------------- */ -static void +static herr_t H5FD__swmr_reader_close(H5FD_vfd_swmr_t *file) { - vfd_swmr_reader_did_increase_tick_to(0); + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_STATIC if (file->api_elapsed_ticks != NULL) H5MM_xfree(file->api_elapsed_ticks); @@ -389,11 +376,14 @@ H5FD__swmr_reader_close(H5FD_vfd_swmr_t *file) /* Close the metadata file */ if (file->md_fd >= 0 && HDclose(file->md_fd) < 0) /* Push error, but keep going */ - HERROR(H5E_VFL, H5E_CANTCLOSEFILE, "unable to close the metadata file"); + HDONE_ERROR(H5E_VFL, H5E_CANTCLOSEFILE, FAIL, "unable to close the metadata file"); /* Free the index entries */ if (file->md_index.num_entries && file->md_index.entries) file->md_index.entries = H5FL_SEQ_FREE(H5FD_vfd_swmr_idx_entry_t, file->md_index.entries); + + FUNC_LEAVE_NOAPI(ret_value) + } /* end H5FD__swmr_reader_close() */ /*------------------------------------------------------------------------- @@ -793,7 +783,7 @@ H5FD__vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id /* Try finding the addr from the index */ target_page = addr / fs_page_size; - entry = vfd_swmr_pageno_to_mdf_idx_entry(index, num_entries, target_page, FALSE); + entry = H5FD_vfd_swmr_pageno_to_mdf_idx_entry(index, num_entries, target_page, FALSE); if (entry == NULL) { /* Cannot find addr in index, read from the underlying hdf5 file */ @@ -1034,9 +1024,9 @@ H5FD__vfd_swmr_load_hdr_and_idx(H5FD_vfd_swmr_t *file, hbool_t open) FUNC_ENTER_STATIC - for (do_try = h5_retry_init(&retry, H5FD_VFD_SWMR_MD_LOAD_RETRY_MAX, H5_RETRY_ONE_SECOND / 10, + for (do_try = H5_retry_init(&retry, H5FD_VFD_SWMR_MD_LOAD_RETRY_MAX, H5_RETRY_ONE_SECOND / 10, H5_RETRY_ONE_SECOND); - do_try; do_try = h5_retry_next(&retry)) { + do_try; do_try = H5_retry_next(&retry)) { /* Load and decode the header. Go around again on a temporary * failure (FALSE). Bail on an irrecoverable failure (FAIL). @@ -1193,7 +1183,8 @@ H5FD__vfd_swmr_header_deserialize(H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_header UINT32DECODE(p, md_header->fs_page_size); UINT64DECODE(p, md_header->tick_num); UINT64DECODE(p, md_header->index_offset); - if ((index_length = uint64_decode(&p)) > SIZE_MAX) + UINT64DECODE(p, index_length); + if (index_length > SIZE_MAX) HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "index is too large to hold in core") md_header->index_length = (size_t)index_length; @@ -1204,13 +1195,6 @@ H5FD__vfd_swmr_header_deserialize(H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_header /* Sanity check */ HDassert((size_t)(p - image) <= H5FD_MD_HEADER_SIZE); -#if 0 /* JRM */ - HDfprintf(stderr, - "---read header ps/tick/idx_off/idx_len = %d / %lld / %lld / %lld\n", - md_header->fs_page_size, md_header->tick_num, - md_header->index_offset, md_header->index_length); -#endif /* JRM */ - ret_value = TRUE; done: @@ -1219,7 +1203,7 @@ done: } /* H5FD__vfd_swmr_header_deserialize() */ -/* +/*------------------------------------------------------------------------- * Function: H5FD__vfd_swmr_index_deserialize() * * Purpose: Load and decode the index in the metadata file @@ -1230,10 +1214,8 @@ done: * --Decode the index entries if the tick number in the header and * the index match * - * Return: Success: TRUE - * Failure: FAIL - * Retry: FALSE - * + * Return: TRUE/FALSE/FAIL + *------------------------------------------------------------------------- */ static htri_t H5FD__vfd_swmr_index_deserialize(const H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_index *md_index, @@ -1343,12 +1325,6 @@ H5FD__vfd_swmr_index_deserialize(const H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_i /* Sanity check */ HDassert((size_t)(p - image) <= md_header->index_length); -#if 0 /* JRM */ - HDfprintf(stderr, - " ---- read index tick/num_entries = %lld / %d \n", - md_index->tick_num, md_index->num_entries); -#endif /* JRM */ - done: if (image != NULL) image = H5MM_xfree(image); @@ -1379,8 +1355,7 @@ done: * --Return tick_num, num_entries and index from the VFD's * local copies. * - * Return: Success: SUCCEED - * Failure: FAIL + * Return: SUCCEED/FAIL * * Programmer: Vailin Choi * @@ -1429,8 +1404,7 @@ done: * Purpose: Dump a variety of information about the vfd swmr reader * vfd to stderr for debugging purposes. * - * Return: Success: SUCCEED - * Failure: FAIL + * Return: SUCCEED/FAIL * *------------------------------------------------------------------------- */ @@ -1513,7 +1487,6 @@ H5FD_vfd_swmr_set_pb_configured(H5FD_t *_file) * Programmer: JRM -- 1/29/19 * *------------------------------------------------------------------------- - * */ void H5FD_vfd_swmr_record_elapsed_ticks(H5FD_t *_file, uint64_t elapsed) |