summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamad Chaarawi <chaarawi@hdfgroup.org>2014-03-14 17:52:05 (GMT)
committerMohamad Chaarawi <chaarawi@hdfgroup.org>2014-03-14 17:52:05 (GMT)
commit17d23b4f718acb9edc9d948ee868b9f7b8ce2363 (patch)
tree07737b3a19a0e6d734365bca58f1ffa4187685bb
parent0a98583aa4596b62ac992e60bb9558c5fa1c56aa (diff)
downloadhdf5-17d23b4f718acb9edc9d948ee868b9f7b8ce2363.zip
hdf5-17d23b4f718acb9edc9d948ee868b9f7b8ce2363.tar.gz
hdf5-17d23b4f718acb9edc9d948ee868b9f7b8ce2363.tar.bz2
[svn-r24799] fixes for indexing.
-rw-r--r--src/H5FF.c25
-rw-r--r--src/H5VLiod_client.c127
-rw-r--r--src/H5VLiod_index.c40
3 files changed, 114 insertions, 78 deletions
diff --git a/src/H5FF.c b/src/H5FF.c
index a3f62ee..48e682b 100644
--- a/src/H5FF.c
+++ b/src/H5FF.c
@@ -794,8 +794,6 @@ H5Dopen_ff(hid_t loc_id, const char *name, hid_t dapl_id, hid_t rcxt_id, hid_t e
#ifdef H5_HAVE_INDEXING
{
- H5_priv_request_t *request = NULL; /* private request struct inserted in event queue */
- void **req = NULL; /* pointer to plugin generate requests (NULL if VOL plugin does not support async) */
H5X_class_t *idx_class = NULL;
void *idx_handle = NULL;
unsigned plugin_id;
@@ -805,30 +803,11 @@ H5Dopen_ff(hid_t loc_id, const char *name, hid_t dapl_id, hid_t rcxt_id, hid_t e
H5P_genplist_t *xxpl_plist; /* Property list pointer */
hid_t xapl_id = H5P_INDEX_ACCESS_DEFAULT;
- if (estack_id != H5_EVENT_STACK_NULL) {
- /* create the private request */
- if (NULL == (request = (H5_priv_request_t *) H5MM_calloc(sizeof(H5_priv_request_t))))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- request->req = NULL;
- req = &request->req;
- request->next = NULL;
- request->vol_plugin = vol_plugin;
- vol_plugin->nrefs ++;
- }
-
/* Get index info if present */
if (FAIL == H5VL_iod_dataset_get_index_info(dset, &idx_count, &plugin_id,
- &metadata_size, &metadata, rcxt_id, req))
+ &metadata_size, &metadata, rcxt_id, NULL))
HGOTO_ERROR(H5E_INDEX, H5E_CANTGET, FAIL, "can't get index info for dataset");
- if (request && *req) {
- if(H5ES_insert(estack_id, request) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "failed to insert request in event stack");
- }
-
- /* TODO this is synchronous for now as we need the info first */
-// H5ES_wait(estack_id, );
-
if (idx_count) {
/* store the read context ID in the xxpl */
if(NULL == (xxpl_plist = (H5P_genplist_t *)H5I_object(xapl_id)))
@@ -851,7 +830,7 @@ H5Dopen_ff(hid_t loc_id, const char *name, hid_t dapl_id, hid_t rcxt_id, hid_t e
HGOTO_ERROR(H5E_INDEX, H5E_CANTSET, FAIL, "cannot set index plugin ID to dataset");
}
}
-#endif
+#endif /* H5_HAVE_INDEXING */
done:
if (ret_value < 0 && dset)
diff --git a/src/H5VLiod_client.c b/src/H5VLiod_client.c
index 4c54333..eb652af 100644
--- a/src/H5VLiod_client.c
+++ b/src/H5VLiod_client.c
@@ -1654,52 +1654,85 @@ H5VL_iod_request_complete(H5VL_iod_file_t *file, H5VL_iod_request_t *req)
}
#ifdef H5_HAVE_INDEXING
case HG_DSET_SET_INDEX_INFO:
- {
- req->data = NULL;
- H5VL_iod_request_delete(file, req);
- break;
- }
+ {
+ int *status = (int *)req->data;
+
+ if(SUCCEED != *status) {
+ HERROR(H5E_FUNC, H5E_CANTINIT, "set_index_info failed at the server\n");
+ req->status = H5ES_STATUS_FAIL;
+ req->state = H5VL_IOD_COMPLETED;
+ }
+
+ free(status);
+ req->data = NULL;
+ H5VL_iod_request_delete(file, req);
+ break;
+ }
case HG_DSET_GET_INDEX_INFO:
- {
- H5VL_iod_dataset_get_index_info_t *idx_info =
+ {
+ H5VL_iod_dataset_get_index_info_t *idx_info =
(H5VL_iod_dataset_get_index_info_t *)req->data;
- unsigned plugin_id = idx_info->output->idx_plugin_id;
- size_t count = idx_info->output->idx_count;
+ dset_get_index_info_out_t *output = idx_info->output;
- 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(SUCCEED != output->ret) {
+ HERROR(H5E_FUNC, H5E_CANTINIT, "set_index_info failed at the server\n");
+ req->status = H5ES_STATUS_FAIL;
+ req->state = H5VL_IOD_COMPLETED;
+ }
+ else {
+ unsigned plugin_id;
+ size_t count;
- if (!metadata_size)
- HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "invalid metadata size");
+ count = output->idx_count;
+ /* MSC - for now, idx_plugin_count is always 1 */
+ HDassert(1 == count || 0 == count);
- if (NULL == (new_metadata = H5MM_calloc(metadata_size)))
- HGOTO_ERROR(H5E_INDEX, H5E_NOSPACE, FAIL, "can't allocate metadata");
- if (FAIL == HDmemcpy(new_metadata, metadata, metadata_size))
- HGOTO_ERROR(H5E_INDEX, H5E_CANTCOPY, FAIL, "can't copy metadata");
+ 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 (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;
+ output = (dset_get_index_info_out_t *)H5MM_xfree(output);
+ idx_info = (H5VL_iod_dataset_get_index_info_t *)H5MM_xfree(idx_info);
+ req->data = NULL;
+ H5VL_iod_request_delete(file, req);
+ break;
}
-
- req->data = NULL;
- H5VL_iod_request_delete(file, req);
- break;
- }
case HG_DSET_RM_INDEX_INFO:
- {
- req->data = NULL;
- H5VL_iod_request_delete(file, req);
- break;
- }
-#endif
+ {
+ int *status = (int *)req->data;
+
+ if(SUCCEED != *status) {
+ HERROR(H5E_FUNC, H5E_CANTINIT, "remove_index_info failed at the server\n");
+ req->status = H5ES_STATUS_FAIL;
+ req->state = H5VL_IOD_COMPLETED;
+ }
+
+ free(status);
+ req->data = NULL;
+ H5VL_iod_request_delete(file, req);
+ break;
+ }
+#endif /* H5_HAVE_INDEXING */
case HG_LINK_ITERATE:
case HG_OBJECT_VISIT:
case HG_MAP_ITERATE:
@@ -2115,6 +2148,10 @@ H5VL_iod_request_cancel(H5VL_iod_file_t *file, H5VL_iod_request_t *req)
case HG_TR_SKIP:
case HG_TR_ABORT:
case HG_EVICT:
+#ifdef H5_HAVE_INDEXING
+ case HG_DSET_SET_INDEX_INFO:
+ case HG_DSET_RM_INDEX_INFO:
+#endif /* H5_HAVE_INDEXING */
{
int *status = (int *)req->data;
@@ -2123,6 +2160,20 @@ H5VL_iod_request_cancel(H5VL_iod_file_t *file, H5VL_iod_request_t *req)
H5VL_iod_request_delete(file, req);
break;
}
+#ifdef H5_HAVE_INDEXING
+ case HG_DSET_GET_INDEX_INFO:
+ {
+ H5VL_iod_dataset_get_index_info_t *idx_info =
+ (H5VL_iod_dataset_get_index_info_t *)req->data;
+ dset_get_index_info_out_t *output = idx_info->output;
+
+ output = (dset_get_index_info_out_t *)H5MM_xfree(output);
+ idx_info = (H5VL_iod_dataset_get_index_info_t *)H5MM_xfree(idx_info);
+ req->data = NULL;
+ H5VL_iod_request_delete(file, req);
+ break;
+ }
+#endif /* H5_HAVE_INDEXING */
case HG_PREFETCH:
case HG_VIEW_CREATE:
req->data = NULL;
diff --git a/src/H5VLiod_index.c b/src/H5VLiod_index.c
index af2de59..8330f6a 100644
--- a/src/H5VLiod_index.c
+++ b/src/H5VLiod_index.c
@@ -66,7 +66,7 @@ H5VL_iod_server_dset_set_index_info_cb(AXE_engine_t UNUSED axe_engine,
HGOTO_ERROR2(H5E_SYM, H5E_CANTINIT, FAIL, "can't open MDKV object");
kv.key = H5VL_IOD_IDX_PLUGIN_ID;
- kv.key_len = (iod_size_t)strlen(kv.key);
+ kv.key_len = (iod_size_t)strlen(H5VL_IOD_IDX_PLUGIN_ID);
kv.value = &input->idx_plugin_id;
kv.value_len = (iod_size_t)sizeof(uint32_t);
@@ -84,9 +84,9 @@ H5VL_iod_server_dset_set_index_info_cb(AXE_engine_t UNUSED axe_engine,
}
kv.key = H5VL_IOD_IDX_PLUGIN_MD;
- kv.key_len = (iod_size_t)strlen(kv.key);
+ kv.key_len = (iod_size_t)strlen(H5VL_IOD_IDX_PLUGIN_MD);
kv.value = input->idx_metadata.buf;
- kv.value_len = (iod_size_t)input->index_metadata.buf_size;
+ kv.value_len = (iod_size_t)input->idx_metadata.buf_size;
if(cs_scope & H5_CHECKSUM_IOD) {
iod_checksum_t cs[2];
@@ -109,7 +109,7 @@ done:
if(iod_obj_close(mdkv_oh, NULL, NULL) < 0)
HGOTO_ERROR2(H5E_SYM, H5E_CANTINIT, FAIL, "can't close object");
- input = (dset_create_in_t *)H5MM_xfree(input);
+ input = (dset_set_index_info_in_t *)H5MM_xfree(input);
op_data = (op_data_t *)H5MM_xfree(op_data);
FUNC_LEAVE_NOAPI_VOID
@@ -145,8 +145,9 @@ H5VL_iod_server_dset_get_index_info_cb(AXE_engine_t UNUSED axe_engine,
iod_handle_t mdkv_oh;
iod_size_t key_size = 0;
iod_size_t val_size = 0;
- void *value = NULL;
iod_checksum_t *iod_cs = NULL;
+ char *key = NULL;
+ iod_ret_t ret;
herr_t ret_value = SUCCEED;
FUNC_ENTER_NOAPI_NOINIT
@@ -167,10 +168,12 @@ H5VL_iod_server_dset_get_index_info_cb(AXE_engine_t UNUSED axe_engine,
key_size = strlen(key);
val_size = sizeof(uint32_t);
- if(iod_kv_get_value(mdkv_oh, rtid, key, key_size, &output.idx_plugin_id,
- &val_size, iod_cs, NULL) < 0)
- HGOTO_ERROR2(H5E_SYM, H5E_CANTINIT, FAIL, "link_count lookup failed");
-
+ 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));
+ HGOTO_ERROR2(H5E_SYM, H5E_CANTINIT, FAIL, "lookup failed");
+ }
if(cs_scope & H5_CHECKSUM_IOD) {
iod_checksum_t cs[2];
@@ -184,6 +187,7 @@ H5VL_iod_server_dset_get_index_info_cb(AXE_engine_t UNUSED axe_engine,
key = H5VL_IOD_IDX_PLUGIN_MD;
key_size = strlen(key);
+ val_size = 0;
if(iod_kv_get_value(mdkv_oh, rtid, key, key_size, NULL,
&val_size, iod_cs, NULL) < 0)
@@ -192,7 +196,7 @@ H5VL_iod_server_dset_get_index_info_cb(AXE_engine_t UNUSED axe_engine,
output.idx_metadata.buf_size = val_size;
output.idx_metadata.buf = malloc(val_size);
- if(iod_kv_get_value(mdkv_oh, rtid, key, key_size, output.idx_metadata.buf,
+ if(iod_kv_get_value(mdkv_oh, rtid, key, key_size, (char *)output.idx_metadata.buf,
&val_size, iod_cs, NULL) < 0)
HGOTO_ERROR2(H5E_SYM, H5E_CANTINIT, FAIL, "lookup failed");
@@ -207,6 +211,8 @@ H5VL_iod_server_dset_get_index_info_cb(AXE_engine_t UNUSED axe_engine,
}
output.ret = ret_value;
+ /* MSC for now, idx_count is always 1 */
+ output.idx_count = 1;
HG_Handler_start_output(op_data->hg_handle, &output);
done:
@@ -225,7 +231,7 @@ done:
if(iod_obj_close(mdkv_oh, NULL, NULL) < 0)
HGOTO_ERROR2(H5E_SYM, H5E_CANTINIT, FAIL, "can't close object");
- input = (dset_create_in_t *)H5MM_xfree(input);
+ input = (dset_get_index_info_in_t *)H5MM_xfree(input);
op_data = (op_data_t *)H5MM_xfree(op_data);
FUNC_LEAVE_NOAPI_VOID
@@ -256,7 +262,7 @@ H5VL_iod_server_dset_remove_index_info_cb(AXE_engine_t UNUSED axe_engine,
iod_handle_t coh = input->coh; /* container handle */
iod_obj_id_t mdkv_id = input->mdkv_id; /* The ID of the metadata KV to be created */
iod_trans_id_t wtid = input->trans_num;
- uint32_t cs_scope = input->cs_scope;
+ //uint32_t cs_scope = input->cs_scope;
iod_handle_t mdkv_oh;
iod_kv_params_t kvs;
iod_kv_t kv;
@@ -274,17 +280,17 @@ H5VL_iod_server_dset_remove_index_info_cb(AXE_engine_t UNUSED axe_engine,
HGOTO_ERROR2(H5E_SYM, H5E_CANTINIT, FAIL, "can't open MDKV object");
kv.key = H5VL_IOD_IDX_PLUGIN_ID;
- kv.key_len = (iod_size_t)strlen(kv.key);
+ kv.key_len = (iod_size_t)strlen(H5VL_IOD_IDX_PLUGIN_ID);
kvs.kv = &kv;
- kvs.cs = &cs;
+ kvs.cs = NULL;
kvs.ret = &ret;
if(iod_kv_unlink_keys(mdkv_oh, wtid, NULL, 1, &kvs, NULL) < 0)
HGOTO_ERROR2(H5E_SYM, H5E_CANTDEC, FAIL, "Unable to unlink KV pair");
kv.key = H5VL_IOD_IDX_PLUGIN_MD;
- kv.key_len = (iod_size_t)strlen(kv.key);
+ kv.key_len = (iod_size_t)strlen(H5VL_IOD_IDX_PLUGIN_MD);
kvs.kv = &kv;
- kvs.cs = &cs;
+ kvs.cs = NULL;
kvs.ret = &ret;
if(iod_kv_unlink_keys(mdkv_oh, wtid, NULL, 1, &kvs, NULL) < 0)
HGOTO_ERROR2(H5E_SYM, H5E_CANTDEC, FAIL, "Unable to unlink KV pair");
@@ -297,7 +303,7 @@ done:
if(iod_obj_close(mdkv_oh, NULL, NULL) < 0)
HGOTO_ERROR2(H5E_SYM, H5E_CANTINIT, FAIL, "can't close object");
- input = (dset_create_in_t *)H5MM_xfree(input);
+ input = (dset_rm_index_info_in_t *)H5MM_xfree(input);
op_data = (op_data_t *)H5MM_xfree(op_data);
FUNC_LEAVE_NOAPI_VOID