summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamad Chaarawi <chaarawi@hdfgroup.org>2014-03-14 19:26:21 (GMT)
committerMohamad Chaarawi <chaarawi@hdfgroup.org>2014-03-14 19:26:21 (GMT)
commite56a2ba027554e9f3d9bd0e475eda430b9c4c55b (patch)
treef184b2bcb6e372f88ddad2f126752da8fa22bc0f
parent17d23b4f718acb9edc9d948ee868b9f7b8ce2363 (diff)
downloadhdf5-e56a2ba027554e9f3d9bd0e475eda430b9c4c55b.zip
hdf5-e56a2ba027554e9f3d9bd0e475eda430b9c4c55b.tar.gz
hdf5-e56a2ba027554e9f3d9bd0e475eda430b9c4c55b.tar.bz2
[svn-r24801] fix bug in get_index_info to not return an error if an index plugin does not exist.
-rw-r--r--src/H5FF.c2
-rw-r--r--src/H5VLiod_client.c57
-rw-r--r--src/H5VLiod_index.c14
3 files changed, 49 insertions, 24 deletions
diff --git a/src/H5FF.c b/src/H5FF.c
index 48e682b..122acd2 100644
--- a/src/H5FF.c
+++ b/src/H5FF.c
@@ -790,7 +790,7 @@ H5Dopen_ff(hid_t loc_id, const char *name, hid_t dapl_id, hid_t rcxt_id, hid_t e
/* Get an atom for the dataset */
if((ret_value = H5I_register2(H5I_DATASET, dset, vol_plugin, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize dataset handle")
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize dataset handle")
#ifdef H5_HAVE_INDEXING
{
diff --git a/src/H5VLiod_client.c b/src/H5VLiod_client.c
index eb652af..54d1a07 100644
--- a/src/H5VLiod_client.c
+++ b/src/H5VLiod_client.c
@@ -1687,27 +1687,42 @@ H5VL_iod_request_complete(H5VL_iod_file_t *file, H5VL_iod_request_t *req)
/* MSC - for now, idx_plugin_count is always 1 */
HDassert(1 == count || 0 == count);
- plugin_id = (unsigned) output->idx_plugin_id;
- if(!plugin_id) {
- HERROR(H5E_INDEX, H5E_BADVALUE, "invalid index plugin ID\n");
- req->status = H5ES_STATUS_FAIL;
- req->state = H5VL_IOD_COMPLETED;
- } else {
- size_t metadata_size = idx_info->output->idx_metadata.buf_size;
- void *metadata = idx_info->output->idx_metadata.buf;
- void *new_metadata;
-
- if (!metadata_size)
- HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "invalid metadata size");
-
- if (NULL == (new_metadata = H5MM_calloc(metadata_size)))
- HGOTO_ERROR(H5E_INDEX, H5E_NOSPACE, FAIL, "can't allocate metadata");
- HDmemcpy(new_metadata, metadata, metadata_size);
-
- if (idx_info->count) *idx_info->count = count;
- if (idx_info->plugin_id) *idx_info->plugin_id = plugin_id;
- if (idx_info->metadata_size) *idx_info->metadata_size = metadata_size;
- if (idx_info->metadata) *idx_info->metadata = new_metadata;
+ if (idx_info->count)
+ *idx_info->count = count;
+
+ if(0 == count) {
+ if (idx_info->plugin_id)
+ *idx_info->plugin_id = plugin_id;
+ if (idx_info->metadata_size)
+ *idx_info->metadata_size = 0;
+ if (idx_info->metadata)
+ *idx_info->metadata = NULL;
+ }
+ if(1 == count) {
+ plugin_id = (unsigned) output->idx_plugin_id;
+ if(!plugin_id) {
+ HERROR(H5E_INDEX, H5E_BADVALUE, "invalid index plugin ID\n");
+ req->status = H5ES_STATUS_FAIL;
+ req->state = H5VL_IOD_COMPLETED;
+ } else {
+ size_t metadata_size = idx_info->output->idx_metadata.buf_size;
+ void *metadata = idx_info->output->idx_metadata.buf;
+ void *new_metadata;
+
+ if (!metadata_size)
+ HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "invalid metadata size");
+
+ if (NULL == (new_metadata = H5MM_calloc(metadata_size)))
+ HGOTO_ERROR(H5E_INDEX, H5E_NOSPACE, FAIL, "can't allocate metadata");
+ HDmemcpy(new_metadata, metadata, metadata_size);
+
+ if (idx_info->plugin_id)
+ *idx_info->plugin_id = plugin_id;
+ if (idx_info->metadata_size)
+ *idx_info->metadata_size = metadata_size;
+ if (idx_info->metadata)
+ *idx_info->metadata = new_metadata;
+ }
}
}
diff --git a/src/H5VLiod_index.c b/src/H5VLiod_index.c
index 8330f6a..2017ded 100644
--- a/src/H5VLiod_index.c
+++ b/src/H5VLiod_index.c
@@ -170,8 +170,18 @@ H5VL_iod_server_dset_get_index_info_cb(AXE_engine_t UNUSED axe_engine,
if((ret = iod_kv_get_value(mdkv_oh, rtid, key, key_size, &output.idx_plugin_id,
&val_size, iod_cs, NULL)) < 0) {
- //if(ret == -EBADF)
- //fprintf(stderr, "%d (%s).\n", ret, strerror(-ret));
+ if(ret == -ENOKEY) {
+ fprintf(stderr, "no index to retrieve\n");
+
+ output.ret = ret_value;
+ output.idx_count = 0;
+ output.idx_plugin_id = 0;
+ output.idx_metadata.buf_size = 0;
+ output.idx_metadata.buf = NULL;
+ HG_Handler_start_output(op_data->hg_handle, &output);
+ HGOTO_DONE(SUCCEED);
+ }
+ fprintf(stderr, "%d (%s).\n", ret, strerror(-ret));
HGOTO_ERROR2(H5E_SYM, H5E_CANTINIT, FAIL, "lookup failed");
}
if(cs_scope & H5_CHECKSUM_IOD) {