summaryrefslogtreecommitdiffstats
path: root/src/H5Odeprec.c
diff options
context:
space:
mode:
authorDana Robinson <43805+derobins@users.noreply.github.com>2021-10-06 05:37:12 (GMT)
committerGitHub <noreply@github.com>2021-10-06 05:37:12 (GMT)
commita45b73e4275b26505d8b659d1d807a654bb60df7 (patch)
tree721928d7f14575113d5a0b27aac21cb548c25b37 /src/H5Odeprec.c
parent5592111747b1e6ea1e934a3c13d3395312215c31 (diff)
downloadhdf5-a45b73e4275b26505d8b659d1d807a654bb60df7.zip
hdf5-a45b73e4275b26505d8b659d1d807a654bb60df7.tar.gz
hdf5-a45b73e4275b26505d8b659d1d807a654bb60df7.tar.bz2
VFD SWMR: Normalization with develop (#1078)
Brings many changes from develop, particularly VOL changes for async
Diffstat (limited to 'src/H5Odeprec.c')
-rw-r--r--src/H5Odeprec.c155
1 files changed, 104 insertions, 51 deletions
diff --git a/src/H5Odeprec.c b/src/H5Odeprec.c
index 5e13f9f..7def20a 100644
--- a/src/H5Odeprec.c
+++ b/src/H5Odeprec.c
@@ -122,8 +122,6 @@ H5O__iterate1_adapter(hid_t obj_id, const char *name, const H5O_info2_t *oinfo2,
H5O_info1_t oinfo; /* Deprecated object info struct */
unsigned dm_fields; /* Fields for data model query */
unsigned nat_fields; /* Fields for native query */
- H5VL_object_t * vol_obj; /* Object of obj_id */
- H5VL_loc_params_t loc_params; /* Location parameters for VOL callback */
herr_t ret_value = H5_ITER_CONT; /* Return value */
FUNC_ENTER_STATIC
@@ -160,24 +158,34 @@ H5O__iterate1_adapter(hid_t obj_id, const char *name, const H5O_info2_t *oinfo2,
oinfo.num_attrs = oinfo2->num_attrs;
}
- /* Fill out location struct */
- loc_params.type = H5VL_OBJECT_BY_NAME;
- loc_params.loc_data.loc_by_name.name = name;
- loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT;
- loc_params.obj_type = H5I_get_type(obj_id);
-
- /* Get the location object */
- if (NULL == (vol_obj = H5VL_vol_object(obj_id)))
- HGOTO_ERROR(H5E_OHDR, H5E_BADTYPE, H5_ITER_ERROR, "invalid location identifier")
-
/* Check for retrieving native information */
nat_fields = shim_data->fields & (H5O_INFO_HDR | H5O_INFO_META_SIZE);
if (nat_fields) {
- H5O_native_info_t nat_info; /* Native object info */
+ H5VL_object_t * vol_obj; /* Object of obj_id */
+ H5VL_optional_args_t vol_cb_args; /* Arguments to VOL callback */
+ H5VL_native_object_optional_args_t obj_opt_args; /* Arguments for optional operation */
+ H5VL_loc_params_t loc_params; /* Location parameters for VOL callback */
+ H5O_native_info_t nat_info; /* Native object info */
+
+ /* Fill out location struct */
+ loc_params.type = H5VL_OBJECT_BY_NAME;
+ loc_params.loc_data.loc_by_name.name = name;
+ loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT;
+ loc_params.obj_type = H5I_get_type(obj_id);
+
+ /* Get the location object */
+ if (NULL == (vol_obj = H5VL_vol_object(obj_id)))
+ HGOTO_ERROR(H5E_OHDR, H5E_BADTYPE, H5_ITER_ERROR, "invalid location identifier")
+
+ /* Set up VOL callback arguments */
+ obj_opt_args.get_native_info.fields = nat_fields;
+ obj_opt_args.get_native_info.ninfo = &nat_info;
+ vol_cb_args.op_type = H5VL_NATIVE_OBJECT_GET_NATIVE_INFO;
+ vol_cb_args.args = &obj_opt_args;
/* Retrieve the object's native information */
- if (H5VL_object_optional(vol_obj, H5VL_NATIVE_OBJECT_GET_NATIVE_INFO, H5P_DATASET_XFER_DEFAULT,
- H5_REQUEST_NULL, &loc_params, &nat_info, nat_fields) < 0)
+ if (H5VL_object_optional(vol_obj, &loc_params, &vol_cb_args, H5P_DATASET_XFER_DEFAULT,
+ H5_REQUEST_NULL) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't get native info for object")
/* Set the native fields */
@@ -228,11 +236,16 @@ H5O__get_info_old(H5VL_object_t *vol_obj, H5VL_loc_params_t *loc_params, H5O_inf
/* Check for retrieving data model information */
dm_fields = fields & (H5O_INFO_BASIC | H5O_INFO_TIME | H5O_INFO_NUM_ATTRS);
if (dm_fields) {
- H5O_info2_t dm_info; /* Data model object info */
+ H5VL_object_get_args_t vol_cb_args; /* Arguments to VOL callback */
+ H5O_info2_t dm_info; /* Data model object info */
+
+ /* Set up VOL callback arguments */
+ vol_cb_args.op_type = H5VL_OBJECT_GET_INFO;
+ vol_cb_args.args.get_info.oinfo = &dm_info;
+ vol_cb_args.args.get_info.fields = dm_fields;
/* Retrieve the object's data model information */
- if (H5VL_object_get(vol_obj, loc_params, H5VL_OBJECT_GET_INFO, H5P_DATASET_XFER_DEFAULT,
- H5_REQUEST_NULL, &dm_info, dm_fields) < 0)
+ if (H5VL_object_get(vol_obj, loc_params, &vol_cb_args, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't get data model info for object")
/* Set the data model fields */
@@ -265,11 +278,19 @@ H5O__get_info_old(H5VL_object_t *vol_obj, H5VL_loc_params_t *loc_params, H5O_inf
/* Check for retrieving native information */
nat_fields = fields & (H5O_INFO_HDR | H5O_INFO_META_SIZE);
if (nat_fields) {
- H5O_native_info_t nat_info; /* Native object info */
+ H5VL_optional_args_t vol_cb_args; /* Arguments to VOL callback */
+ H5VL_native_object_optional_args_t obj_opt_args; /* Arguments for optional operation */
+ H5O_native_info_t nat_info; /* Native object info */
+
+ /* Set up VOL callback arguments */
+ obj_opt_args.get_native_info.fields = nat_fields;
+ obj_opt_args.get_native_info.ninfo = &nat_info;
+ vol_cb_args.op_type = H5VL_NATIVE_OBJECT_GET_NATIVE_INFO;
+ vol_cb_args.args = &obj_opt_args;
/* Retrieve the object's native information */
- if (H5VL_object_optional(vol_obj, H5VL_NATIVE_OBJECT_GET_NATIVE_INFO, H5P_DATASET_XFER_DEFAULT,
- H5_REQUEST_NULL, loc_params, &nat_info, nat_fields) < 0)
+ if (H5VL_object_optional(vol_obj, loc_params, &vol_cb_args, H5P_DATASET_XFER_DEFAULT,
+ H5_REQUEST_NULL) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't get native info for object")
/* Set the native fields */
@@ -751,10 +772,11 @@ done:
herr_t
H5Ovisit1(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate1_t op, void *op_data)
{
- H5VL_object_t * vol_obj = NULL; /* Object of loc_id */
- H5VL_loc_params_t loc_params;
- H5O_visit1_adapter_t shim_data; /* Adapter for passing app callback & user data */
- herr_t ret_value; /* Return value */
+ H5VL_object_t * vol_obj = NULL; /* Object of loc_id */
+ H5VL_object_specific_args_t vol_cb_args; /* Arguments to VOL callback */
+ H5VL_loc_params_t loc_params; /* Location parameters for object access */
+ H5O_visit1_adapter_t shim_data; /* Adapter for passing app callback & user data */
+ herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE5("e", "iIiIoOi*x", obj_id, idx_type, order, op, op_data);
@@ -780,10 +802,17 @@ H5Ovisit1(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate1
shim_data.fields = H5O_INFO_ALL;
shim_data.real_op_data = op_data;
+ /* Set up VOL callback arguments */
+ vol_cb_args.op_type = H5VL_OBJECT_VISIT;
+ vol_cb_args.args.visit.idx_type = idx_type;
+ vol_cb_args.args.visit.order = order;
+ vol_cb_args.args.visit.op = H5O__iterate1_adapter;
+ vol_cb_args.args.visit.op_data = &shim_data;
+ vol_cb_args.args.visit.fields = H5O_INFO_ALL;
+
/* Visit the objects */
- if ((ret_value = H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_VISIT, H5P_DATASET_XFER_DEFAULT,
- H5_REQUEST_NULL, (int)idx_type, (int)order, H5O__iterate1_adapter,
- (void *)&shim_data, H5O_INFO_ALL)) < 0)
+ if ((ret_value = H5VL_object_specific(vol_obj, &loc_params, &vol_cb_args, H5P_DATASET_XFER_DEFAULT,
+ H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_BADITER, FAIL, "object visitation failed")
done:
@@ -826,10 +855,11 @@ herr_t
H5Ovisit_by_name1(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order,
H5O_iterate1_t op, void *op_data, hid_t lapl_id)
{
- H5VL_object_t * vol_obj = NULL; /* Object of loc_id */
- H5VL_loc_params_t loc_params;
- H5O_visit1_adapter_t shim_data; /* Adapter for passing app callback & user data */
- herr_t ret_value; /* Return value */
+ H5VL_object_t * vol_obj = NULL; /* Object of loc_id */
+ H5VL_object_specific_args_t vol_cb_args; /* Arguments to VOL callback */
+ H5VL_loc_params_t loc_params; /* Location parameters for object access */
+ H5O_visit1_adapter_t shim_data; /* Adapter for passing app callback & user data */
+ herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE7("e", "i*sIiIoOi*xi", loc_id, obj_name, idx_type, order, op, op_data, lapl_id);
@@ -865,10 +895,17 @@ H5Ovisit_by_name1(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_it
shim_data.fields = H5O_INFO_ALL;
shim_data.real_op_data = op_data;
+ /* Set up VOL callback arguments */
+ vol_cb_args.op_type = H5VL_OBJECT_VISIT;
+ vol_cb_args.args.visit.idx_type = idx_type;
+ vol_cb_args.args.visit.order = order;
+ vol_cb_args.args.visit.op = H5O__iterate1_adapter;
+ vol_cb_args.args.visit.op_data = &shim_data;
+ vol_cb_args.args.visit.fields = H5O_INFO_ALL;
+
/* Visit the objects */
- if ((ret_value = H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_VISIT, H5P_DATASET_XFER_DEFAULT,
- H5_REQUEST_NULL, (int)idx_type, (int)order, H5O__iterate1_adapter,
- (void *)&shim_data, H5O_INFO_ALL)) < 0)
+ if ((ret_value = H5VL_object_specific(vol_obj, &loc_params, &vol_cb_args, H5P_DATASET_XFER_DEFAULT,
+ H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_BADITER, FAIL, "object visitation failed")
done:
@@ -914,11 +951,12 @@ herr_t
H5Ovisit2(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate1_t op, void *op_data,
unsigned fields)
{
- H5VL_object_t * vol_obj; /* Object of loc_id */
- H5VL_loc_params_t loc_params;
- H5O_visit1_adapter_t shim_data; /* Adapter for passing app callback & user data */
- hbool_t is_native_vol_obj;
- herr_t ret_value; /* Return value */
+ H5VL_object_t * vol_obj; /* Object of loc_id */
+ H5VL_object_specific_args_t vol_cb_args; /* Arguments to VOL callback */
+ H5VL_loc_params_t loc_params; /* Location parameters for object access */
+ H5O_visit1_adapter_t shim_data; /* Adapter for passing app callback & user data */
+ hbool_t is_native_vol_obj;
+ herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE6("e", "iIiIoOi*xIu", obj_id, idx_type, order, op, op_data, fields);
@@ -954,10 +992,17 @@ H5Ovisit2(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate1
shim_data.fields = fields;
shim_data.real_op_data = op_data;
+ /* Set up VOL callback arguments */
+ vol_cb_args.op_type = H5VL_OBJECT_VISIT;
+ vol_cb_args.args.visit.idx_type = idx_type;
+ vol_cb_args.args.visit.order = order;
+ vol_cb_args.args.visit.op = H5O__iterate1_adapter;
+ vol_cb_args.args.visit.op_data = &shim_data;
+ vol_cb_args.args.visit.fields = fields;
+
/* Visit the objects */
- if ((ret_value = H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_VISIT, H5P_DATASET_XFER_DEFAULT,
- H5_REQUEST_NULL, (int)idx_type, (int)order, H5O__iterate1_adapter,
- (void *)&shim_data, fields)) < 0)
+ if ((ret_value = H5VL_object_specific(vol_obj, &loc_params, &vol_cb_args, H5P_DATASET_XFER_DEFAULT,
+ H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_BADITER, FAIL, "object iteration failed")
done:
@@ -1003,11 +1048,12 @@ herr_t
H5Ovisit_by_name2(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order,
H5O_iterate1_t op, void *op_data, unsigned fields, hid_t lapl_id)
{
- H5VL_object_t * vol_obj; /* Object of loc_id */
- H5VL_loc_params_t loc_params;
- H5O_visit1_adapter_t shim_data; /* Adapter for passing app callback & user data */
- hbool_t is_native_vol_obj;
- herr_t ret_value; /* Return value */
+ H5VL_object_t * vol_obj; /* Object of loc_id */
+ H5VL_object_specific_args_t vol_cb_args; /* Arguments to VOL callback */
+ H5VL_loc_params_t loc_params; /* Location parameters for object access */
+ H5O_visit1_adapter_t shim_data; /* Adapter for passing app callback & user data */
+ hbool_t is_native_vol_obj;
+ herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE8("e", "i*sIiIoOi*xIui", loc_id, obj_name, idx_type, order, op, op_data, fields, lapl_id);
@@ -1053,10 +1099,17 @@ H5Ovisit_by_name2(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_it
shim_data.fields = fields;
shim_data.real_op_data = op_data;
+ /* Set up VOL callback arguments */
+ vol_cb_args.op_type = H5VL_OBJECT_VISIT;
+ vol_cb_args.args.visit.idx_type = idx_type;
+ vol_cb_args.args.visit.order = order;
+ vol_cb_args.args.visit.op = H5O__iterate1_adapter;
+ vol_cb_args.args.visit.op_data = &shim_data;
+ vol_cb_args.args.visit.fields = fields;
+
/* Visit the objects */
- if ((ret_value = H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_VISIT, H5P_DATASET_XFER_DEFAULT,
- H5_REQUEST_NULL, (int)idx_type, (int)order, H5O__iterate1_adapter,
- (void *)&shim_data, fields)) < 0)
+ if ((ret_value = H5VL_object_specific(vol_obj, &loc_params, &vol_cb_args, H5P_DATASET_XFER_DEFAULT,
+ H5_REQUEST_NULL)) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_BADITER, FAIL, "object iteration failed")
done: