summaryrefslogtreecommitdiffstats
path: root/src/H5F.c
diff options
context:
space:
mode:
authorvchoi <vchoi@jelly.ad.hdfgroup.org>2020-06-24 15:58:22 (GMT)
committerDavid Young <dyoung@hdfgroup.org>2020-06-26 19:18:19 (GMT)
commit9f48f4e266fdc57d02029d20af0e1ab1950b9103 (patch)
tree94d00b5e29959088f365250df03f4b2b2e15bd32 /src/H5F.c
parentd98d6746e0efb4dbda897073b6c9a1a6ec8135c9 (diff)
downloadhdf5-9f48f4e266fdc57d02029d20af0e1ab1950b9103.zip
hdf5-9f48f4e266fdc57d02029d20af0e1ab1950b9103.tar.gz
hdf5-9f48f4e266fdc57d02029d20af0e1ab1950b9103.tar.bz2
(1) Add public routines H5Fvfd_swmr_end_tick, H5Fvfd_swmr_disable_end_of_tick, H5Fvfd_swmr_enable_end_of_tick().
(2) Tests for the above APIs.
Diffstat (limited to 'src/H5F.c')
-rw-r--r--src/H5F.c97
1 files changed, 85 insertions, 12 deletions
diff --git a/src/H5F.c b/src/H5F.c
index 34099b2..919c318 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -2081,7 +2081,7 @@ done:
/*-------------------------------------------------------------------------
* Function: H5Fvfd_swmr_end_tick()
*
- * Purpose: To allow user to trigger end of tick processing
+ * Purpose: To trigger end of tick processing
*
* Return: Non-negative on success/Negative on errors
*-------------------------------------------------------------------------
@@ -2089,23 +2089,96 @@ done:
herr_t
H5Fvfd_swmr_end_tick(hid_t file_id)
{
- H5F_t *file; /* File object for file ID */
- herr_t ret_value = SUCCEED; /* Return value */
+ H5VL_object_t *vol_obj = NULL; /* File info */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ /* Note: use the version of FUNC_ENTER_API without EOT processing */
+ FUNC_ENTER_API_NO_EOT(FAIL)
+ H5TRACE1("e", "i", file_id);
+
+ vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE);
+ if(NULL == vol_obj)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
+
+ /* Check on this when go parallel for VFD SWMR */
+ /* Set up collective metadata if appropriate */
+ if(H5CX_set_loc(file_id) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, FAIL, "can't set collective metadata read info")
+
+ if(H5VL_file_optional(vol_obj, H5VL_NATIVE_FILE_VFD_SWMR_END_TICK, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_SYSTEM, FAIL, "unable to trigger end of tick processing for VFD SWMR")
+
+done:
+ /* Note: use the version of FUNC_LEAVE_API without EOT processing */
+ FUNC_LEAVE_API_NO_EOT(ret_value)
+} /* H5Fvfd_swmr_end_tick() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Fvfd_swmr_disable_end_of_tick()
+ *
+ * Purpose: Disable end of tick processing
+ *
+ * Return: Non-negative on success/Negative on errors
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Fvfd_swmr_disable_end_of_tick(hid_t file_id)
+{
+
+ H5VL_object_t *vol_obj = NULL; /* File info */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE1("e", "i", file_id);
- /* Check args */
- if(NULL == (file = (H5F_t *)H5VL_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "hid_t identifier is not a file ID")
+ vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE);
+ if(NULL == vol_obj)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
- /* This will work only if the file is opened with VFD SWMR configured.*/
- if(!(H5F_USE_VFD_SWMR(file)))
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "must have VFD SWMR configured for this public routine")
+ /* Check on this when go parallel for VFD SWMR */
+ /* Set up collective metadata if appropriate */
+ if(H5CX_set_loc(file_id) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, FAIL, "can't set collective metadata read info")
- /* ??Trigger end of tick processing later */
- H5F_vfd_swmr_writer_end_of_tick(file, true);
+ if(H5VL_file_optional(vol_obj, H5VL_NATIVE_FILE_VFD_SWMR_DISABLE_EOT, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_SYSTEM, FAIL, "unable to disable EOT for VFD SWMR")
done:
FUNC_LEAVE_API(ret_value)
-} /* H5Fvfd_swmr_end_tick() */
+} /* H5Fvfd_swmr_disable_end_of_tick() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Fvfd_swmr_enable_end_of_tick()
+ *
+ * Purpose: Enable end of tick processing
+ *
+ * Return: Non-negative on success/Negative on errors
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Fvfd_swmr_enable_end_of_tick(hid_t file_id)
+{
+
+ H5VL_object_t *vol_obj = NULL; /* File info */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_API(FAIL)
+ H5TRACE1("e", "i", file_id);
+
+ vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE);
+ if(NULL == vol_obj)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
+
+ /* Check on this when go parallel for VFD SWMR */
+ /* Set up collective metadata if appropriate */
+ if(H5CX_set_loc(file_id) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, FAIL, "can't set collective metadata read info")
+
+ if(H5VL_file_optional(vol_obj, H5VL_NATIVE_FILE_VFD_SWMR_ENABLE_EOT, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_SYSTEM, FAIL, "unable to enable EOT for VFD SWMR")
+
+done:
+ FUNC_LEAVE_API(ret_value)
+} /* H5Fvfd_swmr_enable_end_of_tick() */