diff options
author | Dana Robinson <derobins@hdfgroup.org> | 2019-09-26 22:47:00 (GMT) |
---|---|---|
committer | Dana Robinson <derobins@hdfgroup.org> | 2019-09-27 02:13:35 (GMT) |
commit | 4fb64c89fe52a309150ca2d5bb97eb4763e598e9 (patch) | |
tree | af158b041bcbb357aca65fc0d780d1ed727d3d04 /src/H5O.c | |
parent | fbb0728f5423ba88de5a7bbe4f4d06825ed82aaa (diff) | |
download | hdf5-4fb64c89fe52a309150ca2d5bb97eb4763e598e9.zip hdf5-4fb64c89fe52a309150ca2d5bb97eb4763e598e9.tar.gz hdf5-4fb64c89fe52a309150ca2d5bb97eb4763e598e9.tar.bz2 |
Converted H5O MD cache cork calls to use the VOL.
Diffstat (limited to 'src/H5O.c')
-rw-r--r-- | src/H5O.c | 210 |
1 files changed, 156 insertions, 54 deletions
@@ -1116,113 +1116,215 @@ done: /*------------------------------------------------------------------------- - * Function: H5Odisable_mdc_flushes + * Function: H5O_disable_mdc_flushes * - * Purpose: To "cork" an object: - * --keep dirty entries associated with the object in the metadata cache + * Purpose: Private version of the metadata cache cork function. * - * Return: Success: Non-negative - * Failure: Negative + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- + */ +herr_t +H5O_disable_mdc_flushes(H5O_loc_t *oloc) +{ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_NOAPI(FAIL); + + if (H5AC_cork(oloc->file, oloc->addr, H5AC__SET_CORK, NULL) < 0) + HGOTO_ERROR(H5E_OHDR, H5E_CANTCORK, FAIL, "unable to cork object"); + +done: + FUNC_LEAVE_NOAPI(ret_value); +} /* H5O_disable_mdc_flushes() */ + + +/*------------------------------------------------------------------------- + * Function: H5Odisable_mdc_flushes + * + * Purpose: "Cork" an object, keeping dirty entries associated with the + * object in the metadata cache. + * + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Vailin Choi - * January 2014 + * Programmer: Vailin Choi + * January 2014 * *------------------------------------------------------------------------- */ herr_t H5Odisable_mdc_flushes(hid_t object_id) { - H5O_loc_t *oloc; /* Object location */ - herr_t ret_value = SUCCEED; /* Return value */ + H5VL_object_t *vol_obj; /* Object token of loc_id */ + H5VL_loc_params_t loc_params; /* Location parameters */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_API(FAIL) + FUNC_ENTER_API(FAIL); H5TRACE1("e", "i", object_id); - /* Get the object's oloc */ - if(NULL == (oloc = H5O_get_loc(object_id))) - HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "unable to get object location from ID") + /* Make sure the ID is a file object */ + if (H5I_is_file_object(object_id) != TRUE) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "ID is not a file object"); - if(H5AC_cork(oloc->file, oloc->addr, H5AC__SET_CORK, NULL) < 0) - HGOTO_ERROR(H5E_OHDR, H5E_CANTCORK, FAIL, "unable to cork an object") + /* Get the VOL object */ + if (NULL == (vol_obj = H5VL_vol_object(object_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object ID"); + + /* Fill in location struct fields */ + loc_params.type = H5VL_OBJECT_BY_SELF; + loc_params.obj_type = H5I_get_type(object_id); + + /* Cork the object */ + if(H5VL_object_optional(vol_obj, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, H5VL_NATIVE_OBJECT_DISABLE_MDC_FLUSHES, &loc_params) < 0) + HGOTO_ERROR(H5E_OHDR, H5E_CANTCORK, FAIL, "unable to cork object"); done: - FUNC_LEAVE_API(ret_value) + FUNC_LEAVE_API(ret_value); } /* H5Odisable_mdc_flushes() */ /*------------------------------------------------------------------------- - * Function: H5Oenable_mdc_flushes + * Function: H5O_enable_mdc_flushes * - * Purpose: To "uncork" an object - * --release keeping dirty entries associated with the object - * in the metadata cache + * Purpose: Private version of the metadata cache uncork function. * - * Return: Success: Non-negative - * Failure: Negative + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- + */ +herr_t +H5O_enable_mdc_flushes(H5O_loc_t *oloc) +{ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_NOAPI(FAIL); + + if (H5AC_cork(oloc->file, oloc->addr, H5AC__UNCORK, NULL) < 0) + HGOTO_ERROR(H5E_OHDR, H5E_CANTUNCORK, FAIL, "unable to uncork object"); + +done: + FUNC_LEAVE_NOAPI(ret_value); +} /* H5O_enable_mdc_flushes() */ + + +/*------------------------------------------------------------------------- + * Function: H5Oenable_mdc_flushes + * + * Purpose: "Uncork" an object, allowing dirty entries associated with + * the object to be flushed. * - * Programmer: Vailin Choi - * January 2014 + * Return: Success: Non-negative + * Failure: Negative + * + * Programmer: Vailin Choi + * January 2014 * *------------------------------------------------------------------------- */ herr_t H5Oenable_mdc_flushes(hid_t object_id) { - H5O_loc_t *oloc; /* Object location */ - herr_t ret_value = SUCCEED; /* Return value */ + H5VL_object_t *vol_obj; /* Object token of loc_id */ + H5VL_loc_params_t loc_params; /* Location parameters */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_API(FAIL) + FUNC_ENTER_API(FAIL); H5TRACE1("e", "i", object_id); - /* Get the object's oloc */ - if(NULL == (oloc = H5O_get_loc(object_id))) - HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "unable to get object location from ID") + /* Make sure the ID is a file object */ + if (H5I_is_file_object(object_id) != TRUE) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "ID is not a file object"); + + /* Get the VOL object */ + if (NULL == (vol_obj = H5VL_vol_object(object_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object ID"); + + /* Fill in location struct fields */ + loc_params.type = H5VL_OBJECT_BY_SELF; + loc_params.obj_type = H5I_get_type(object_id); - /* Set the value */ - if(H5AC_cork(oloc->file, oloc->addr, H5AC__UNCORK, NULL) < 0) - HGOTO_ERROR(H5E_OHDR, H5E_CANTUNCORK, FAIL, "unable to uncork an object") + /* Uncork the object */ + if (H5VL_object_optional(vol_obj, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, H5VL_NATIVE_OBJECT_ENABLE_MDC_FLUSHES, &loc_params) < 0) + HGOTO_ERROR(H5E_OHDR, H5E_CANTUNCORK, FAIL, "unable to uncork object"); done: - FUNC_LEAVE_API(ret_value) + FUNC_LEAVE_API(ret_value); } /* H5Oenable_mdc_flushes() */ /*------------------------------------------------------------------------- - * Function: H5Oare_mdc_flushes_disabled + * Function: H5O_are_mdc_flushes_disabled * - * Purpose: Retrieve the object's "cork" status in the parameter "are_disabled": - * TRUE if mdc flushes for the object is disabled - * FALSE if mdc flushes for the object is not disabled - * Return error if the parameter "are_disabled" is not supplied + * Purpose: Private version of cork status getter. * - * Return: Success: Non-negative - * Failure: Negative + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- + */ +herr_t +H5O_are_mdc_flushes_disabled(H5O_loc_t *oloc, hbool_t *are_disabled) +{ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_NOAPI(FAIL); + + HDassert(are_disabled); + + if (H5AC_cork(oloc->file, oloc->addr, H5AC__GET_CORKED, are_disabled) < 0) + HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "unable to retrieve object's cork status"); + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* H5O_are_mdc_flushes_disabled() */ + + +/*------------------------------------------------------------------------- + * Function: H5Oare_mdc_flushes_disabled + * + * Purpose: Retrieve the object's "cork" status in the parameter "are_disabled": + * TRUE if mdc flushes for the object is disabled + * FALSE if mdc flushes for the object is not disabled * - * Programmer: Vailin Choi - * January 2014 + * Return error if the parameter "are_disabled" is not supplied + * + * Return: Success: Non-negative + * Failure: Negative + * + * Programmer: Vailin Choi + * January 2014 * *------------------------------------------------------------------------- */ herr_t H5Oare_mdc_flushes_disabled(hid_t object_id, hbool_t *are_disabled) { - H5O_loc_t *oloc; /* Object location */ - herr_t ret_value = SUCCEED; /* Return value */ + H5VL_object_t *vol_obj; /* Object token of loc_id */ + H5VL_loc_params_t loc_params; /* Location parameters */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_API(FAIL) + FUNC_ENTER_API(FAIL); H5TRACE2("e", "i*b", object_id, are_disabled); - /* Check args */ + /* Sanity check */ + if (!are_disabled) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get object location from ID"); - /* Get the object's oloc */ - if(NULL == (oloc = H5O_get_loc(object_id))) - HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "unable to get object location from ID") - if(!are_disabled) - HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "unable to get object location from ID") + /* Make sure the ID is a file object */ + if (H5I_is_file_object(object_id) != TRUE) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "ID is not a file object"); + + /* Get the VOL object */ + if (NULL == (vol_obj = H5VL_vol_object(object_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object ID"); + + /* Fill in location struct fields */ + loc_params.type = H5VL_OBJECT_BY_SELF; + loc_params.obj_type = H5I_get_type(object_id); /* Get the cork status */ - if(H5AC_cork(oloc->file, oloc->addr, H5AC__GET_CORKED, are_disabled) < 0) - HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "unable to retrieve an object's cork status") + if (H5VL_object_optional(vol_obj, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, H5VL_NATIVE_OBJECT_ARE_MDC_FLUSHES_DISABLED, &loc_params, are_disabled) < 0) + HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "unable to retrieve object's cork status"); done: FUNC_LEAVE_API(ret_value) |