summaryrefslogtreecommitdiffstats
path: root/src/H5VLiod_client.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5VLiod_client.c')
-rw-r--r--src/H5VLiod_client.c127
1 files changed, 89 insertions, 38 deletions
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;