Updates VOL capabilities flags (#2105)

* Added feature/vol_cap_flags branch to GitHub actions

* Convert unsigned cap flag field to uint64_t and add flags

* Committing clang-format changes

* Convert unsigned cap flag field to uint64_t and add flags

* Committing clang-format changes

* Updates the VOL struct version number

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Dana Robinson 2022-09-17 09:49:38 -07:00 committed by GitHub
parent a9d8b469f4
commit 6d89634445
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 103 additions and 56 deletions

View File

@ -6255,12 +6255,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
H5Pget_vol_cap_flags(hid_t plist_id, unsigned *cap_flags)
H5Pget_vol_cap_flags(hid_t plist_id, uint64_t *cap_flags)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE2("e", "i*Iu", plist_id, cap_flags);
H5TRACE2("e", "i*UL", plist_id, cap_flags);
/* Get the 'cap_flags' from the connector */
if (cap_flags) {
@ -6279,10 +6279,10 @@ H5Pget_vol_cap_flags(hid_t plist_id, unsigned *cap_flags)
/* Query the capability flags */
if (H5VL_get_cap_flags(&connector_prop, cap_flags) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get VOL connector capability flags")
} /* end if */
}
else
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
} /* end if */
}
done:
FUNC_LEAVE_API(ret_value)

View File

@ -5333,7 +5333,7 @@ H5_DLL herr_t H5Pset_vol(hid_t plist_id, hid_t new_vol_id, const void *new_vol_i
* \since 1.13.0
*
*/
H5_DLL herr_t H5Pget_vol_cap_flags(hid_t plist_id, unsigned *cap_flags);
H5_DLL herr_t H5Pget_vol_cap_flags(hid_t plist_id, uint64_t *cap_flags);
#ifdef H5_HAVE_PARALLEL
/**

View File

@ -276,7 +276,7 @@ done:
*---------------------------------------------------------------------------
*/
herr_t
H5VLget_cap_flags(hid_t connector_id, unsigned *cap_flags /*out*/)
H5VLget_cap_flags(hid_t connector_id, uint64_t *cap_flags /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
@ -6247,7 +6247,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
H5VL_introspect_get_cap_flags(const void *info, const H5VL_class_t *cls, unsigned *cap_flags)
H5VL_introspect_get_cap_flags(const void *info, const H5VL_class_t *cls, uint64_t *cap_flags)
{
herr_t ret_value = SUCCEED; /* Return value */
@ -6281,7 +6281,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
H5VLintrospect_get_cap_flags(const void *info, hid_t connector_id, unsigned *cap_flags /*out*/)
H5VLintrospect_get_cap_flags(const void *info, hid_t connector_id, uint64_t *cap_flags /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */

View File

@ -33,12 +33,6 @@
/* Public Macros */
/*****************/
/* Capability flags for connector */
#define H5VL_CAP_FLAG_NONE 0 /* No special connector capabilities */
#define H5VL_CAP_FLAG_THREADSAFE 0x01 /* Connector is threadsafe */
#define H5VL_CAP_FLAG_ASYNC 0x02 /* Connector performs operations asynchronously*/
#define H5VL_CAP_FLAG_NATIVE_FILES 0x04 /* Connector produces native file format */
/* Container info version */
#define H5VL_CONTAINER_INFO_VERSION 0x01 /* Container info struct version */
@ -980,7 +974,7 @@ struct H5VL_class_t;
/* Container/connector introspection routines */
typedef struct H5VL_introspect_class_t {
herr_t (*get_conn_cls)(void *obj, H5VL_get_conn_lvl_t lvl, const struct H5VL_class_t **conn_cls);
herr_t (*get_cap_flags)(const void *info, unsigned *cap_flags);
herr_t (*get_cap_flags)(const void *info, uint64_t *cap_flags);
herr_t (*opt_query)(void *obj, H5VL_subclass_t cls, int opt_type, uint64_t *flags);
} H5VL_introspect_class_t;
@ -1020,7 +1014,7 @@ typedef struct H5VL_class_t {
H5VL_class_value_t value; /**< Value to identify connector */
const char *name; /**< Connector name (MUST be unique!) */
unsigned conn_version; /**< Version # of connector */
unsigned cap_flags; /**< Capability flags for connector */
uint64_t cap_flags; /**< Capability flags for connector */
herr_t (*initialize)(hid_t vipl_id); /**< Connector initialization callback */
herr_t (*terminate)(void); /**< Connector termination callback */

View File

@ -73,7 +73,7 @@ H5_DLL herr_t H5VLfree_wrap_ctx(void *wrap_ctx, hid_t connector_id);
/* Public wrappers for generic callbacks */
H5_DLL herr_t H5VLinitialize(hid_t connector_id, hid_t vipl_id);
H5_DLL herr_t H5VLterminate(hid_t connector_id);
H5_DLL herr_t H5VLget_cap_flags(hid_t connector_id, unsigned *cap_flags);
H5_DLL herr_t H5VLget_cap_flags(hid_t connector_id, uint64_t *cap_flags);
H5_DLL herr_t H5VLget_value(hid_t connector_id, H5VL_class_value_t *conn_value);
/* Public wrappers for info fields and callbacks */
@ -191,7 +191,7 @@ H5_DLL herr_t H5VLobject_optional(void *obj, const H5VL_loc_params_t *loc_params
/* Public wrappers for connector/container introspection callbacks */
H5_DLL herr_t H5VLintrospect_get_conn_cls(void *obj, hid_t connector_id, H5VL_get_conn_lvl_t lvl,
const H5VL_class_t **conn_cls);
H5_DLL herr_t H5VLintrospect_get_cap_flags(const void *info, hid_t connector_id, unsigned *cap_flags);
H5_DLL herr_t H5VLintrospect_get_cap_flags(const void *info, hid_t connector_id, uint64_t *cap_flags);
H5_DLL herr_t H5VLintrospect_opt_query(void *obj, hid_t connector_id, H5VL_subclass_t subcls, int opt_type,
uint64_t *flags);

View File

@ -2854,7 +2854,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
H5VL_get_cap_flags(const H5VL_connector_prop_t *connector_prop, unsigned *cap_flags)
H5VL_get_cap_flags(const H5VL_connector_prop_t *connector_prop, uint64_t *cap_flags)
{
herr_t ret_value = SUCCEED; /* Return value */

View File

@ -45,15 +45,28 @@ static hid_t H5VL_NATIVE_ID_g = H5I_INVALID_HID;
/* Prototypes */
static herr_t H5VL__native_term(void);
#define H5VL_NATIVE_CAP_FLAGS \
(H5VL_CAP_FLAG_NATIVE_FILES | H5VL_CAP_FLAG_ATTR_BASIC | H5VL_CAP_FLAG_ATTR_MORE | \
H5VL_CAP_FLAG_DATASET_BASIC | H5VL_CAP_FLAG_DATASET_MORE | H5VL_CAP_FLAG_FILE_BASIC | \
H5VL_CAP_FLAG_FILE_MORE | H5VL_CAP_FLAG_GROUP_BASIC | H5VL_CAP_FLAG_GROUP_MORE | \
H5VL_CAP_FLAG_LINK_BASIC | H5VL_CAP_FLAG_LINK_MORE | H5VL_CAP_FLAG_OBJECT_BASIC | \
H5VL_CAP_FLAG_OBJECT_MORE | H5VL_CAP_FLAG_REF_BASIC | H5VL_CAP_FLAG_REF_MORE | H5VL_CAP_FLAG_OBJ_REF | \
H5VL_CAP_FLAG_REG_REF | H5VL_CAP_FLAG_ATTR_REF | H5VL_CAP_FLAG_STORED_DATATYPES | \
H5VL_CAP_FLAG_CREATION_ORDER | H5VL_CAP_FLAG_ITERATE | H5VL_CAP_FLAG_STORAGE_SIZE | \
H5VL_CAP_FLAG_BY_IDX | H5VL_CAP_FLAG_GET_PLIST | H5VL_CAP_FLAG_FLUSH_REFRESH | \
H5VL_CAP_FLAG_EXTERNAL_LINKS | H5VL_CAP_FLAG_HARD_LINKS | H5VL_CAP_FLAG_SOFT_LINKS | \
H5VL_CAP_FLAG_UD_LINKS | H5VL_CAP_FLAG_TRACK_TIMES | H5VL_CAP_FLAG_MOUNT | H5VL_CAP_FLAG_FILTERS | \
H5VL_CAP_FLAG_FILL_VALUES)
/* Native VOL connector class struct */
static const H5VL_class_t H5VL_native_cls_g = {
H5VL_VERSION, /* VOL class struct version */
H5VL_NATIVE_VALUE, /* value */
H5VL_NATIVE_NAME, /* name */
H5VL_NATIVE_VERSION, /* connector version */
H5VL_CAP_FLAG_NATIVE_FILES, /* capability flags */
NULL, /* initialize */
H5VL__native_term, /* terminate */
H5VL_VERSION, /* VOL class struct version */
H5VL_NATIVE_VALUE, /* value */
H5VL_NATIVE_NAME, /* name */
H5VL_NATIVE_VERSION, /* connector version */
H5VL_NATIVE_CAP_FLAGS, /* capability flags */
NULL, /* initialize */
H5VL__native_term, /* terminate */
{
/* info_cls */
(size_t)0, /* info size */
@ -258,7 +271,7 @@ H5VL__native_introspect_get_conn_cls(void H5_ATTR_UNUSED *obj, H5VL_get_conn_lvl
*---------------------------------------------------------------------------
*/
herr_t
H5VL__native_introspect_get_cap_flags(const void H5_ATTR_UNUSED *info, unsigned *cap_flags)
H5VL__native_introspect_get_cap_flags(const void H5_ATTR_UNUSED *info, uint64_t *cap_flags)
{
FUNC_ENTER_PACKAGE_NOERR

View File

@ -138,7 +138,7 @@ H5_DLL herr_t H5VL__native_object_optional(void *obj, const H5VL_loc_params_t *l
/* Connector/container introspection functions */
H5_DLL herr_t H5VL__native_introspect_get_conn_cls(void *obj, H5VL_get_conn_lvl_t lvl,
const H5VL_class_t **conn_cls);
H5_DLL herr_t H5VL__native_introspect_get_cap_flags(const void *info, unsigned *cap_flags);
H5_DLL herr_t H5VL__native_introspect_get_cap_flags(const void *info, uint64_t *cap_flags);
H5_DLL herr_t H5VL__native_introspect_opt_query(void *obj, H5VL_subclass_t cls, int opt_type,
uint64_t *flags);

View File

@ -207,7 +207,7 @@ static herr_t H5VL_pass_through_object_optional(void *obj, const H5VL_loc_params
/* Container/connector introspection callbacks */
static herr_t H5VL_pass_through_introspect_get_conn_cls(void *obj, H5VL_get_conn_lvl_t lvl,
const H5VL_class_t **conn_cls);
static herr_t H5VL_pass_through_introspect_get_cap_flags(const void *info, unsigned *cap_flags);
static herr_t H5VL_pass_through_introspect_get_cap_flags(const void *info, uint64_t *cap_flags);
static herr_t H5VL_pass_through_introspect_opt_query(void *obj, H5VL_subclass_t cls, int opt_type,
uint64_t *flags);
@ -2553,7 +2553,7 @@ H5VL_pass_through_introspect_get_conn_cls(void *obj, H5VL_get_conn_lvl_t lvl, co
*-------------------------------------------------------------------------
*/
herr_t
H5VL_pass_through_introspect_get_cap_flags(const void *_info, unsigned *cap_flags)
H5VL_pass_through_introspect_get_cap_flags(const void *_info, uint64_t *cap_flags)
{
const H5VL_pass_through_info_t *info = (const H5VL_pass_through_info_t *)_info;
herr_t ret_value;

View File

@ -74,7 +74,7 @@ H5_DLL herr_t H5VL_conn_copy(H5VL_connector_prop_t *value);
H5_DLL int64_t H5VL_conn_inc_rc(H5VL_t *connector);
H5_DLL int64_t H5VL_conn_dec_rc(H5VL_t *connector);
H5_DLL herr_t H5VL_conn_free(const H5VL_connector_prop_t *info);
H5_DLL herr_t H5VL_get_cap_flags(const H5VL_connector_prop_t *prop, unsigned *cap_flags);
H5_DLL herr_t H5VL_get_cap_flags(const H5VL_connector_prop_t *prop, uint64_t *cap_flags);
/* Functions that deal with VOL connectors */
union H5PL_key_t;
@ -266,7 +266,7 @@ H5_DLL herr_t H5VL_object_optional(const H5VL_object_t *vol_obj, const H5VL_loc_
/* Connector/container introspection functions */
H5_DLL herr_t H5VL_introspect_get_conn_cls(const H5VL_object_t *vol_obj, H5VL_get_conn_lvl_t lvl,
const H5VL_class_t **conn_cls);
H5_DLL herr_t H5VL_introspect_get_cap_flags(const void *info, const H5VL_class_t *cls, unsigned *cap_flags);
H5_DLL herr_t H5VL_introspect_get_cap_flags(const void *info, const H5VL_class_t *cls, uint64_t *cap_flags);
H5_DLL herr_t H5VL_introspect_opt_query(const H5VL_object_t *vol_obj, H5VL_subclass_t subcls, int opt_type,
uint64_t *flags);

View File

@ -34,7 +34,7 @@
* implements. The HDF5 library will reject connectors with
* incompatible structs.
*/
#define H5VL_VERSION 2
#define H5VL_VERSION 3
/* VOL connector identifier values
* These are H5VL_class_value_t values, NOT hid_t values!
@ -60,6 +60,46 @@
*/
#define H5_VOL_MAX 65535
/* Capability flags for connector */
#define H5VL_CAP_FLAG_NONE 0x0000000000000000 /* No special connector capabilities */
#define H5VL_CAP_FLAG_THREADSAFE 0x0000000000000001 /* Connector is threadsafe */
#define H5VL_CAP_FLAG_ASYNC 0x0000000000000002 /* Connector performs operations asynchronously*/
#define H5VL_CAP_FLAG_NATIVE_FILES 0x0000000000000004 /* Connector produces native file format */
#define H5VL_CAP_FLAG_ATTR_BASIC 0x0000000000000008
#define H5VL_CAP_FLAG_ATTR_MORE 0x0000000000000010
#define H5VL_CAP_FLAG_DATASET_BASIC 0x0000000000000020
#define H5VL_CAP_FLAG_DATASET_MORE 0x0000000000000040
#define H5VL_CAP_FLAG_FILE_BASIC 0x0000000000000080
#define H5VL_CAP_FLAG_FILE_MORE 0x0000000000000100
#define H5VL_CAP_FLAG_GROUP_BASIC 0x0000000000000200
#define H5VL_CAP_FLAG_GROUP_MORE 0x0000000000000400
#define H5VL_CAP_FLAG_LINK_BASIC 0x0000000000000800
#define H5VL_CAP_FLAG_LINK_MORE 0x0000000000001000
#define H5VL_CAP_FLAG_MAP_BASIC 0x0000000000002000
#define H5VL_CAP_FLAG_MAP_MORE 0x0000000000004000
#define H5VL_CAP_FLAG_OBJECT_BASIC 0x0000000000008000
#define H5VL_CAP_FLAG_OBJECT_MORE 0x0000000000010000
#define H5VL_CAP_FLAG_REF_BASIC 0x0000000000020000
#define H5VL_CAP_FLAG_REF_MORE 0x0000000000040000
#define H5VL_CAP_FLAG_OBJ_REF 0x0000000000080000
#define H5VL_CAP_FLAG_REG_REF 0x0000000000100000
#define H5VL_CAP_FLAG_ATTR_REF 0x0000000000200000
#define H5VL_CAP_FLAG_STORED_DATATYPES 0x0000000000400000
#define H5VL_CAP_FLAG_CREATION_ORDER 0x0000000000800000
#define H5VL_CAP_FLAG_ITERATE 0x0000000001000000
#define H5VL_CAP_FLAG_STORAGE_SIZE 0x0000000002000000
#define H5VL_CAP_FLAG_BY_IDX 0x0000000004000000
#define H5VL_CAP_FLAG_GET_PLIST 0x0000000008000000
#define H5VL_CAP_FLAG_FLUSH_REFRESH 0x0000000010000000
#define H5VL_CAP_FLAG_EXTERNAL_LINKS 0x0000000020000000
#define H5VL_CAP_FLAG_HARD_LINKS 0x0000000040000000
#define H5VL_CAP_FLAG_SOFT_LINKS 0x0000000080000000
#define H5VL_CAP_FLAG_UD_LINKS 0x0000000100000000
#define H5VL_CAP_FLAG_TRACK_TIMES 0x0000000200000000
#define H5VL_CAP_FLAG_MOUNT 0x0000000400000000
#define H5VL_CAP_FLAG_FILTERS 0x0000000800000000
#define H5VL_CAP_FLAG_FILL_VALUES 0x0000001000000000
/* Flags to return from H5VLquery_optional API and 'opt_query' callbacks */
/* Note: Operations which access multiple objects' data or metadata in a
* container should be registered as file-level optional operations.

View File

@ -27,7 +27,7 @@ static const H5VL_class_t null_vol_g = {
NULL_VOL_CONNECTOR_VALUE, /* value */
NULL_VOL_CONNECTOR_NAME, /* name */
0, /* connector version */
0, /* capability flags */
H5VL_CAP_FLAG_NONE, /* capability flags */
NULL, /* initialize */
NULL, /* terminate */
{

View File

@ -50,13 +50,13 @@ static herr_t reg_opt_datatype_get(void *obj, H5VL_datatype_get_args_t *args, hi
#define REG_OPT_VOL_NAME "reg_opt"
#define REG_OPT_VOL_VALUE ((H5VL_class_value_t)502)
static const H5VL_class_t reg_opt_vol_g = {
H5VL_VERSION, /* VOL class struct version */
REG_OPT_VOL_VALUE, /* value */
REG_OPT_VOL_NAME, /* name */
0, /* version */
0, /* capability flags */
NULL, /* initialize */
NULL, /* terminate */
H5VL_VERSION, /* VOL class struct version */
REG_OPT_VOL_VALUE, /* value */
REG_OPT_VOL_NAME, /* name */
0, /* version */
H5VL_CAP_FLAG_NONE, /* capability flags */
NULL, /* initialize */
NULL, /* terminate */
{
/* info_cls */
(size_t)0, /* size */
@ -178,13 +178,13 @@ static const H5VL_class_t reg_opt_vol_g = {
* functionality.
*/
static const H5VL_class_t fake_vol_g = {
H5VL_VERSION, /* VOL class struct version */
FAKE_VOL_VALUE, /* value */
FAKE_VOL_NAME, /* name */
0, /* connector version */
0, /* capability flags */
NULL, /* initialize */
NULL, /* terminate */
H5VL_VERSION, /* VOL class struct version */
FAKE_VOL_VALUE, /* value */
FAKE_VOL_NAME, /* name */
0, /* connector version */
H5VL_CAP_FLAG_NONE, /* capability flags */
NULL, /* initialize */
NULL, /* terminate */
{
/* info_cls */
(size_t)0, /* size */
@ -299,7 +299,7 @@ static const H5VL_class_t fake_vol_g = {
NULL /* optional */
};
static herr_t fake_async_get_cap_flags(const void *info, unsigned *cap_flags);
static herr_t fake_async_get_cap_flags(const void *info, uint64_t *cap_flags);
#define FAKE_ASYNC_VOL_NAME "fake_async"
#define FAKE_ASYNC_VOL_VALUE ((H5VL_class_value_t)503)
@ -562,7 +562,7 @@ reg_opt_datatype_get(void H5_ATTR_UNUSED *obj, H5VL_datatype_get_args_t *args, h
*-------------------------------------------------------------------------
*/
static herr_t
fake_async_get_cap_flags(const void H5_ATTR_UNUSED *info, unsigned *cap_flags)
fake_async_get_cap_flags(const void H5_ATTR_UNUSED *info, uint64_t *cap_flags)
{
*cap_flags = fake_async_vol_g.cap_flags;
@ -1979,7 +1979,7 @@ test_async_vol_props(void)
hid_t fapl_id = H5I_INVALID_HID;
hid_t vol_id = H5I_INVALID_HID;
H5VL_pass_through_info_t passthru_info;
unsigned cap_flags = 0;
uint64_t cap_flags = H5VL_CAP_FLAG_NONE;
char *conn_env_str = NULL;
TESTING("Async VOL props");
@ -2002,7 +2002,7 @@ test_async_vol_props(void)
TEST_ERROR;
if (H5VL__reparse_def_vol_conn_variable_test() < 0)
TEST_ERROR;
} /* end if */
}
/* Test query w/default VOL, which should indicate no async, since native connector
* doesn't support async.
@ -2032,7 +2032,7 @@ test_async_vol_props(void)
fapl_id = h5_fileaccess();
/* Test query w/fake async VOL, which should succeed */
cap_flags = 0;
cap_flags = H5VL_CAP_FLAG_NONE;
if (H5Pget_vol_cap_flags(fapl_id, &cap_flags) < 0)
FAIL_STACK_ERROR;
if ((cap_flags & H5VL_CAP_FLAG_ASYNC) == 0)
@ -2058,7 +2058,7 @@ test_async_vol_props(void)
FAIL_STACK_ERROR;
/* Test query w/fake async VOL, which should succeed */
cap_flags = 0;
cap_flags = H5VL_CAP_FLAG_NONE;
if (H5Pget_vol_cap_flags(fapl_id, &cap_flags) < 0)
FAIL_STACK_ERROR;
if ((cap_flags & H5VL_CAP_FLAG_ASYNC) == 0)
@ -2073,7 +2073,7 @@ test_async_vol_props(void)
FAIL_STACK_ERROR;
/* Test query w/passthru -> fake async VOL, which should succeed */
cap_flags = 0;
cap_flags = H5VL_CAP_FLAG_NONE;
if (H5Pget_vol_cap_flags(fapl_id, &cap_flags) < 0)
FAIL_STACK_ERROR;
if ((cap_flags & H5VL_CAP_FLAG_ASYNC) == 0)
@ -2097,7 +2097,7 @@ test_async_vol_props(void)
if (H5VL__reparse_def_vol_conn_variable_test() < 0)
TEST_ERROR;
} /* end if */
}
PASSED();