summaryrefslogtreecommitdiffstats
path: root/testpar/API/t_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'testpar/API/t_file.c')
-rw-r--r--testpar/API/t_file.c1044
1 files changed, 0 insertions, 1044 deletions
diff --git a/testpar/API/t_file.c b/testpar/API/t_file.c
deleted file mode 100644
index 61d009c..0000000
--- a/testpar/API/t_file.c
+++ /dev/null
@@ -1,1044 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the COPYING file, which can be found at the root of the source code *
- * distribution tree, or in https://www.hdfgroup.org/licenses. *
- * If you do not have access to either file, you may request a copy from *
- * help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * Parallel tests for file operations
- */
-
-#include "hdf5.h"
-#include "testphdf5.h"
-
-#if 0
-#include "H5CXprivate.h" /* API Contexts */
-#include "H5Iprivate.h"
-#include "H5PBprivate.h"
-
-/*
- * This file needs to access private information from the H5F package.
- */
-#define H5AC_FRIEND /*suppress error about including H5ACpkg */
-#include "H5ACpkg.h"
-#define H5C_FRIEND /*suppress error about including H5Cpkg */
-#include "H5Cpkg.h"
-#define H5F_FRIEND /*suppress error about including H5Fpkg */
-#define H5F_TESTING
-#include "H5Fpkg.h"
-#define H5MF_FRIEND /*suppress error about including H5MFpkg */
-#include "H5MFpkg.h"
-#endif
-
-#define NUM_DSETS 5
-
-int mpi_size, mpi_rank;
-
-#if 0
-static int create_file(const char *filename, hid_t fcpl, hid_t fapl, int metadata_write_strategy);
-static int open_file(const char *filename, hid_t fapl, int metadata_write_strategy, hsize_t page_size,
- size_t page_buffer_size);
-#endif
-
-/*
- * test file access by communicator besides COMM_WORLD.
- * Split COMM_WORLD into two, one (even_comm) contains the original
- * processes of even ranks. The other (odd_comm) contains the original
- * processes of odd ranks. Processes in even_comm creates a file, then
- * cloose it, using even_comm. Processes in old_comm just do a barrier
- * using odd_comm. Then they all do a barrier using COMM_WORLD.
- * If the file creation and cloose does not do correct collective action
- * according to the communicator argument, the processes will freeze up
- * sooner or later due to barrier mixed up.
- */
-void
-test_split_comm_access(void)
-{
- MPI_Comm comm;
- MPI_Info info = MPI_INFO_NULL;
- int is_old, mrc;
- int newrank, newprocs;
- hid_t fid; /* file IDs */
- hid_t acc_tpl; /* File access properties */
- herr_t ret; /* generic return value */
- const char *filename;
-
- filename = (const char *)PARATESTFILE /* GetTestParameters()*/;
- if (VERBOSE_MED)
- printf("Split Communicator access test on file %s\n", filename);
-
- /* set up MPI parameters */
- MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
- MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
-
- /* Make sure the connector supports the API functions being tested */
- if (!(vol_cap_flags_g & H5VL_CAP_FLAG_FILE_BASIC)) {
- if (MAINPROCESS) {
- puts("SKIPPED");
- printf(" API functions for basic file aren't supported with this connector\n");
- fflush(stdout);
- }
-
- return;
- }
-
- is_old = mpi_rank % 2;
- mrc = MPI_Comm_split(MPI_COMM_WORLD, is_old, mpi_rank, &comm);
- VRFY((mrc == MPI_SUCCESS), "");
- MPI_Comm_size(comm, &newprocs);
- MPI_Comm_rank(comm, &newrank);
-
- if (is_old) {
- /* odd-rank processes */
- mrc = MPI_Barrier(comm);
- VRFY((mrc == MPI_SUCCESS), "");
- }
- else {
- /* even-rank processes */
- int sub_mpi_rank; /* rank in the sub-comm */
- MPI_Comm_rank(comm, &sub_mpi_rank);
-
- /* setup file access template */
- acc_tpl = create_faccess_plist(comm, info, facc_type);
- VRFY((acc_tpl >= 0), "");
-
- /* create the file collectively */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl);
- VRFY((fid >= 0), "H5Fcreate succeeded");
-
- /* close the file */
- ret = H5Fclose(fid);
- VRFY((ret >= 0), "");
-
- /* delete the test file */
- ret = H5Fdelete(filename, acc_tpl);
- VRFY((ret >= 0), "H5Fdelete succeeded");
-
- /* Release file-access template */
- ret = H5Pclose(acc_tpl);
- VRFY((ret >= 0), "");
- }
- mrc = MPI_Comm_free(&comm);
- VRFY((mrc == MPI_SUCCESS), "MPI_Comm_free succeeded");
- mrc = MPI_Barrier(MPI_COMM_WORLD);
- VRFY((mrc == MPI_SUCCESS), "final MPI_Barrier succeeded");
-}
-
-#if 0
-void
-test_page_buffer_access(void)
-{
- hid_t file_id = -1; /* File ID */
- hid_t fcpl, fapl;
- size_t page_count = 0;
- int i, num_elements = 200;
- haddr_t raw_addr, meta_addr;
- int *data;
- H5F_t *f = NULL;
- herr_t ret; /* generic return value */
- const char *filename;
- bool api_ctx_pushed = false; /* Whether API context pushed */
-
- MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
- MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
-
- filename = (const char *)GetTestParameters();
-
- if (VERBOSE_MED)
- printf("Page Buffer Usage in Parallel %s\n", filename);
-
- fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type);
- VRFY((fapl >= 0), "create_faccess_plist succeeded");
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- VRFY((fcpl >= 0), "");
-
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, 1, (hsize_t)0);
- VRFY((ret == 0), "");
- ret = H5Pset_file_space_page_size(fcpl, sizeof(int) * 128);
- VRFY((ret == 0), "");
- ret = H5Pset_page_buffer_size(fapl, sizeof(int) * 100000, 0, 0);
- VRFY((ret == 0), "");
-
- /* This should fail because collective metadata writes are not supported with page buffering */
- H5E_BEGIN_TRY
- {
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl);
- }
- H5E_END_TRY
- VRFY((file_id < 0), "H5Fcreate failed");
-
- /* disable collective metadata writes for page buffering to work */
- ret = H5Pset_coll_metadata_write(fapl, false);
- VRFY((ret >= 0), "");
-
- ret = create_file(filename, fcpl, fapl, H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED);
- VRFY((ret == 0), "");
- ret = open_file(filename, fapl, H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED, sizeof(int) * 100,
- sizeof(int) * 100000);
- VRFY((ret == 0), "");
-
- ret = create_file(filename, fcpl, fapl, H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY);
- VRFY((ret == 0), "");
- ret = open_file(filename, fapl, H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY, sizeof(int) * 100,
- sizeof(int) * 100000);
- VRFY((ret == 0), "");
-
- ret = H5Pset_file_space_page_size(fcpl, sizeof(int) * 100);
- VRFY((ret == 0), "");
-
- data = (int *)malloc(sizeof(int) * (size_t)num_elements);
-
- /* initialize all the elements to have a value of -1 */
- for (i = 0; i < num_elements; i++)
- data[i] = -1;
- if (MAINPROCESS) {
- hid_t fapl_self = H5I_INVALID_HID;
- fapl_self = create_faccess_plist(MPI_COMM_SELF, MPI_INFO_NULL, facc_type);
-
- ret = H5Pset_page_buffer_size(fapl_self, sizeof(int) * 1000, 0, 0);
- VRFY((ret == 0), "");
- /* collective metadata writes do not work with page buffering */
- ret = H5Pset_coll_metadata_write(fapl_self, false);
- VRFY((ret >= 0), "");
-
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl_self);
- VRFY((file_id >= 0), "");
-
- /* Push API context */
- ret = H5CX_push();
- VRFY((ret == 0), "H5CX_push()");
- api_ctx_pushed = true;
-
- /* Get a pointer to the internal file object */
- f = (H5F_t *)H5I_object(file_id);
-
- VRFY((f->shared->page_buf != NULL), "Page Buffer created with 1 process");
-
- /* allocate space for 200 raw elements */
- raw_addr = H5MF_alloc(f, H5FD_MEM_DRAW, sizeof(int) * (size_t)num_elements);
- VRFY((raw_addr != HADDR_UNDEF), "");
-
- /* allocate space for 200 metadata elements */
- meta_addr = H5MF_alloc(f, H5FD_MEM_SUPER, sizeof(int) * (size_t)num_elements);
- VRFY((meta_addr != HADDR_UNDEF), "");
-
- page_count = 0;
-
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * (size_t)num_elements, data);
- VRFY((ret == 0), "");
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * (size_t)num_elements, data);
- ret = H5F_block_write(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * (size_t)num_elements, data);
- VRFY((ret == 0), "");
-
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
-
- /* update the first 50 elements */
- for (i = 0; i < 50; i++)
- data[i] = i;
- ret = H5F_block_write(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * 50, data);
- H5Eprint2(H5E_DEFAULT, stderr);
- VRFY((ret == 0), "");
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- page_count += 2;
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
-
- /* update the second 50 elements */
- for (i = 0; i < 50; i++)
- data[i] = i + 50;
- ret = H5F_block_write(f, H5FD_MEM_DRAW, raw_addr + (sizeof(int) * 50), sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr + (sizeof(int) * 50), sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
-
- /* update 100 - 200 */
- for (i = 0; i < 100; i++)
- data[i] = i + 100;
- ret = H5F_block_write(f, H5FD_MEM_DRAW, raw_addr + (sizeof(int) * 100), sizeof(int) * 100, data);
- VRFY((ret == 0), "");
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr + (sizeof(int) * 100), sizeof(int) * 100, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
-
- ret = H5PB_flush(f->shared);
- VRFY((ret == 0), "");
-
- /* read elements 0 - 200 */
- ret = H5F_block_read(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * 200, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 200; i++)
- VRFY((data[i] == i), "Read different values than written");
- ret = H5F_block_read(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * 200, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 200; i++)
- VRFY((data[i] == i), "Read different values than written");
-
- /* read elements 0 - 50 */
- ret = H5F_block_read(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 50; i++)
- VRFY((data[i] == i), "Read different values than written");
- ret = H5F_block_read(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 50; i++)
- VRFY((data[i] == i), "Read different values than written");
-
- /* close the file */
- ret = H5Fclose(file_id);
- VRFY((ret >= 0), "H5Fclose succeeded");
- ret = H5Pclose(fapl_self);
- VRFY((ret >= 0), "H5Pclose succeeded");
-
- /* Pop API context */
- if (api_ctx_pushed) {
- ret = H5CX_pop(false);
- VRFY((ret == 0), "H5CX_pop()");
- api_ctx_pushed = false;
- }
- }
-
- MPI_Barrier(MPI_COMM_WORLD);
-
- if (mpi_size > 1) {
- ret = H5Pset_page_buffer_size(fapl, sizeof(int) * 1000, 0, 0);
- VRFY((ret == 0), "");
- /* collective metadata writes do not work with page buffering */
- ret = H5Pset_coll_metadata_write(fapl, false);
- VRFY((ret >= 0), "");
-
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl);
- VRFY((file_id >= 0), "");
-
- /* Push API context */
- ret = H5CX_push();
- VRFY((ret == 0), "H5CX_push()");
- api_ctx_pushed = true;
-
- /* Get a pointer to the internal file object */
- f = (H5F_t *)H5I_object(file_id);
-
- VRFY((f->shared->page_buf != NULL), "Page Buffer created with 1 process");
-
- /* allocate space for 200 raw elements */
- raw_addr = H5MF_alloc(f, H5FD_MEM_DRAW, sizeof(int) * (size_t)num_elements);
- VRFY((raw_addr != HADDR_UNDEF), "");
- /* allocate space for 200 metadata elements */
- meta_addr = H5MF_alloc(f, H5FD_MEM_SUPER, sizeof(int) * (size_t)num_elements);
- VRFY((meta_addr != HADDR_UNDEF), "");
-
- page_count = 0;
-
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * (size_t)num_elements, data);
- VRFY((ret == 0), "");
- ret = H5F_block_write(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * (size_t)num_elements, data);
- VRFY((ret == 0), "");
-
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
-
- /* update the first 50 elements */
- for (i = 0; i < 50; i++)
- data[i] = i;
- ret = H5F_block_write(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
-
- /* update the second 50 elements */
- for (i = 0; i < 50; i++)
- data[i] = i + 50;
- ret = H5F_block_write(f, H5FD_MEM_DRAW, raw_addr + (sizeof(int) * 50), sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr + (sizeof(int) * 50), sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
-
- /* update 100 - 200 */
- for (i = 0; i < 100; i++)
- data[i] = i + 100;
- ret = H5F_block_write(f, H5FD_MEM_DRAW, raw_addr + (sizeof(int) * 100), sizeof(int) * 100, data);
- VRFY((ret == 0), "");
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr + (sizeof(int) * 100), sizeof(int) * 100, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
-
- ret = H5Fflush(file_id, H5F_SCOPE_GLOBAL);
- VRFY((ret == 0), "");
-
- /* read elements 0 - 200 */
- ret = H5F_block_read(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * 200, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 200; i++)
- VRFY((data[i] == i), "Read different values than written");
- ret = H5F_block_read(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * 200, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 200; i++)
- VRFY((data[i] == i), "Read different values than written");
-
- /* read elements 0 - 50 */
- ret = H5F_block_read(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 50; i++)
- VRFY((data[i] == i), "Read different values than written");
- ret = H5F_block_read(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- page_count += 1;
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 50; i++)
- VRFY((data[i] == i), "Read different values than written");
-
- MPI_Barrier(MPI_COMM_WORLD);
- /* reset the first 50 elements to -1*/
- for (i = 0; i < 50; i++)
- data[i] = -1;
- ret = H5F_block_write(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- ret = H5F_block_write(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
-
- /* read elements 0 - 50 */
- ret = H5F_block_read(f, H5FD_MEM_DRAW, raw_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 50; i++)
- VRFY((data[i] == -1), "Read different values than written");
- ret = H5F_block_read(f, H5FD_MEM_SUPER, meta_addr, sizeof(int) * 50, data);
- VRFY((ret == 0), "");
- VRFY((H5SL_count(f->shared->page_buf->slist_ptr) == page_count), "Wrong number of pages in PB");
- for (i = 0; i < 50; i++)
- VRFY((data[i] == -1), "Read different values than written");
-
- /* close the file */
- ret = H5Fclose(file_id);
- VRFY((ret >= 0), "H5Fclose succeeded");
- }
-
- ret = H5Pclose(fapl);
- VRFY((ret >= 0), "H5Pclose succeeded");
- ret = H5Pclose(fcpl);
- VRFY((ret >= 0), "H5Pclose succeeded");
-
- /* Pop API context */
- if (api_ctx_pushed) {
- ret = H5CX_pop(false);
- VRFY((ret == 0), "H5CX_pop()");
- api_ctx_pushed = false;
- }
-
- free(data);
- data = NULL;
- MPI_Barrier(MPI_COMM_WORLD);
-}
-
-static int
-create_file(const char *filename, hid_t fcpl, hid_t fapl, int metadata_write_strategy)
-{
- hid_t file_id, dset_id, grp_id;
- hid_t sid, mem_dataspace;
- hsize_t start[RANK];
- hsize_t count[RANK];
- hsize_t stride[RANK];
- hsize_t block[RANK];
- DATATYPE *data_array = NULL;
- hsize_t dims[RANK], i;
- hsize_t num_elements;
- int k;
- char dset_name[20];
- H5F_t *f = NULL;
- H5C_t *cache_ptr = NULL;
- H5AC_cache_config_t config;
- bool api_ctx_pushed = false; /* Whether API context pushed */
- herr_t ret;
-
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl);
- VRFY((file_id >= 0), "");
-
- ret = H5Fflush(file_id, H5F_SCOPE_GLOBAL);
- VRFY((ret == 0), "");
-
- /* Push API context */
- ret = H5CX_push();
- VRFY((ret == 0), "H5CX_push()");
- api_ctx_pushed = true;
-
- f = (H5F_t *)H5I_object(file_id);
- VRFY((f != NULL), "");
-
- cache_ptr = f->shared->cache;
- VRFY((cache_ptr->magic == H5C__H5C_T_MAGIC), "");
-
- cache_ptr->ignore_tags = true;
- H5C_stats__reset(cache_ptr);
- config.version = H5AC__CURR_CACHE_CONFIG_VERSION;
-
- ret = H5AC_get_cache_auto_resize_config(cache_ptr, &config);
- VRFY((ret == 0), "");
-
- config.metadata_write_strategy = metadata_write_strategy;
-
- ret = H5AC_set_cache_auto_resize_config(cache_ptr, &config);
- VRFY((ret == 0), "");
-
- grp_id = H5Gcreate2(file_id, "GROUP", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VRFY((grp_id >= 0), "");
-
- dims[0] = (hsize_t)(ROW_FACTOR * mpi_size);
- dims[1] = (hsize_t)(COL_FACTOR * mpi_size);
- sid = H5Screate_simple(RANK, dims, NULL);
- VRFY((sid >= 0), "H5Screate_simple succeeded");
-
- /* Each process takes a slabs of rows. */
- block[0] = dims[0] / (hsize_t)mpi_size;
- block[1] = dims[1];
- stride[0] = block[0];
- stride[1] = block[1];
- count[0] = 1;
- count[1] = 1;
- start[0] = (hsize_t)mpi_rank * block[0];
- start[1] = 0;
-
- num_elements = block[0] * block[1];
- /* allocate memory for data buffer */
- data_array = (DATATYPE *)malloc(num_elements * sizeof(DATATYPE));
- VRFY((data_array != NULL), "data_array malloc succeeded");
- /* put some trivial data in the data_array */
- for (i = 0; i < num_elements; i++)
- data_array[i] = mpi_rank + 1;
-
- ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, start, stride, count, block);
- VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
-
- /* create a memory dataspace independently */
- mem_dataspace = H5Screate_simple(1, &num_elements, NULL);
- VRFY((mem_dataspace >= 0), "");
-
- for (k = 0; k < NUM_DSETS; k++) {
- snprintf(dset_name, sizeof(dset_name), "D1dset%d", k);
- dset_id = H5Dcreate2(grp_id, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VRFY((dset_id >= 0), "");
- ret = H5Dclose(dset_id);
- VRFY((ret == 0), "");
-
- snprintf(dset_name, sizeof(dset_name), "D2dset%d", k);
- dset_id = H5Dcreate2(grp_id, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VRFY((dset_id >= 0), "");
- ret = H5Dclose(dset_id);
- VRFY((ret == 0), "");
-
- snprintf(dset_name, sizeof(dset_name), "D3dset%d", k);
- dset_id = H5Dcreate2(grp_id, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VRFY((dset_id >= 0), "");
- ret = H5Dclose(dset_id);
- VRFY((ret == 0), "");
-
- snprintf(dset_name, sizeof(dset_name), "dset%d", k);
- dset_id = H5Dcreate2(grp_id, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VRFY((dset_id >= 0), "");
-
- ret = H5Dwrite(dset_id, H5T_NATIVE_INT, mem_dataspace, sid, H5P_DEFAULT, data_array);
- VRFY((ret == 0), "");
-
- ret = H5Dclose(dset_id);
- VRFY((ret == 0), "");
-
- memset(data_array, 0, num_elements * sizeof(DATATYPE));
- dset_id = H5Dopen2(grp_id, dset_name, H5P_DEFAULT);
- VRFY((dset_id >= 0), "");
-
- ret = H5Dread(dset_id, H5T_NATIVE_INT, mem_dataspace, sid, H5P_DEFAULT, data_array);
- VRFY((ret == 0), "");
-
- ret = H5Dclose(dset_id);
- VRFY((ret == 0), "");
-
- for (i = 0; i < num_elements; i++)
- VRFY((data_array[i] == mpi_rank + 1), "Dataset Verify failed");
-
- snprintf(dset_name, sizeof(dset_name), "D1dset%d", k);
- ret = H5Ldelete(grp_id, dset_name, H5P_DEFAULT);
- VRFY((ret == 0), "");
- snprintf(dset_name, sizeof(dset_name), "D2dset%d", k);
- ret = H5Ldelete(grp_id, dset_name, H5P_DEFAULT);
- VRFY((ret == 0), "");
- snprintf(dset_name, sizeof(dset_name), "D3dset%d", k);
- ret = H5Ldelete(grp_id, dset_name, H5P_DEFAULT);
- VRFY((ret == 0), "");
- }
-
- ret = H5Gclose(grp_id);
- VRFY((ret == 0), "");
- ret = H5Fclose(file_id);
- VRFY((ret == 0), "");
- ret = H5Sclose(sid);
- VRFY((ret == 0), "");
- ret = H5Sclose(mem_dataspace);
- VRFY((ret == 0), "");
-
- /* Pop API context */
- if (api_ctx_pushed) {
- ret = H5CX_pop(false);
- VRFY((ret == 0), "H5CX_pop()");
- api_ctx_pushed = false;
- }
-
- MPI_Barrier(MPI_COMM_WORLD);
- free(data_array);
- return 0;
-} /* create_file */
-
-static int
-open_file(const char *filename, hid_t fapl, int metadata_write_strategy, hsize_t page_size,
- size_t page_buffer_size)
-{
- hid_t file_id, dset_id, grp_id, grp_id2;
- hid_t sid, mem_dataspace;
- DATATYPE *data_array = NULL;
- hsize_t dims[RANK];
- hsize_t start[RANK];
- hsize_t count[RANK];
- hsize_t stride[RANK];
- hsize_t block[RANK];
- int i, k, ndims;
- hsize_t num_elements;
- char dset_name[20];
- H5F_t *f = NULL;
- H5C_t *cache_ptr = NULL;
- H5AC_cache_config_t config;
- bool api_ctx_pushed = false; /* Whether API context pushed */
- herr_t ret;
-
- config.version = H5AC__CURR_CACHE_CONFIG_VERSION;
- ret = H5Pget_mdc_config(fapl, &config);
- VRFY((ret == 0), "");
-
- config.metadata_write_strategy = metadata_write_strategy;
-
- ret = H5Pget_mdc_config(fapl, &config);
- VRFY((ret == 0), "");
-
- file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl);
- H5Eprint2(H5E_DEFAULT, stderr);
- VRFY((file_id >= 0), "");
-
- /* Push API context */
- ret = H5CX_push();
- VRFY((ret == 0), "H5CX_push()");
- api_ctx_pushed = true;
-
- ret = H5Fflush(file_id, H5F_SCOPE_GLOBAL);
- VRFY((ret == 0), "");
-
- f = (H5F_t *)H5I_object(file_id);
- VRFY((f != NULL), "");
-
- cache_ptr = f->shared->cache;
- VRFY((cache_ptr->magic == H5C__H5C_T_MAGIC), "");
-
- MPI_Barrier(MPI_COMM_WORLD);
-
- VRFY((f->shared->page_buf != NULL), "");
- VRFY((f->shared->page_buf->page_size == page_size), "");
- VRFY((f->shared->page_buf->max_size == page_buffer_size), "");
-
- grp_id = H5Gopen2(file_id, "GROUP", H5P_DEFAULT);
- VRFY((grp_id >= 0), "");
-
- dims[0] = (hsize_t)(ROW_FACTOR * mpi_size);
- dims[1] = (hsize_t)(COL_FACTOR * mpi_size);
-
- /* Each process takes a slabs of rows. */
- block[0] = dims[0] / (hsize_t)mpi_size;
- block[1] = dims[1];
- stride[0] = block[0];
- stride[1] = block[1];
- count[0] = 1;
- count[1] = 1;
- start[0] = (hsize_t)mpi_rank * block[0];
- start[1] = 0;
-
- num_elements = block[0] * block[1];
- /* allocate memory for data buffer */
- data_array = (DATATYPE *)malloc(num_elements * sizeof(DATATYPE));
- VRFY((data_array != NULL), "data_array malloc succeeded");
-
- /* create a memory dataspace independently */
- mem_dataspace = H5Screate_simple(1, &num_elements, NULL);
- VRFY((mem_dataspace >= 0), "");
-
- for (k = 0; k < NUM_DSETS; k++) {
- snprintf(dset_name, sizeof(dset_name), "dset%d", k);
- dset_id = H5Dopen2(grp_id, dset_name, H5P_DEFAULT);
- VRFY((dset_id >= 0), "");
-
- sid = H5Dget_space(dset_id);
- VRFY((dset_id >= 0), "H5Dget_space succeeded");
-
- ndims = H5Sget_simple_extent_dims(sid, dims, NULL);
- VRFY((ndims == 2), "H5Sget_simple_extent_dims succeeded");
- VRFY(dims[0] == (hsize_t)(ROW_FACTOR * mpi_size), "Wrong dataset dimensions");
- VRFY(dims[1] == (hsize_t)(COL_FACTOR * mpi_size), "Wrong dataset dimensions");
-
- ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, start, stride, count, block);
- VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
-
- ret = H5Dread(dset_id, H5T_NATIVE_INT, mem_dataspace, sid, H5P_DEFAULT, data_array);
- VRFY((ret >= 0), "");
-
- ret = H5Dclose(dset_id);
- VRFY((ret >= 0), "");
- ret = H5Sclose(sid);
- VRFY((ret == 0), "");
-
- for (i = 0; i < (int)num_elements; i++)
- VRFY((data_array[i] == mpi_rank + 1), "Dataset Verify failed");
- }
-
- grp_id2 = H5Gcreate2(file_id, "GROUP/GROUP2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VRFY((grp_id2 >= 0), "");
- ret = H5Gclose(grp_id2);
- VRFY((ret == 0), "");
-
- ret = H5Fflush(file_id, H5F_SCOPE_GLOBAL);
- VRFY((ret == 0), "");
-
- MPI_Barrier(MPI_COMM_WORLD);
- /* flush invalidate each ring, starting from the outermost ring and
- * working inward.
- */
- for (i = 0; i < H5C__HASH_TABLE_LEN; i++) {
- H5C_cache_entry_t *entry_ptr = NULL;
-
- entry_ptr = cache_ptr->index[i];
-
- while (entry_ptr != NULL) {
- assert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- assert(entry_ptr->is_dirty == false);
-
- if (!entry_ptr->is_pinned && !entry_ptr->is_protected) {
- ret = H5AC_expunge_entry(f, entry_ptr->type, entry_ptr->addr, 0);
- VRFY((ret == 0), "");
- }
-
- entry_ptr = entry_ptr->ht_next;
- }
- }
- MPI_Barrier(MPI_COMM_WORLD);
-
- grp_id2 = H5Gopen2(file_id, "GROUP/GROUP2", H5P_DEFAULT);
- H5Eprint2(H5E_DEFAULT, stderr);
- VRFY((grp_id2 >= 0), "");
- ret = H5Gclose(grp_id2);
- H5Eprint2(H5E_DEFAULT, stderr);
- VRFY((ret == 0), "");
-
- ret = H5Gclose(grp_id);
- VRFY((ret == 0), "");
- ret = H5Fclose(file_id);
- VRFY((ret == 0), "");
- ret = H5Sclose(mem_dataspace);
- VRFY((ret == 0), "");
-
- /* Pop API context */
- if (api_ctx_pushed) {
- ret = H5CX_pop(false);
- VRFY((ret == 0), "H5CX_pop()");
- api_ctx_pushed = false;
- }
-
- free(data_array);
-
- return nerrors;
-}
-#endif
-
-/*
- * NOTE: See HDFFV-10894 and add tests later to verify MPI-specific properties in the
- * incoming fapl that could conflict with the existing values in H5F_shared_t on
- * multiple opens of the same file.
- */
-void
-test_file_properties(void)
-{
- hid_t fid = H5I_INVALID_HID; /* HDF5 file ID */
- hid_t fapl_id = H5I_INVALID_HID; /* File access plist */
- hid_t fapl_copy_id = H5I_INVALID_HID; /* File access plist */
- bool is_coll;
- htri_t are_equal;
- const char *filename;
- MPI_Comm comm = MPI_COMM_WORLD;
- MPI_Info info = MPI_INFO_NULL;
- MPI_Comm comm_out = MPI_COMM_NULL;
- MPI_Info info_out = MPI_INFO_NULL;
- herr_t ret; /* Generic return value */
- int mpi_ret; /* MPI return value */
- int cmp; /* Compare value */
-
- /* set up MPI parameters */
- mpi_ret = MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
- VRFY((mpi_ret >= 0), "MPI_Comm_size succeeded");
- mpi_ret = MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
- VRFY((mpi_ret >= 0), "MPI_Comm_rank succeeded");
-
- /* Make sure the connector supports the API functions being tested */
- if (!(vol_cap_flags_g & H5VL_CAP_FLAG_FILE_BASIC)) {
- if (MAINPROCESS) {
- puts("SKIPPED");
- printf(" API functions for basic file aren't supported with this connector\n");
- fflush(stdout);
- }
-
- return;
- }
-
- filename = (const char *)PARATESTFILE /* GetTestParameters() */;
-
- mpi_ret = MPI_Info_create(&info);
- VRFY((mpi_ret >= 0), "MPI_Info_create succeeded");
- mpi_ret = MPI_Info_set(info, "hdf_info_prop1", "xyz");
- VRFY((mpi_ret == MPI_SUCCESS), "MPI_Info_set");
-
- /* setup file access plist */
- fapl_id = H5Pcreate(H5P_FILE_ACCESS);
- VRFY((fapl_id != H5I_INVALID_HID), "H5Pcreate");
- ret = H5Pset_fapl_mpio(fapl_id, comm, info);
- VRFY((ret >= 0), "H5Pset_fapl_mpio");
-
- /* Check getting and setting MPI properties
- * (for use in VOL connectors, not the MPI-I/O VFD)
- */
- ret = H5Pset_mpi_params(fapl_id, comm, info);
- VRFY((ret >= 0), "H5Pset_mpi_params succeeded");
- ret = H5Pget_mpi_params(fapl_id, &comm_out, &info_out);
- VRFY((ret >= 0), "H5Pget_mpi_params succeeded");
-
- /* Check the communicator */
- VRFY((comm != comm_out), "Communicators should not be bitwise identical");
- cmp = MPI_UNEQUAL;
- mpi_ret = MPI_Comm_compare(comm, comm_out, &cmp);
- VRFY((ret >= 0), "MPI_Comm_compare succeeded");
- VRFY((cmp == MPI_CONGRUENT), "Communicators should be congruent via MPI_Comm_compare");
-
- /* Check the info object */
- VRFY((info != info_out), "Info objects should not be bitwise identical");
-
- /* Free the obtained comm and info object */
- mpi_ret = MPI_Comm_free(&comm_out);
- VRFY((mpi_ret >= 0), "MPI_Comm_free succeeded");
- mpi_ret = MPI_Info_free(&info_out);
- VRFY((mpi_ret >= 0), "MPI_Info_free succeeded");
-
- /* Copy the fapl and ensure it's equal to the original */
- fapl_copy_id = H5Pcopy(fapl_id);
- VRFY((fapl_copy_id != H5I_INVALID_HID), "H5Pcopy");
- are_equal = H5Pequal(fapl_id, fapl_copy_id);
- VRFY((true == are_equal), "H5Pequal");
-
- /* Add a property to the copy and ensure it's different now */
- mpi_ret = MPI_Info_set(info, "hdf_info_prop2", "abc");
- VRFY((mpi_ret == MPI_SUCCESS), "MPI_Info_set");
- ret = H5Pset_mpi_params(fapl_copy_id, comm, info);
- VRFY((ret >= 0), "H5Pset_mpi_params succeeded");
- are_equal = H5Pequal(fapl_id, fapl_copy_id);
- VRFY((false == are_equal), "H5Pequal");
-
- /* Add a property with the same key but a different value to the original
- * and ensure they are still different.
- */
- mpi_ret = MPI_Info_set(info, "hdf_info_prop2", "ijk");
- VRFY((mpi_ret == MPI_SUCCESS), "MPI_Info_set");
- ret = H5Pset_mpi_params(fapl_id, comm, info);
- VRFY((ret >= 0), "H5Pset_mpi_params succeeded");
- are_equal = H5Pequal(fapl_id, fapl_copy_id);
- VRFY((false == are_equal), "H5Pequal");
-
- /* Set the second property in the original to the same
- * value as the copy and ensure they are the same now.
- */
- mpi_ret = MPI_Info_set(info, "hdf_info_prop2", "abc");
- VRFY((mpi_ret == MPI_SUCCESS), "MPI_Info_set");
- ret = H5Pset_mpi_params(fapl_id, comm, info);
- VRFY((ret >= 0), "H5Pset_mpi_params succeeded");
- are_equal = H5Pequal(fapl_id, fapl_copy_id);
- VRFY((true == are_equal), "H5Pequal");
-
- /* create the file */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- VRFY((fid != H5I_INVALID_HID), "H5Fcreate succeeded");
-
- /* verify settings for file access properties */
-
- /* Collective metadata writes */
- ret = H5Pget_coll_metadata_write(fapl_id, &is_coll);
- VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
- VRFY((is_coll == false), "Incorrect property setting for coll metadata writes");
-
- /* Collective metadata read API calling requirement */
- ret = H5Pget_all_coll_metadata_ops(fapl_id, &is_coll);
- VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
- VRFY((is_coll == false), "Incorrect property setting for coll metadata API calls requirement");
-
- ret = H5Fclose(fid);
- VRFY((ret >= 0), "H5Fclose succeeded");
-
- /* Open the file with the MPI-IO driver */
- ret = H5Pset_fapl_mpio(fapl_id, comm, info);
- VRFY((ret >= 0), "H5Pset_fapl_mpio failed");
- fid = H5Fopen(filename, H5F_ACC_RDWR, fapl_id);
- VRFY((fid != H5I_INVALID_HID), "H5Fcreate succeeded");
-
- /* verify settings for file access properties */
-
- /* Collective metadata writes */
- ret = H5Pget_coll_metadata_write(fapl_id, &is_coll);
- VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
- VRFY((is_coll == false), "Incorrect property setting for coll metadata writes");
-
- /* Collective metadata read API calling requirement */
- ret = H5Pget_all_coll_metadata_ops(fapl_id, &is_coll);
- VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
- VRFY((is_coll == false), "Incorrect property setting for coll metadata API calls requirement");
-
- ret = H5Fclose(fid);
- VRFY((ret >= 0), "H5Fclose succeeded");
-
- /* Open the file with the MPI-IO driver w/ collective settings */
- ret = H5Pset_fapl_mpio(fapl_id, comm, info);
- VRFY((ret >= 0), "H5Pset_fapl_mpio failed");
- /* Collective metadata writes */
- ret = H5Pset_coll_metadata_write(fapl_id, true);
- VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
- /* Collective metadata read API calling requirement */
- ret = H5Pset_all_coll_metadata_ops(fapl_id, true);
- VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
- fid = H5Fopen(filename, H5F_ACC_RDWR, fapl_id);
- VRFY((fid != H5I_INVALID_HID), "H5Fcreate succeeded");
-
- /* verify settings for file access properties */
-
- /* Collective metadata writes */
- ret = H5Pget_coll_metadata_write(fapl_id, &is_coll);
- VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
- VRFY((is_coll == true), "Incorrect property setting for coll metadata writes");
-
- /* Collective metadata read API calling requirement */
- ret = H5Pget_all_coll_metadata_ops(fapl_id, &is_coll);
- VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
- VRFY((is_coll == true), "Incorrect property setting for coll metadata API calls requirement");
-
- /* close fapl and retrieve it from file */
- ret = H5Pclose(fapl_id);
- VRFY((ret >= 0), "H5Pclose succeeded");
- fapl_id = H5I_INVALID_HID;
-
- fapl_id = H5Fget_access_plist(fid);
- VRFY((fapl_id != H5I_INVALID_HID), "H5P_FILE_ACCESS");
-
- /* verify settings for file access properties */
-
- /* Collective metadata writes */
- ret = H5Pget_coll_metadata_write(fapl_id, &is_coll);
- VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
- VRFY((is_coll == true), "Incorrect property setting for coll metadata writes");
-
- /* Collective metadata read API calling requirement */
- ret = H5Pget_all_coll_metadata_ops(fapl_id, &is_coll);
- VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
- VRFY((is_coll == true), "Incorrect property setting for coll metadata API calls requirement");
-
- /* close file */
- ret = H5Fclose(fid);
- VRFY((ret >= 0), "H5Fclose succeeded");
-
- /* Release file-access plist */
- ret = H5Pclose(fapl_id);
- VRFY((ret >= 0), "H5Pclose succeeded");
- ret = H5Pclose(fapl_copy_id);
- VRFY((ret >= 0), "H5Pclose succeeded");
-
- /* Free the MPI info object */
- mpi_ret = MPI_Info_free(&info);
- VRFY((mpi_ret >= 0), "MPI_Info_free succeeded");
-
-} /* end test_file_properties() */
-
-void
-test_delete(void)
-{
- hid_t fid = H5I_INVALID_HID; /* HDF5 file ID */
- hid_t fapl_id = H5I_INVALID_HID; /* File access plist */
- const char *filename = NULL;
- MPI_Comm comm = MPI_COMM_WORLD;
- MPI_Info info = MPI_INFO_NULL;
- htri_t is_hdf5 = FAIL; /* Whether a file is an HDF5 file */
- herr_t ret; /* Generic return value */
-
- filename = (const char *)PARATESTFILE /* GetTestParameters() */;
-
- /* set up MPI parameters */
- MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
- MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
-
- /* Make sure the connector supports the API functions being tested */
- if (!(vol_cap_flags_g & H5VL_CAP_FLAG_FILE_BASIC) || !(vol_cap_flags_g & H5VL_CAP_FLAG_FILE_MORE)) {
- if (MAINPROCESS) {
- puts("SKIPPED");
- printf(" API functions for basic file or file more aren't supported with this "
- "connector\n");
- fflush(stdout);
- }
-
- return;
- }
-
- /* setup file access plist */
- fapl_id = H5Pcreate(H5P_FILE_ACCESS);
- VRFY((fapl_id != H5I_INVALID_HID), "H5Pcreate");
- ret = H5Pset_fapl_mpio(fapl_id, comm, info);
- VRFY((SUCCEED == ret), "H5Pset_fapl_mpio");
-
- /* create the file */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- VRFY((fid != H5I_INVALID_HID), "H5Fcreate");
-
- /* close the file */
- ret = H5Fclose(fid);
- VRFY((SUCCEED == ret), "H5Fclose");
-
- /* Verify that the file is an HDF5 file */
- is_hdf5 = H5Fis_accessible(filename, fapl_id);
- VRFY((true == is_hdf5), "H5Fis_accessible");
-
- /* Delete the file */
- ret = H5Fdelete(filename, fapl_id);
- VRFY((SUCCEED == ret), "H5Fdelete");
-
- /* Verify that the file is NO LONGER an HDF5 file */
- /* This should fail since there is no file */
- H5E_BEGIN_TRY
- {
- is_hdf5 = H5Fis_accessible(filename, fapl_id);
- }
- H5E_END_TRY
- VRFY((is_hdf5 != SUCCEED), "H5Fis_accessible");
-
- /* Release file-access plist */
- ret = H5Pclose(fapl_id);
- VRFY((SUCCEED == ret), "H5Pclose");
-
-} /* end test_delete() */