summaryrefslogtreecommitdiffstats
path: root/src/H5FDvfd_swmr.c
diff options
context:
space:
mode:
authorvchoi <vchoi@jelly.ad.hdfgroup.org>2022-04-21 22:00:00 (GMT)
committervchoi <vchoi@jelly.ad.hdfgroup.org>2022-04-21 22:00:00 (GMT)
commit21c9366d1dc9e72ee43da7071da932a49483e2bb (patch)
tree4a8362580b8210e1e28d8d2bd50df0ad57d36761 /src/H5FDvfd_swmr.c
parent9163f6ca9bc447bfbd50554d10e0d9e7eb076724 (diff)
parent3ed0a0ee541f90e316bbabce0b3841a306420994 (diff)
downloadhdf5-21c9366d1dc9e72ee43da7071da932a49483e2bb.zip
hdf5-21c9366d1dc9e72ee43da7071da932a49483e2bb.tar.gz
hdf5-21c9366d1dc9e72ee43da7071da932a49483e2bb.tar.bz2
Merge branch 'new_vds_feature_vfd_swmr' of https://github.com/vchoi-hdfgroup/hdf5 into new_vds_feature_vfd_swmr
Diffstat (limited to 'src/H5FDvfd_swmr.c')
-rw-r--r--src/H5FDvfd_swmr.c97
1 files changed, 48 insertions, 49 deletions
diff --git a/src/H5FDvfd_swmr.c b/src/H5FDvfd_swmr.c
index 0731f30..8902d93 100644
--- a/src/H5FDvfd_swmr.c
+++ b/src/H5FDvfd_swmr.c
@@ -41,9 +41,9 @@ typedef struct H5FD_vfd_swmr_t {
/* Metadata file */
int md_fd; /* File descriptor for the metadata file */
uint32_t md_pages_reserved; /* # of pages reserved at the head of the metadata file */
- char md_file_path_name[H5FD_MAX_FILENAME_LEN+1]; /* Name of the metadate file */
- H5FD_vfd_swmr_md_header md_header; /* Metadata file header */
- H5FD_vfd_swmr_md_index md_index; /* Metadata file index */
+ char md_file_path_name[H5FD_MAX_FILENAME_LEN + 1]; /* Name of the metadate file */
+ H5FD_vfd_swmr_md_header md_header; /* Metadata file header */
+ H5FD_vfd_swmr_md_index md_index; /* Metadata file index */
/* Histogram of ticks elapsed inside the API (reader only).
* api_elapsed_ticks[elapsed] is the number of times
@@ -68,8 +68,8 @@ typedef struct H5FD_vfd_swmr_t {
} H5FD_vfd_swmr_t;
-#define MAXADDR (((haddr_t)1 << (8 * sizeof(HDoff_t) - 1)) - 1)
-#define VFD_SWMR_MD_SUFFIX ".md"
+#define MAXADDR (((haddr_t)1 << (8 * sizeof(HDoff_t) - 1)) - 1)
+#define VFD_SWMR_MD_SUFFIX ".md"
/* Prototypes */
static herr_t H5FD__vfd_swmr_term(void);
@@ -245,7 +245,7 @@ H5FD__swmr_reader_open(H5FD_vfd_swmr_t *file)
if (file->api_elapsed_ticks == NULL)
HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL, "could not allocate API elapsed ticks")
- if(!file->make_believe) {
+ if (!file->make_believe) {
/* Retry on opening the metadata file */
for (do_try = H5_retry_init(&retry, H5FD_VFD_SWMR_MD_FILE_RETRY_MAX, H5_RETRY_DEFAULT_MINIVAL,
H5_RETRY_DEFAULT_MAXIVAL);
@@ -274,9 +274,9 @@ done:
*
* Function: H5FD__vfd_swmr_build_md_path_name
*
- * Purpose: To construct the metadata file's full name based on config's
+ * Purpose: To construct the metadata file's full name based on config's
* md_file_path and md_file_name. See RFC for details.
- *
+ *
*
* Return: Success: SUCCEED
* Failure: FAIL
@@ -288,16 +288,16 @@ done:
static herr_t
H5FD__vfd_swmr_build_md_path_name(H5F_vfd_swmr_config_t *config, const char *hdf5_filename, char *name /*out*/)
{
- size_t tot_len = 0;
- size_t tmp_len = 0;
- herr_t ret_value = SUCCEED; /* Return value */
+ size_t tot_len = 0;
+ size_t tmp_len = 0;
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
- if((tot_len = HDstrlen(config->md_file_path)) != 0) {
+ if ((tot_len = HDstrlen(config->md_file_path)) != 0) {
/* md_file_path + '/' */
- if(++tot_len > H5F__MAX_VFD_SWMR_FILE_NAME_LEN)
+ if (++tot_len > H5F__MAX_VFD_SWMR_FILE_NAME_LEN)
HGOTO_ERROR(H5E_FILE, H5E_CANTCOPY, FAIL, "md_file_path and md_file_name exceeds maximum");
HDstrcat(name, config->md_file_path);
HDstrcat(name, "/");
@@ -307,7 +307,8 @@ H5FD__vfd_swmr_build_md_path_name(H5F_vfd_swmr_config_t *config, const char *hdf
if((tot_len += tmp_len) > H5F__MAX_VFD_SWMR_FILE_NAME_LEN)
HGOTO_ERROR(H5E_FILE, H5E_CANTCOPY, FAIL, "md_file_path and md_file_name exceeds maximum");
HDstrcat(name, config->md_file_name);
- } else {
+ }
+ else {
/* Automatic generation of metadata file name based on hdf5_filename + '.md' */
if((tot_len += (HDstrlen(hdf5_filename) + 3)) > H5F__MAX_VFD_SWMR_FILE_NAME_LEN)
HGOTO_ERROR(H5E_FILE, H5E_CANTCOPY, FAIL, "md_file_path and md_file_name maximum");
@@ -344,11 +345,11 @@ H5FD__vfd_swmr_create_make_believe_data(H5FD_vfd_swmr_t *_file)
/* Create make_believe data: empty header and index */
file->md_header.fs_page_size = 0;
- file->md_header.tick_num = 0;
- file->md_header.index_offset = H5FD_MD_HEADER_SIZE;
+ file->md_header.tick_num = 0;
+ file->md_header.index_offset = H5FD_MD_HEADER_SIZE;
file->md_header.index_length = H5FD_MD_INDEX_SIZE(0);
- file->md_index.tick_num = 0;
+ file->md_index.tick_num = 0;
file->md_index.num_entries = 0;
FUNC_LEAVE_NOAPI_VOID
@@ -380,7 +381,7 @@ H5FD__vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t max
H5P_genplist_t * plist;
H5F_vfd_swmr_config_t *vfd_swmr_config;
H5FD_t * ret_value = NULL; /* Return value */
- htri_t is_hdf5;
+ htri_t is_hdf5;
FUNC_ENTER_PACKAGE
@@ -419,7 +420,7 @@ H5FD__vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t max
/* Retain a copy of the metadata file name */
if(H5FD__vfd_swmr_build_md_path_name(vfd_swmr_config, name, file->md_file_path_name) < 0)
HGOTO_ERROR(H5E_VFL, H5E_OPENERROR, NULL, "building md_file_path and md_file_name failed")
-
+
file->md_file_path_name[sizeof(file->md_file_path_name) - 1] = '\0';
file->writer = vfd_swmr_config->writer;
@@ -428,10 +429,9 @@ H5FD__vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t max
is_hdf5 = H5F__is_hdf5(name, H5P_FILE_ACCESS_DEFAULT);
/* Ensure reader */
- if(!vfd_swmr_config->writer) {
+ if (!vfd_swmr_config->writer) {
/* Metadata file does not exist, presume_posix is true, HDF5 file exist */
- if (HDaccess(file->md_file_path_name, F_OK) < 0 &&
- vfd_swmr_config->presume_posix_semantics &&
+ if (HDaccess(file->md_file_path_name, F_OK) < 0 && vfd_swmr_config->presume_posix_semantics &&
is_hdf5 == TRUE) {
file->make_believe = TRUE;
@@ -442,7 +442,7 @@ H5FD__vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t max
}
/* Hard-wired to open the underlying HDF5 file with SEC2 */
- /* H5FD_SEC2 is the default driver for H5P_FILE_ACCESS_DEFAULT except when
+ /* H5FD_SEC2 is the default driver for H5P_FILE_ACCESS_DEFAULT except when
the environment variable HDF5_DRIVER is set to otherwise */
if ((file->hdf5_file_lf = H5FD_open(name, flags, H5P_FILE_ACCESS_DEFAULT, maxaddr)) == NULL)
HGOTO_ERROR(H5E_VFL, H5E_CANTOPENFILE, NULL, "can't set driver info");
@@ -640,7 +640,7 @@ H5FD__vfd_swmr_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
* `_self` DUPLICATES `_other` if `_other` is also an instance
* of SWMR class, the instances' lower files are equal under
* `H5FD_cmp()`, and the file-access properties of `_self` match
- * `fapl_id`.
+ * `fapl_id`.
*
* `_self` and `_other` CONFLICT if both are SWMR instances
* referring to the same lower file, and their file-access
@@ -679,7 +679,6 @@ H5FD_vfd_swmr_dedup(H5FD_t *_self, H5FD_t *_other, hid_t fapl_id)
if (H5FD_cmp(self->hdf5_file_lf, other->hdf5_file_lf) != 0)
HGOTO_DONE(_other)
-
/* If fapl_id != _ANY_VFD, then we have either a duplicate or
* a conflict. If the VFD SWMR parameters match, then
* return `self` to indicate a duplicate. Otherwise, return
@@ -936,11 +935,12 @@ H5FD__vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id
num_entries = file->md_index.num_entries;
fs_page_size = file->md_header.fs_page_size;
- if(!fs_page_size) {
+ if (!fs_page_size) {
HDassert(!num_entries);
HDassert(file->make_believe);
entry = NULL;
- } else {
+ }
+ else {
/* Try finding the addr from the index */
target_page = addr / fs_page_size;
@@ -953,7 +953,7 @@ H5FD__vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "file read request failed")
HGOTO_DONE(SUCCEED);
- }
+ }
/* Found in index, read from the metadata file */
HDassert(addr >= target_page * fs_page_size);
@@ -1169,7 +1169,7 @@ done:
*
* Return: Success: SUCCEED
* Failure: FAIL
- *
+ *
* Modifications:
* Vailin Choi: 2/18/2022
* VDS changes: Update the header's fs_page size if it is still 0
@@ -1280,9 +1280,9 @@ H5FD__vfd_swmr_load_hdr_and_idx(H5FD_vfd_swmr_t *file, hbool_t open)
done:
/* Need to update the header's fs_page_size if it is still 0
- because it is possible that md_header.tick_num == file->md_header.tick_num
+ because it is possible that md_header.tick_num == file->md_header.tick_num
and the loading is not done */
- if(ret_value == SUCCEED && !file->md_header.fs_page_size) {
+ if (ret_value == SUCCEED && !file->md_header.fs_page_size) {
HDassert(md_header.fs_page_size);
HDassert(file->make_believe);
file->md_header.fs_page_size = md_header.fs_page_size;
@@ -1699,12 +1699,12 @@ H5FD_vfd_swmr_get_md_path_name(H5FD_t *_file, char **name)
FUNC_LEAVE_NOAPI_VOID
-} /* H5FD_vfd_swmr_get_md_path_name() */
+} /* H5FD_vfd_swmr_get_md_path_name() */
/*-------------------------------------------------------------------------
* Function: H5FD_vfd_swmr_get_make_believe
*
- * Purpose: To retrieve the value of make_believe
+ * Purpose: To retrieve the value of make_believe
*
* Return: TRUE/FALSE
*
@@ -1724,8 +1724,7 @@ H5FD_vfd_swmr_get_make_believe(H5FD_t *_file)
FUNC_LEAVE_NOAPI(file->make_believe)
-} /* H5FD_vfd_swmr_get_make_believe() */
-
+} /* H5FD_vfd_swmr_get_make_believe() */
/*-------------------------------------------------------------------------
* Function: H5FD_vfd_swmr_set_make_believe
@@ -1754,7 +1753,7 @@ H5FD_vfd_swmr_set_make_believe(H5FD_t *_file, hbool_t make_believe)
FUNC_LEAVE_NOAPI_VOID
-} /* H5FD_vfd_swmr_make_believe() */
+} /* H5FD_vfd_swmr_make_believe() */
/*-------------------------------------------------------------------------
* Function: H5FD_vfd_swmr_assess_make_believe
@@ -1764,10 +1763,10 @@ H5FD_vfd_swmr_set_make_believe(H5FD_t *_file, hbool_t make_believe)
* --if metadata file does not exist, continue with make_believe
* Return FALSE:
* --if metadata file exists and can be opened successfully,
- * discontinue with make_believe
+ * discontinue with make_believe
* Return FAIL:
* --error in opening the metadata file
- *
+ *
*
* Return: TRUE/FALSE/FAIL
*
@@ -1777,10 +1776,10 @@ H5FD_vfd_swmr_set_make_believe(H5FD_t *_file, hbool_t make_believe)
htri_t
H5FD_vfd_swmr_assess_make_believe(H5FD_t *_file)
{
- H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file; /* VFD SWMR file struct */
- h5_retry_t retry;
- hbool_t do_try; /* more tries remain */
- htri_t ret_value = TRUE; /* Return value */
+ H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file; /* VFD SWMR file struct */
+ h5_retry_t retry;
+ hbool_t do_try; /* more tries remain */
+ htri_t ret_value = TRUE; /* Return value */
FUNC_ENTER_NOAPI(FALSE)
@@ -1789,22 +1788,22 @@ H5FD_vfd_swmr_assess_make_believe(H5FD_t *_file)
if (HDaccess(file->md_file_path_name, F_OK) >= 0) {
/* MD file exists now, proceed to open it */
HDassert(file->md_fd < 0);
-
+
/* Retry on opening the metadata file */
- for (do_try = H5_retry_init(&retry, H5FD_VFD_SWMR_MD_FILE_RETRY_MAX, H5_RETRY_DEFAULT_MINIVAL,
- H5_RETRY_DEFAULT_MAXIVAL);
+ 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)) {
if ((file->md_fd = HDopen(file->md_file_path_name, O_RDONLY)) >= 0)
break;
}
- /* Exhaust all retries for opening the md file */
- if (!do_try)
+ /* Exhaust all retries for opening the md file */
+ if (!do_try)
HGOTO_ERROR(H5E_VFL, H5E_OPENERROR, FAIL,
"unable to open the metadata file after all retry attempts");
- /* Succeed in opening the MD file, discontinue make_believe */
- ret_value = FALSE;
+ /* Succeed in opening the MD file, discontinue make_believe */
+ ret_value = FALSE;
}
done: