diff options
author | Vailin Choi <vchoi@jam.ad.hdfgroup.org> | 2018-10-29 21:46:39 (GMT) |
---|---|---|
committer | Vailin Choi <vchoi@jam.ad.hdfgroup.org> | 2018-10-29 21:46:39 (GMT) |
commit | d4d7687ad1df35101ed72567c99f1c57536b5ccd (patch) | |
tree | a5ac437190db1672625e76e688578c369188ddbd /src/H5FDtest.c | |
parent | a1bd33ad083351ad8bbb26d45c2625059b55dc63 (diff) | |
download | hdf5-d4d7687ad1df35101ed72567c99f1c57536b5ccd.zip hdf5-d4d7687ad1df35101ed72567c99f1c57536b5ccd.tar.gz hdf5-d4d7687ad1df35101ed72567c99f1c57536b5ccd.tar.bz2 |
1) Add concurrent test for VFD SWMR reader
2) Bug fixes in H5FDvfd_swmr.c
Diffstat (limited to 'src/H5FDtest.c')
-rw-r--r-- | src/H5FDtest.c | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/src/H5FDtest.c b/src/H5FDtest.c index 080223c..18b53a0 100644 --- a/src/H5FDtest.c +++ b/src/H5FDtest.c @@ -25,8 +25,8 @@ /* Module Setup */ /****************/ -#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ -#define H5FD_TESTING /* Suppress warning about H5FD testing funcs */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ +#define H5FD_TESTING /* Suppress warning about H5FD testing funcs */ /***********/ @@ -34,6 +34,8 @@ /***********/ #include "H5private.h" /* Generic Functions */ #include "H5FDpkg.h" /* File Drivers */ +#include "H5FLprivate.h" /* Free Lists */ +#include "H5Eprivate.h" /* Error handling */ /****************/ /* Local Macros */ @@ -63,6 +65,8 @@ /*****************************/ /* Library Private Variables */ /*****************************/ +/* Declare external the free list for H5FD_vfd_swmr_idx_entry_t */ +H5FL_SEQ_EXTERN(H5FD_vfd_swmr_idx_entry_t); /*******************/ @@ -114,3 +118,67 @@ H5FD__supports_swmr_test(const char *vfd_name) } /* end H5FD__supports_swmr_test() */ +/* + * Tests for VFD SWMR + */ +/*------------------------------------------------------------------------- + * Function: H5FD__vfd_swmr_md_test + * + * Purpose: Verify the info obtained from the driver's local copy is as + * indicated by the parameter: num_entries and index + * + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- + */ +herr_t +H5FD__vfd_swmr_reader_md_test(H5FD_t *file, unsigned num_entries, H5FD_vfd_swmr_idx_entry_t index[]) +{ + unsigned vfd_num_entries = 0; + H5FD_vfd_swmr_idx_entry_t *vfd_index = NULL; + unsigned i; + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI_NOINIT + + /* Retrieve index from VFD SWMR driver */ + /* Initial call to get # of entries */ + if(H5FD_vfd_swmr_get_tick_and_idx(file, TRUE, NULL, &vfd_num_entries, vfd_index) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "Error in retrieving index from driver") + + /* Verify number of index entries */ + if(vfd_num_entries != num_entries) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "Error in retrieving index from driver") + + if(vfd_num_entries) { + /* Allocate memory for index entries */ + if(NULL == (vfd_index = H5FL_SEQ_MALLOC(H5FD_vfd_swmr_idx_entry_t, vfd_num_entries))) + HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL, "memory allocation failed for index entries") + + /* Second call to retrieve the index */ + if(H5FD_vfd_swmr_get_tick_and_idx(file, FALSE, NULL, &vfd_num_entries, vfd_index) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "Error in retrieving index from driver") + + /* Verify index entries */ + for(i = 0; i < vfd_num_entries; i++) { + if(vfd_index[i].length != index[i].length) + HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "incorrect length read from metadata file") + + if(vfd_index[i].hdf5_page_offset != index[i].hdf5_page_offset) + HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "incorrect hdf5_page_offset read from metadata file") + + if(vfd_index[i].md_file_page_offset != index[i].md_file_page_offset) + HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "incorrect md_file_page_offset read from metadata file") + + if(vfd_index[i].chksum != index[i].chksum) + HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "incorrect chksum read from metadata file") + } + } + +done: + /* Free local copy of index entries */ + if(vfd_num_entries && vfd_index) + vfd_index = (H5FD_vfd_swmr_idx_entry_t *)H5FL_SEQ_FREE(H5FD_vfd_swmr_idx_entry_t, vfd_index); + + FUNC_LEAVE_NOAPI(ret_value) +} /* H5FD__vfd_swmr_reader_md_test() */ |