diff options
-rw-r--r-- | src/H5FF.c | 11 | ||||
-rw-r--r-- | src/H5V.c | 2 | ||||
-rw-r--r-- | src/H5VLiod_client.c | 6 | ||||
-rw-r--r-- | src/H5X.c | 47 | ||||
-rw-r--r-- | src/H5Xdummy.c | 110 | ||||
-rw-r--r-- | src/H5Xpublic.h | 1 | ||||
-rw-r--r-- | testff/h5ff_client_index.c | 130 |
7 files changed, 185 insertions, 122 deletions
@@ -819,6 +819,8 @@ 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_CANTGET, FAIL, "can't get index plugin class"); /* Call open of index plugin */ + if (NULL == idx_class->open) + HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "plugin open callback is not defined"); if (NULL == (idx_handle = idx_class->open(loc_id, ret_value, xapl_id, metadata_size, metadata))) HGOTO_ERROR(H5E_INDEX, H5E_CANTOPENOBJ, FAIL, "indexing open callback failed"); @@ -913,7 +915,10 @@ H5Dwrite_ff(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, if (NULL == (idx_class = H5X_registered(plugin_id))) HGOTO_ERROR(H5E_INDEX, H5E_CANTGET, FAIL, "can't get index plugin class"); - idx_class->pre_update(idx_handle, mem_space_id, xxpl_id); + if (NULL == idx_class->pre_update) + HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "plugin pre_update callback is not defined"); + if (FAIL == idx_class->pre_update(idx_handle, mem_space_id, xxpl_id)) + HGOTO_ERROR(H5E_INDEX, H5E_CANTUPDATE, FAIL, "cannot execute index pre_update operation"); } #endif @@ -1099,7 +1104,7 @@ H5Dclose_ff(hid_t dset_id, hid_t estack_id) /* * Close the index if the dataset is now closed */ - if (idx_handle && !H5I_get_ref(dset_id, FALSE)) { + if (idx_handle && (FAIL == H5I_get_ref(dset_id, FALSE))) { H5X_class_t *idx_class = NULL; unsigned plugin_id; @@ -1108,6 +1113,8 @@ H5Dclose_ff(hid_t dset_id, hid_t estack_id) if (NULL == (idx_class = H5X_registered(plugin_id))) HGOTO_ERROR(H5E_INDEX, H5E_CANTGET, FAIL, "can't get index plugin class"); + if (NULL == idx_class->close) + HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "plugin close callback is not defined"); if (FAIL == idx_class->close(idx_handle)) HGOTO_ERROR(H5E_INDEX, H5E_CANTCLOSEOBJ, FAIL, "cannot close index"); } @@ -366,6 +366,8 @@ H5Vcreate_ff(hid_t loc_id, hid_t query_id, hid_t vcpl_id, hid_t rcxt_id, hid_t e if (H5P_set(xxpl_plist, H5VL_CONTEXT_ID, &rcxt_id) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set property value for trans_id"); + if (NULL == idx_class->query) + HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "plugin query callback is not defined"); if (FAIL == idx_class->query(idx_handle, query_id, xxpl_id, &dataspace_id)) HGOTO_ERROR(H5E_INDEX, H5E_CANTCLOSEOBJ, FAIL, "cannot close index"); } diff --git a/src/H5VLiod_client.c b/src/H5VLiod_client.c index 54d1a07..4fb6b8a 100644 --- a/src/H5VLiod_client.c +++ b/src/H5VLiod_client.c @@ -682,11 +682,13 @@ H5VL_iod_request_complete(H5VL_iod_file_t *file, H5VL_iod_request_t *req) /* Store the transaction ID in the xxpl */ if(NULL == (xxpl_plist = (H5P_genplist_t *)H5I_object(xxpl_id))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID"); if(H5P_set(xxpl_plist, H5VL_TRANS_ID, &info->trans_id) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set property value for trans_id") + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set property value for trans_id"); /* Call post_update */ + if (NULL == idx_class->post_update) + HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "plugin post_update callback is not defined"); if (FAIL == idx_class->post_update(info->idx_handle, info->buf, info->dataspace_id, xxpl_id)) HGOTO_ERROR(H5E_INDEX, H5E_CANTUPDATE, FAIL, "unable to issue index post_update operation"); @@ -37,6 +37,7 @@ #include "H5ESprivate.h" #include "H5FFprivate.h" /* FF */ +#include "H5VLiod_client.h" #include "H5Xpkg.h" /* Index plugins */ #ifdef H5_HAVE_INDEXING @@ -189,13 +190,12 @@ H5X_registered(unsigned plugin_id) H5X_class_t *ret_value = NULL; size_t plugin_index; - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_NOAPI_NOINIT_NOERR if (H5X__registered(plugin_id, &plugin_index)) { ret_value = &H5X_table_g[plugin_index]; } -done: FUNC_LEAVE_NOAPI(ret_value) } @@ -474,11 +474,13 @@ H5Xcreate_ff(hid_t file_id, unsigned plugin_id, hid_t scope_id, hid_t xcpl_id, /* Store the transaction ID in the xapl_id */ if (NULL == (plist = (H5P_genplist_t *)H5I_object(xapl_id))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID"); if (H5P_set(plist, H5VL_TRANS_ID, &trans_id) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set property value for trans_id") + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set property value for trans_id"); /* Call create of the plugin */ + if (NULL == H5X_table_g[plugin_index].create) + HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "plugin create callback is not defined"); if (NULL == (idx_handle = H5X_table_g[plugin_index].create( file_id, dataset_id, xcpl_id, xapl_id, &metadata_size, &metadata))) HGOTO_ERROR(H5E_INDEX, H5E_CANTCREATE, FAIL, "cannot create new plugin index"); @@ -590,11 +592,13 @@ H5Xremove_ff(hid_t file_id, unsigned plugin_id, hid_t scope_id, hid_t trans_id, /* Store the transaction ID in the xapl_id */ if (NULL == (plist = (H5P_genplist_t *)H5I_object(xapl_id))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID"); if (H5P_set(plist, H5VL_TRANS_ID, &trans_id) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set property value for trans_id") + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set property value for trans_id"); /* Call remove of the plugin */ + if (NULL == H5X_table_g[plugin_index].remove) + HGOTO_ERROR(H5E_INDEX, H5E_BADVALUE, FAIL, "plugin remove callback is not defined"); if (FAIL == H5X_table_g[plugin_index].remove(file_id, dataset_id, metadata_size, metadata)) HGOTO_ERROR(H5E_INDEX, H5E_CANTCREATE, FAIL, "cannot remove index"); @@ -677,7 +681,7 @@ H5Xget_count_ff(hid_t scope_id, hsize_t *idx_count, hid_t rcxt_id, } /* Get index info */ - if (FAIL == H5VL_iod_dataset_get_index_info(dset, idx_count, NULL, NULL, + if (FAIL == H5VL_iod_dataset_get_index_info(dset, idx_count, NULL, NULL, NULL, rcxt_id, req)) HGOTO_ERROR(H5E_INDEX, H5E_CANTSET, FAIL, "cannot get indexing info from dataset"); @@ -690,4 +694,33 @@ done: FUNC_LEAVE_API(ret_value) } /* end H5Xget_count_ff() */ +/*------------------------------------------------------------------------- + * Function: H5Pget_xapl_transaction + * + * Purpose: Retrieve the transaction ID from this access plist. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5Pget_xapl_transaction(hid_t xapl_id, hid_t *trans_id) +{ + H5P_genplist_t *plist = NULL; /* Property list pointer */ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_API(FAIL) + + if (NULL == (plist = H5P_object_verify(xapl_id, H5P_INDEX_ACCESS))) + HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "not a xapl"); + + /* Get the trans_id */ + if (trans_id) + if (H5P_get(plist, H5VL_TRANS_ID, trans_id) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get property value"); + +done: + FUNC_LEAVE_API(ret_value) +} + #endif /* H5_HAVE_INDEXING */ diff --git a/src/H5Xdummy.c b/src/H5Xdummy.c index 0ad2573..77d2682 100644 --- a/src/H5Xdummy.c +++ b/src/H5Xdummy.c @@ -37,37 +37,42 @@ /******************/ /* Local Typedefs */ /******************/ - +typedef struct H5X_dummy_t { + hid_t dataset_id; + hid_t idx_anon_id; + void *idx_token; + size_t idx_token_size; +} H5X_dummy_t; /********************/ /* Local Prototypes */ /********************/ static void * -H5X_dummy_create(hid_t fid, const char *dataset_name, hid_t icpl_id, - hid_t iapl_id, size_t *metadata_size, void **metadata); +H5X_dummy_create(hid_t file_id, hid_t dataset_id, hid_t xcpl_id, + hid_t xapl_id, size_t *metadata_size, void **metadata); static herr_t -H5X_dummy_remove(hid_t fid, const char *dataset_name, size_t metadata_size, +H5X_dummy_remove(hid_t file_id, hid_t dataset_id, size_t metadata_size, void *metadata); static void * -H5X_dummy_open(hid_t fid, const char *dataset_name, hid_t iapl_id, +H5X_dummy_open(hid_t file_id, hid_t dataset_id, hid_t xapl_id, size_t metadata_size, void *metadata); static herr_t H5X_dummy_close(void *idx_handle); static herr_t -H5X_dummy_pre_update(void *idx_handle, hid_t buffer_dataspace, hid_t ixpl_id); +H5X_dummy_pre_update(void *idx_handle, hid_t dataspace_id, hid_t xxpl_id); static herr_t -H5X_dummy_post_update(void *idx_handle, const void *buffer, hid_t buffer_dataspace, - hid_t ixpl_id); +H5X_dummy_post_update(void *idx_handle, const void *buf, hid_t dataspace_id, + hid_t xxpl_id); static herr_t -H5X_dummy_query(void *idx_handle, hid_t query_id, hid_t idxpl_id, - hid_t *dataspace_selection_id); +H5X_dummy_query(void *idx_handle, hid_t query_id, hid_t xxpl_id, + hid_t *dataspace_id); /*********************/ /* Package Variables */ @@ -107,14 +112,48 @@ const H5X_class_t H5X_DUMMY[1] = { *------------------------------------------------------------------------ */ static void * -H5X_dummy_create(hid_t fid, const char *dataset_name, hid_t icpl_id, - hid_t iapl_id, size_t *metadata_size, void **metadata) +H5X_dummy_create(hid_t file_id, hid_t dataset_id, hid_t xcpl_id, + hid_t xapl_id, size_t *metadata_size, void **metadata) { - herr_t ret_value = SUCCEED; /* Return value */ + H5X_dummy_t *dummy = NULL; + hid_t type_id, space_id, trans_id; + void *ret_value = NULL; /* Return value */ + + FUNC_ENTER_NOAPI_NOINIT + + printf("Calling H5X_dummy_create\n"); + + if (NULL == (dummy = (H5X_dummy_t *) H5MM_malloc(sizeof(H5X_dummy_t)))) + HGOTO_ERROR(H5E_INDEX, H5E_NOSPACE, NULL, "can't allocate dummy struct"); + + dummy->dataset_id = dataset_id; + + if (FAIL == (type_id = H5Dget_type(dataset_id))) + HGOTO_ERROR(H5E_INDEX, H5E_CANTGET, NULL, "can't get type from dataset"); + if (FAIL == (space_id = H5Dget_space(dataset_id))) + HGOTO_ERROR(H5E_INDEX, H5E_CANTGET, NULL, "can't get dataspace from dataset"); + + if (FAIL == H5Pget_xapl_transaction(xapl_id, &trans_id)) + HGOTO_ERROR(H5E_INDEX, H5E_CANTGET, NULL, "can't get trans_id from xapl"); + + if (FAIL == (dummy->idx_anon_id = H5Dcreate_anon_ff(file_id, type_id, space_id, + H5P_DEFAULT, H5P_DEFAULT, trans_id, H5_EVENT_STACK_NULL))) + HGOTO_ERROR(H5E_INDEX, H5E_CANTCREATE, NULL, "can't create anonymous dataset"); - FUNC_ENTER_NOAPI(FAIL) + if (FAIL == H5Oget_token(dummy->idx_anon_id, NULL, &dummy->idx_token_size)) + HGOTO_ERROR(H5E_INDEX, H5E_CANTGET, NULL, "can't get token size for anonymous dataset"); - /* H5Dcreate_anon_ff + H5Oincr_refcount() */ + if (NULL == (dummy->idx_token = H5MM_malloc(dummy->idx_token_size))) + HGOTO_ERROR(H5E_INDEX, H5E_NOSPACE, NULL, "can't allocate token for anonymous dataset"); + + if (FAIL == H5Oget_token(dummy->idx_anon_id, dummy->idx_token, &dummy->idx_token_size)) + HGOTO_ERROR(H5E_INDEX, H5E_CANTGET, NULL, "can't get token for anonymous dataset"); + + /* Metadata is token for anonymous dataset */ + *metadata = dummy->idx_token; + *metadata_size = dummy->idx_token_size; + + ret_value = dummy; done: FUNC_LEAVE_NOAPI(ret_value) @@ -130,12 +169,14 @@ done: *------------------------------------------------------------------------- */ static herr_t -H5X_dummy_remove(hid_t fid, const char *dataset_name, size_t metadata_size, +H5X_dummy_remove(hid_t file_id, hid_t dataset_id, size_t metadata_size, void *metadata) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_NOAPI_NOINIT + + /* TODO Does not do anything */ done: FUNC_LEAVE_NOAPI(ret_value) @@ -152,14 +193,15 @@ done: *------------------------------------------------------------------------- */ static void * -H5X_dummy_open(hid_t fid, const char *dataset_name, hid_t iapl_id, +H5X_dummy_open(hid_t file_id, hid_t dataset_id, hid_t xapl_id, size_t metadata_size, void *metadata) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_NOAPI_NOINIT + + printf("Calling H5X_dummy_open\n"); - /* H5Oget_info */ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5X_dummy_open() */ @@ -176,9 +218,14 @@ done: static herr_t H5X_dummy_close(void *idx_handle) { + H5X_dummy_t *dummy = (H5X_dummy_t *) idx_handle; herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_NOAPI_NOINIT + + printf("Calling H5X_dummy_close\n"); + if (FAIL == H5Dclose_ff(dummy->idx_anon_id)) + HGOTO_ERROR(H5E_INDEX, H5E_CANTCLOSEOBJ, NULL, "can't close anonymous dataset for index"); done: FUNC_LEAVE_NOAPI(ret_value) @@ -194,12 +241,13 @@ done: *------------------------------------------------------------------------- */ static herr_t -H5X_dummy_pre_update(void *idx_handle, hid_t buffer_dataspace, hid_t ixpl_id) +H5X_dummy_pre_update(void *idx_handle, hid_t dataspace_id, hid_t xxpl_id) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_NOAPI_NOINIT + printf("Calling H5X_dummy_pre_update\n"); done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5X_dummy_pre_update() */ @@ -214,12 +262,14 @@ done: *------------------------------------------------------------------------- */ static herr_t -H5X_dummy_post_update(void *idx_handle, const void *buffer, hid_t buffer_dataspace, - hid_t ixpl_id) +H5X_dummy_post_update(void *idx_handle, const void *buf, hid_t dataspace_id, + hid_t xxpl_id) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_NOAPI_NOINIT + + printf("Calling H5X_dummy_post_update\n"); /* Update index elements */ done: @@ -236,12 +286,14 @@ done: *------------------------------------------------------------------------- */ static herr_t -H5X_dummy_query(void *idx_handle, hid_t query_id, hid_t idxpl_id, - hid_t *dataspace_selection_id) +H5X_dummy_query(void *idx_handle, hid_t query_id, hid_t xxpl_id, + hid_t *dataspace_id) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_NOAPI_NOINIT + + printf("Calling H5X_dummy_query\n"); done: FUNC_LEAVE_NOAPI(ret_value) diff --git a/src/H5Xpublic.h b/src/H5Xpublic.h index 559ba99..5136f31 100644 --- a/src/H5Xpublic.h +++ b/src/H5Xpublic.h @@ -110,6 +110,7 @@ H5_DLL herr_t H5Xget_type(hid_t object_id, hsize_t index_idx, H5_DLL herr_t H5Xget_type_ff(hid_t object_id, hsize_t index_idx, unsigned *plugin_id, hid_t rcxt_id, hid_t event_stack_id); */ +H5_DLL herr_t H5Pget_xapl_transaction(hid_t xapl_id, hid_t *trans_id); #ifdef __cplusplus } diff --git a/testff/h5ff_client_index.c b/testff/h5ff_client_index.c index d5c7264..d53a9fe 100644 --- a/testff/h5ff_client_index.c +++ b/testff/h5ff_client_index.c @@ -20,30 +20,27 @@ write_dataset(hid_t file_id, const char *dataset_name, { hid_t dataset_id; hid_t file_space_id, mem_space_id; - hid_t tid0, rid0, trspl_id; + hid_t tid1, rid1, trspl_id; hsize_t dims[2] = {total, ncomponents}; hsize_t offset[2] = {start, 0}; hsize_t count[2] = {ntuples, ncomponents}; int rank = (ncomponents == 1) ? 1 : 2; uint64_t version; herr_t ret; - void *dset_token1; - size_t token_size1; - MPI_Request mpi_reqs[2]; - /* acquire container version 0 - EXACT. */ - version = 0; - rid0 = H5RCacquire(file_id, &version, H5P_DEFAULT, H5_EVENT_STACK_NULL); - assert(0 == version); + /* acquire container version 1 - EXACT. */ + version = 1; + rid1 = H5RCacquire(file_id, &version, H5P_DEFAULT, H5_EVENT_STACK_NULL); + assert(1 == version); /* create transaction object */ - tid0 = H5TRcreate(file_id, rid0, (uint64_t)1); - assert(tid0); + tid1 = H5TRcreate(file_id, rid1, (uint64_t)2); + assert(tid1); trspl_id = H5Pcreate(H5P_TR_START); ret = H5Pset_trspl_num_peers(trspl_id, (unsigned int) my_size); assert(0 == ret); - ret = H5TRstart(tid0, trspl_id, H5_EVENT_STACK_NULL); + ret = H5TRstart(tid1, trspl_id, H5_EVENT_STACK_NULL); assert(0 == ret); ret = H5Pclose(trspl_id); assert(0 == ret); @@ -52,66 +49,31 @@ write_dataset(hid_t file_id, const char *dataset_name, file_space_id = H5Screate_simple(rank, dims, NULL); assert(file_space_id); - if(0 == my_rank) { - /* Create a dataset. */ - dataset_id = H5Dcreate_ff(file_id, dataset_name, datatype_id, file_space_id, - H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT, tid0, H5_EVENT_STACK_NULL); - assert(dataset_id); + /* Create a dataset. */ + dataset_id = H5Dcreate_ff(file_id, dataset_name, datatype_id, file_space_id, + H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT, tid1, H5_EVENT_STACK_NULL); + assert(dataset_id); #ifdef H5_HAVE_INDEXING - /* Add indexing information */ - ret = H5Xcreate_ff(file_id, H5X_PLUGIN_DUMMY, dataset_id, H5P_DEFAULT, - tid0, H5_EVENT_STACK_NULL); - assert(0 == ret); + /* Add indexing information */ + ret = H5Xcreate_ff(file_id, H5X_PLUGIN_DUMMY, dataset_id, H5P_DEFAULT, + tid1, H5_EVENT_STACK_NULL); + assert(0 == ret); #endif - /* get the token size of each dset */ - ret = H5Oget_token(dataset_id, NULL, &token_size1); - assert(0 == ret); - - /* allocate buffers for each token */ - dset_token1 = malloc(token_size1); - - /* get the token buffer */ - ret = H5Oget_token(dataset_id, dset_token1, &token_size1); - assert(0 == ret); - - /* bcast the token sizes and the tokens */ - MPI_Ibcast(&token_size1, sizeof(size_t), MPI_BYTE, 0, MPI_COMM_WORLD, - &mpi_reqs[0]); - MPI_Ibcast(dset_token1, (int) token_size1, MPI_BYTE, 0, MPI_COMM_WORLD, - &mpi_reqs[1]); - MPI_Waitall(2, mpi_reqs, MPI_STATUS_IGNORE); - } - else { - /* recieve the token size */ - MPI_Ibcast(&token_size1, sizeof(size_t), MPI_BYTE, 0, MPI_COMM_WORLD, - &mpi_reqs[0]); - MPI_Waitall(1, mpi_reqs, MPI_STATUS_IGNORE); - - /* allocate buffer for token */ - dset_token1 = malloc(token_size1); - - /* recieve the token */ - MPI_Ibcast(dset_token1, (int) token_size1, MPI_BYTE, 0, MPI_COMM_WORLD, - &mpi_reqs[0]); - MPI_Waitall(1, mpi_reqs, MPI_STATUS_IGNORE); - - dataset_id = H5Oopen_by_token(dset_token1, tid0, H5_EVENT_STACK_NULL); - } - free(dset_token1); - mem_space_id = H5Screate_simple(rank, count, NULL); assert(mem_space_id); /* write data to datasets */ + /* ret = H5Sselect_hyperslab(file_space_id, H5S_SELECT_SET, offset, NULL, count, NULL); assert(0 == ret); + */ /* Write the first dataset. */ ret = H5Dwrite_ff(dataset_id, datatype_id, mem_space_id, file_space_id, - H5P_DEFAULT, buf, tid0, H5_EVENT_STACK_NULL); + H5P_DEFAULT, buf, tid1, H5_EVENT_STACK_NULL); assert(0 == ret); /* Close the data space for the first dataset. */ @@ -126,17 +88,17 @@ write_dataset(hid_t file_id, const char *dataset_name, assert(0 == ret); /* Finish transaction 0. */ - ret = H5TRfinish(tid0, H5P_DEFAULT, NULL, H5_EVENT_STACK_NULL); + ret = H5TRfinish(tid1, H5P_DEFAULT, NULL, H5_EVENT_STACK_NULL); assert(0 == ret); /* release container version 0. */ - ret = H5RCrelease(rid0, H5_EVENT_STACK_NULL); + ret = H5RCrelease(rid1, H5_EVENT_STACK_NULL); assert(0 == ret); - ret = H5RCclose(rid0); + ret = H5RCclose(rid1); assert(0 == ret); - ret = H5TRclose(tid0); + ret = H5TRclose(tid1); assert(0 == ret); } @@ -148,7 +110,7 @@ query_and_view(hid_t file_id, const char *dataset_name) hid_t query_id1, query_id2, query_id3, query_id4, query_id5, query_id6; hid_t query_id, view_id; hid_t dataset_id; - hid_t rid1; + hid_t rid2; uint64_t version; herr_t ret; @@ -179,18 +141,18 @@ query_and_view(hid_t file_id, const char *dataset_name) query_id = H5Qcombine(query_id3, H5Q_COMBINE_OR, query_id6); assert(query_id); - /* acquire container version 1 - EXACT. */ - version = 1; - rid1 = H5RCacquire(file_id, &version, H5P_DEFAULT, H5_EVENT_STACK_NULL); - assert(rid1 > 0); - assert(1 == version); + /* acquire container version 2 - EXACT. */ + version = 2; + rid2 = H5RCacquire(file_id, &version, H5P_DEFAULT, H5_EVENT_STACK_NULL); + assert(rid2 > 0); + assert(2 == version); MPI_Barrier(MPI_COMM_WORLD); - dataset_id = H5Dopen_ff(file_id, dataset_name, H5P_DEFAULT, rid1, + dataset_id = H5Dopen_ff(file_id, dataset_name, H5P_DEFAULT, rid2, H5_EVENT_STACK_NULL); - view_id = H5Vcreate_ff(dataset_id, query_id, H5P_DEFAULT, rid1, + view_id = H5Vcreate_ff(dataset_id, query_id, H5P_DEFAULT, rid2, H5_EVENT_STACK_NULL); assert(view_id > 0); @@ -201,11 +163,11 @@ query_and_view(hid_t file_id, const char *dataset_name) ret = H5Dclose_ff(dataset_id, H5_EVENT_STACK_NULL); assert(0 == ret); - /* release container version 1. */ - ret = H5RCrelease(rid1, H5_EVENT_STACK_NULL); + /* release container version 2. */ + ret = H5RCrelease(rid2, H5_EVENT_STACK_NULL); assert(0 == ret); - ret = H5RCclose(rid1); + ret = H5RCclose(rid2); assert(0 == ret); H5Qclose(query_id); @@ -222,8 +184,8 @@ query_and_view(hid_t file_id, const char *dataset_name) int main(int argc, char **argv) { - const char *file_name="eff_file_view.h5"; - const char *dataset_name="D1"; + const char *file_name="eff_file_index.h5"; + char dataset_name[64]; hsize_t ntuples = NTUPLES; hsize_t ncomponents = 3; hsize_t start, total; @@ -232,14 +194,9 @@ main(int argc, char **argv) herr_t ret; hsize_t i, j; - int provided; - - MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if(MPI_THREAD_MULTIPLE != provided) { - fprintf(stderr, "MPI does not have MPI_THREAD_MULTIPLE support\n"); - exit(1); - } + MPI_Init(&argc, &argv); + getchar(); /* Call EFF_init to initialize the EFF stack. */ EFF_init(MPI_COMM_WORLD, MPI_INFO_NULL); @@ -247,8 +204,17 @@ main(int argc, char **argv) MPI_Comm_size(MPI_COMM_WORLD, &my_size); fprintf(stderr, "APP processes = %d, my rank is %d\n", my_size, my_rank); + /* In this example write one dataset per process */ + memset(dataset_name, '\0', 64); + sprintf(dataset_name, "D%d", my_rank); + + /* start = ntuples * (hsize_t) my_rank; total = ntuples * (hsize_t) my_size; + */ + /* We write to separate datasets */ + start = 0; + total = ntuples; /* Initialize the dataset. */ data = (int *) malloc(sizeof(int) * ncomponents * ntuples); @@ -276,7 +242,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); - query_and_view(file_id, dataset_name); +// query_and_view(file_id, dataset_name); MPI_Barrier(MPI_COMM_WORLD); |