summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2019-02-19 00:45:36 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2019-02-19 00:45:36 (GMT)
commitefb2f4932fc622e68b1d6e27435beb06da617638 (patch)
tree488fe1bafcab0bc210f0dcd28c00ffa9499a041e
parenta3cc965997df8fedad5dab12cf884c076ddde238 (diff)
downloadhdf5-efb2f4932fc622e68b1d6e27435beb06da617638.zip
hdf5-efb2f4932fc622e68b1d6e27435beb06da617638.tar.gz
hdf5-efb2f4932fc622e68b1d6e27435beb06da617638.tar.bz2
Both rados_stats calls are wrapped. You can #define OLD_RADOS_CALLS
to enable the old way of doing things.
-rw-r--r--src/H5VLrados.c41
1 files changed, 33 insertions, 8 deletions
diff --git a/src/H5VLrados.c b/src/H5VLrados.c
index 9e7fbce..bfeb37d 100644
--- a/src/H5VLrados.c
+++ b/src/H5VLrados.c
@@ -1965,7 +1965,11 @@ H5VL_rados_group_open_helper(H5VL_rados_file_t *file, uint64_t oid,
grp->gcpl_id = FAIL;
grp->gapl_id = FAIL;
-#if 1 /* fancy new read-op-based code */
+#ifdef OLD_RADOS_CALLS
+ /* Read internal metadata size from group */
+ if((ret = rados_stat(ioctx_g, grp->obj.oid, &gcpl_len, &pmtime)) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTDECODE, NULL, "can't read metadata size from group: %s", strerror(-ret))
+#else
{
rados_read_op_t read_op;
hbool_t read_op_init = FALSE;
@@ -1991,12 +1995,6 @@ H5VL_rados_group_open_helper(H5VL_rados_file_t *file, uint64_t oid,
}
#endif
-#if 0 /* old code */
- /* Read internal metadata size from group */
- if((ret = rados_stat(ioctx_g, grp->obj.oid, &gcpl_len, &pmtime)) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTDECODE, NULL, "can't read metadata size from group: %s", strerror(-ret))
-#endif
-
/* Check for metadata not found */
if(gcpl_len == (uint64_t)0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "internal metadata not found")
@@ -2774,7 +2772,7 @@ H5VL_rados_dataset_open(void *_item,
uint64_t type_len = 0;
uint64_t space_len = 0;
uint64_t dcpl_len = 0;
- time_t pmtime;
+ time_t pmtime = 0;
uint8_t dinfo_buf_static[H5VL_RADOS_DINFO_BUF_SIZE];
uint8_t *dinfo_buf_dyn = NULL;
uint8_t *dinfo_buf = dinfo_buf_static;
@@ -2832,9 +2830,36 @@ H5VL_rados_dataset_open(void *_item,
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "can't encode string oid")
} /* end else */
+#ifdef OLD_RADOS_CALLS
/* Read internal metadata size from dataset */
if((ret = rados_stat(ioctx_g, dset->obj.oid, &md_len, &pmtime)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTDECODE, NULL, "can't read metadata size from group: %s", strerror(-ret))
+#else
+{
+ rados_read_op_t read_op;
+ hbool_t read_op_init = FALSE;
+ int prval;
+
+ /* Create read op */
+ if(NULL == (read_op = rados_create_read_op()))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, NULL, "can't create read operation")
+ read_op_init = TRUE;
+
+ /* Add the get stats operation (returns void) */
+ rados_read_op_stat(read_op, &md_len, &pmtime, &prval);
+
+ /* Execute read operation */
+ if((ret = rados_read_op_operate(read_op, ioctx_g, dset->obj.oid, LIBRADOS_OPERATION_NOFLAG)) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, NULL, "can't perform read operation: %s", strerror(-ret))
+ if(0 < prval)
+ HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "stats not found for object")
+
+ /* clean up */
+ if(read_op_init)
+ rados_release_read_op(read_op);
+}
+#endif
+
/* Check for metadata not found */
if(md_len == (uint64_t)0)