From e56a2ba027554e9f3d9bd0e475eda430b9c4c55b Mon Sep 17 00:00:00 2001 From: Mohamad Chaarawi Date: Fri, 14 Mar 2014 14:26:21 -0500 Subject: [svn-r24801] fix bug in get_index_info to not return an error if an index plugin does not exist. --- src/H5FF.c | 2 +- src/H5VLiod_client.c | 57 +++++++++++++++++++++++++++++++++------------------- src/H5VLiod_index.c | 14 +++++++++++-- 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) { -- cgit v0.12