From fe7dca0683ade23ecfbe647151d093b80e310c02 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 26 Aug 2024 09:32:44 -0700 Subject: [PATCH 01/17] Turn on parallel CI tests in Autotools & CMake (#4573) --- .github/workflows/main-auto-par.yml | 26 ++++++++++++++++++++++++-- .github/workflows/main-cmake-par.yml | 13 +++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main-auto-par.yml b/.github/workflows/main-auto-par.yml index bd1b1c45902..3d5d7563a15 100644 --- a/.github/workflows/main-auto-par.yml +++ b/.github/workflows/main-auto-par.yml @@ -50,8 +50,9 @@ jobs: - name: Get Sources uses: actions/checkout@v4.1.7 - # AUTOTOOLS CONFIGURE - name: Autotools Configure + env: + NPROCS: 2 run: | sh ./autogen.sh mkdir "${{ runner.workspace }}/build" @@ -71,7 +72,28 @@ jobs: --with-szlib=yes shell: bash - # BUILD - name: Autotools Build run: make -j3 working-directory: ${{ runner.workspace }}/build + + # ph5diff tests are in the tools/tests directory so they will get run + # here, so leave NPROCS set here as well + - name: Autotools Run Tests + env: + NPROCS: 2 + run: | + cd test && make check -j2 && cd .. + cd tools && make check -j2 && cd .. + cd hl && make check -j2 && cd .. + cd fortran/test && make check -j2 && cd ../.. + working-directory: ${{ runner.workspace }}/build + if: ${{ inputs.thread_safety == 'disable' }} + + - name: Autotools Run Parallel Tests + env: + NPROCS: 2 + run: | + cd testpar && make check && cd .. + cd fortran/testpar && make check -j2 && cd ../.. + working-directory: ${{ runner.workspace }}/build + if: ${{ inputs.thread_safety == 'disable' }} diff --git a/.github/workflows/main-cmake-par.yml b/.github/workflows/main-cmake-par.yml index 9a87dead10d..55d79ecb776 100644 --- a/.github/workflows/main-cmake-par.yml +++ b/.github/workflows/main-cmake-par.yml @@ -62,3 +62,16 @@ jobs: - name: CMake Build run: cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build + + # + # RUN TESTS + # + - name: CMake Run Tests + run: ctest . -E MPI_TEST --parallel 2 -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build + if: ${{ matrix.run_tests && (inputs.thread_safety != 'TS') }} + + - name: CMake Run Parallel Tests + run: ctest . -R MPI_TEST -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build + if: ${{ matrix.run_tests && (inputs.thread_safety != 'TS') }} From 6ccbf30199fc0bcd08655d3052959d51dfcd71c9 Mon Sep 17 00:00:00 2001 From: "H. Joe Lee" Date: Mon, 26 Aug 2024 12:25:27 -0500 Subject: [PATCH 02/17] Fix typo in H5Centry.c (#4762) --- src/H5Centry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/H5Centry.c b/src/H5Centry.c index 6883e897186..1ca7479cf7e 100644 --- a/src/H5Centry.c +++ b/src/H5Centry.c @@ -3131,7 +3131,7 @@ H5C_protect(H5F_t *f, const H5C_class_t *type, haddr_t addr, void *udata, unsign else empty_space = cache_ptr->max_cache_size - cache_ptr->index_size; - /* try to free up if necceary and if evictions are permitted. Note + /* try to free up if necessary and if evictions are permitted. Note * that if evictions are enabled, we will call H5C__make_space_in_cache() * regardless if the min_free_space requirement is not met. */ From e5eede68429e22849691f545db78b83664be3703 Mon Sep 17 00:00:00 2001 From: jhendersonHDF Date: Mon, 26 Aug 2024 12:38:31 -0500 Subject: [PATCH 03/17] Set/Unset VOL wrapping context in H5VL_attr_close (#4759) --- src/H5VLcallback.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/H5VLcallback.c b/src/H5VLcallback.c index 1662776ef9c..58e839c9985 100644 --- a/src/H5VLcallback.c +++ b/src/H5VLcallback.c @@ -1744,18 +1744,28 @@ H5VL__attr_close(void *obj, const H5VL_class_t *cls, hid_t dxpl_id, void **req) herr_t H5VL_attr_close(const H5VL_object_t *vol_obj, hid_t dxpl_id, void **req) { - herr_t ret_value = SUCCEED; /* Return value */ + bool vol_wrapper_set = false; /* Whether the VOL object wrapping context was set up */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ assert(vol_obj); + /* Set wrapper info in API context */ + if (H5VL_set_vol_wrapper(vol_obj) < 0) + HGOTO_ERROR(H5E_VOL, H5E_CANTSET, FAIL, "can't set VOL wrapper info"); + vol_wrapper_set = true; + /* Call the corresponding internal VOL routine */ if (H5VL__attr_close(vol_obj->data, vol_obj->connector->cls, dxpl_id, req) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTCLOSEOBJ, FAIL, "attribute close failed"); done: + /* Reset object wrapping info in API context */ + if (vol_wrapper_set && H5VL_reset_vol_wrapper() < 0) + HDONE_ERROR(H5E_VOL, H5E_CANTRESET, FAIL, "can't reset VOL wrapper info"); + FUNC_LEAVE_NOAPI(ret_value) } /* end H5VL_attr_close() */ From 10597ee37cc1e46e20eddbb66a1456d1033208ab Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 26 Aug 2024 10:47:54 -0700 Subject: [PATCH 04/17] Add missing C++ and Fortran to Intel oneAPI CI (#4761) * Add Fortran and C++ to Autotools * Add Fortran and C++ to Linux CMake * Add C++ to Windows CMake * Fix bad GitHub workspace variable --- .github/workflows/intel-auto.yml | 3 ++- .github/workflows/intel-cmake.yml | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/intel-auto.yml b/.github/workflows/intel-auto.yml index ea983c3a76b..6e0380efb4e 100644 --- a/.github/workflows/intel-auto.yml +++ b/.github/workflows/intel-auto.yml @@ -46,7 +46,8 @@ jobs: $GITHUB_WORKSPACE/configure \ --enable-build-mode=${{ inputs.build_mode }} \ --enable-shared \ - --disable-fortran + --enable-cxx \ + --enable-fortran - name: Autotools Build shell: bash diff --git a/.github/workflows/intel-cmake.yml b/.github/workflows/intel-cmake.yml index a8d5b7d49b8..fb703d480b3 100644 --- a/.github/workflows/intel-cmake.yml +++ b/.github/workflows/intel-cmake.yml @@ -43,13 +43,13 @@ jobs: run: | mkdir "${{ runner.workspace }}/build" cd "${{ runner.workspace }}/build" - cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ - -G Ninja \ - --log-level=VERBOSE \ + cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja --log-level=VERBOSE \ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ + -DHDF5_BUILD_FORTRAN:BOOL=ON \ + -DHDF5_BUILD_CPP_LIB:BOOL=ON \ -DLIBAEC_USE_LOCALCONTENT=OFF \ -DZLIB_USE_LOCALCONTENT=OFF \ - $GITHUB_WORKSPACE + ${{ github.workspace }} - name: CMake Build (Linux) shell: bash @@ -97,7 +97,7 @@ jobs: run: | mkdir "${{ runner.workspace }}/build" Set-Location -Path "${{ runner.workspace }}\\build" - cmake -C ${{ github.workspace }}/config/cmake/cacheinit.cmake -G Ninja -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} -DHDF5_BUILD_FORTRAN=ON -DLIBAEC_USE_LOCALCONTENT=OFF -DZLIB_USE_LOCALCONTENT=OFF ${{ github.workspace }} + cmake -C ${{ github.workspace }}/config/cmake/cacheinit.cmake -G Ninja -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} -DHDF5_BUILD_FORTRAN=ON -DHDF5_BUILD_CPP_LIB=ON -DLIBAEC_USE_LOCALCONTENT=OFF -DZLIB_USE_LOCALCONTENT=OFF ${{ github.workspace }} - name: CMake Build (Windows) shell: pwsh From ff14dee3e910de7c99cb27e3d39ad89509422dc9 Mon Sep 17 00:00:00 2001 From: mattjala <124107509+mattjala@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:29:13 -0500 Subject: [PATCH 05/17] Remove early test exit (#4757) * Don't skip file tests * Remove test with invalid flag for H5Fopen * Verify that create/open of unseekable file fails * Remove failure verification --- test/tfile.c | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/test/tfile.c b/test/tfile.c index 1c8e6a04b1f..02f996f66a3 100644 --- a/test/tfile.c +++ b/test/tfile.c @@ -8104,45 +8104,38 @@ test_min_dset_ohdr(void) /**************************************************************** ** ** test_unseekable_file(): -** Test that attempting to open an unseekable file fails gracefully +** Test that attempting to create/open an unseekable file fails gracefully ** without a segfault (see hdf5#1498) ****************************************************************/ static void test_unseekable_file(void) { - hid_t file_id = H5I_INVALID_HID; /* File ID */ - /* Output message about test being performed */ MESSAGE(5, ("Testing creating/opening an unseekable file\n")); - /* Creation */ -#ifdef H5_HAVE_WIN32_API - file_id = H5Fcreate("NUL", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); -#else - file_id = H5Fcreate("/dev/null", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); -#endif - - H5Fclose(file_id); + /* Flush message in case this test segfaults */ + fflush(stdout); - /* Open, truncate */ + /* Creation */ #ifdef H5_HAVE_WIN32_API - file_id = H5Fopen("NUL", H5F_ACC_TRUNC, H5P_DEFAULT); + H5Fcreate("NUL", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); #else - file_id = H5Fopen("/dev/null", H5F_ACC_TRUNC, H5P_DEFAULT); + H5Fcreate("/dev/null", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); #endif - H5Fclose(file_id); + /* Should fail without segfault */ + /* TODO - Does not properly fail on all systems */ + /* VERIFY(file_id, H5I_INVALID_HID, "H5Fcreate"); */ - /* Open, RDWR */ + /* Opening */ #ifdef H5_HAVE_WIN32_API - file_id = H5Fopen("NUL", H5F_ACC_RDWR, H5P_DEFAULT); + H5Fopen("NUL", H5F_ACC_RDWR, H5P_DEFAULT); #else - file_id = H5Fopen("/dev/null", H5F_ACC_RDWR, H5P_DEFAULT); + H5Fopen("/dev/null", H5F_ACC_RDWR, H5P_DEFAULT); #endif - H5Fclose(file_id); - - exit(EXIT_SUCCESS); + /* TODO - Does not properly fail on all systems */ + /* VERIFY(file_id, H5I_INVALID_HID, "H5Fopen"); */ } /**************************************************************** ** From 00b0d3a670b4ac4d9a5c5af1a0d0523b924a4219 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 26 Aug 2024 12:23:11 -0700 Subject: [PATCH 06/17] Restore Julia CI (#4763) Fixes #4539 --- .github/workflows/autotools.yml | 6 +++ .github/workflows/cmake.yml | 6 ++- .github/workflows/julia-auto.yml | 79 +++++++++++++++++++++++++++++ .github/workflows/julia-cmake.yml | 82 +++++++++++++++++++++++++++++++ 4 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/julia-auto.yml create mode 100644 .github/workflows/julia-cmake.yml diff --git a/.github/workflows/autotools.yml b/.github/workflows/autotools.yml index a430dc6b51c..a202076005a 100644 --- a/.github/workflows/autotools.yml +++ b/.github/workflows/autotools.yml @@ -100,6 +100,12 @@ jobs: name: "Autotools TestExpress Workflows" uses: ./.github/workflows/testxpr-auto.yml + call-release-auto-julia: + name: "Autotools Julia Workflows" + uses: ./.github/workflows/julia-auto.yml + with: + build_mode: "production" + # workflow-msys2-autotools: # name: "CMake msys2 Workflows" # uses: ./.github/workflows/msys2-auto.yml diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 21d201922de..7fe99c2f3cb 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -103,4 +103,8 @@ jobs: name: "CMake TestExpress Workflows" uses: ./.github/workflows/testxpr-cmake.yml - + call-release-cmake-julia: + name: "CMake Julia Workflows" + uses: ./.github/workflows/julia-cmake.yml + with: + build_mode: "Release" diff --git a/.github/workflows/julia-auto.yml b/.github/workflows/julia-auto.yml new file mode 100644 index 00000000000..a7dd2ab15b9 --- /dev/null +++ b/.github/workflows/julia-auto.yml @@ -0,0 +1,79 @@ +name: hdf5 dev autotools julia + +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + julia_build_and_test: + name: "julia ${{ inputs.build_mode }}" + runs-on: ubuntu-latest + steps: + - name: Get Sources + uses: actions/checkout@v4.1.1 + + - name: Install Dependencies + shell: bash + run: | + sudo apt-get update + sudo apt-get install autoconf automake libtool libtool-bin libaec-dev + sudo apt-get install doxygen graphviz + sudo apt install -y zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl bzip2 + sudo apt install -y m4 flex bison cmake libzip-dev openssl build-essential + + - name: Autotools Configure + shell: bash + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=${{ inputs.build_mode }} \ + --disable-fortran \ + --enable-shared \ + --disable-parallel \ + --prefix=/tmp + + - name: Autotools Build + shell: bash + run: | + make -j3 + working-directory: ${{ runner.workspace }}/build + + - name: Install HDF5 + shell: bash + run: | + make install + working-directory: ${{ runner.workspace }}/build + + - name: Install julia + uses: julia-actions/setup-julia@latest + with: + version: '1.6' + arch: 'x64' + + - name: Get julia hdf5 source + uses: actions/checkout@v4.1.1 + with: + repository: JuliaIO/HDF5.jl + path: . + + - name: Generate LocalPreferences + run: | + echo '[HDF5]' >> LocalPreferences.toml + echo 'libhdf5 = "/tmp/lib/libhdf5.so"' >> LocalPreferences.toml + echo 'libhdf5_hl = "/tmp/lib/libhdf5_hl.so"' >> LocalPreferences.toml + + - uses: julia-actions/julia-buildpkg@latest + + - name: Julia Run Tests + uses: julia-actions/julia-runtest@latest + env: + JULIA_DEBUG: Main diff --git a/.github/workflows/julia-cmake.yml b/.github/workflows/julia-cmake.yml new file mode 100644 index 00000000000..c1306d6a381 --- /dev/null +++ b/.github/workflows/julia-cmake.yml @@ -0,0 +1,82 @@ +name: hdf5 dev CMake julia + +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + julia_build_and_test: + name: "julia ${{ inputs.build_mode }}" + runs-on: ubuntu-latest + steps: + - name: Get Sources + uses: actions/checkout@v4.1.1 + + - name: Install Dependencies + shell: bash + run: | + sudo apt-get update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install -y libaec-dev zlib1g-dev wget curl bzip2 flex bison cmake libzip-dev openssl build-essential + + - name: CMake Configure + shell: bash + run: | + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja \ + -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ + -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \ + -DHDF5_ENABLE_PARALLEL:BOOL=OFF \ + -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ + -DLIBAEC_USE_LOCALCONTENT=OFF \ + -DZLIB_USE_LOCALCONTENT=OFF \ + -DHDF5_BUILD_FORTRAN:BOOL=OFF \ + -DHDF5_BUILD_JAVA:BOOL=OFF \ + -DCMAKE_INSTALL_PREFIX=/tmp \ + $GITHUB_WORKSPACE + + - name: CMake Build + shell: bash + run: | + cmake --build . --parallel 3 --config ${{ inputs.build_mode }} + working-directory: ${{ runner.workspace }}/build + + - name: Install HDF5 + shell: bash + run: | + cmake --install . + working-directory: ${{ runner.workspace }}/build + + - name: Install julia + uses: julia-actions/setup-julia@latest + with: + version: '1.6' + arch: 'x64' + + - name: Get julia hdf5 source + uses: actions/checkout@v4.1.1 + with: + repository: JuliaIO/HDF5.jl + path: . + + - name: Generate LocalPreferences + run: | + echo '[HDF5]' >> LocalPreferences.toml + echo 'libhdf5 = "/tmp/lib/libhdf5.so"' >> LocalPreferences.toml + echo 'libhdf5_hl = "/tmp/lib/libhdf5_hl.so"' >> LocalPreferences.toml + + - uses: julia-actions/julia-buildpkg@latest + + - name: Julia Run Tests + uses: julia-actions/julia-runtest@latest + env: + JULIA_DEBUG: Main From 04bf2dff85c7cec78d18b1619f4918af8ed3496b Mon Sep 17 00:00:00 2001 From: "H. Joe Lee" Date: Mon, 26 Aug 2024 16:37:47 -0500 Subject: [PATCH 07/17] Capitalize f in (#4766) --- src/H5public.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/H5public.h b/src/H5public.h index e2a82b9bb14..9dd18cd5ff7 100644 --- a/src/H5public.h +++ b/src/H5public.h @@ -443,7 +443,7 @@ extern "C" { * \details H5open() initializes the HDF5 library. * * \details When the HDF5 library is used in a C application, the library is - * automatically initialized when the first HDf5 function call is + * automatically initialized when the first HDF5 function call is * issued. If one finds that an HDF5 library function is failing * inexplicably, H5open() can be called first. It is safe to call * H5open() before an application issues any other function calls to From 67e49890049edbdbd803b56e787e43b7e9258899 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Tue, 27 Aug 2024 00:18:01 -0700 Subject: [PATCH 08/17] Add testing to NVHPC CI actions (CMake & Autotools) (#4760) Turns on testing, both serial and parallel, but skips: * dt_arith and dtransform in CMake * All main library tests in the Autotools Due to dt_arith and dtransform segfaults when handling long doubles. --- .github/workflows/nvhpc-auto.yml | 20 ++++++++++++++++++++ .github/workflows/nvhpc-cmake.yml | 13 +++++++++++++ 2 files changed, 33 insertions(+) diff --git a/.github/workflows/nvhpc-auto.yml b/.github/workflows/nvhpc-auto.yml index bb986d3c800..bca490485d7 100644 --- a/.github/workflows/nvhpc-auto.yml +++ b/.github/workflows/nvhpc-auto.yml @@ -67,6 +67,26 @@ jobs: make -j3 working-directory: ${{ runner.workspace }}/build + # ph5diff tests are in the tools/tests directory so they will get run + # here, so leave NPROCS set here as well + - name: Autotools Run Tests + env: + NPROCS: 2 + run: | + export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/24.7/compilers/bin:$PATH + cd tools && make check -j2 && cd .. + cd hl && make check -j2 && cd .. + cd fortran && make check -j2 && cd .. + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Run Parallel Tests + env: + NPROCS: 2 + run: | + export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/24.7/compilers/bin:$PATH + cd testpar && make check && cd .. + working-directory: ${{ runner.workspace }}/build + - name: Autotools Install shell: bash run: | diff --git a/.github/workflows/nvhpc-cmake.yml b/.github/workflows/nvhpc-cmake.yml index a0641fa3089..3dbefa22861 100644 --- a/.github/workflows/nvhpc-cmake.yml +++ b/.github/workflows/nvhpc-cmake.yml @@ -68,3 +68,16 @@ jobs: run: | cmake --build . --parallel 3 --config ${{ inputs.build_mode }} working-directory: ${{ runner.workspace }}/build + + # Skipping dt_arith and dtransform while we investigate long double failures + - name: CMake Run Tests + shell: bash + run: | + ctest . -E "MPI_TEST|H5TEST-dt_arith|H5TEST-dtransform" --parallel 2 -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build + + - name: CMake Run Parallel Tests + shell: bash + run: | + ctest . -R MPI_TEST -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build From e065e72c9b564134c7cf09cfc4e763a482944033 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Tue, 27 Aug 2024 03:41:00 -0700 Subject: [PATCH 09/17] Move 1.14.6 and 1.16.0 to correct date (#4772) --- doc/img/release-schedule.plantuml | 8 ++++---- doc/img/release-schedule.png | Bin 14159 -> 22892 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/img/release-schedule.plantuml b/doc/img/release-schedule.plantuml index 741160e31d3..d0fd79b1426 100644 --- a/doc/img/release-schedule.plantuml +++ b/doc/img/release-schedule.plantuml @@ -23,14 +23,14 @@ Project starts 2023-01-01 [1.12.3] happens 2023-11-30 [1.12] is colored in #88CCEE -[1.14] starts at 2023-01-01 and lasts 122 weeks +[1.14] starts at 2023-01-01 and lasts 118 weeks [1.14.1] happens at 2023-04-30 [1.14.2] happens at 2023-08-31 [1.14.3] happens at 2023-10-31 [1.14.4.2] happens at 2024-04-15 [1.14.4.3] happens at 2024-05-22 [1.14.5] happens at 2024-09-30 -[1.14.6] happens at 2025-04-30 +[1.14.6] happens at 2025-03-31 [1.14.1] displays on same row as [1.14.1] [1.14.2] displays on same row as [1.14.1] [1.14.3] displays on same row as [1.14.1] @@ -39,8 +39,8 @@ Project starts 2023-01-01 [1.14.6] displays on same row as [1.14.1] [1.14] is colored in #B187CF -[1.16] starts at 2025-04-30 and lasts 35 weeks -[1.16.0] happens at 2025-04-30 +[1.16] starts at 2025-03-31 and lasts 35 weeks +[1.16.0] happens at 2025-03-31 [1.16.1] happens at 2025-09-30 [1.16.1] displays on same row as [1.16.0] [1.16] is colored in #02BFA0 diff --git a/doc/img/release-schedule.png b/doc/img/release-schedule.png index 82e1cf5d495fe882bebede3966b963a122f0d5c1..20a0a55986d6bec975ec83a87d6987e4a516d49e 100644 GIT binary patch literal 22892 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 DEqUR* literal 14159 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 Date: Tue, 27 Aug 2024 06:05:47 -0700 Subject: [PATCH 10/17] Fix typo in H5T_order_t enum (#4773) 'bit endian' --> 'big endian' --- src/H5Tpublic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/H5Tpublic.h b/src/H5Tpublic.h index 97ee27c7f46..57a5b6047c3 100644 --- a/src/H5Tpublic.h +++ b/src/H5Tpublic.h @@ -52,7 +52,7 @@ typedef enum H5T_class_t { typedef enum H5T_order_t { H5T_ORDER_ERROR = -1, /**< error */ H5T_ORDER_LE = 0, /**< little endian */ - H5T_ORDER_BE = 1, /**< bit endian */ + H5T_ORDER_BE = 1, /**< big endian */ H5T_ORDER_VAX = 2, /**< VAX mixed endian */ H5T_ORDER_MIXED = 3, /**< Compound type with mixed member orders */ H5T_ORDER_NONE = 4 /**< no particular order (strings, bits,..) */ From 90b07416a631258253a7cdbfc077680d1ce78cd5 Mon Sep 17 00:00:00 2001 From: "H. Joe Lee" Date: Tue, 27 Aug 2024 11:06:40 -0500 Subject: [PATCH 11/17] Remove dummy comments that repeat function names. (#4775) --- test/vol.c | 69 ------------------------------------------------------ 1 file changed, 69 deletions(-) diff --git a/test/vol.c b/test/vol.c index 041e0c9b88b..9fa4f06c1ca 100644 --- a/test/vol.c +++ b/test/vol.c @@ -914,11 +914,9 @@ test_basic_file_operation(const char *driver_name) TEST_ERROR; } - /* H5Fcreate */ if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0) TEST_ERROR; - /* H5Fget_obj_count */ if ((obj_count = H5Fget_obj_count(fid, H5F_OBJ_FILE)) < 0) TEST_ERROR; if ((obj_count = H5Fget_obj_count(fid, H5F_OBJ_ALL)) < 0) @@ -926,7 +924,6 @@ test_basic_file_operation(const char *driver_name) if ((obj_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_DATASET)) < 0) TEST_ERROR; - /* H5Fget_obj_ids */ if ((obj_count = H5Fget_obj_ids(fid, H5F_OBJ_ALL, 2, obj_id_list)) < 0) TEST_ERROR; if ((obj_count = H5Fget_obj_ids((hid_t)H5F_OBJ_ALL, H5F_OBJ_DATASET, 2, obj_id_list)) < 0) @@ -937,7 +934,6 @@ test_basic_file_operation(const char *driver_name) strcmp(driver_name, "family") != 0 && strcmp(driver_name, "direct") != 0 && strcmp(driver_name, "core") != 0 && strcmp(driver_name, "core_paged") != 0 && strcmp(driver_name, "mpio") != 0 && strcmp(driver_name, "splitter") != 0)) { - /* H5Fget_access_plist */ if ((fapl_id2 = H5Fget_access_plist(fid)) < 0) TEST_ERROR; if (H5Pequal(fapl_id, fapl_id2) != true) @@ -946,53 +942,42 @@ test_basic_file_operation(const char *driver_name) TEST_ERROR; } /* end if */ - /* H5Fget_create_plist */ if ((fcpl_id = H5Fget_create_plist(fid)) < 0) TEST_ERROR; if (H5Pclose(fcpl_id) < 0) TEST_ERROR; - /* H5Fget_filesize */ if (H5Fget_filesize(fid, &file_size) < 0) TEST_ERROR; /* Can't retrieve VFD handle for split / multi / family VFDs */ if ((bool)(strcmp(driver_name, "split") != 0 && strcmp(driver_name, "multi") != 0 && strcmp(driver_name, "family") != 0)) { - /* H5Fget_vfd_handle */ if (H5Fget_vfd_handle(fid, H5P_DEFAULT, &os_file_handle) < 0) TEST_ERROR; } /* end if */ - /* H5Fget_intent */ if (H5Fget_intent(fid, &intent) < 0) TEST_ERROR; - /* H5Fget_info2 */ if (H5Fget_info2(fid, &finfo) < 0) TEST_ERROR; - /* H5Fget_name */ if (H5Fget_name(fid, name, 32) < 0) TEST_ERROR; - /* H5Fclear_elink_file_cache */ if (H5Fclear_elink_file_cache(fid) < 0) TEST_ERROR; - /* H5Fflush */ if (H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0) TEST_ERROR; - /* H5Fclose */ if (H5Fclose(fid) < 0) TEST_ERROR; - /* H5Fis_accessible */ if (H5Fis_accessible(filename, fapl_id) < 0) TEST_ERROR; - /* H5Fopen */ if ((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl_id)) < 0) TEST_ERROR; @@ -1001,7 +986,6 @@ test_basic_file_operation(const char *driver_name) strcmp(driver_name, "family") != 0 && strcmp(driver_name, "direct") != 0 && strcmp(driver_name, "core") != 0 && strcmp(driver_name, "core_paged") != 0 && strcmp(driver_name, "mpio") != 0 && strcmp(driver_name, "splitter") != 0)) { - /* H5Fget_access_plist */ if ((fapl_id2 = H5Fget_access_plist(fid)) < 0) TEST_ERROR; if (H5Pequal(fapl_id, fapl_id2) != true) @@ -1018,7 +1002,6 @@ test_basic_file_operation(const char *driver_name) strcmp(driver_name, "family") != 0 && strcmp(driver_name, "direct") != 0 && strcmp(driver_name, "core") != 0 && strcmp(driver_name, "core_paged") != 0 && strcmp(driver_name, "mpio") != 0 && strcmp(driver_name, "splitter") != 0)) { - /* H5Fget_access_plist */ if ((fapl_id2 = H5Fget_access_plist(fid_reopen)) < 0) TEST_ERROR; if (H5Pequal(fapl_id, fapl_id2) != true) @@ -1034,7 +1017,6 @@ test_basic_file_operation(const char *driver_name) h5_delete_test_file(FILENAME[0], fapl_id); - /* H5Pclose */ if (H5Pclose(fapl_id) < 0) TEST_ERROR; @@ -1086,27 +1068,22 @@ test_basic_group_operation(void) if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0) TEST_ERROR; - /* H5Gcreate */ if ((gid = H5Gcreate2(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Gget_create_plist */ if ((gcpl_id = H5Gget_create_plist(gid)) < 0) TEST_ERROR; if (H5Pclose(gcpl_id) < 0) TEST_ERROR; - /* H5Gget_info */ if (H5Gget_info(gid, &info) < 0) TEST_ERROR; if (H5Gget_info(fid, &info) < 0) TEST_ERROR; - /* H5Gget_info_by_name */ if (H5Gget_info_by_name(fid, NATIVE_VOL_TEST_GROUP_NAME, &info, H5P_DEFAULT) < 0) TEST_ERROR; - /* H5Gget_info_by_idx */ if (H5Gget_info_by_idx(fid, "/", H5_INDEX_NAME, H5_ITER_NATIVE, 0, &info, H5P_DEFAULT) < 0) TEST_ERROR; @@ -1117,19 +1094,15 @@ test_basic_group_operation(void) if (H5Gflush(gid) < 0) TEST_ERROR; - /* H5Gclose */ if (H5Gclose(gid) < 0) TEST_ERROR; - /* H5Gopen */ if ((gid = H5Gopen2(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Gcreate_anon */ if ((gid_a = H5Gcreate_anon(fid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Grefresh */ if (H5Grefresh(gid) < 0) TEST_ERROR; @@ -1142,7 +1115,6 @@ test_basic_group_operation(void) h5_delete_test_file(FILENAME[0], fapl_id); - /* H5Pclose */ if (H5Pclose(fapl_id) < 0) TEST_ERROR; @@ -1213,7 +1185,6 @@ test_basic_dataset_operation(void) out_buf[i] = 0; } - /* H5Dcreate */ curr_dims = 0; if ((sid = H5Screate_simple(1, &curr_dims, &max_dims)) < 0) TEST_ERROR; @@ -1226,7 +1197,6 @@ test_basic_dataset_operation(void) H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Dcreate_anon */ if ((did_a = H5Dcreate_anon(fid, H5T_NATIVE_INT, sid, dcpl_id, H5P_DEFAULT)) < 0) TEST_ERROR; @@ -1235,7 +1205,6 @@ test_basic_dataset_operation(void) if (H5Pclose(dcpl_id) < 0) TEST_ERROR; - /* H5Dset_extent */ curr_dims = N_ELEMENTS; if (H5Dset_extent(did, &curr_dims) < 0) TEST_ERROR; @@ -1247,35 +1216,28 @@ test_basic_dataset_operation(void) if (H5Dflush(did) < 0) TEST_ERROR; - /* H5Dwrite */ if (H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, in_buf) < 0) TEST_ERROR; - /* H5Drefresh */ if (H5Drefresh(did) < 0) TEST_ERROR; - /* H5Dclose */ if (H5Dclose(did) < 0) TEST_ERROR; if (H5Dclose(did_a) < 0) TEST_ERROR; - /* H5Dopen */ if ((did = H5Dopen2(fid, NATIVE_VOL_TEST_DATASET_NAME, H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Dget_space */ if ((sid = H5Dget_space(did)) < 0) TEST_ERROR; if (H5Sclose(sid) < 0) TEST_ERROR; - /* H5Dget_space_status */ if (H5Dget_space_status(did, &status) < 0) TEST_ERROR; - /* H5Dget_type */ if ((tid = H5Dget_type(did)) < 0) TEST_ERROR; if (H5Tclose(tid) < 0) @@ -1287,13 +1249,11 @@ test_basic_dataset_operation(void) if (H5Tclose(tid) < 0) TEST_ERROR; - /* H5Dget_create_plist */ if ((dcpl_id = H5Dget_create_plist(did)) < 0) TEST_ERROR; if (H5Pclose(dcpl_id) < 0) TEST_ERROR; - /* H5Dget_access_plist */ if ((dapl_id = H5Dget_access_plist(did)) < 0) TEST_ERROR; if (H5Pclose(dapl_id) < 0) @@ -1311,7 +1271,6 @@ test_basic_dataset_operation(void) if (HADDR_UNDEF != (offset = H5Dget_offset(did))) TEST_ERROR; - /* H5Dread */ if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, out_buf) < 0) TEST_ERROR; @@ -1326,7 +1285,6 @@ test_basic_dataset_operation(void) h5_delete_test_file(FILENAME[0], fapl_id); - /* H5Pclose */ if (H5Pclose(fapl_id) < 0) TEST_ERROR; @@ -1391,44 +1349,35 @@ test_basic_attribute_operation(void) if ((sid = H5Screate_simple(1, &dims, &dims)) < 0) TEST_ERROR; - /* H5Acreate */ if ((aid = H5Acreate2(fid, NATIVE_VOL_TEST_ATTRIBUTE_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Awrite */ if (H5Awrite(aid, H5T_NATIVE_INT, &data_in) < 0) TEST_ERROR; - /* H5Aread */ if (H5Aread(aid, H5T_NATIVE_INT, &data_out) < 0) TEST_ERROR; if (data_in != data_out) TEST_ERROR; - /* H5Aclose */ if (H5Aclose(aid) < 0) TEST_ERROR; - /* H5Aopen */ if ((aid = H5Aopen(fid, NATIVE_VOL_TEST_ATTRIBUTE_NAME, H5P_DEFAULT)) < 0) TEST_ERROR; if (H5Aclose(aid) < 0) TEST_ERROR; - /* H5Adelete */ if (H5Adelete(fid, NATIVE_VOL_TEST_ATTRIBUTE_NAME) < 0) TEST_ERROR; - /* H5Acreate_by_name */ if ((aid_name = H5Acreate_by_name(fid, NATIVE_VOL_TEST_GROUP_NAME, NATIVE_VOL_TEST_ATTRIBUTE_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Aclose */ if (H5Aclose(aid_name) < 0) TEST_ERROR; - /* H5Adelete_by_name */ if (H5Adelete_by_name(fid, NATIVE_VOL_TEST_GROUP_NAME, NATIVE_VOL_TEST_ATTRIBUTE_NAME, H5P_DEFAULT) < 0) TEST_ERROR; @@ -1441,7 +1390,6 @@ test_basic_attribute_operation(void) h5_delete_test_file(FILENAME[0], fapl_id); - /* H5Pclose */ if (H5Pclose(fapl_id) < 0) TEST_ERROR; @@ -1495,23 +1443,19 @@ test_basic_object_operation(void) if ((gid = H5Gcreate2(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Oget_info */ if (H5Oget_info3(fid, &object_info, H5O_INFO_ALL) < 0) TEST_ERROR; //! [H5Oget_info_by_name3_snip] - /* H5Oget_info_by_name */ if (H5Oget_info_by_name3(fid, NATIVE_VOL_TEST_GROUP_NAME, &object_info, H5O_INFO_ALL, H5P_DEFAULT) < 0) TEST_ERROR; //! [H5Oget_info_by_name3_snip] - /* H5Oexists_by_name */ if (H5Oexists_by_name(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT) != true) TEST_ERROR; - /* H5Oopen/close */ if ((oid = H5Oopen(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT)) < 0) TEST_ERROR; if (H5Oclose(oid) < 0) @@ -1524,7 +1468,6 @@ test_basic_object_operation(void) h5_delete_test_file(FILENAME[0], fapl_id); - /* H5Pclose */ if (H5Pclose(fapl_id) < 0) TEST_ERROR; @@ -1572,7 +1515,6 @@ test_basic_link_operation(void) if ((gid = H5Gcreate2(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Lcreate_hard */ if (H5Lcreate_hard(fid, "/", gid, NATIVE_VOL_TEST_HARD_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; @@ -1580,18 +1522,15 @@ test_basic_link_operation(void) if (H5Lcreate_soft("/", fid, NATIVE_VOL_TEST_SOFT_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - /* H5Lexists */ if (H5Lexists(gid, NATIVE_VOL_TEST_HARD_LINK_NAME, H5P_DEFAULT) < 0) TEST_ERROR; if (H5Lexists(fid, NATIVE_VOL_TEST_SOFT_LINK_NAME, H5P_DEFAULT) < 0) TEST_ERROR; - /* H5Lcopy */ if (H5Lcopy(gid, NATIVE_VOL_TEST_HARD_LINK_NAME, fid, NATIVE_VOL_TEST_COPY_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; - /* H5Lmove */ if (H5Lmove(fid, NATIVE_VOL_TEST_COPY_LINK_NAME, gid, NATIVE_VOL_TEST_MOVE_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; @@ -1603,7 +1542,6 @@ test_basic_link_operation(void) h5_delete_test_file(FILENAME[0], fapl_id); - /* H5Pclose */ if (H5Pclose(fapl_id) < 0) TEST_ERROR; @@ -1654,7 +1592,6 @@ test_basic_datatype_operation(void) if ((tid = H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR; - /* H5Tcommit */ if (H5Tcommit2(fid, NATIVE_VOL_TEST_DATATYPE_NAME, tid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR; @@ -1665,23 +1602,18 @@ test_basic_datatype_operation(void) if (H5Tflush(tid) < 0) TEST_ERROR; - /* H5Trefresh */ if (H5Trefresh(tid) < 0) TEST_ERROR; - /* H5Tclose */ if (H5Tclose(tid) < 0) TEST_ERROR; - /* H5Topen */ if ((tid = H5Topen2(fid, NATIVE_VOL_TEST_DATATYPE_NAME, H5P_DEFAULT)) < 0) TEST_ERROR; - /* H5Tget_create_plist */ if ((tcpl_id = H5Tget_create_plist(tid)) < 0) TEST_ERROR; - /* H5Tcommit_anon */ if ((tid_anon = H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR; if (H5Tcommit_anon(fid, tid_anon, H5P_DEFAULT, H5P_DEFAULT) < 0) @@ -1698,7 +1630,6 @@ test_basic_datatype_operation(void) h5_delete_test_file(FILENAME[0], fapl_id); - /* H5Pclose */ if (H5Pclose(fapl_id) < 0) TEST_ERROR; From b56873895ac34cb7dfff4e3eb3b4889439a90f92 Mon Sep 17 00:00:00 2001 From: "H. Joe Lee" Date: Tue, 27 Aug 2024 12:22:14 -0500 Subject: [PATCH 12/17] Fix grammar in H5Odtype.c comment block (#4777) --- src/H5Odtype.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/H5Odtype.c b/src/H5Odtype.c index 24671b02107..b2e6c8f65be 100644 --- a/src/H5Odtype.c +++ b/src/H5Odtype.c @@ -135,7 +135,7 @@ H5O__dtype_decode_helper(unsigned *ioflags /*in,out*/, const uint8_t **pp, H5T_t * that case is impossible. * * Instead of using our normal H5_IS_BUFFER_OVERFLOW macro, use - * H5_IS_KNOWN_BUFFER_OVERFLOW, which will skip the check when the + * H5_IS_KNOWN_BUFFER_OVERFLOW, which will skip the check when * we're decoding a buffer from H5Tconvert(). * * Even if this is fixed at some point in the future, as long as we From d4b0a157e6dfc97fb69f90bc7a7b458dc11e90d0 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Tue, 27 Aug 2024 10:41:39 -0700 Subject: [PATCH 13/17] Add subfiling checks to the gcc action (#4776) --- .github/workflows/main-auto-par.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main-auto-par.yml b/.github/workflows/main-auto-par.yml index 3d5d7563a15..ad893d04724 100644 --- a/.github/workflows/main-auto-par.yml +++ b/.github/workflows/main-auto-par.yml @@ -63,6 +63,7 @@ jobs: --with-default-api-version=v114 \ --enable-shared \ --enable-parallel \ + --enable-subfiling-vfd \ --disable-cxx \ --enable-fortran \ --disable-java \ From 1f0bd7f8efeb6028349b2a6402c15172936daaaa Mon Sep 17 00:00:00 2001 From: bmribler <39579120+bmribler@users.noreply.github.com> Date: Tue, 27 Aug 2024 13:42:11 -0400 Subject: [PATCH 14/17] Replace non-VOL calls with VOL calls - part 3 (#4771) This PR switches H5I_object() to H5VL_vol_object() in H5O and H5T APIs. H5M is the last one and left out of this PR because it needs more work in documentation and there is no test for the API functions. Fixes GH-4730 --- src/H5Gdeprec.c | 5 +++-- src/H5O.c | 4 ++-- src/H5Odeprec.c | 2 +- src/H5Tcommit.c | 2 +- src/H5Tdeprec.c | 4 ++-- src/H5VLnative.c | 4 ++-- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/H5Gdeprec.c b/src/H5Gdeprec.c index e86bc82c738..72b328c730e 100644 --- a/src/H5Gdeprec.c +++ b/src/H5Gdeprec.c @@ -719,8 +719,9 @@ H5Gset_comment(hid_t loc_id, const char *name, const char *comment) * * Note: Deprecated in favor of H5Oget_comment/H5Oget_comment_by_name * - * Return: Success: Number of characters in the comment. The value - * returned may be larger than the BUFSIZE argument. + * Return: Success: Number of characters in the comment, excluding the + * NULL terminator character. The value returned may be + * larger than the BUFSIZE argument. * * Failure: Negative * diff --git a/src/H5O.c b/src/H5O.c index 26340aa567a..39887b51a29 100644 --- a/src/H5O.c +++ b/src/H5O.c @@ -359,7 +359,7 @@ H5Oopen_by_token(hid_t loc_id, H5O_token_t token) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "can't open H5O_TOKEN_UNDEF"); /* Get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); /* Get object type */ @@ -436,7 +436,7 @@ H5O__copy_api_common(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, c HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set object access arguments"); /* get the object */ - if (NULL == (*vol_obj_ptr = (H5VL_object_t *)H5I_object(dst_loc_id))) + if (NULL == (*vol_obj_ptr = H5VL_vol_object(dst_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); loc_params2.type = H5VL_OBJECT_BY_SELF; loc_params2.obj_type = H5I_get_type(dst_loc_id); diff --git a/src/H5Odeprec.c b/src/H5Odeprec.c index f74ec542d6f..37a3996c1e6 100644 --- a/src/H5Odeprec.c +++ b/src/H5Odeprec.c @@ -347,7 +347,7 @@ H5Oopen_by_addr(hid_t loc_id, haddr_t addr) FUNC_ENTER_API(H5I_INVALID_HID) /* Get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); /* Get object type */ diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c index d64c4e82439..92853c63058 100644 --- a/src/H5Tcommit.c +++ b/src/H5Tcommit.c @@ -349,7 +349,7 @@ H5Tcommit_anon(hid_t loc_id, hid_t type_id, hid_t tcpl_id, hid_t tapl_id) loc_params.obj_type = H5I_get_type(loc_id); /* Get the file object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier"); /* Commit the datatype */ diff --git a/src/H5Tdeprec.c b/src/H5Tdeprec.c index cc998346cb4..3483597346e 100644 --- a/src/H5Tdeprec.c +++ b/src/H5Tdeprec.c @@ -116,7 +116,7 @@ H5Tcommit1(hid_t loc_id, const char *name, hid_t type_id) loc_params.obj_type = H5I_get_type(loc_id); /* get the object from the loc_id */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Commit the datatype */ @@ -167,7 +167,7 @@ H5Topen1(hid_t loc_id, const char *name) loc_params.obj_type = H5I_get_type(loc_id); /* Get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); /* Open the datatype */ diff --git a/src/H5VLnative.c b/src/H5VLnative.c index ceee7f16c43..6f6b2d0768d 100644 --- a/src/H5VLnative.c +++ b/src/H5VLnative.c @@ -393,7 +393,7 @@ H5VLnative_addr_to_token(hid_t loc_id, haddr_t addr, H5O_token_t *token) bool is_native_vol_obj; /* Get the location object */ - if (NULL == (vol_obj_container = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj_container = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Make sure that the VOL object is a native connector object */ @@ -486,7 +486,7 @@ H5VLnative_token_to_addr(hid_t loc_id, H5O_token_t token, haddr_t *addr) bool is_native_vol_obj; /* Get the location object */ - if (NULL == (vol_obj_container = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj_container = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Make sure that the VOL object is a native connector object */ From 6fbe13a66d020fb951a3de11b800e32be0d4510b Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Tue, 27 Aug 2024 18:53:10 -0700 Subject: [PATCH 15/17] Add subfiling to CI more places where we test parallel (#4778) * CMake: gcc,, AOCC * Autotools: AOCC (gcc was added in a previous commit) NVHPC generates a lot of tools errors for some reason --- .github/workflows/aocc-auto.yml | 1 + .github/workflows/aocc-cmake.yml | 1 + .github/workflows/main-cmake-par.yml | 1 + 3 files changed, 3 insertions(+) diff --git a/.github/workflows/aocc-auto.yml b/.github/workflows/aocc-auto.yml index b556737e3b1..8b33173db53 100644 --- a/.github/workflows/aocc-auto.yml +++ b/.github/workflows/aocc-auto.yml @@ -74,6 +74,7 @@ jobs: --enable-build-mode=${{ inputs.build_mode }} \ --enable-shared \ --enable-parallel \ + --enable-subfiling-vfd \ LDFLAGS="-L/home/runner/work/hdf5/hdf5/aocc-compiler-4.2.0/lib \ -L/home/runner/work/hdf5/hdf5/openmpi-4.1.6-install/lib" diff --git a/.github/workflows/aocc-cmake.yml b/.github/workflows/aocc-cmake.yml index 92ac0d25fe8..d4cff890e63 100644 --- a/.github/workflows/aocc-cmake.yml +++ b/.github/workflows/aocc-cmake.yml @@ -71,6 +71,7 @@ jobs: -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \ -DHDF5_ENABLE_PARALLEL:BOOL=ON \ + -DHDF5_ENABLE_SUBFILING_VFD:BOOL=ON \ -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT=OFF \ -DZLIB_USE_LOCALCONTENT=OFF \ diff --git a/.github/workflows/main-cmake-par.yml b/.github/workflows/main-cmake-par.yml index 55d79ecb776..c00caa713c9 100644 --- a/.github/workflows/main-cmake-par.yml +++ b/.github/workflows/main-cmake-par.yml @@ -47,6 +47,7 @@ jobs: -DBUILD_SHARED_LIBS=ON \ -DHDF5_ENABLE_ALL_WARNINGS=ON \ -DHDF5_ENABLE_PARALLEL:BOOL=ON \ + -DHDF5_ENABLE_SUBFILING_VFD:BOOL=ON \ -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ -DHDF5_BUILD_FORTRAN=ON \ -DHDF5_BUILD_JAVA=OFF \ From d2be61826d7685ccd0f562ed716269544cca27ac Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:06:33 -0500 Subject: [PATCH 16/17] Convert Collective Calls html file to doxygen (#4779) --- doxygen/dox/CollectiveCalls.dox | 1265 +++++++++++++++++++++++++++++++ doxygen/dox/IntroParHDF5.dox | 2 + 2 files changed, 1267 insertions(+) create mode 100644 doxygen/dox/CollectiveCalls.dox diff --git a/doxygen/dox/CollectiveCalls.dox b/doxygen/dox/CollectiveCalls.dox new file mode 100644 index 00000000000..9f26896262b --- /dev/null +++ b/doxygen/dox/CollectiveCalls.dox @@ -0,0 +1,1265 @@ +/** \page collective_calls Collective Calling Requirements in Parallel HDF5 Applications + * + * \section sec_collective_calls_intro Introduction + * This document addresses two topics of concern + in a parallel computing environment: +
  • HDF5 functions that must be called collectively and when +
  • Properties that must be used in a coordinated manner +
+ + The term @ref options in the "Additional notes" + column indicates that the first item in the "Function" + column of the same row is a macro that is selectively mapped to one + of the two immediately-following functions. + For example, #H5Acreate is a macro that can be mapped to + either #H5Acreate1 or #H5Acreate2. + This mapping is configurable and is explained in + \ref api-compat-macros. + The macro structure was introduced at HDF5 Release 1.8.0. + * + * \section sec_collective_calls_func Always collective + * The following functions must always be called collectively. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ API + + Function + + All processes: +
+ same datatype & dataspace +
+ All processes: +
+ same access properties +
+ All processes: +
+ same creation properties +
+ Available in releases since + + Additional notes +
+ H5A + + #H5Acreate +
+ #H5Acreate1 +
+ #H5Acreate2 +
+ X + + X + + X + + 1.8.x + + @ref options +
+ The function #H5Acreate was renamed to + #H5Acreate1 at Release 1.8.0. +
+ + #H5Acreate_by_name + + X + + X + + X + + 1.8.x + +
+ + #H5Adelete + + + + + +
+ + #H5Adelete_by_idx + + + + + 1.8.x + +
+ + #H5Adelete_by_name + + + + + 1.8.x + +
+ + #H5Arename + + + + + 1.6.x + +
+ + #H5Arename_by_name + + + + + 1.8.x + +
+ + #H5Awrite + + + + + + Because raw data for an attribute is cached locally, + all processes must participate in order to guarantee that + future #H5Aread calls return correct results + on all processes. +
+
+ H5D + + #H5Dcreate +
+ #H5Dcreate1 +
+ #H5Dcreate2 +
+ X + + X + + X + + 1.8.x + + @ref options +
+ The function #H5Dcreate was renamed to + #H5Dcreate1 at Release 1.8.0. +
+ + #H5Dcreate_anon + + X + + X + + X + + 1.8.x + +
+ + #H5Dextend + + + + + + All processes must participate only if the number of chunks + in the dataset actually changes. +
+ All processes must use the same dataspace dimensions. +
+ + #H5Dset_extent + + + + + 1.6.x + + All processes must participate only if the number of chunks + in the dataset actually changes. +
+ All processes must use the same dataspace dimensions. +
+
+ H5F + + #H5Fclose + + + + + + All processes must participate only if this is the + last reference to the file identifier. +
+ + #H5Fcreate + + + X + + X + + +
+ + #H5Fflush + + + + + +
+ + #H5Fmount + + + + + +
+ + #H5Fopen + + + X + + + +
+ + #H5Freopen + + + + + +
+ + #H5Funmount + + + + + +
+
+ H5G + + #H5Gcreate +
+ #H5Gcreate1 +
+ #H5Gcreate2 +
+ + X + + X + + 1.8.x + + @ref options +
+ The function #H5Gcreate was renamed to + #H5Gcreate1 at Release 1.8.0. +
+ + #H5Gcreate_anon + + + X + + X + + 1.8.x + +
+ + #H5Glink + + + + + +
+ + #H5Glink2 + + + + + 1.6.x + +
+ + #H5Gmove + + + + + +
+ + #H5Gmove2 + + + + + 1.6.x + +
+ + #H5Gset_comment + + + + + +
+ + #H5Gunlink + + + + + +
+
+ H5I + + #H5Idec_ref + + + + + 1.6.x + + This function may be called independently if the object identifier + does not refer to an object that was collectively opened. +
+ + #H5Iinc_ref + + + + + 1.6.x + + This function may be called independently if the object identifier + does not refer to an object that was collectively opened. +
+
+ H5L + + #H5Lcopy + + + + + 1.8.x + +
+ + #H5Lcreate_external + + + + X + + 1.8.x + +
+ + #H5Lcreate_hard + + + + X + + 1.8.x + +
+ + #H5Lcreate_soft + + + + X + + 1.8.x + +
+ + #H5Lcreate_ud + + + + X + + 1.8.x + +
+ + #H5Ldelete + + + + + 1.8.x + +
+ + #H5Ldelete_by_idx + + + + + 1.8.x + +
+ + #H5Lmove + + + + + 1.8.x + +
+
+ H5O + + #H5Ocopy + + + + + 1.8.x + +
+ + #H5Odecr_refcount + + + + + 1.8.x + +
+ + #H5Oincr_refcount + + + + + 1.8.x + +
+ + #H5Olink + + + + + 1.8.x + +
+ + #H5Oset_comment + + + + + 1.8.x + +
+ + #H5Oset_comment_by_name + + + + + 1.8.x + +
+
+ H5R + + #H5Rcreate + + + + + +
+
+ H5T + + #H5Tcommit +
+ #H5Tcommit1 +
+ #H5Tcommit2 +
+ + X + + X + + 1.8.x + + @ref options +
+ The function #H5Tcommit was renamed to + #H5Tcommit1 at Release 1.8.0. +
+ + #H5Tcommit_anon + + + X + + X + + 1.8.x + +
+ * + * \section sec_collective_calls_nomod Collective, unless target object will not be modified + * The following functions must normally be called collectively. + * If, however, the target object will not be modified, + * they may be called independently. + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ API + + Function + + All processes: +
+ same datatype & dataspace +
+ All processes: +
+ same access properties +
+ All processes: +
+ same creation properties +
+ Available in releases since + + Additional notes +
+ H5A + + #H5Aclose + + + + + + All processes must participate only if + all file identifiers for a file have been closed and + this is the last outstanding object identifier. +
+ + #H5Aopen + + + X + + + 1.8.x + +
+ + #H5Aopen_by_idx + + + X + + + 1.8.x + +
+ + #H5Aopen_by_name + + + X + + + 1.8.x + +
+ + #H5Aopen_idx + + + X + + + +
+ + #H5Aopen_name + + + X + + + +
+
+ H5D + + #H5Dclose + + + + + + All processes must participate only if + all file identifiers for a file have been closed and + this is the last outstanding object identifier. +
+ + #H5Dopen +
+ #H5Dopen1 +
+ #H5Dopen2 +
+ + X + + + 1.8.x + + @ref options +
+ The function #H5Dopen was renamed to + #H5Dopen1 at Release 1.8.0. +
+
+ H5G + + #H5Gclose + + + + + + All processes must participate only if + all file identifiers for a file have been closed and + this is the last outstanding object identifier. +
+ + #H5Gopen +
+ #H5Gopen1 +
+ #H5Gopen2 +
+ + X + + + 1.8.x + + @ref options +
+ The function #H5Gopen was renamed to + #H5Gopen1 at Release 1.8.0. +
+
+ H5I + + #H5Iget_file_id + + + + + 1.8.x + +
+
+ H5O + + #H5Oclose + + + + + 1.8.x + + All processes must participate only if + all file identifiers for a file have been closed and + this is the last outstanding object identifier. +
+ + #H5Oopen + + + X + + + 1.8.x + +
+ + #H5Oopen_by_addr + + + X + + + 1.8.x + +
+ + #H5Oopen_by_idx + + + X + + + 1.8.x + +
+
+ H5R + + #H5Rdereference + + + + + +
+
+ H5T + + #H5Tclose + + + + + + All processes must participate only if + the datatype is for a committed datatype, + all the file identifiers for the file have been closed, and + this is the last outstanding object identifier. +
+ + #H5Topen +
+ #H5Topen1 +
+ #H5Topen2 +
+ + X + + + 1.8.x + + @ref options +
+ The function #H5Topen was renamed to + #H5Topen1 at Release 1.8.0. +
+ * + * \section sec_collective_calls_props Properties + * The following properties must be set to the same values + * for an object or link in all cases where the object or link is accessed + * in a parallel program. + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Function + + Available in releases since +
+ Dataset creation properties +
+ #H5Pmodify_filter + + 1.8.x +
+ #H5Premove_filter + + 1.8.x +
+ #H5Pset_alloc_time + +
+ #H5Pset_chunk + +
+ #H5Pset_external + +
+ #H5Pset_fill_time + +
+ #H5Pset_fill_value + +
+ #H5Pset_filter + +
+ #H5Pset_fletcher32 + + 1.8.x +
+ #H5Pset_layout + +
+ #H5Pset_nbit + + 1.8.x +
+ #H5Pset_shuffle + +
+ #H5Pset_szip + +
+
+ Dataset transfer properties + +
+ #H5Pset_btree_ratios + +
+ #H5Pset_buffer + +
+ #H5Pset_dxpl_mpio + +
+ #H5Pset_preserve + +
+
+ File access properties + +
+ #H5Pset_alignment + +
+ #H5Pset_cache + +
+ #H5Pset_fapl_mpio + +
+ #H5Pset_fclose_degree + +
+ #H5Pset_gc_references + +
+ #H5Fset_latest_format + + 1.8.x +
+ #H5Pset_libver_bounds + + 1.8.x +
+ #H5Pset_mdc_config + +
+ #H5Pset_meta_block_size + +
+ #H5Pset_small_data_block_size + +
+ #H5Pset_sieve_buf_size + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Function + + Available in releases since +
+ File creation properties + +
+ #H5Pset_istore_k + +
+ #H5Pset_shared_mesg_index + + 1.8.x +
+ #H5Pset_shared_mesg_nindexes + + 1.8.x +
+ #H5Pset_shared_mesg_phase_change + + 1.8.x +
+ #H5Pset_sizes + +
+ #H5Pset_sym_k + +
+ #H5Pset_userblock + +
+
+ Group creation properties + +
+ #H5Pset_est_link_info + + 1.8.x +
+ #H5Pset_link_creation_order + + 1.8.x +
+ #H5Pset_link_phase_change + + 1.8.x +
+ #H5Pset_local_heap_size_hint + + 1.8.x +
+
+ Link creation properties + +
+ #H5Pset_char_encoding + + 1.8.x +
+ #H5Pset_create_intermediate_group + + 1.8.x +
+
+ Object creation properties + +
+ #H5Pset_attr_phase_change + + 1.8.x +
+ #H5Pset_attr_creation_order + + 1.8.x +
+ #H5Pset_obj_track_times + + 1.8.x +
+
+ Object copy properties + +
+ #H5Pset_copy_object + + 1.8.x +
+
+ + */ diff --git a/doxygen/dox/IntroParHDF5.dox b/doxygen/dox/IntroParHDF5.dox index b8785d43c9d..58a6e7958b0 100644 --- a/doxygen/dox/IntroParHDF5.dox +++ b/doxygen/dox/IntroParHDF5.dox @@ -96,6 +96,8 @@ Once a file is opened by the processes of a communicator: \li Multiple processes write to the same dataset. \li Each process writes to an individual dataset. +@see \ref collective_calls + Please refer to the Supported Configuration Features Summary in the release notes for the current release of HDF5 for an up-to-date list of the platforms that we support Parallel HDF5 on. From 0db6cc4d275c73f8c1e02bc39e73d236060c8646 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 29 Aug 2024 11:39:36 -0400 Subject: [PATCH 17/17] Replace non-VOL calls with VOL calls - part 5 This PR switches H5I_object() and H5I_object_verify() to H5VL_vol_object() and H5VL_vol_object_verify(), respectively, in the H5M APIs and H5Gdeprec (was left out by mistake). This completes the fixes of issue GH-4730. --- src/H5Gdeprec.c | 26 +++++++++++++------------- src/H5M.c | 24 ++++++++++++------------ src/H5Mpublic.h | 22 ++++++++++++++++++++-- 3 files changed, 45 insertions(+), 27 deletions(-) diff --git a/src/H5Gdeprec.c b/src/H5Gdeprec.c index 72b328c730e..6871283ed03 100644 --- a/src/H5Gdeprec.c +++ b/src/H5Gdeprec.c @@ -204,7 +204,7 @@ H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint) loc_params.obj_type = H5I_get_type(loc_id); /* get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); /* Create the group */ @@ -262,7 +262,7 @@ H5Gopen1(hid_t loc_id, const char *name) loc_params.obj_type = H5I_get_type(loc_id); /* get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); /* Open the group */ @@ -320,7 +320,7 @@ H5Glink(hid_t cur_loc_id, H5G_link_t type, const char *cur_name, const char *new new_loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT; /* Get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(cur_loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(cur_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Construct a temporary VOL object */ @@ -351,7 +351,7 @@ H5Glink(hid_t cur_loc_id, H5G_link_t type, const char *cur_name, const char *new loc_params.obj_type = H5I_get_type(cur_loc_id); /* get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(cur_loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(cur_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Set up VOL callback arguments */ @@ -409,9 +409,9 @@ H5Glink2(hid_t cur_loc_id, const char *cur_name, H5G_link_t type, hid_t new_loc_ new_loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT; /* Get the location objects */ - if (NULL == (vol_obj1 = (H5VL_object_t *)H5I_object(cur_loc_id))) + if (NULL == (vol_obj1 = H5VL_vol_object(cur_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); - if (NULL == (vol_obj2 = (H5VL_object_t *)H5I_object(new_loc_id))) + if (NULL == (vol_obj2 = H5VL_vol_object(new_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Set up VOL callback arguments */ @@ -443,7 +443,7 @@ H5Glink2(hid_t cur_loc_id, const char *cur_name, H5G_link_t type, hid_t new_loc_ loc_params.obj_type = H5I_get_type(new_loc_id); /* get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(new_loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(new_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Set up VOL callback arguments */ @@ -493,7 +493,7 @@ H5Gmove(hid_t src_loc_id, const char *src_name, const char *dst_name) loc_params2.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT; /* get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(src_loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(src_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Move the link */ @@ -541,11 +541,11 @@ H5Gmove2(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, const char *d if (H5L_SAME_LOC != src_loc_id) /* get the location object */ - if (NULL == (vol_obj1 = (H5VL_object_t *)H5I_object(src_loc_id))) + if (NULL == (vol_obj1 = H5VL_vol_object(src_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (H5L_SAME_LOC != dst_loc_id) /* get the location object */ - if (NULL == (vol_obj2 = (H5VL_object_t *)H5I_object(dst_loc_id))) + if (NULL == (vol_obj2 = H5VL_vol_object(dst_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Move the link */ @@ -588,7 +588,7 @@ H5Gunlink(hid_t loc_id, const char *name) loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT; /* Get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Set up VOL callback arguments */ @@ -635,7 +635,7 @@ H5Gget_linkval(hid_t loc_id, const char *name, size_t size, char *buf /*out*/) loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT; /* Get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Set up VOL callback arguments */ @@ -1167,7 +1167,7 @@ H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char *name /*out*/, size_t size loc_params.obj_type = H5I_get_type(loc_id); /* Get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, (-1), "invalid location identifier"); /* Set up VOL callback arguments */ diff --git a/src/H5M.c b/src/H5M.c index b196f0930b8..99984ea4fb1 100644 --- a/src/H5M.c +++ b/src/H5M.c @@ -397,7 +397,7 @@ H5Mcreate_anon(hid_t loc_id, hid_t key_type_id, hid_t val_type_id, hid_t mcpl_id HGOTO_ERROR(H5E_MAP, H5E_CANTSET, H5I_INVALID_HID, "can't set access property list info"); /* get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); /* Set location parameters */ @@ -693,7 +693,7 @@ H5Mget_key_type(hid_t map_id) FUNC_ENTER_API(H5I_INVALID_HID) /* Check args */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier"); /* Set up VOL callback arguments */ @@ -737,7 +737,7 @@ H5Mget_val_type(hid_t map_id) FUNC_ENTER_API(H5I_INVALID_HID) /* Check args */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier"); /* Set up VOL callback arguments */ @@ -781,7 +781,7 @@ H5Mget_create_plist(hid_t map_id) FUNC_ENTER_API(H5I_INVALID_HID) /* Check args */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier"); /* Set up VOL callback arguments */ @@ -828,7 +828,7 @@ H5Mget_access_plist(hid_t map_id) FUNC_ENTER_API(H5I_INVALID_HID) /* Check args */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier"); /* Set up VOL callback arguments */ @@ -871,7 +871,7 @@ H5Mget_count(hid_t map_id, hsize_t *count /*out*/, hid_t dxpl_id) FUNC_ENTER_API(H5I_INVALID_HID) /* Check args */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier"); /* Get the default dataset transfer property list if the user didn't provide one */ @@ -927,7 +927,7 @@ H5M__put_api_common(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid value memory datatype ID"); /* Get map pointer */ - if (NULL == (*vol_obj_ptr = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (*vol_obj_ptr = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID"); /* Get the default dataset transfer property list if the user didn't provide one */ @@ -1056,7 +1056,7 @@ H5M__get_api_common(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid value memory datatype ID"); /* Get map pointer */ - if (NULL == (*vol_obj_ptr = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (*vol_obj_ptr = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID"); /* Get the default dataset transfer property list if the user didn't provide one */ @@ -1187,7 +1187,7 @@ H5Mexists(hid_t map_id, hid_t key_mem_type_id, const void *key, hbool_t *exists, HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid key memory datatype ID"); /* Get map pointer */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID"); /* Get the default dataset transfer property list if the user didn't provide one */ @@ -1263,7 +1263,7 @@ H5Miterate(hid_t map_id, hsize_t *idx, hid_t key_mem_type_id, H5M_iterate_t op, HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no operator specified"); /* Get map pointer */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID"); /* Get the default dataset transfer property list if the user didn't provide one */ @@ -1348,7 +1348,7 @@ H5Miterate_by_name(hid_t loc_id, const char *map_name, hsize_t *idx, hid_t key_m HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no operator specified"); /* Get the location object */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id))) + if (NULL == (vol_obj = H5VL_vol_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the default dataset transfer property list if the user didn't provide one */ @@ -1412,7 +1412,7 @@ H5Mdelete(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t dxpl_id) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid key memory datatype ID"); /* Get map pointer */ - if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP))) + if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID"); /* Get the default dataset transfer property list if the user didn't provide one */ diff --git a/src/H5Mpublic.h b/src/H5Mpublic.h index 44c78fe064f..7676d372b16 100644 --- a/src/H5Mpublic.h +++ b/src/H5Mpublic.h @@ -245,9 +245,27 @@ H5_DLL hid_t H5Mcreate_async(hid_t loc_id, const char *name, hid_t key_type_id, /** * \ingroup H5M * - * \brief + * \brief Creates a map object without linking it into a file * - * \details + * \fgdta_loc_id + * \type_id{key_type_id} + * \type_id{val_type_id} + * \mcpl_id + * \mapl_id + * \return \hid_t{map object} + * The resulting ID should be linked into the file with H5Olink or it + * will be deleted when closed. + * + * \details H5Mcreate_anon() creates a new map object for storing key-value + * pairs. The in-file datatype for keys is defined by \p key_type_id + * and the in-file datatype for values is defined by \p val_type_id. \p + * loc_id specifies the file to create the map object, but no link to + * the object is created. Other options can be specified through the + * property lists \p mcpl_id and \p mapl_id. + * + * The new map should be linked into the group hierarchy before being + * closed or it will be deleted. The dataset should be closed when the + * caller is no longer interested in it. * * \since 1.12.0 *