summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeInstallation.cmake2
-rw-r--r--CMakePresets.json2
-rw-r--r--bin/h5cc.in22
-rw-r--r--config/cmake/HDFCXXCompilerFlags.cmake38
-rw-r--r--config/cmake/HDFCompilerFlags.cmake90
-rw-r--r--config/cmake/HDFFortranCompilerFlags.cmake20
-rw-r--r--config/gnu-warnings/developer-general8
-rw-r--r--config/intel-cxxflags12
-rw-r--r--config/intel-fflags2
-rw-r--r--config/intel-flags12
-rw-r--r--config/intel-warnings/classic/15 (renamed from config/intel-warnings/15)0
-rw-r--r--config/intel-warnings/classic/18 (renamed from config/intel-warnings/18)0
-rw-r--r--config/intel-warnings/classic/developer-general3
-rw-r--r--config/intel-warnings/classic/general (renamed from config/intel-warnings/general)0
-rw-r--r--config/intel-warnings/classic/ifort-general (renamed from config/intel-warnings/ifort-general)0
-rw-r--r--config/intel-warnings/classic/win-developer-general (renamed from config/intel-warnings/win-developer-general)0
-rw-r--r--config/intel-warnings/classic/win-general (renamed from config/intel-warnings/win-general)0
-rw-r--r--config/intel-warnings/classic/win-ifort-general (renamed from config/intel-warnings/win-ifort-general)0
-rw-r--r--config/intel-warnings/developer-general11
-rw-r--r--config/intel-warnings/oneapi/developer-general2
-rw-r--r--config/intel-warnings/oneapi/general1
-rw-r--r--config/intel-warnings/oneapi/ifort-general1
-rw-r--r--config/intel-warnings/oneapi/win-developer-general2
-rw-r--r--config/intel-warnings/oneapi/win-general1
-rw-r--r--config/intel-warnings/oneapi/win-ifort-general1
-rw-r--r--doxygen/examples/tables/propertyLists.dox4
-rw-r--r--fortran/src/CMakeLists.txt2
-rw-r--r--fortran/src/h5fc.in22
-rw-r--r--fortran/test/tH5D.F908
-rw-r--r--fortran/test/tH5E_F03.F908
-rw-r--r--fortran/test/tH5F.F9018
-rw-r--r--fortran/test/tH5G.F906
-rw-r--r--fortran/test/tH5O_F03.F9017
-rw-r--r--fortran/test/tH5P_F03.F902
-rw-r--r--fortran/test/tH5Sselect.F903
-rw-r--r--fortran/test/tH5T.F902
-rw-r--r--fortran/test/tH5T_F03.F902
-rw-r--r--fortran/test/tH5Z.F908
-rw-r--r--fortran/test/vol_connector.F901
-rw-r--r--fortran/testpar/async.F904
-rw-r--r--hl/fortran/src/H5TBfc.c4
-rw-r--r--release_docs/RELEASE.txt19
-rw-r--r--src/H5CX.c101
-rw-r--r--src/H5CXprivate.h2
-rw-r--r--src/H5Dio.c76
-rw-r--r--src/H5Dprivate.h19
-rw-r--r--src/H5FDint.c155
-rw-r--r--src/H5M.c21
-rw-r--r--src/H5Pdxpl.c46
-rw-r--r--src/H5Ppublic.h262
-rw-r--r--test/CMakePassthroughVOLTests.cmake6
-rw-r--r--test/cmpd_dset.c6
-rw-r--r--test/links.c56
-rw-r--r--test/select_io_dset.c597
-rw-r--r--testpar/t_filters_parallel.c843
-rw-r--r--testpar/t_filters_parallel.h2
-rw-r--r--testpar/t_select_io_dset.c641
-rw-r--r--tools/lib/h5diff.c3
-rw-r--r--tools/src/h5diff/ph5diff_main.c8
-rw-r--r--tools/test/h5copy/testh5copy.sh.in2
-rw-r--r--tools/test/h5diff/h5diff_plugin.sh.in2
-rw-r--r--tools/test/h5diff/testh5diff.sh.in2
-rw-r--r--tools/test/h5dump/h5dump_plugin.sh.in2
-rw-r--r--tools/test/h5dump/testh5dump.sh.in2
-rw-r--r--tools/test/h5dump/testh5dumppbits.sh.in4
-rw-r--r--tools/test/h5dump/testh5dumpvds.sh.in4
-rw-r--r--tools/test/h5dump/testh5dumpxml.sh.in2
-rw-r--r--tools/test/h5format_convert/CMakeTests.cmake8
-rw-r--r--tools/test/h5format_convert/expected/h5fc_ext1_f.ddl2
-rw-r--r--tools/test/h5format_convert/expected/h5fc_ext1_i.ddl2
-rw-r--r--tools/test/h5format_convert/expected/h5fc_ext1_s.ddl2
-rw-r--r--tools/test/h5format_convert/expected/h5fc_ext2_if.ddl2
-rw-r--r--tools/test/h5format_convert/expected/h5fc_ext2_is.ddl2
-rw-r--r--tools/test/h5format_convert/expected/h5fc_ext2_sf.ddl2
-rw-r--r--tools/test/h5format_convert/expected/h5fc_ext3_isf.ddl2
-rw-r--r--tools/test/h5format_convert/expected/old_h5fc_ext1_f.ddl2
-rw-r--r--tools/test/h5format_convert/expected/old_h5fc_ext1_i.ddl2
-rw-r--r--tools/test/h5format_convert/expected/old_h5fc_ext1_s.ddl2
-rw-r--r--tools/test/h5format_convert/expected/old_h5fc_ext2_if.ddl2
-rw-r--r--tools/test/h5format_convert/expected/old_h5fc_ext2_is.ddl2
-rw-r--r--tools/test/h5format_convert/expected/old_h5fc_ext2_sf.ddl2
-rw-r--r--tools/test/h5format_convert/expected/old_h5fc_ext3_isf.ddl2
-rw-r--r--tools/test/h5format_convert/testh5fc.sh.in11
-rw-r--r--tools/test/h5import/h5importtestutil.sh.in2
-rw-r--r--tools/test/h5jam/testh5jam.sh.in2
-rw-r--r--tools/test/h5ls/h5ls_plugin.sh.in2
-rw-r--r--tools/test/h5ls/testh5ls.sh.in2
-rw-r--r--tools/test/h5ls/testh5lsvds.sh.in4
-rw-r--r--tools/test/h5repack/h5repack.sh.in2
-rw-r--r--tools/test/h5repack/h5repack_plugin.sh.in2
-rw-r--r--tools/test/h5stat/testh5stat.sh.in2
-rw-r--r--tools/test/misc/testh5clear.sh.in2
-rw-r--r--tools/test/misc/testh5mkgrp.sh.in2
-rw-r--r--tools/test/misc/testh5repart.sh.in2
-rwxr-xr-xutils/subfiling_vfd/h5fuse.sh.in10
-rw-r--r--utils/tools/test/h5dwalk/copy_demo_files.sh.in2
-rw-r--r--utils/tools/test/h5dwalk/testh5dwalk.sh.in2
97 files changed, 2106 insertions, 1203 deletions
diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake
index d42142a..bb24476 100644
--- a/CMakeInstallation.cmake
+++ b/CMakeInstallation.cmake
@@ -151,9 +151,9 @@ if (HDF5_PACK_EXAMPLES)
COMPONENT hdfdocuments
)
- option (EXAMPLES_USE_RELEASE_NAME "Use the released examples artifact name" OFF)
option (EXAMPLES_DOWNLOAD "Download to use released examples files" OFF)
if (EXAMPLES_DOWNLOAD)
+ option (EXAMPLES_USE_RELEASE_NAME "Use the released examples artifact name" OFF)
if (EXAMPLES_USE_RELEASE_NAME)
set (EXAMPLES_NAME ${EXAMPLES_TGZ_ORIGNAME})
else ()
diff --git a/CMakePresets.json b/CMakePresets.json
index 8e4c2c9..5907514 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -91,7 +91,7 @@
"HDF5_EXAMPLES_COMPRESSED": {"type": "STRING", "value": "hdf5-examples-master.tar.gz"},
"HDF5_EXAMPLES_COMPRESSED_DIR": {"type": "PATH", "value": "${sourceParentDir}/temp"},
"EXAMPLES_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/HDFGroup/hdf5-examples/releases/download/snapshot"},
- "EXAMPLES_TGZ_ORIGNAME": {"type": "STRING", "value": "snapshot.tar.gz"}
+ "EXAMPLES_TGZ_ORIGNAME": {"type": "STRING", "value": "hdf5-examples-2.0.4.tar.gz"}
}
},
{
diff --git a/bin/h5cc.in b/bin/h5cc.in
index 4eef3c9..e3dc988 100644
--- a/bin/h5cc.in
+++ b/bin/h5cc.in
@@ -116,15 +116,15 @@ usage() {
# A wonderfully informative "usage" message.
echo "usage: $prog_name [OPTIONS] <compile line>"
echo " OPTIONS:"
- echo " -help This help message."
- echo " -echo Show all the shell commands executed"
- echo " -prefix=DIR Prefix directory to find HDF5 lib/ and include/"
- echo " subdirectories [default: $prefix]"
- echo " -show Show the commands without executing them"
- echo " -showconfig Show the HDF5 library configuration summary"
- echo " -shlib Compile with shared HDF5 libraries [default for hdf5 built"
+ echo " -help | --help | -h This help message."
+ echo " -echo Show all the shell commands executed"
+ echo " -prefix=DIR Prefix directory to find HDF5 lib/ and include/"
+ echo " subdirectories [default: $prefix]"
+ echo " -show Show the commands without executing them"
+ echo " -showconfig Show the HDF5 library configuration summary"
+ echo " -shlib Compile with shared HDF5 libraries [default for hdf5 built"
echo " without static libraries]"
- echo " -noshlib Compile with static HDF5 libraries [default for hdf5 built"
+ echo " -noshlib Compile with static HDF5 libraries [default for hdf5 built"
echo " with static libraries]"
echo " "
echo " <compile line> - the normal compile line options for your compiler."
@@ -256,6 +256,12 @@ for arg in $@ ; do
-help)
usage
;;
+ --help)
+ usage
+ ;;
+ -h)
+ usage
+ ;;
*\"*)
qarg="'"$arg"'"
allargs="$allargs $qarg"
diff --git a/config/cmake/HDFCXXCompilerFlags.cmake b/config/cmake/HDFCXXCompilerFlags.cmake
index 13f712d..dd120c9 100644
--- a/config/cmake/HDFCXXCompilerFlags.cmake
+++ b/config/cmake/HDFCXXCompilerFlags.cmake
@@ -21,7 +21,7 @@ message (VERBOSE "Warnings Configuration: CXX default: ${CMAKE_CXX_FLAGS}")
#-----------------------------------------------------------------------------
# Compiler specific flags : Shouldn't there be compiler tests for these
#-----------------------------------------------------------------------------
-if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
+if (WIN32 AND (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM"))
set (_INTEL_WINDOWS 1)
endif ()
@@ -130,16 +130,16 @@ else ()
# warnings that are emitted. If you need it, add it at configure time.
if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
if (_INTEL_WINDOWS)
- ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/win-general")
+ ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-general")
else ()
- ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/general")
+ ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/general")
endif()
if (NOT _INTEL_WINDOWS)
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
- ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/15")
+ ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/15")
endif()
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0)
- ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/18")
+ ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/18")
endif()
endif()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
@@ -149,7 +149,13 @@ else ()
ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-general")
ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-error-general")
endif ()
- elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang")
+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM")
+ if (_INTEL_WINDOWS)
+ ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-general")
+ else ()
+ ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/general")
+ endif()
+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang")
ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/general")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "PGI")
list (APPEND HDF5_CMAKE_CXX_FLAGS "-Minform=inform")
@@ -164,18 +170,28 @@ endif ()
if (HDF5_ENABLE_DEV_WARNINGS)
message (STATUS "....HDF5 developer group warnings are enabled")
if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
- ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/developer-general")
+ if (_INTEL_WINDOWS)
+ ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-developer-general")
+ else ()
+ ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/developer-general")
+ endif()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# Use the C warnings as CXX warnings are the same
ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-general")
- elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang")
+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM")
+ if (_INTEL_WINDOWS)
+ ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-developer-general")
+ else ()
+ ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/developer-general")
+ endif()
+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang")
ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/developer-general")
endif ()
else ()
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# Use the C warnings as CXX warnings are the same
ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-general")
- elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang")
+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang")
ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/no-developer-general")
endif ()
endif ()
@@ -307,6 +323,8 @@ if (HDF5_ENABLE_SYMBOLS MATCHES "YES")
if (CMAKE_CXX_COMPILER_LOADED)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
+ elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" AND NOT _INTEL_WINDOWS)
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
endif ()
@@ -315,6 +333,8 @@ elseif (HDF5_ENABLE_SYMBOLS MATCHES "NO")
if (CMAKE_CXX_COMPILER_LOADED)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-s")
+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" AND NOT _INTEL_WINDOWS)
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-s")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s")
endif ()
diff --git a/config/cmake/HDFCompilerFlags.cmake b/config/cmake/HDFCompilerFlags.cmake
index a6bce98..e7b9337 100644
--- a/config/cmake/HDFCompilerFlags.cmake
+++ b/config/cmake/HDFCompilerFlags.cmake
@@ -9,8 +9,8 @@
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
-set(CMAKE_C_STANDARD 99)
-set(CMAKE_C_STANDARD_REQUIRED TRUE)
+set (CMAKE_C_STANDARD 99)
+set (CMAKE_C_STANDARD_REQUIRED TRUE)
set (CMAKE_C_FLAGS "${CMAKE_C99_STANDARD_COMPILE_OPTION} ${CMAKE_C_FLAGS}")
set (CMAKE_C_FLAGS "${CMAKE_C_SANITIZER_FLAGS} ${CMAKE_C_FLAGS}")
@@ -18,45 +18,45 @@ message (VERBOSE "Warnings Configuration: C default: ${CMAKE_C_FLAGS}")
#-----------------------------------------------------------------------------
# Compiler specific flags : Shouldn't there be compiler tests for these
#-----------------------------------------------------------------------------
-if(WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "Intel")
- set(_INTEL_WINDOWS 1)
-endif()
+if (WIN32 AND (CMAKE_C_COMPILER_ID STREQUAL "Intel" OR CMAKE_C_COMPILER_ID MATCHES "IntelLLVM"))
+ set (_INTEL_WINDOWS 1)
+endif ()
-if(WIN32 AND CMAKE_C_COMPILER_ID MATCHES "[Cc]lang" AND "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
- set(_CLANG_MSVC_WINDOWS 1)
-endif()
+if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "[Cc]lang" AND "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
+ set (_CLANG_MSVC_WINDOWS 1)
+endif ()
# Disable deprecation warnings for standard C functions.
# really only needed for newer versions of VS, but should
# not hurt other versions, and this will work into the
# future
-if(MSVC OR _INTEL_WINDOWS OR _CLANG_MSVC_WINDOWS)
- add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
-endif()
+if (MSVC OR _INTEL_WINDOWS OR _CLANG_MSVC_WINDOWS)
+ add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
+endif ()
-if(MSVC)
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stack:10000000")
-endif()
+if (MSVC)
+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stack:10000000")
+endif ()
# MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it.
-if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105")
-endif()
+if (CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105")
+endif ()
if(_CLANG_MSVC_WINDOWS AND "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -stack:20000000")
endif()
-if(CMAKE_C_COMPILER_ID STREQUAL "NVHPC" )
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Minform=warn")
+if (CMAKE_C_COMPILER_ID STREQUAL "NVHPC" )
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Minform=warn")
if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer")
if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s")
endif ()
else ()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Mbounds -g")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Mbounds -g")
endif ()
-endif()
+endif ()
if (CMAKE_COMPILER_IS_GNUCC)
set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
@@ -146,20 +146,20 @@ else ()
# warnings that are emitted. If you need it, add it at configure time.
if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
if (_INTEL_WINDOWS)
- ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/win-general")
+ ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-general")
else ()
- ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/general")
+ ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/general")
endif()
if (NOT _INTEL_WINDOWS)
- if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0)
- ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/15")
- endif()
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0)
+ ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/15")
+ endif ()
# this is just a failsafe
list (APPEND H5_CFLAGS "-finline-functions")
- if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0)
- ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/18")
- endif()
- endif()
+ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0)
+ ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/18")
+ endif ()
+ endif ()
elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU")
# Add general CFlags for GCC versions 4.8 and above
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8)
@@ -169,7 +169,15 @@ else ()
# gcc automatically inlines based on the optimization level
# this is just a failsafe
list (APPEND H5_CFLAGS "-finline-functions")
- elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
+ elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM")
+ if (_INTEL_WINDOWS)
+ ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-general")
+ else ()
+ # this is just a failsafe
+ list (APPEND H5_CFLAGS "-finline-functions")
+ ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/general")
+ endif ()
+ elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/general")
ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/error-general")
elseif (CMAKE_C_COMPILER_ID STREQUAL "PGI")
@@ -191,13 +199,19 @@ if (HDF5_ENABLE_DEV_WARNINGS)
message (STATUS "....HDF5 developer group warnings are enabled")
if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
if (_INTEL_WINDOWS)
- ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/win-developer-general")
+ ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-developer-general")
else ()
- ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/developer-general")
+ ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/developer-general")
endif ()
elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8)
ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-general")
- elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
+ elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM")
+ if (_INTEL_WINDOWS)
+ ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-developer-general")
+ else ()
+ ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/developer-general")
+ endif ()
+ elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/developer-general")
endif ()
@@ -211,12 +225,16 @@ if (HDF5_ENABLE_DEV_WARNINGS)
list (APPEND H5_CFLAGS "-Winline")
elseif (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS)
list (APPEND H5_CFLAGS "-Winline")
+ elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" AND NOT _INTEL_WINDOWS)
+ list (APPEND H5_CFLAGS "-Winline")
+ elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
+ list (APPEND H5_CFLAGS "-Winline")
endif ()
endif ()
else ()
if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8)
ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-general")
- elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
+ elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/no-developer-general")
endif ()
endif ()
diff --git a/config/cmake/HDFFortranCompilerFlags.cmake b/config/cmake/HDFFortranCompilerFlags.cmake
index f207c70..8ac3f49 100644
--- a/config/cmake/HDFFortranCompilerFlags.cmake
+++ b/config/cmake/HDFFortranCompilerFlags.cmake
@@ -23,6 +23,8 @@ if (HDF5_DISABLE_COMPILER_WARNINGS)
set (HDF5_WARNINGS_BLOCKED 1)
if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /warn:none")
+ elseif (CMAKE_Fortran_COMPILER_ID MATCHES "IntelLLVM")
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /warn:none")
endif ()
endif ()
if (WIN32)
@@ -70,7 +72,11 @@ endif ()
if (NOT MSVC AND NOT MINGW)
# General flags
if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
- ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/ifort-general")
+ if (_INTEL_WINDOWS)
+ ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-ifort-general")
+ else ()
+ ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/ifort-general")
+ endif()
list (APPEND HDF5_CMAKE_Fortran_FLAGS "-free")
elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-general")
@@ -85,6 +91,13 @@ if (NOT MSVC AND NOT MINGW)
else ()
list (APPEND HDF5_CMAKE_Fortran_FLAGS "-std=f2008")
endif ()
+ elseif (CMAKE_Fortran_COMPILER_ID MATCHES "IntelLLVM")
+ if (_INTEL_WINDOWS)
+ ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-ifort-general")
+ else ()
+ ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/ifort-general")
+ endif()
+ list (APPEND HDF5_CMAKE_Fortran_FLAGS "-free")
elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "PGI")
list (APPEND HDF5_CMAKE_Fortran_FLAGS "-Mfreeform" "-Mdclchk" "-Mstandard" "-Mallocatable=03")
endif ()
@@ -135,7 +148,10 @@ if (NOT MSVC AND NOT MINGW)
endif ()
else ()
if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
- ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/win-ifort-general")
+ ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-ifort-general")
+ list (APPEND HDF5_CMAKE_Fortran_FLAGS "/stand:f03" "/free")
+ elseif (CMAKE_Fortran_COMPILER_ID MATCHES "IntelLLVM")
+ ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-ifort-general")
list (APPEND HDF5_CMAKE_Fortran_FLAGS "/stand:f03" "/free")
endif ()
endif ()
diff --git a/config/gnu-warnings/developer-general b/config/gnu-warnings/developer-general
index 79ecd6a..af70172 100644
--- a/config/gnu-warnings/developer-general
+++ b/config/gnu-warnings/developer-general
@@ -7,11 +7,3 @@
-Wswitch-enum
-Wunsafe-loop-optimizations
-Wunused-macros
-# -Winline warnings aren't included here because, for at least
-# GNU compilers, this flag appears to conflict specifically with
-# the -Og optimization level flag added for Debug and Developer
-# builds and will produce warnings about functions not being
-# considered for inlining. The flag will be added to the list
-# of compiler flags separately if developer warnings are enabled
-# and the build type is not Debug or Developer
-#-Winline
diff --git a/config/intel-cxxflags b/config/intel-cxxflags
index 107b087..40a3f0e 100644
--- a/config/intel-cxxflags
+++ b/config/intel-cxxflags
@@ -129,15 +129,15 @@ if test "X-icpc" = "X-$cxx_vendor"; then
# Add various general warning flags in intel-warnings.
# Use the C warnings as CXX warnings are the same
- H5_CXXFLAGS="$H5_CXXFLAGS $(load_intel_arguments general)"
+ H5_CXXFLAGS="$H5_CXXFLAGS $(load_intel_arguments classic/general)"
######################
# Developer warnings #
######################
# Use the C warnings as CXX warnings are the same
- #NO_DEVELOPER_WARNING_CXXFLAGS=$(load_intel_arguments no-developer-general)
- #DEVELOPER_WARNING_CXXFLAGS=$(load_intel_arguments developer-general)
+ #NO_DEVELOPER_WARNING_CXXFLAGS=$(load_intel_arguments classic/no-developer-general)
+ #DEVELOPER_WARNING_CXXFLAGS=$(load_intel_arguments classic/developer-general)
#############################
# Version-specific warnings #
@@ -157,19 +157,19 @@ if test "X-icpc" = "X-$cxx_vendor"; then
# intel >= 15
if test $cxx_vers_major -ge 15; then
# Use the C warnings as CXX warnings are the same
- H5_CXXFLAGS="$H5_CXXFLAGS $(load_intel_arguments 15)"
+ H5_CXXFLAGS="$H5_CXXFLAGS $(load_intel_arguments classic/15)"
fi
# intel >= 18
if test $cxx_vers_major -ge 18; then
# Use the C warnings as CXX warnings are the same
- H5_CXXFLAGS="$H5_CXXFLAGS $(load_intel_arguments 18)"
+ H5_CXXFLAGS="$H5_CXXFLAGS $(load_intel_arguments classic/18)"
fi
# intel <= 19
if test $cxx_vers_major -le 19; then
# Use the C warnings as CXX warnings are the same
- H5_CXXFLAGS="$H5_CXXFLAGS $(load_intel_arguments general-19)"
+ H5_CXXFLAGS="$H5_CXXFLAGS $(load_intel_arguments classic/general-19)"
fi
#################
diff --git a/config/intel-fflags b/config/intel-fflags
index ad1ce7c..b6307c1 100644
--- a/config/intel-fflags
+++ b/config/intel-fflags
@@ -123,7 +123,7 @@ if test "X-ifort" = "X-$f9x_vendor"; then
###########
H5_FCFLAGS="$H5_FCFLAGS -free"
- H5_FCFLAGS="$H5_FCFLAGS $(load_intel_arguments ifort-general)"
+ H5_FCFLAGS="$H5_FCFLAGS $(load_intel_arguments classic/ifort-general)"
#############################
# Version-specific warnings #
diff --git a/config/intel-flags b/config/intel-flags
index fbec7ef..134452c 100644
--- a/config/intel-flags
+++ b/config/intel-flags
@@ -127,14 +127,14 @@ if test "X-icc" = "X-$cc_vendor"; then
###########
# Add various general warning flags in intel-warnings.
- H5_CFLAGS="$H5_CFLAGS $(load_intel_arguments general)"
+ H5_CFLAGS="$H5_CFLAGS $(load_intel_arguments classic/general)"
######################
# Developer warnings #
######################
- #NO_DEVELOPER_WARNING_CFLAGS=$(load_intel_arguments no-developer-general)
- #DEVELOPER_WARNING_CFLAGS=$(load_intel_arguments developer-general)
+ #NO_DEVELOPER_WARNING_CFLAGS=$(load_intel_arguments classic/no-developer-general)
+ #DEVELOPER_WARNING_CFLAGS=$(load_intel_arguments classic/developer-general)
#############################
# Version-specific warnings #
@@ -153,18 +153,18 @@ if test "X-icc" = "X-$cc_vendor"; then
# intel >= 15
if test $cc_vers_major -ge 15; then
- H5_CFLAGS="$H5_CFLAGS $(load_intel_arguments 15)"
+ H5_CFLAGS="$H5_CFLAGS $(load_intel_arguments classic/15)"
fi
# intel >= 18
if test $cc_vers_major -ge 18; then
- H5_CFLAGS="$H5_CFLAGS $(load_intel_arguments 18)"
+ H5_CFLAGS="$H5_CFLAGS $(load_intel_arguments classic/18)"
fi
# intel <= 19
# this file has warnings only available before oneapi versions
if test $cc_vers_major -le 19; then
- H5_CFLAGS="$H5_CFLAGS $(load_intel_arguments general-19)"
+ H5_CFLAGS="$H5_CFLAGS $(load_intel_arguments classic/general-19)"
fi
#################
diff --git a/config/intel-warnings/15 b/config/intel-warnings/classic/15
index 6746f97..6746f97 100644
--- a/config/intel-warnings/15
+++ b/config/intel-warnings/classic/15
diff --git a/config/intel-warnings/18 b/config/intel-warnings/classic/18
index 02bcdea..02bcdea 100644
--- a/config/intel-warnings/18
+++ b/config/intel-warnings/classic/18
diff --git a/config/intel-warnings/classic/developer-general b/config/intel-warnings/classic/developer-general
new file mode 100644
index 0000000..6f4e9e9
--- /dev/null
+++ b/config/intel-warnings/classic/developer-general
@@ -0,0 +1,3 @@
+-Wreorder
+-Wport
+-Wstrict-aliasing
diff --git a/config/intel-warnings/general b/config/intel-warnings/classic/general
index bd866b6..bd866b6 100644
--- a/config/intel-warnings/general
+++ b/config/intel-warnings/classic/general
diff --git a/config/intel-warnings/ifort-general b/config/intel-warnings/classic/ifort-general
index 1644c7c..1644c7c 100644
--- a/config/intel-warnings/ifort-general
+++ b/config/intel-warnings/classic/ifort-general
diff --git a/config/intel-warnings/win-developer-general b/config/intel-warnings/classic/win-developer-general
index 6cd7ed7..6cd7ed7 100644
--- a/config/intel-warnings/win-developer-general
+++ b/config/intel-warnings/classic/win-developer-general
diff --git a/config/intel-warnings/win-general b/config/intel-warnings/classic/win-general
index ef54b2b..ef54b2b 100644
--- a/config/intel-warnings/win-general
+++ b/config/intel-warnings/classic/win-general
diff --git a/config/intel-warnings/win-ifort-general b/config/intel-warnings/classic/win-ifort-general
index a335959..a335959 100644
--- a/config/intel-warnings/win-ifort-general
+++ b/config/intel-warnings/classic/win-ifort-general
diff --git a/config/intel-warnings/developer-general b/config/intel-warnings/developer-general
deleted file mode 100644
index 861218e..0000000
--- a/config/intel-warnings/developer-general
+++ /dev/null
@@ -1,11 +0,0 @@
--Wreorder
--Wport
--Wstrict-aliasing
-# -Winline warnings aren't included here because, for at least
-# GNU compilers, this flag appears to conflict specifically with
-# the -Og optimization level flag added for Debug and Developer
-# builds and will produce warnings about functions not being
-# considered for inlining. The flag will be added to the list
-# of compiler flags separately if developer warnings are enabled
-# and the build type is not Debug or Developer
-#-Winline
diff --git a/config/intel-warnings/oneapi/developer-general b/config/intel-warnings/oneapi/developer-general
new file mode 100644
index 0000000..122c33d
--- /dev/null
+++ b/config/intel-warnings/oneapi/developer-general
@@ -0,0 +1,2 @@
+-Wreorder
+-Wstrict-aliasing
diff --git a/config/intel-warnings/oneapi/general b/config/intel-warnings/oneapi/general
new file mode 100644
index 0000000..bd866b6
--- /dev/null
+++ b/config/intel-warnings/oneapi/general
@@ -0,0 +1 @@
+-Wall
diff --git a/config/intel-warnings/oneapi/ifort-general b/config/intel-warnings/oneapi/ifort-general
new file mode 100644
index 0000000..1644c7c
--- /dev/null
+++ b/config/intel-warnings/oneapi/ifort-general
@@ -0,0 +1 @@
+-warn all
diff --git a/config/intel-warnings/oneapi/win-developer-general b/config/intel-warnings/oneapi/win-developer-general
new file mode 100644
index 0000000..ba86a0f
--- /dev/null
+++ b/config/intel-warnings/oneapi/win-developer-general
@@ -0,0 +1,2 @@
+/Wreorder
+/Wstrict-aliasing
diff --git a/config/intel-warnings/oneapi/win-general b/config/intel-warnings/oneapi/win-general
new file mode 100644
index 0000000..ef54b2b
--- /dev/null
+++ b/config/intel-warnings/oneapi/win-general
@@ -0,0 +1 @@
+/Wall
diff --git a/config/intel-warnings/oneapi/win-ifort-general b/config/intel-warnings/oneapi/win-ifort-general
new file mode 100644
index 0000000..a335959
--- /dev/null
+++ b/config/intel-warnings/oneapi/win-ifort-general
@@ -0,0 +1 @@
+/warn:all
diff --git a/doxygen/examples/tables/propertyLists.dox b/doxygen/examples/tables/propertyLists.dox
index 2f74c03..340e13c 100644
--- a/doxygen/examples/tables/propertyLists.dox
+++ b/doxygen/examples/tables/propertyLists.dox
@@ -711,6 +711,10 @@ of the library for reading or writing the actual data.</td>
<td>Gets the cause for not performing selection or vector I/O on the last parallel I/O call.</td>
</tr>
<tr>
+<td>#H5Pget_actual_selection_io_mode</td>
+<td>Gets the type(s) (scalar, vector, selection) of raw data I/O performed on the last I/O call.</td>
+</tr>
+<tr>
<td>#H5Pset_modify_write_buf/#H5Pget_modify_write_buf</td>
<td>Sets/gets a flag allowing the library to modify the contents of the write buffer.</td>
</tr>
diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index 199a0c8..57e17e5 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -332,7 +332,7 @@ if (BUILD_STATIC_LIBS)
target_compile_options(${HDF5_F90_LIB_TARGET} PRIVATE "${HDF5_CMAKE_Fortran_FLAGS}")
target_compile_definitions(${HDF5_F90_LIB_TARGET}
PRIVATE
- "$<$<STREQUAL:x${CMAKE_Fortran_SIMULATE_ID},xMSVC>:HDF5F90_WINDOWS">
+ "$<$<STREQUAL:x${CMAKE_Fortran_SIMULATE_ID},xMSVC>:HDF5F90_WINDOWS>"
"$<$<STREQUAL:x${CMAKE_Fortran_SIMULATE_ID},xMSVC>:${WIN_COMPILE_FLAGS}>"
)
target_link_libraries (${HDF5_F90_LIB_TARGET}
diff --git a/fortran/src/h5fc.in b/fortran/src/h5fc.in
index b793648..c5da815 100644
--- a/fortran/src/h5fc.in
+++ b/fortran/src/h5fc.in
@@ -110,15 +110,15 @@ usage() {
# A wonderfully informative "usage" message.
echo "usage: $prog_name [OPTIONS] <compile line>"
echo " OPTIONS:"
- echo " -help This help message."
- echo " -echo Show all the shell commands executed"
- echo " -prefix=DIR Prefix directory to find HDF5 lib/ and include/"
- echo " subdirectories [default: $prefix]"
- echo " -show Show the commands without executing them"
- echo " -showconfig Show the HDF5 library configuration summary"
- echo " -shlib Compile with shared HDF5 libraries [default for hdf5 built"
+ echo " -help | --help | -h This help message."
+ echo " -echo Show all the shell commands executed"
+ echo " -prefix=DIR Prefix directory to find HDF5 lib/ and include/"
+ echo " subdirectories [default: $prefix]"
+ echo " -show Show the commands without executing them"
+ echo " -showconfig Show the HDF5 library configuration summary"
+ echo " -shlib Compile with shared HDF5 libraries [default for hdf5 built"
echo " without static libraries]"
- echo " -noshlib Compile with static HDF5 libraries [default for hdf5 built"
+ echo " -noshlib Compile with static HDF5 libraries [default for hdf5 built"
echo " with static libraries]"
echo " "
echo " <compile line> - the normal compile line options for your compiler."
@@ -230,6 +230,12 @@ for arg in $@ ; do
-help)
usage
;;
+ --help)
+ usage
+ ;;
+ -h)
+ usage
+ ;;
*\"*)
qarg="'"$arg"'"
allargs="$allargs $qarg"
diff --git a/fortran/test/tH5D.F90 b/fortran/test/tH5D.F90
index c381235..fc77414 100644
--- a/fortran/test/tH5D.F90
+++ b/fortran/test/tH5D.F90
@@ -38,6 +38,7 @@ MODULE TH5D
USE HDF5 ! This module contains all necessary modules
USE TH5_MISC
USE TH5_MISC_GEN
+ USE ISO_C_BINDING
CONTAINS
SUBROUTINE datasettest(cleanup, total_error)
@@ -514,8 +515,6 @@ CONTAINS
SUBROUTINE test_userblock_offset(cleanup, total_error)
- USE ISO_C_BINDING
-
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(OUT) :: total_error
@@ -631,8 +630,6 @@ CONTAINS
SUBROUTINE test_dset_fill(cleanup, total_error)
- USE ISO_C_BINDING
-
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(OUT) :: total_error
@@ -640,7 +637,6 @@ CONTAINS
INTEGER, PARAMETER :: DIM0=10
INTEGER, PARAMETER :: int_kind_1 = SELECTED_INT_KIND(2) !should map to INTEGER*1 on most modern processors
INTEGER, PARAMETER :: int_kind_4 = SELECTED_INT_KIND(4) !should map to INTEGER*2 on most modern processors
- INTEGER, PARAMETER :: int_kind_8 = SELECTED_INT_KIND(9) !should map to INTEGER*4 on most modern processors
INTEGER, PARAMETER :: int_kind_16 = SELECTED_INT_KIND(18) !should map to INTEGER*8 on most modern processors
INTEGER(KIND=int_kind_1) , DIMENSION(1:DIM0), TARGET :: data_i1
INTEGER(KIND=int_kind_4) , DIMENSION(1:DIM0), TARGET :: data_i4
@@ -991,8 +987,6 @@ CONTAINS
SUBROUTINE test_direct_chunk_io(cleanup, total_error)
- USE ISO_C_BINDING
-
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
diff --git a/fortran/test/tH5E_F03.F90 b/fortran/test/tH5E_F03.F90
index 2d8dd33..c2bf74b 100644
--- a/fortran/test/tH5E_F03.F90
+++ b/fortran/test/tH5E_F03.F90
@@ -92,17 +92,15 @@ CONTAINS
END MODULE test_my_hdf5_error_handler
-
-
MODULE TH5E_F03
+ USE ISO_C_BINDING
+ USE test_my_hdf5_error_handler
+
CONTAINS
SUBROUTINE test_error(total_error)
- USE ISO_C_BINDING
- USE test_my_hdf5_error_handler
-
IMPLICIT NONE
INTEGER(hid_t), PARAMETER :: FAKE_ID = -1
diff --git a/fortran/test/tH5F.F90 b/fortran/test/tH5F.F90
index a5b67ac..b4d973e 100644
--- a/fortran/test/tH5F.F90
+++ b/fortran/test/tH5F.F90
@@ -44,8 +44,6 @@ MODULE TH5F
CONTAINS
SUBROUTINE h5openclose(total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
INTEGER, INTENT(INOUT) :: total_error
@@ -141,8 +139,6 @@ CONTAINS
END SUBROUTINE h5openclose
SUBROUTINE mountingtest(cleanup, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
@@ -502,8 +498,6 @@ CONTAINS
!
SUBROUTINE reopentest(cleanup, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
@@ -690,8 +684,6 @@ CONTAINS
! correct output for a given obj_id and filename.
!
SUBROUTINE check_get_name(obj_id, fix_filename, len_filename, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
INTEGER(HID_T) :: obj_id ! Object identifier
CHARACTER(LEN=80), INTENT(IN) :: fix_filename ! Expected filename
@@ -780,8 +772,6 @@ CONTAINS
!
SUBROUTINE get_name_test(cleanup, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
@@ -846,8 +836,6 @@ CONTAINS
! created using the got property lists
SUBROUTINE plisttest(cleanup, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
@@ -946,8 +934,6 @@ CONTAINS
!
SUBROUTINE file_close(cleanup, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
@@ -1075,8 +1061,6 @@ CONTAINS
!
SUBROUTINE file_space(filename, cleanup, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
CHARACTER(*), INTENT(IN) :: filename
LOGICAL, INTENT(IN) :: cleanup
@@ -1168,8 +1152,6 @@ CONTAINS
!
SUBROUTINE test_file_info(filename, cleanup, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
CHARACTER(*), INTENT(IN) :: filename
LOGICAL, INTENT(IN) :: cleanup
diff --git a/fortran/test/tH5G.F90 b/fortran/test/tH5G.F90
index 83e0101..36c51df 100644
--- a/fortran/test/tH5G.F90
+++ b/fortran/test/tH5G.F90
@@ -26,6 +26,9 @@
MODULE TH5G
+ USE HDF5 ! This module contains all necessary modules
+ USE TH5_MISC
+
CONTAINS
SUBROUTINE group_test(cleanup, total_error)
@@ -35,9 +38,6 @@ CONTAINS
! h5glink(2)_f, h5gunlink_f, h5gmove(2)_f, h5gget_linkval_f, h5gset_comment_f,
! h5gget_comment_f
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
-
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
diff --git a/fortran/test/tH5O_F03.F90 b/fortran/test/tH5O_F03.F90
index e608a30..b27b067 100644
--- a/fortran/test/tH5O_F03.F90
+++ b/fortran/test/tH5O_F03.F90
@@ -267,6 +267,10 @@ END MODULE visit_cb
MODULE TH5O_F03
+ USE HDF5
+ USE TH5_MISC
+ USE ISO_C_BINDING
+
CONTAINS
!***************************************************************
!**
@@ -276,9 +280,6 @@ CONTAINS
SUBROUTINE test_h5o_refcount(total_error)
- USE HDF5
- USE TH5_MISC
- USE ISO_C_BINDING
IMPLICIT NONE
INTEGER, INTENT(INOUT) :: total_error
@@ -415,11 +416,8 @@ END SUBROUTINE test_h5o_refcount
SUBROUTINE test_obj_visit(total_error)
- USE HDF5
- USE TH5_MISC
-
USE visit_cb
- USE ISO_C_BINDING
+
IMPLICIT NONE
INTEGER, INTENT(INOUT) :: total_error
@@ -553,9 +551,6 @@ END SUBROUTINE test_obj_visit
SUBROUTINE test_obj_info(total_error)
- USE HDF5
- USE TH5_MISC
- USE ISO_C_BINDING
IMPLICIT NONE
INTEGER, INTENT(INOUT) :: total_error
@@ -702,8 +697,6 @@ END SUBROUTINE test_obj_info
SUBROUTINE build_visit_file(fid)
- USE HDF5
- USE TH5_MISC
IMPLICIT NONE
INTEGER(hid_t) :: fid ! File ID
diff --git a/fortran/test/tH5P_F03.F90 b/fortran/test/tH5P_F03.F90
index 24934eb..c962d52 100644
--- a/fortran/test/tH5P_F03.F90
+++ b/fortran/test/tH5P_F03.F90
@@ -439,7 +439,6 @@ END SUBROUTINE test_genprop_class_callback
SUBROUTINE test_h5p_file_image(total_error)
- USE, INTRINSIC :: iso_c_binding
IMPLICIT NONE
INTEGER, INTENT(INOUT) :: total_error
INTEGER(hid_t) :: fapl_1 = -1
@@ -653,7 +652,6 @@ END SUBROUTINE external_test_offset
!
SUBROUTINE test_vds(total_error)
- USE ISO_C_BINDING
IMPLICIT NONE
INTEGER, INTENT(INOUT) :: total_error
diff --git a/fortran/test/tH5Sselect.F90 b/fortran/test/tH5Sselect.F90
index 6dfd7e6..b6d28d3 100644
--- a/fortran/test/tH5Sselect.F90
+++ b/fortran/test/tH5Sselect.F90
@@ -319,9 +319,6 @@ CONTAINS
SUBROUTINE test_select_element(cleanup, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
-
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
diff --git a/fortran/test/tH5T.F90 b/fortran/test/tH5T.F90
index 953d6d0..a38cbea 100644
--- a/fortran/test/tH5T.F90
+++ b/fortran/test/tH5T.F90
@@ -819,8 +819,6 @@ CONTAINS
SUBROUTINE enumtest(cleanup, total_error)
- USE HDF5
- USE TH5_MISC
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
diff --git a/fortran/test/tH5T_F03.F90 b/fortran/test/tH5T_F03.F90
index 661a0cc..3984597 100644
--- a/fortran/test/tH5T_F03.F90
+++ b/fortran/test/tH5T_F03.F90
@@ -3407,8 +3407,6 @@ SUBROUTINE multiple_dset_rw(total_error)
! Failure: number of errors
!-------------------------------------------------------------------------
!
- USE iso_c_binding
- USE hdf5
IMPLICIT NONE
INTEGER, INTENT(INOUT) :: total_error ! number of errors
diff --git a/fortran/test/tH5Z.F90 b/fortran/test/tH5Z.F90
index 3ac51d6..c6ab383 100644
--- a/fortran/test/tH5Z.F90
+++ b/fortran/test/tH5Z.F90
@@ -25,15 +25,15 @@
!*****
MODULE TH5Z
+ USE HDF5 ! This module contains all necessary modules
+ USE TH5_MISC
+
CONTAINS
SUBROUTINE filters_test(total_error)
! This subroutine tests following functionalities: h5zfilter_avail_f, h5zunregister_f
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
-
IMPLICIT NONE
INTEGER, INTENT(OUT) :: total_error
LOGICAL :: status
@@ -164,8 +164,6 @@ CONTAINS
END SUBROUTINE filters_test
SUBROUTINE szip_test(szip_flag, cleanup, total_error)
- USE HDF5 ! This module contains all necessary modules
- USE TH5_MISC
IMPLICIT NONE
LOGICAL, INTENT(OUT) :: szip_flag
diff --git a/fortran/test/vol_connector.F90 b/fortran/test/vol_connector.F90
index e2235f4..7394a31 100644
--- a/fortran/test/vol_connector.F90
+++ b/fortran/test/vol_connector.F90
@@ -227,7 +227,6 @@ END MODULE VOL_TMOD
PROGRAM vol_connector
- USE HDF5
USE VOL_TMOD
IMPLICIT NONE
diff --git a/fortran/testpar/async.F90 b/fortran/testpar/async.F90
index 88ecc3e..02045cb 100644
--- a/fortran/testpar/async.F90
+++ b/fortran/testpar/async.F90
@@ -1240,10 +1240,6 @@ END MODULE test_async_APIs
!
PROGRAM async_test
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_INT64_T
- USE HDF5
- USE MPI
- USE TH5_MISC
- USE TH5_MISC_GEN
USE test_async_APIs
IMPLICIT NONE
diff --git a/hl/fortran/src/H5TBfc.c b/hl/fortran/src/H5TBfc.c
index 9c25777..d339def 100644
--- a/hl/fortran/src/H5TBfc.c
+++ b/hl/fortran/src/H5TBfc.c
@@ -92,10 +92,12 @@ h5tbmake_table_c(size_t_f *namelen1, _fcd name1, hid_t_f *loc_id, size_t_f *name
/*
* call H5TBmake_table function.
*/
+ H5_GCC_CLANG_DIAG_OFF("cast-qual")
if (H5TBmake_table(c_name1, (hid_t)*loc_id, c_name, c_nfields, (hsize_t)*nrecords, (size_t)*type_size,
(const char **)c_field_names, c_field_offset, c_field_types, (hsize_t)*chunk_size,
NULL, *compress, NULL) < 0)
HGOTO_DONE(FAIL);
+ H5_GCC_CLANG_DIAG_ON("cast-qual")
done:
if (c_name)
@@ -193,10 +195,12 @@ h5tbmake_table_ptr_c(size_t_f *namelen1, _fcd name1, hid_t_f *loc_id, size_t_f *
/*
* call H5TBmake_table function.
*/
+ H5_GCC_CLANG_DIAG_OFF("cast-qual")
if (H5TBmake_table(c_name1, (hid_t)*loc_id, c_name, c_nfields, (hsize_t)*nrecords, (size_t)*type_size,
(const char **)c_field_names, c_field_offset, c_field_types, (hsize_t)*chunk_size,
fill_data, *compress, data) < 0)
HGOTO_DONE(FAIL);
+ H5_GCC_CLANG_DIAG_ON("cast-qual")
done:
if (c_name)
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 18f8047..1734c01 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -127,7 +127,11 @@ New Features
Library:
--------
- -
+ - Added new API function H5Pget_actual_selection_io_mode()
+
+ This function allows the user to determine if the library performed
+ selection I/O, vector I/O, or scalar (legacy) I/O during the last HDF5
+ operation performed with the provided DXPL.
Parallel Library:
@@ -325,7 +329,18 @@ Bug Fixes since HDF5-1.14.2 release
Tools
-----
- -
+ - Fixed an issue with unmatched MPI messages in ph5diff
+
+ The "manager" MPI rank in ph5diff was unintentionally sending "program end"
+ messages to its workers twice, leading to an error from MPICH similar to the
+ following:
+
+ Abort(810645519) on node 1 (rank 1 in comm 0): Fatal error in internal_Finalize: Other MPI error, error stack:
+ internal_Finalize(50)...........: MPI_Finalize failed
+ MPII_Finalize(394)..............:
+ MPIR_Comm_delete_internal(1224).: Communicator (handle=44000000) being freed has 1 unmatched message(s)
+ MPIR_Comm_release_always(1250)..:
+ MPIR_finalize_builtin_comms(154):
Performance
diff --git a/src/H5CX.c b/src/H5CX.c
index b3b2fca..c46c58a 100644
--- a/src/H5CX.c
+++ b/src/H5CX.c
@@ -299,6 +299,11 @@ typedef struct H5CX_t {
bool no_selection_io_cause_set; /* Whether reason for not performing selection I/O is set */
bool no_selection_io_cause_valid; /* Whether reason for not performing selection I/O is valid */
+ uint32_t
+ actual_selection_io_mode; /* Actual selection I/O mode used (H5D_ACTUAL_SELECTION_IO_MODE_NAME) */
+ hbool_t actual_selection_io_mode_set; /* Whether actual selection I/O mode is set */
+ hbool_t actual_selection_io_mode_valid; /* Whether actual selection I/O mode is valid */
+
/* Cached LCPL properties */
H5T_cset_t encoding; /* Link name character encoding */
bool encoding_valid; /* Whether link name character encoding is valid */
@@ -380,6 +385,8 @@ typedef struct H5CX_dxpl_cache_t {
H5D_selection_io_mode_t selection_io_mode; /* Selection I/O mode (H5D_XFER_SELECTION_IO_MODE_NAME) */
uint32_t no_selection_io_cause; /* Reasons for not performing selection I/O
(H5D_XFER_NO_SELECTION_IO_CAUSE_NAME) */
+ uint32_t actual_selection_io_mode; /* Actual selection I/O mode
+ (H5D_XFER_ACTUAL_SELECTION_IO_MODE_NAME) */
bool modify_write_buf; /* Whether the library can modify write buffers */
} H5CX_dxpl_cache_t;
@@ -571,13 +578,18 @@ H5CX_init(void)
/* Get the selection I/O mode */
if (H5P_get(dx_plist, H5D_XFER_SELECTION_IO_MODE_NAME, &H5CX_def_dxpl_cache.selection_io_mode) < 0)
- HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve parallel transfer method");
+ HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve selection I/O mode");
/* Get the local & global reasons for breaking selection I/O values */
if (H5P_get(dx_plist, H5D_XFER_NO_SELECTION_IO_CAUSE_NAME, &H5CX_def_dxpl_cache.no_selection_io_cause) <
0)
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve cause for no selection I/O");
+ /* Get the actual selection I/O mode */
+ if (H5P_get(dx_plist, H5D_XFER_ACTUAL_SELECTION_IO_MODE_NAME,
+ &H5CX_def_dxpl_cache.actual_selection_io_mode) < 0)
+ HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve actual selection I/O mode");
+
/* Get the modify write buffer property */
if (H5P_get(dx_plist, H5D_XFER_MODIFY_WRITE_BUF_NAME, &H5CX_def_dxpl_cache.modify_write_buf) < 0)
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve modify write buffer property");
@@ -2515,6 +2527,47 @@ done:
} /* end H5CX_get_no_selection_io_cause() */
/*-------------------------------------------------------------------------
+ * Function: H5CX_get_actual_selection_io_mode
+ *
+ * Purpose: Retrieves the actual I/O mode (scalar, vector, and/or selection) for the current API call
+ *context.
+ *
+ * Return: Non-negative on success / Negative on failure
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5CX_get_actual_selection_io_mode(uint32_t *actual_selection_io_mode)
+{
+ H5CX_node_t **head = NULL; /* Pointer to head of API context list */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity check */
+ assert(actual_selection_io_mode);
+ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */
+ assert(head && *head);
+ assert(H5P_DEFAULT != (*head)->ctx.dxpl_id);
+
+ /* This property is a special case - we want to wipe out any previous setting. Copy the default setting
+ * if it has not been set yet. */
+ if ((*head)->ctx.dxpl_id != H5P_DATASET_XFER_DEFAULT && !(*head)->ctx.actual_selection_io_mode_set &&
+ !(*head)->ctx.actual_selection_io_mode_valid) {
+ (*head)->ctx.actual_selection_io_mode = H5CX_def_dxpl_cache.actual_selection_io_mode;
+ (*head)->ctx.actual_selection_io_mode_set = true;
+ }
+ H5CX_RETRIEVE_PROP_VALID_SET(dxpl, H5P_DATASET_XFER_DEFAULT, H5D_XFER_ACTUAL_SELECTION_IO_MODE_NAME,
+ actual_selection_io_mode)
+
+ /* Get the value */
+ *actual_selection_io_mode = (*head)->ctx.actual_selection_io_mode;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5CX_get_actual_selection_io_mode() */
+
+/*-------------------------------------------------------------------------
* Function: H5CX_get_modify_write_buf
*
* Purpose: Retrieves the modify write buffer property for the current API call context.
@@ -3443,7 +3496,7 @@ done:
#endif /* H5_HAVE_PARALLEL */
/*-------------------------------------------------------------------------
- * Function: H5CX_set_no_selecction_io_cause
+ * Function: H5CX_set_no_selection_io_cause
*
* Purpose: Sets the reason for not performing selection I/O for
* the current API call context.
@@ -3472,7 +3525,39 @@ H5CX_set_no_selection_io_cause(uint32_t no_selection_io_cause)
} /* end if */
FUNC_LEAVE_NOAPI_VOID
-} /* end H5CX_set_no_selectiion_io_cause() */
+} /* end H5CX_set_no_selection_io_cause() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5CX_set_actual_selection_io_mode
+ *
+ * Purpose: Sets the actual selection I/O mode for the current API
+ * call context.
+ *
+ * Return: <none>
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5CX_set_actual_selection_io_mode(uint32_t actual_selection_io_mode)
+{
+ H5CX_node_t **head = NULL; /* Pointer to head of API context list */
+
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+ /* Sanity checks */
+ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */
+ assert(head && *head);
+ assert((*head)->ctx.dxpl_id != H5P_DEFAULT);
+
+ /* If we're using the default DXPL, don't modify it */
+ if ((*head)->ctx.dxpl_id != H5P_DATASET_XFER_DEFAULT) {
+ /* Cache the value for later, marking it to set in DXPL when context popped */
+ (*head)->ctx.actual_selection_io_mode = actual_selection_io_mode;
+ (*head)->ctx.actual_selection_io_mode_set = true;
+ }
+
+ FUNC_LEAVE_NOAPI_VOID
+} /* end H5CX_set_actual_selection_io_mode() */
/*-------------------------------------------------------------------------
* Function: H5CX_get_ohdr_flags
@@ -3529,7 +3614,17 @@ H5CX__pop_common(bool update_dxpl_props)
/* Check for cached DXPL properties to return to application */
if (update_dxpl_props) {
+ /* actual_selection_io_mode is a special case - we always want to set it in the property list even if
+ * it was never set by the library, in that case it indicates no I/O was performed and we don't want
+ * to leave the (possibly incorrect) old value in the property list, so set from the default property
+ * list */
+ if ((*head)->ctx.dxpl_id != H5P_DATASET_XFER_DEFAULT && !(*head)->ctx.actual_selection_io_mode_set) {
+ (*head)->ctx.actual_selection_io_mode = H5CX_def_dxpl_cache.actual_selection_io_mode;
+ (*head)->ctx.actual_selection_io_mode_set = true;
+ }
+
H5CX_SET_PROP(H5D_XFER_NO_SELECTION_IO_CAUSE_NAME, no_selection_io_cause)
+ H5CX_SET_PROP(H5D_XFER_ACTUAL_SELECTION_IO_MODE_NAME, actual_selection_io_mode)
#ifdef H5_HAVE_PARALLEL
H5CX_SET_PROP(H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, mpio_actual_chunk_opt)
H5CX_SET_PROP(H5D_MPIO_ACTUAL_IO_MODE_NAME, mpio_actual_io_mode)
diff --git a/src/H5CXprivate.h b/src/H5CXprivate.h
index aa6883b..76812ee 100644
--- a/src/H5CXprivate.h
+++ b/src/H5CXprivate.h
@@ -116,6 +116,7 @@ H5_DLL herr_t H5CX_get_vlen_alloc_info(H5T_vlen_alloc_info_t *vl_alloc_info);
H5_DLL herr_t H5CX_get_dt_conv_cb(H5T_conv_cb_t *cb_struct);
H5_DLL herr_t H5CX_get_selection_io_mode(H5D_selection_io_mode_t *selection_io_mode);
H5_DLL herr_t H5CX_get_no_selection_io_cause(uint32_t *no_selection_io_cause);
+H5_DLL herr_t H5CX_get_actual_selection_io_mode(uint32_t *actual_selection_io_mode);
H5_DLL herr_t H5CX_get_modify_write_buf(bool *modify_write_buf);
/* "Getter" routines for LCPL properties cached in API context */
@@ -162,6 +163,7 @@ H5_DLL herr_t H5CX_init(void);
/* "Setter" routines for cached DXPL properties that must be returned to application */
H5_DLL void H5CX_set_no_selection_io_cause(uint32_t no_selection_io_cause);
+H5_DLL void H5CX_set_actual_selection_io_mode(uint32_t actual_selection_io_mode);
#ifdef H5_HAVE_PARALLEL
H5_DLL void H5CX_set_mpio_actual_chunk_opt(H5D_mpio_actual_chunk_opt_mode_t chunk_opt);
diff --git a/src/H5Dio.c b/src/H5Dio.c
index 2134ce1..611518d 100644
--- a/src/H5Dio.c
+++ b/src/H5Dio.c
@@ -143,17 +143,17 @@ H5D__read(size_t count, H5D_dset_io_info_t *dset_info)
} /* end if */
#endif /*H5_HAVE_PARALLEL*/
- /* iterate over all dsets and construct I/O information necessary to do I/O */
+ /* Iterate over all dsets and construct I/O information necessary to do I/O */
for (i = 0; i < count; i++) {
haddr_t prev_tag = HADDR_UNDEF;
- /* check args */
+ /* Check args */
if (NULL == dset_info[i].dset)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset");
if (NULL == dset_info[i].dset->oloc.file)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file");
- /* set metadata tagging with dset oheader addr */
+ /* Set metadata tagging with dset oheader addr */
H5AC_tag(dset_info[i].dset->oloc.addr, &prev_tag);
/* Set up datatype info for operation */
@@ -173,10 +173,7 @@ H5D__read(size_t count, H5D_dset_io_info_t *dset_info)
if (dset_info[i].nelmts > 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no output buffer");
- /* If the buffer is nil, and 0 element is selected, make a fake buffer.
- * This is for some MPI package like ChaMPIon on NCSA's tungsten which
- * doesn't support this feature.
- */
+ /* If the buffer is nil, and 0 element is selected, make a fake buffer. */
dset_info[i].buf.vp = &fake_char;
} /* end if */
@@ -191,8 +188,8 @@ H5D__read(size_t count, H5D_dset_io_info_t *dset_info)
* rapidly changing coordinates match up), but the I/O code still has
* difficulties with the notion.
*
- * To solve this, we check to see if H5S_select_shape_same() returns true,
- * and if the ranks of the mem and file spaces are different. If they are,
+ * To solve this, check if H5S_select_shape_same() returns true
+ * and the ranks of the mem and file spaces are different. If so,
* construct a new mem space that is equivalent to the old mem space, and
* use that instead.
*
@@ -347,7 +344,7 @@ H5D__read(size_t count, H5D_dset_io_info_t *dset_info)
if (dset_info[i].layout_ops.mdio_init) {
haddr_t prev_tag = HADDR_UNDEF;
- /* set metadata tagging with dset oheader addr */
+ /* Set metadata tagging with dset oheader addr */
H5AC_tag(dset_info[i].dset->oloc.addr, &prev_tag);
/* Make second phase IO init call */
@@ -396,7 +393,7 @@ H5D__read(size_t count, H5D_dset_io_info_t *dset_info)
if (dset_info[i].skip_io)
continue;
- /* set metadata tagging with dset oheader addr */
+ /* Set metadata tagging with dset object header addr */
H5AC_tag(dset_info[i].dset->oloc.addr, &prev_tag);
/* Invoke correct "high level" I/O routine */
@@ -553,18 +550,18 @@ H5D__write(size_t count, H5D_dset_io_info_t *dset_info)
if (NULL == (store = (H5D_storage_t *)H5MM_malloc(count * sizeof(H5D_storage_t))))
HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate dset storage info array buffer");
- /* iterate over all dsets and construct I/O information */
+ /* Iterate over all dsets and construct I/O information */
for (i = 0; i < count; i++) {
bool should_alloc_space = false; /* Whether or not to initialize dataset's storage */
haddr_t prev_tag = HADDR_UNDEF;
- /* check args */
+ /* Check args */
if (NULL == dset_info[i].dset)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset");
if (NULL == dset_info[i].dset->oloc.file)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file");
- /* set metadata tagging with dset oheader addr */
+ /* Set metadata tagging with dset oheader addr */
H5AC_tag(dset_info[i].dset->oloc.addr, &prev_tag);
/* All filters in the DCPL must have encoding enabled. */
@@ -620,10 +617,7 @@ H5D__write(size_t count, H5D_dset_io_info_t *dset_info)
if (dset_info[i].nelmts > 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no input buffer");
- /* If the buffer is nil, and 0 element is selected, make a fake buffer.
- * This is for some MPI package like ChaMPIon on NCSA's tungsten which
- * doesn't support this feature.
- */
+ /* If the buffer is nil, and 0 element is selected, make a fake buffer. */
dset_info[i].buf.cvp = &fake_char;
} /* end if */
@@ -633,18 +627,18 @@ H5D__write(size_t count, H5D_dset_io_info_t *dset_info)
if (!(H5S_has_extent(dset_info[i].mem_space)))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "memory dataspace does not have extent set");
- /* H5S_select_shape_same() has been modified to accept topologically
- * identical selections with different rank as having the same shape
- * (if the most rapidly changing coordinates match up), but the I/O
- * code still has difficulties with the notion.
+ /* H5S_select_shape_same() has been modified to accept topologically identical
+ * selections with different rank as having the same shape (if the most
+ * rapidly changing coordinates match up), but the I/O code still has
+ * difficulties with the notion.
*
- * To solve this, we check to see if H5S_select_shape_same() returns
- * true, and if the ranks of the mem and file spaces are different.
- * If they are, construct a new mem space that is equivalent to the
- * old mem space, and use that instead.
+ * To solve this, check if H5S_select_shape_same() returns true
+ * and the ranks of the mem and file spaces are different. If so,
+ * construct a new mem space that is equivalent to the old mem space, and
+ * use that instead.
*
- * Note that in general, this requires us to touch up the memory buffer
- * as well.
+ * Note that in general, this requires us to touch up the memory buffer as
+ * well.
*/
if (dset_info[i].nelmts > 0 &&
true == H5S_SELECT_SHAPE_SAME(dset_info[i].mem_space, dset_info[i].file_space) &&
@@ -818,11 +812,11 @@ H5D__write(size_t count, H5D_dset_io_info_t *dset_info)
"unable to allocate array of selected pieces");
}
- /* loop with serial & single-dset write IO path */
+ /* Loop with serial & single-dset write IO path */
for (i = 0; i < count; i++) {
assert(!dset_info[i].skip_io);
- /* set metadata tagging with dset oheader addr */
+ /* Set metadata tagging with dset oheader addr */
H5AC_tag(dset_info->dset->oloc.addr, &prev_tag);
/* Invoke correct "high level" I/O routine */
@@ -936,7 +930,7 @@ H5D__ioinfo_init(size_t count, H5D_io_op_type_t op_type, H5D_dset_io_info_t *dse
FUNC_ENTER_PACKAGE_NOERR
- /* check args */
+ /* Check args */
assert(count > 0);
assert(dset_info);
assert(dset_info[0].dset->oloc.file);
@@ -1057,7 +1051,7 @@ H5D__typeinfo_init(H5D_io_info_t *io_info, H5D_dset_io_info_t *dset_info, hid_t
FUNC_ENTER_PACKAGE
- /* check args */
+ /* Check args */
assert(io_info);
assert(dset_info);
@@ -1151,7 +1145,7 @@ done:
/*-------------------------------------------------------------------------
* Function: H5D__typeinfo_init_phase2
*
- * Purpose: Continue initializing type info for all datasets after
+ * Purpose: Continues initializing type info for all datasets after
* calculating the max type size across all datasets, and
* before final determination of collective/independent in
* H5D__ioinfo_adjust(). Currently just checks to see if
@@ -1169,7 +1163,7 @@ H5D__typeinfo_init_phase2(H5D_io_info_t *io_info)
FUNC_ENTER_PACKAGE
- /* check args */
+ /* Check args */
assert(io_info);
/* If selection I/O mode is default (auto), enable it here if the VFD supports it (it will be turned off
@@ -1238,7 +1232,7 @@ done:
/*-------------------------------------------------------------------------
* Function: H5D__ioinfo_adjust
*
- * Purpose: Adjust operation's I/O info for any parallel I/O, also
+ * Purpose: Adjusts operation's I/O info for any parallel I/O, also
* handle decision on selection I/O even in serial case
*
* Return: Non-negative on success/Negative on failure
@@ -1253,10 +1247,10 @@ H5D__ioinfo_adjust(H5D_io_info_t *io_info)
FUNC_ENTER_PACKAGE
- /* check args */
+ /* Check args */
assert(io_info);
- /* check the first dset, should exist either single or multi dset cases */
+ /* Check the first dset, should exist either single or multi dset cases */
assert(io_info->dsets_info[0].dset);
dset0 = io_info->dsets_info[0].dset;
assert(dset0->oloc.file);
@@ -1317,7 +1311,7 @@ H5D__ioinfo_adjust(H5D_io_info_t *io_info)
if (io_info->dsets_info[i].dset->shared->dcpl_cache.pline.nused > 0)
break;
- /* If the above loop didn't complete at least one dataset has a filter */
+ /* If the above loop didn't complete, at least one dataset has a filter */
if (i < io_info->count) {
int comm_size = 0;
@@ -1363,9 +1357,9 @@ done:
/*-------------------------------------------------------------------------
* Function: H5D__typeinfo_init_phase3
*
- * Purpose: Finish initializing type info for all datasets after
- * calculating the max type size across all datasets. And
- * after final collective/independent determination in
+ * Purpose: Finishes initializing type info for all datasets after
+ * calculating the max type size across all datasets and
+ * final collective/independent determination in
* H5D__ioinfo_adjust().
*
* Return: Non-negative on success/Negative on failure
diff --git a/src/H5Dprivate.h b/src/H5Dprivate.h
index 118c6cd..fa8b077 100644
--- a/src/H5Dprivate.h
+++ b/src/H5Dprivate.h
@@ -78,15 +78,16 @@
#define H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME \
"local_no_collective_cause" /* cause of broken collective I/O in each process */
#define H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME \
- "global_no_collective_cause" /* cause of broken collective I/O in all processes */
-#define H5D_XFER_EDC_NAME "err_detect" /* EDC */
-#define H5D_XFER_FILTER_CB_NAME "filter_cb" /* Filter callback function */
-#define H5D_XFER_CONV_CB_NAME "type_conv_cb" /* Type conversion callback function */
-#define H5D_XFER_XFORM_NAME "data_transform" /* Data transform */
-#define H5D_XFER_DSET_IO_SEL_NAME "dset_io_selection" /* Dataset I/O selection */
-#define H5D_XFER_SELECTION_IO_MODE_NAME "selection_io_mode" /* Selection I/O mode */
-#define H5D_XFER_NO_SELECTION_IO_CAUSE_NAME "no_selection_io_cause" /* Cause for no selection I/O */
-#define H5D_XFER_MODIFY_WRITE_BUF_NAME "modify_write_buf" /* Modify write buffers */
+ "global_no_collective_cause" /* cause of broken collective I/O in all processes */
+#define H5D_XFER_EDC_NAME "err_detect" /* EDC */
+#define H5D_XFER_FILTER_CB_NAME "filter_cb" /* Filter callback function */
+#define H5D_XFER_CONV_CB_NAME "type_conv_cb" /* Type conversion callback function */
+#define H5D_XFER_XFORM_NAME "data_transform" /* Data transform */
+#define H5D_XFER_DSET_IO_SEL_NAME "dset_io_selection" /* Dataset I/O selection */
+#define H5D_XFER_SELECTION_IO_MODE_NAME "selection_io_mode" /* Selection I/O mode */
+#define H5D_XFER_NO_SELECTION_IO_CAUSE_NAME "no_selection_io_cause" /* Cause for no selection I/O */
+#define H5D_XFER_ACTUAL_SELECTION_IO_MODE_NAME "actual_selection_io_mode" /* Actual selection I/O mode */
+#define H5D_XFER_MODIFY_WRITE_BUF_NAME "modify_write_buf" /* Modify write buffers */
#ifdef H5_HAVE_INSTRUMENTED_LIBRARY
/* Collective chunk instrumentation properties */
#define H5D_XFER_COLL_CHUNK_LINK_HARD_NAME "coll_chunk_link_hard"
diff --git a/src/H5FDint.c b/src/H5FDint.c
index 082b602..5d3a802 100644
--- a/src/H5FDint.c
+++ b/src/H5FDint.c
@@ -212,8 +212,9 @@ done:
herr_t
H5FD_read(H5FD_t *file, H5FD_mem_t type, haddr_t addr, size_t size, void *buf /*out*/)
{
- hid_t dxpl_id = H5I_INVALID_HID; /* DXPL for operation */
- herr_t ret_value = SUCCEED; /* Return value */
+ hid_t dxpl_id = H5I_INVALID_HID; /* DXPL for operation */
+ uint32_t actual_selection_io_mode;
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -257,6 +258,13 @@ H5FD_read(H5FD_t *file, H5FD_mem_t type, haddr_t addr, size_t size, void *buf /*
if ((file->cls->read)(file, type, dxpl_id, addr + file->base_addr, size, buf) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read request failed");
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SCALAR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
+
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD_read() */
@@ -273,9 +281,10 @@ done:
herr_t
H5FD_write(H5FD_t *file, H5FD_mem_t type, haddr_t addr, size_t size, const void *buf)
{
- hid_t dxpl_id; /* DXPL for operation */
- haddr_t eoa = HADDR_UNDEF; /* EOA for file */
- herr_t ret_value = SUCCEED; /* Return value */
+ hid_t dxpl_id; /* DXPL for operation */
+ haddr_t eoa = HADDR_UNDEF; /* EOA for file */
+ uint32_t actual_selection_io_mode;
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -308,6 +317,13 @@ H5FD_write(H5FD_t *file, H5FD_mem_t type, haddr_t addr, size_t size, const void
if ((file->cls->write)(file, type, dxpl_id, addr + file->base_addr, size, buf) < 0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write request failed");
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SCALAR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
+
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD_write() */
@@ -360,6 +376,7 @@ H5FD_read_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addrs
size_t size = 0;
H5FD_mem_t type = H5FD_MEM_DEFAULT;
hid_t dxpl_id = H5I_INVALID_HID; /* DXPL for operation */
+ hbool_t is_raw = FALSE; /* Does this include raw data */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -441,6 +458,10 @@ H5FD_read_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addrs
else {
type = types[i];
+
+ /* Check for raw data operation */
+ if (type == H5FD_MEM_DRAW)
+ is_raw = TRUE;
}
}
@@ -455,13 +476,27 @@ H5FD_read_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addrs
(unsigned long long)eoa);
}
}
+ else
+ /* We must still check if this is a raw data read */
+ for (i = 0; i < count && types[i] != H5FD_MEM_NOLIST; i++)
+ if (types[i] == H5FD_MEM_DRAW) {
+ is_raw = true;
+ break;
+ }
/* if the underlying VFD supports vector read, make the call */
if (file->cls->read_vector) {
-
if ((file->cls->read_vector)(file, dxpl_id, count, types, addrs, sizes, bufs) < 0)
-
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read vector request failed");
+
+ /* Set actual selection I/O mode, if this is a raw data operation */
+ if (is_raw) {
+ uint32_t actual_selection_io_mode;
+
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_VECTOR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
else {
@@ -471,6 +506,7 @@ H5FD_read_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addrs
extend_sizes = false;
extend_types = false;
uint32_t no_selection_io_cause;
+ uint32_t actual_selection_io_mode;
for (i = 0; i < count; i++) {
@@ -512,6 +548,13 @@ H5FD_read_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addrs
H5CX_get_no_selection_io_cause(&no_selection_io_cause);
no_selection_io_cause |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
H5CX_set_no_selection_io_cause(no_selection_io_cause);
+
+ /* Set actual selection I/O mode, if this is a raw data operation */
+ if (is_raw) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SCALAR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
done:
@@ -575,6 +618,7 @@ H5FD_write_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addr
H5FD_mem_t type = H5FD_MEM_DEFAULT;
hid_t dxpl_id; /* DXPL for operation */
haddr_t eoa = HADDR_UNDEF; /* EOA for file */
+ hbool_t is_raw = FALSE; /* Does this include raw data */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -646,6 +690,10 @@ H5FD_write_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addr
else {
type = types[i];
+
+ /* Check for raw data operation */
+ if (type == H5FD_MEM_DRAW)
+ is_raw = true;
}
}
@@ -663,10 +711,17 @@ H5FD_write_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addr
/* if the underlying VFD supports vector write, make the call */
if (file->cls->write_vector) {
-
if ((file->cls->write_vector)(file, dxpl_id, count, types, addrs, sizes, bufs) < 0)
-
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write vector request failed");
+
+ /* Set actual selection I/O mode, if this is a raw data operation */
+ if (is_raw) {
+ uint32_t actual_selection_io_mode;
+
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_VECTOR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
else {
/* otherwise, implement the vector write as a sequence of regular
@@ -675,6 +730,7 @@ H5FD_write_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addr
extend_sizes = false;
extend_types = false;
uint32_t no_selection_io_cause;
+ uint32_t actual_selection_io_mode;
for (i = 0; i < count; i++) {
@@ -716,6 +772,13 @@ H5FD_write_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addr
H5CX_get_no_selection_io_cause(&no_selection_io_cause);
no_selection_io_cause |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
H5CX_set_no_selection_io_cause(no_selection_io_cause);
+
+ /* Set actual selection I/O mode, if this is a raw data operation */
+ if (is_raw) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SCALAR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
done:
@@ -996,18 +1059,35 @@ H5FD__read_selection_translate(uint32_t skip_vector_cb, H5FD_t *file, H5FD_mem_t
/* Issue vector read call if appropriate */
if (use_vector) {
+ uint32_t actual_selection_io_mode;
+
H5_CHECK_OVERFLOW(vec_arr_nused, size_t, uint32_t);
if ((file->cls->read_vector)(file, dxpl_id, (uint32_t)vec_arr_nused, types, addrs, sizes, vec_bufs) <
0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read vector request failed");
+
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW && count > 0) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_VECTOR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
- else {
+ else if (count > 0) {
uint32_t no_selection_io_cause;
+ uint32_t actual_selection_io_mode;
/* Add H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB to no selection I/O cause */
H5CX_get_no_selection_io_cause(&no_selection_io_cause);
no_selection_io_cause |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
H5CX_set_no_selection_io_cause(no_selection_io_cause);
+
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SCALAR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
done:
@@ -1161,6 +1241,8 @@ H5FD_read_selection(H5FD_t *file, H5FD_mem_t type, uint32_t count, H5S_t **mem_s
/* if the underlying VFD supports selection read, make the call */
if (file->cls->read_selection) {
+ uint32_t actual_selection_io_mode;
+
/* Allocate array of space IDs if necessary, otherwise use local
* buffers */
if (count > sizeof(mem_space_ids_local) / sizeof(mem_space_ids_local[0])) {
@@ -1186,6 +1268,13 @@ H5FD_read_selection(H5FD_t *file, H5FD_mem_t type, uint32_t count, H5S_t **mem_s
if ((file->cls->read_selection)(file, type, dxpl_id, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read selection request failed");
+
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SELECTION_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
else
/* Otherwise, implement the selection read as a sequence of regular
@@ -1337,9 +1426,18 @@ H5FD_read_selection_id(uint32_t skip_cb, H5FD_t *file, H5FD_mem_t type, uint32_t
/* if the underlying VFD supports selection read, make the call */
if (!skip_selection_cb && file->cls->read_selection) {
+ uint32_t actual_selection_io_mode;
+
if ((file->cls->read_selection)(file, type, dxpl_id, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read selection request failed");
+
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SELECTION_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
else {
/* Otherwise, implement the selection read as a sequence of regular
@@ -1653,18 +1751,35 @@ H5FD__write_selection_translate(uint32_t skip_vector_cb, H5FD_t *file, H5FD_mem_
/* Issue vector write call if appropriate */
if (use_vector) {
+ uint32_t actual_selection_io_mode;
+
H5_CHECK_OVERFLOW(vec_arr_nused, size_t, uint32_t);
if ((file->cls->write_vector)(file, dxpl_id, (uint32_t)vec_arr_nused, types, addrs, sizes, vec_bufs) <
0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write vector request failed");
+
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW && count > 0) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_VECTOR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
- else {
+ else if (count > 0) {
uint32_t no_selection_io_cause;
+ uint32_t actual_selection_io_mode;
/* Add H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB to no selection I/O cause */
H5CX_get_no_selection_io_cause(&no_selection_io_cause);
no_selection_io_cause |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
H5CX_set_no_selection_io_cause(no_selection_io_cause);
+
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SCALAR_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
done:
@@ -1810,6 +1925,8 @@ H5FD_write_selection(H5FD_t *file, H5FD_mem_t type, uint32_t count, H5S_t **mem_
/* if the underlying VFD supports selection write, make the call */
if (file->cls->write_selection) {
+ uint32_t actual_selection_io_mode;
+
/* Allocate array of space IDs if necessary, otherwise use local
* buffers */
if (count > sizeof(mem_space_ids_local) / sizeof(mem_space_ids_local[0])) {
@@ -1835,6 +1952,13 @@ H5FD_write_selection(H5FD_t *file, H5FD_mem_t type, uint32_t count, H5S_t **mem_
if ((file->cls->write_selection)(file, type, dxpl_id, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write selection request failed");
+
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SELECTION_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
else
/* Otherwise, implement the selection write as a sequence of regular
@@ -1979,9 +2103,18 @@ H5FD_write_selection_id(uint32_t skip_cb, H5FD_t *file, H5FD_mem_t type, uint32_
/* if the underlying VFD supports selection write, make the call */
if (!skip_selection_cb && file->cls->write_selection) {
+ uint32_t actual_selection_io_mode;
+
if ((file->cls->write_selection)(file, type, dxpl_id, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write selection request failed");
+
+ /* Set actual selection I/O, if this is a raw data operation */
+ if (type == H5FD_MEM_DRAW) {
+ H5CX_get_actual_selection_io_mode(&actual_selection_io_mode);
+ actual_selection_io_mode |= H5D_SELECTION_IO;
+ H5CX_set_actual_selection_io_mode(actual_selection_io_mode);
+ }
}
else {
/* Otherwise, implement the selection write as a sequence of regular
diff --git a/src/H5M.c b/src/H5M.c
index e2fd202..f59e02f 100644
--- a/src/H5M.c
+++ b/src/H5M.c
@@ -893,9 +893,6 @@ H5Mget_count(hid_t map_id, hsize_t *count /*out*/, hid_t dxpl_id)
else if (true != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms");
- /* Set DXPL for operation */
- H5CX_set_dxpl(dxpl_id);
-
/* Set up VOL callback arguments */
map_args.get.get_type = H5VL_MAP_GET_COUNT;
map_args.get.args.get_count.count = 0;
@@ -952,9 +949,6 @@ H5M__put_api_common(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t
else if (true != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms");
- /* Set DXPL for operation */
- H5CX_set_dxpl(dxpl_id);
-
/* Set up VOL callback arguments */
map_args.put.key_mem_type_id = key_mem_type_id;
map_args.put.key = key;
@@ -1087,9 +1081,6 @@ H5M__get_api_common(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t
else if (true != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms");
- /* Set DXPL for operation */
- H5CX_set_dxpl(dxpl_id);
-
/* Set up VOL callback arguments */
map_args.get_val.key_mem_type_id = key_mem_type_id;
map_args.get_val.key = key;
@@ -1225,9 +1216,6 @@ H5Mexists(hid_t map_id, hid_t key_mem_type_id, const void *key, hbool_t *exists,
else if (true != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms");
- /* Set DXPL for operation */
- H5CX_set_dxpl(dxpl_id);
-
/* Set up VOL callback arguments */
map_args.exists.key_mem_type_id = key_mem_type_id;
map_args.exists.key = key;
@@ -1305,9 +1293,6 @@ H5Miterate(hid_t map_id, hsize_t *idx, hid_t key_mem_type_id, H5M_iterate_t op,
else if (true != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms");
- /* Set DXPL for operation */
- H5CX_set_dxpl(dxpl_id);
-
/* Set up VOL callback arguments */
map_args.specific.specific_type = H5VL_MAP_ITER;
map_args.specific.args.iterate.loc_params.type = H5VL_OBJECT_BY_SELF;
@@ -1394,9 +1379,6 @@ H5Miterate_by_name(hid_t loc_id, const char *map_name, hsize_t *idx, hid_t key_m
else if (true != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms");
- /* Set DXPL for operation */
- H5CX_set_dxpl(dxpl_id);
-
/* Set up VOL callback arguments */
map_args.specific.specific_type = H5VL_MAP_ITER;
map_args.specific.args.iterate.loc_params.type = H5VL_OBJECT_BY_NAME;
@@ -1462,9 +1444,6 @@ H5Mdelete(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t dxpl_id)
else if (true != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms");
- /* Set DXPL for operation */
- H5CX_set_dxpl(dxpl_id);
-
/* Set up VOL callback arguments */
map_args.specific.specific_type = H5VL_MAP_DELETE;
map_args.specific.args.del.loc_params.type = H5VL_OBJECT_BY_SELF;
diff --git a/src/H5Pdxpl.c b/src/H5Pdxpl.c
index b6130f5..9adb2d6 100644
--- a/src/H5Pdxpl.c
+++ b/src/H5Pdxpl.c
@@ -175,6 +175,9 @@
/* Definitions for cause of no selection I/O property */
#define H5D_XFER_NO_SELECTION_IO_CAUSE_SIZE sizeof(uint32_t)
#define H5D_XFER_NO_SELECTION_IO_CAUSE_DEF 0
+/* Definitions for actual selection I/O mode property */
+#define H5D_XFER_ACTUAL_SELECTION_IO_MODE_SIZE sizeof(uint32_t)
+#define H5D_XFER_ACTUAL_SELECTION_IO_MODE_DEF 0
/* Definitions for modify write buffer property */
#define H5D_XFER_MODIFY_WRITE_BUF_SIZE sizeof(bool)
#define H5D_XFER_MODIFY_WRITE_BUF_DEF false
@@ -295,7 +298,8 @@ static const H5S_t *H5D_def_dset_io_sel_g =
H5D_XFER_DSET_IO_SEL_DEF; /* Default value for dataset I/O selection */
static const H5D_selection_io_mode_t H5D_def_selection_io_mode_g = H5D_XFER_SELECTION_IO_MODE_DEF;
static const uint32_t H5D_def_no_selection_io_cause_g = H5D_XFER_NO_SELECTION_IO_CAUSE_DEF;
-static const bool H5D_def_modify_write_buf_g = H5D_XFER_MODIFY_WRITE_BUF_DEF;
+static const uint32_t H5D_def_actual_selection_io_mode_g = H5D_XFER_ACTUAL_SELECTION_IO_MODE_DEF;
+static const bool H5D_def_modify_write_buf_g = H5D_XFER_MODIFY_WRITE_BUF_DEF;
/*-------------------------------------------------------------------------
* Function: H5P__dxfr_reg_prop
@@ -470,6 +474,13 @@ H5P__dxfr_reg_prop(H5P_genclass_t *pclass)
NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class");
+ /* Register the actual selection I/O mode property */
+ /* (Note: this property should not have an encode/decode callback) */
+ if (H5P__register_real(pclass, H5D_XFER_ACTUAL_SELECTION_IO_MODE_NAME,
+ H5D_XFER_ACTUAL_SELECTION_IO_MODE_SIZE, &H5D_def_actual_selection_io_mode_g, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class");
+
/* Register the modify write buffer property */
if (H5P__register_real(pclass, H5D_XFER_MODIFY_WRITE_BUF_NAME, H5D_XFER_MODIFY_WRITE_BUF_SIZE,
&H5D_def_modify_write_buf_g, NULL, NULL, NULL, H5D_XFER_MODIFY_WRITE_BUF_ENC,
@@ -2457,6 +2468,39 @@ done:
} /* end H5Pget_no_selection_io_cause() */
/*-------------------------------------------------------------------------
+ * Function: H5Pget_actual_selection_io_mode
+ *
+ * Purpose: Retrieves actual selection I/O mode
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Vailin Choi
+ * April 27, 2023
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_actual_selection_io_mode(hid_t plist_id, uint32_t *actual_selection_io_mode /*out*/)
+{
+ H5P_genplist_t *plist;
+ herr_t ret_value = SUCCEED; /* return value */
+
+ FUNC_ENTER_API(FAIL)
+ H5TRACE2("e", "ix", plist_id, actual_selection_io_mode);
+
+ /* Get the plist structure */
+ if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
+ HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID");
+
+ /* Return values */
+ if (actual_selection_io_mode)
+ if (H5P_get(plist, H5D_XFER_ACTUAL_SELECTION_IO_MODE_NAME, actual_selection_io_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get actual_selection_io_mode value");
+
+done:
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Pget_actual_selection_io_mode() */
+
+/*-------------------------------------------------------------------------
* Function: H5P__dxfr_modify_write_buf_enc
*
* Purpose: Callback routine which is called whenever the modify write
diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h
index a58d97f..64ccb77 100644
--- a/src/H5Ppublic.h
+++ b/src/H5Ppublic.h
@@ -420,6 +420,13 @@ typedef enum H5D_selection_io_mode_t {
} H5D_selection_io_mode_t;
//! <!--[H5D_selection_io_mode_t_snip] -->
+/**
+ * Causes for H5Pget_actual_selection_io_mode() property
+ */
+#define H5D_SCALAR_IO (0x0001u) /**< Scalar (or legacy MPIO) I/O was performed */
+#define H5D_VECTOR_IO (0x0002u) /**< Vector I/O was performed */
+#define H5D_SELECTION_IO (0x0004u) /**< Selection I/O was performed */
+
/********************/
/* Public Variables */
/********************/
@@ -4830,9 +4837,8 @@ H5_DLL herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref);
* enumerated value in #H5F_libver_t, indicating that this is
* currently the latest format available.
*
- * The library supports the following five pairs of
- * (\p low, \p high) combinations as derived from the values
- * in #H5F_libver_t:
+ * The library supports the following pairs of (\p low, \p high)
+ * combinations as derived from the values in #H5F_libver_t:
*
* <table>
* <tr>
@@ -4859,13 +4865,38 @@ H5_DLL herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref);
* \li The library will create objects with the earliest possible
* format versions.
* \li The library will allow objects to be created with the latest
- * format versions available to library release 1.10.x.
- * Since 1.10.x is also #H5F_LIBVER_LATEST, there is no upper
- * limit on the format versions to use. For example, if a newer
- * format version is required to support a feature e.g. virtual
- * dataset, this setting will allow the object to be created.
- * \li This is the library default setting and provides the greatest
- * format compatibility.
+ * format versions available to library release 1.10.x. Note
+ * that as 1.10.11 is the last release of the 1.10 series.
+ * \li API calls that create objects or features that are
+ * available to versions of the library greater than 1.10.x
+ * release will fail.
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>\p low=#H5F_LIBVER_EARLIEST<br />
+ * \p high=#H5F_LIBVER_V112</td>
+ * <td>
+ * \li The library will create objects with the earliest possible
+ * format versions.
+ * \li The library will allow objects to be created with the latest
+ * format versions available to library release 1.12.x. Note
+ * that as 1.12.3 is the last release of the 1.12 series.
+ * \li API calls that create objects or features that are
+ * available to versions of the library greater than 1.12.x
+ * release will fail.
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>\p low=#H5F_LIBVER_EARLIEST<br />
+ * \p high=#H5F_LIBVER_V114</td>
+ * <td>
+ * \li The library will create objects with the earliest possible
+ * format versions.
+ * \li The library will allow objects to be created with the latest
+ * format versions available to library release 1.14.x.
+ * \li API calls that create objects or features that are
+ * available to versions of the library greater than 1.14.x
+ * release will fail.
* </td>
* </tr>
* <tr>
@@ -4887,12 +4918,39 @@ H5_DLL herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref);
* \li The library will create objects with the latest format
* versions available to library release 1.8.x.
* \li The library will allow objects to be created with the latest
- * format versions available to library release 1.10.x.
- * Since 1.10.x is also #H5F_LIBVER_LATEST, there is no upper
- * limit on the format versions to use. For example, if a
- * newer format version is required to support a feature e.g.
- * virtual dataset, this setting will allow the object to be
- * created.
+ * format versions available to library release 1.10.x. Note
+ * that 1.10.11 is the last release of the 1.10 series.
+ * \li API calls that create objects or features that are
+ * available to versions of the library greater than 1.10.x
+ * release will fail.
+ * \li Earlier versions of the library may not be able to access
+ * objects created with this setting.</td>
+ * </tr>
+ * <tr>
+ * <td>\p low=#H5F_LIBVER_V18<br />
+ * \p high=#H5F_LIBVER_V112</td>
+ * <td>
+ * \li The library will create objects with the latest format
+ * versions available to library release 1.8.x.
+ * \li The library will allow objects to be created with the latest
+ * format versions available to library release 1.12.x.
+ * \li API calls that create objects or features that are
+ * available to versions of the library greater than 1.12.x
+ * release will fail.
+ * \li Earlier versions of the library may not be able to access
+ * objects created with this setting.</td>
+ * </tr>
+ * <tr>
+ * <td>\p low=#H5F_LIBVER_V18<br />
+ * \p high=#H5F_LIBVER_V114</td>
+ * <td>
+ * \li The library will create objects with the latest format
+ * versions available to library release 1.8.x.
+ * \li The library will allow objects to be created with the latest
+ * format versions available to library release 1.14.x.
+ * \li API calls that create objects or features that are
+ * available to versions of the library greater than 1.14.x
+ * release will fail.
* \li Earlier versions of the library may not be able to access
* objects created with this setting.</td>
* </tr>
@@ -4904,22 +4962,115 @@ H5_DLL herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref);
* \li The library will create objects with the latest format
* versions available to library release 1.10.x.
* \li The library will allow objects to be created with the latest
- * format versions available to library release 1.10.x.
- * Since 1.10.x is also #H5F_LIBVER_LATEST, there is no upper
- * limit on the format versions to use. For example, if a
- * newer format version is required to support a feature e.g.
- * virtual dataset, this setting will allow the object to be
- * created.
- * \li This setting allows users to take advantage of the latest
- * features and performance enhancements in the library.
- * However, objects written with this setting may be
+ * format versions available to library release 1.10.x. Note
+ * that 1.10.11 is the last release of the 1.10 series.
+ * \li The objects written with this setting may be
+ * accessible to a smaller range of library versions than
+ * would be the case if low is set to #H5F_LIBVER_EARLIEST.
+ * \li API calls that create objects or features that are available
+ * to versions of the library greater than 1.10.x release will
+ * fail.
+ * \li Earlier versions of the library may not be able to access
+ * objects created with this setting.</td>
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>\p low=#H5F_LIBVER_V110<br />
+ * \p high=#H5F_LIBVER_V112
+ * </td>
+ * <td>
+ * \li The library will create objects with the latest format
+ * versions available to library release 1.10.x.
+ * \li The library will allow objects to be created with the latest
+ * format versions available to library release 1.12.x.
+ * \li The objects written with this setting may be
* accessible to a smaller range of library versions than
* would be the case if low is set to #H5F_LIBVER_EARLIEST.
+ * \li API calls that create objects or features that are available
+ * to versions of the library greater than 1.12.x release will
+ * fail.
* \li Earlier versions of the library may not be able to access
- * objects created with this
- * setting.
+ * objects created with this setting.</td>
* </td>
* </tr>
+ * <tr>
+ * <td>\p low=#H5F_LIBVER_V110<br />
+ * \p high=#H5F_LIBVER_V114
+ * </td>
+ * <td>
+ * \li The library will create objects with the latest format
+ * versions available to library release 1.10.x.
+ * \li The library will allow objects to be created with the latest
+ * format versions available to library release 1.14.x.
+ * \li The objects written with this setting may be
+ * accessible to a smaller range of library versions than
+ * would be the case if low is set to #H5F_LIBVER_EARLIEST.
+ * \li API calls that create objects or features that are available
+ * to versions of the library greater than 1.14.x release will
+ * fail.
+ * \li Earlier versions of the library may not be able to access
+ * objects created with this setting.</td>
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>\p low=#H5F_LIBVER_V112<br />
+ * \p high=#H5F_LIBVER_V112
+ * </td>
+ * <td>
+ * \li The library will create objects with the latest format
+ * versions available to library release 1.12.x.
+ * \li The library will allow objects to be created with the latest
+ * format versions available to library release 1.12.x.
+ * \li The objects written with this setting may be
+ * accessible to a smaller range of library versions than
+ * would be the case if low is set to #H5F_LIBVER_EARLIEST.
+ * \li API calls that create objects or features that are available
+ * to versions of the library greater than 1.12.x release will
+ * fail.
+ * \li Earlier versions of the library may not be able to access
+ * objects created with this setting.</td>
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>\p low=#H5F_LIBVER_V112<br />
+ * \p high=#H5F_LIBVER_V114
+ * </td>
+ * <td>
+ * \li The library will create objects with the latest format
+ * versions available to library release 1.12.x.
+ * \li The library will allow objects to be created with the latest
+ * format versions available to library release 1.14.x.
+ * \li The objects written with this setting may be
+ * accessible to a smaller range of library versions than
+ * would be the case if low is set to #H5F_LIBVER_EARLIEST.
+ * \li API calls that create objects or features that are available
+ * to versions of the library greater than 1.14.x release will
+ * fail.
+ * \li Earlier versions of the library may not be able to access
+ * objects created with this setting.</td>
+ * </td>
+ * </tr>
+ * </tr>
+ * <tr>
+ * <td>\p low=#H5F_LIBVER_V114<br />
+ * \p high=#H5F_LIBVER_V114
+ * </td>
+ * <td>
+ * \li The library will create objects with the latest format
+ * versions available to library release 1.14.x.
+ * \li The library will allow objects to be created with the latest
+ * format versions available to library release 1.14.x.
+ * \li The objects written with this setting may be
+ * accessible to a smaller range of library versions than
+ * would be the case if low is set to #H5F_LIBVER_EARLIEST.
+ * \li API calls that create objects or features that are available
+ * to versions of the library greater than 1.14.x release will
+ * fail.
+ * \li Earlier versions of the library may not be able to access
+ * objects created with this setting.</td>
+ * </td>
+ * </tr>
+ * </tr>
* </table>
*
* \version 1.10.2 #H5F_LIBVER_V18 added to the enumerated defines in
@@ -5811,7 +5962,7 @@ H5_DLL int H5Pget_external_count(hid_t plist_id);
* \note H5Pget_fill_time() is designed to work in coordination with the
* dataset fill value and dataset storage allocation time properties,
* retrieved with the functions H5Pget_fill_value() and
- * H5Pget_alloc_time().
+ * H5Pget_alloc_time().type == H5FD_MEM_DRAW
*
* \since 1.6.0
*
@@ -8300,6 +8451,61 @@ H5_DLL herr_t H5Pget_selection_io(hid_t plist_id, H5D_selection_io_mode_t *selec
H5_DLL herr_t H5Pget_no_selection_io_cause(hid_t plist_id, uint32_t *no_selection_io_cause);
/**
+ * \ingroup DXPL
+ *
+ * \brief Retrieves the type(s) of I/O that HDF5 actually performed on raw data
+ * during the last I/O call
+ *
+ * \dxpl_id{plist_id}
+ * \param[out] actual_selection_io_mode A bitwise set value indicating the
+ * type(s) of I/O performed
+ * \return \herr_t
+ *
+ * \par Motivation:
+ * A user can request selection I/O to be performed via a data transfer
+ * property list (DXPL). This can be used to enable collective I/O with
+ * type conversion, or with custom VFDs that support vector or selection
+ * I/O. However, there are conditions that can cause HDF5 to forgo
+ * selection or vector I/O and perform legacy (scalar) I/O instead.
+ * This function allows the user to determine which type or types of
+ * I/O were actually performed.
+ *
+ * \details H5Pget_actual_selection_io_mode() allows the user to determine which
+ * type(s) of I/O were actually performed on raw data during the last
+ * I/O operation which used \p plist_id. This property is set after
+ * all I/O is completed; if I/O fails, it will not be set.
+ *
+ * H5Pget_no_selection_io_cause() can be used to determine the reason
+ * why selection or vector I/O was not performed.
+ *
+ * Valid bitflags returned in \p actual_selection_io_mode are listed
+ * as follows.
+ *
+ * - #H5D_SCALAR_IO
+ * Scalar (or legacy MPIO) I/O was performed
+ * - #H5D_VECTOR_IO
+ * Vector I/O was performed
+ * - #H5D_SELECTION_IO
+ * Selection I/O was performed
+ *
+ * 0 or more of these can be present in \p actual_selection_io_mode in
+ * a bitwise fashion, since a single operation can trigger multiple
+ * instances of I/O, possibly with different types. A value of \p 0
+ * indicates no raw data I/O was performed during the operation.
+ *
+ * Be aware that this function will only include raw data I/O performed
+ * to/from disk as part of the last I/O operation. Any metadata
+ * I/O, including attribute and compact dataset I/O, is disregarded.
+ * It is also possible that data was cached in the dataset chunk cache
+ * or sieve buffer, which may prevent I/O from hitting the disk, and
+ * thereby prevent it from being counted by this function.
+ *
+ * \since 1.14.3
+ *
+ */
+H5_DLL herr_t H5Pget_actual_selection_io_mode(hid_t plist_id, uint32_t *actual_selection_io_mode);
+
+/**
*
* \ingroup DXPL
*
diff --git a/test/CMakePassthroughVOLTests.cmake b/test/CMakePassthroughVOLTests.cmake
index a5d9b59..853e4b3 100644
--- a/test/CMakePassthroughVOLTests.cmake
+++ b/test/CMakePassthroughVOLTests.cmake
@@ -37,19 +37,19 @@ endforeach ()
foreach (voltest ${VOL_LIST})
foreach (h5_tfile ${HDF5_TEST_FILES})
- HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/${h5_tfile}" "${PROJECT_BINARY_DIR}/${voltest}/${h5_tfile}" "HDF5_VOLTEST_LIB_files")
+ HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/${h5_tfile}" "${PROJECT_BINARY_DIR}/${voltest}/testfiles/${h5_tfile}" "HDF5_VOLTEST_LIB_files")
endforeach ()
endforeach ()
foreach (voltest ${VOL_LIST})
foreach (ref_file ${HDF5_REFERENCE_FILES})
- HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/${ref_file}" "${PROJECT_BINARY_DIR}/${voltest}/${ref_file}" "HDF5_VOLTEST_LIB_files")
+ HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/${ref_file}" "${PROJECT_BINARY_DIR}/${voltest}/testfiles/${ref_file}" "HDF5_VOLTEST_LIB_files")
endforeach ()
endforeach ()
foreach (voltest ${VOL_LIST})
foreach (h5_file ${HDF5_REFERENCE_TEST_FILES})
- HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/${h5_file}" "${PROJECT_BINARY_DIR}/${voltest}/${h5_file}" "HDF5_VOLTEST_LIB_files")
+ HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/${h5_file}" "${PROJECT_BINARY_DIR}/${voltest}/testfiles/${h5_file}" "HDF5_VOLTEST_LIB_files")
endforeach ()
endforeach ()
diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c
index 02dbde3..460c8ae 100644
--- a/test/cmpd_dset.c
+++ b/test/cmpd_dset.c
@@ -401,8 +401,10 @@ compare_a_b_c_data(void *exp1_buf, void *exp2_buf, void *rbuf)
if (s1_ptr->a != rbuf_ptr->a || s2_ptr->b != rbuf_ptr->b || s2_ptr->c != rbuf_ptr->c) {
H5_FAILED();
printf(" i=%d\n", i);
- printf(" expect_buf:a=%ld, b=%ld, c=%ld\n", s1_ptr->a, s2_ptr->b, s2_ptr->c);
- printf(" rbuf: a=%ld, b=%ld, c=%ld", rbuf_ptr->a, rbuf_ptr->b, rbuf_ptr->c);
+ printf(" expect_buf:a=%" PRId64 ", b=%" PRId64 ", c=%" PRId64 "\n", s1_ptr->a, s2_ptr->b,
+ s2_ptr->c);
+ printf(" rbuf: a=%" PRId64 ", b=%" PRId64 ", c=%" PRId64 "\n", rbuf_ptr->a, rbuf_ptr->b,
+ rbuf_ptr->c);
goto error;
}
} /* end for */
diff --git a/test/links.c b/test/links.c
index 6f07d32..99e0114 100644
--- a/test/links.c
+++ b/test/links.c
@@ -9880,6 +9880,7 @@ external_set_elink_cb(hid_t fapl, bool new_format)
set_elink_cb_t op_data, *op_data_p;
H5L_elink_traverse_t cb;
char filename1[NAME_BUF_SIZE], filename2[NAME_BUF_SIZE];
+ bool driver_is_parallel;
unsigned flags;
if (new_format)
@@ -9890,16 +9891,21 @@ external_set_elink_cb(hid_t fapl, bool new_format)
/* Build user data for callback */
op_data.parent_file = filename1;
op_data.target_file = filename2;
+
+ /* Check if using a parallel file driver */
+ if (h5_using_parallel_driver(fapl, &driver_is_parallel) < 0)
+ TEST_ERROR;
+
+ base_driver = H5Pget_driver(fapl);
+
/* Core file driver has issues when used as the member file driver for a family file */
/* Family file driver cannot be used with family or multi drivers for member files */
/* Also disable parallel member drivers, because H5F_HAS_FEATURE(H5FD_FEAT_HAS_MPI)
would report false, causing problems */
- base_driver = H5Pget_driver(fapl);
- op_data.base_fapl =
- (base_driver == H5FD_FAMILY || base_driver == H5FD_MULTI || base_driver == H5FD_MPIO ||
- base_driver == H5FD_CORE || base_driver == H5FD_DIRECT || base_driver == H5FD_SUBFILING)
- ? H5P_DEFAULT
- : fapl;
+ op_data.base_fapl = fapl;
+ if (base_driver == H5FD_CORE || base_driver == H5FD_FAMILY || base_driver == H5FD_MULTI ||
+ base_driver == H5FD_DIRECT || driver_is_parallel)
+ op_data.base_fapl = H5P_DEFAULT;
op_data.fam_size = ELINK_CB_FAM_SIZE;
op_data.code = 0;
@@ -18434,14 +18440,12 @@ link_info_by_idx_old(hid_t fapl)
{
hid_t file_id = H5I_INVALID_HID; /* File ID */
hid_t group_id = H5I_INVALID_HID, group_id2 = H5I_INVALID_HID; /* Group IDs */
- H5F_t *f = NULL;
- unsigned hard_link; /* Create hard or soft link? */
- H5L_info2_t linfo; /* Link info struct */
- char objname[NAME_BUF_SIZE]; /* Object name */
- char valname[NAME_BUF_SIZE]; /* Link value name */
- char filename[NAME_BUF_SIZE]; /* File name */
+ unsigned hard_link; /* Create hard or soft link? */
+ H5L_info2_t linfo; /* Link info struct */
+ char objname[NAME_BUF_SIZE]; /* Object name */
+ char valname[NAME_BUF_SIZE]; /* Link value name */
+ char filename[NAME_BUF_SIZE]; /* File name */
H5O_token_t objtoken[CORDER_NLINKS]; /* Tokens (Addresses) of the objects created */
- void *vol_obj_file = NULL; /* Object of file_id */
char tmpname[NAME_BUF_SIZE]; /* Temporary link name */
char tmpval[NAME_BUF_SIZE]; /* Temporary link value */
unsigned u; /* Local index variable */
@@ -18461,14 +18465,6 @@ link_info_by_idx_old(hid_t fapl)
if ((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
TEST_ERROR;
- /* Need the file struct to address encoding */
- /* Retrieve VOL object */
- if (NULL == (vol_obj_file = H5VL_vol_object(file_id)))
- TEST_ERROR;
- /* Retrieve file from VOL object */
- if (NULL == (f = (H5F_t *)H5VL_object_data((const H5VL_object_t *)vol_obj_file)))
- TEST_ERROR;
-
/* Create group to operate on */
if ((group_id = H5Gcreate2(file_id, CORDER_GROUP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
TEST_ERROR;
@@ -19066,12 +19062,10 @@ delete_by_idx_old(hid_t fapl)
{
hid_t file_id = H5I_INVALID_HID; /* File ID */
hid_t group_id = H5I_INVALID_HID, group_id2 = H5I_INVALID_HID; /* Group IDs */
- H5F_t *f = NULL;
- H5L_info2_t linfo; /* Link info struct */
- H5_iter_order_t order; /* Order within in the index */
- void *vol_obj_file = NULL; /* Object of file_id */
- char objname[NAME_BUF_SIZE]; /* Object name */
- char filename[NAME_BUF_SIZE]; /* File name */
+ H5L_info2_t linfo; /* Link info struct */
+ H5_iter_order_t order; /* Order within in the index */
+ char objname[NAME_BUF_SIZE]; /* Object name */
+ char filename[NAME_BUF_SIZE]; /* File name */
H5O_token_t objtoken[CORDER_NLINKS]; /* Tokens (Addresses) of the objects created */
char tmpname[NAME_BUF_SIZE]; /* Temporary link name */
unsigned u; /* Local index variable */
@@ -19091,14 +19085,6 @@ delete_by_idx_old(hid_t fapl)
if ((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
TEST_ERROR;
- /* Need the file struct to address encoding */
- /* Retrieve VOL object */
- if (NULL == (vol_obj_file = H5VL_vol_object(file_id)))
- TEST_ERROR;
- /* Retrieve file from VOL object */
- if (NULL == (f = (H5F_t *)H5VL_object_data((const H5VL_object_t *)vol_obj_file)))
- TEST_ERROR;
-
/* Create group to operate on */
if ((group_id = H5Gcreate2(file_id, CORDER_GROUP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
TEST_ERROR;
diff --git a/test/select_io_dset.c b/test/select_io_dset.c
index 79449aa..33b1c84 100644
--- a/test/select_io_dset.c
+++ b/test/select_io_dset.c
@@ -104,13 +104,28 @@ typedef enum {
#define TEST_TCONV_BUF_TOO_SMALL 0x100
#define TEST_IN_PLACE_TCONV 0x200
+static herr_t
+check_actual_selection_io_mode(hid_t dxpl, uint32_t sel_io_mode_expected)
+{
+ uint32_t actual_sel_io_mode;
+
+ if (H5Pget_actual_selection_io_mode(dxpl, &actual_sel_io_mode) < 0)
+ TEST_ERROR;
+ if (actual_sel_io_mode != sel_io_mode_expected)
+ TEST_ERROR;
+
+ return SUCCEED;
+error:
+ return FAIL;
+}
+
/*
* Case 1: single dataset read/write, no type conversion (null case)
* --create dataset with H5T_NATIVE_INT
* --write/read dataset with H5T_NATIVE_INT
*/
static herr_t
-test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_no_type_conv(hid_t fid, unsigned set_cache, unsigned chunked, unsigned dtrans, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -130,14 +145,14 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
/* Create 1d data space */
dims[0] = DSET_SELECT_DIM;
if ((sid = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Generate dataset name */
@@ -146,7 +161,7 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
/* Create dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize data */
for (i = 0; i < DSET_SELECT_DIM; i++) {
@@ -156,23 +171,23 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
/* Create dataset transfer property list */
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set modify write buffer if requested */
if (mwbuf)
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set data transform */
if (dtrans)
if (H5Pset_data_transform(dxpl, expr) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Copy wbuf if the library will be modifying it */
if (mwbuf)
@@ -180,7 +195,11 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
/* Write data to the dataset with/without data transform */
if (H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
+
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
@@ -188,7 +207,11 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
/* Read data from the dataset without data transform set in dxpl */
if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, ntrans_dxpl, rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
+
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
/* Verify data or transformed data read */
for (i = 0; i < DSET_SELECT_DIM; i++)
@@ -203,7 +226,7 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
/* Read the data from the dataset with data transform set in dxpl */
if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Verify data read is transformed a second time */
for (i = 0; i < DSET_SELECT_DIM; i++)
@@ -216,15 +239,15 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
}
if (H5Sclose(sid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Dclose(did) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(ntrans_dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
PASSED();
@@ -252,7 +275,7 @@ error:
* --read again with H5T_STD_I32BE
*/
static herr_t
-test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_no_size_change_no_bkg(hid_t fid, unsigned set_cache, unsigned chunked, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -268,39 +291,39 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
int fillvalue = (-1);
if ((wbuf = (char *)malloc((size_t)(4 * DSET_SELECT_DIM))) == NULL)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && (wbuf_bak = (char *)malloc((size_t)(4 * DSET_SELECT_DIM))) == NULL)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((rbuf = (char *)malloc((size_t)(4 * DSET_SELECT_DIM))) == NULL)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Create dataset transfer property list */
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set modify write buffer if requested */
if (mwbuf)
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Create 1d data space */
dims[0] = DSET_SELECT_DIM;
if ((sid = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillvalue) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Generate dataset name */
@@ -309,7 +332,7 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create 1d dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_STD_I32BE, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize data */
for (i = 0; i < DSET_SELECT_DIM; i++) {
@@ -325,7 +348,11 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Write the data to the dataset with little endian */
if (H5Dwrite(did, H5T_STD_I32LE, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
+
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
@@ -333,7 +360,11 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Read the data from the dataset with little endian */
if (H5Dread(did, H5T_STD_I32LE, H5S_ALL, H5S_ALL, dxpl, rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
+
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
/* Verify data read little endian */
for (i = 0; i < DSET_SELECT_DIM; i++)
@@ -347,7 +378,7 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Read the data from the dataset with big endian */
if (H5Dread(did, H5T_STD_I32BE, H5S_ALL, H5S_ALL, dxpl, rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Verify data read in big endian */
for (i = 0; i < DSET_SELECT_DIM; i++)
@@ -360,13 +391,13 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
}
if (H5Sclose(sid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Dclose(did) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
free(wbuf);
free(wbuf_bak);
@@ -405,7 +436,7 @@ error:
*
*/
static herr_t
-test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_larger_mem_type_no_bkg(hid_t fid, unsigned set_cache, unsigned chunked, unsigned dtrans, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -425,14 +456,14 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
/* Create 1d data space */
dims[0] = DSET_SELECT_DIM;
if ((sid = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Generate dataset name */
@@ -441,7 +472,7 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
/* Create dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize data */
for (i = 0; i < DSET_SELECT_DIM; i++) {
@@ -451,23 +482,23 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
/* Create dataset transfer property list */
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set modify write buffer if requested */
if (mwbuf)
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set data transform */
if (dtrans)
if (H5Pset_data_transform(dxpl, expr) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Copy wbuf if the library will be modifying it */
if (mwbuf)
@@ -475,7 +506,11 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
/* Write data to the dataset with/without data transform set in dxpl */
if (H5Dwrite(did, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
+
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
@@ -483,7 +518,11 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
/* Read the data from the dataset without data transform in dxpl */
if (H5Dread(did, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, ntrans_dxpl, rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
+
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
/* Verify data or transformed data read */
for (i = 0; i < DSET_SELECT_DIM; i++)
@@ -498,7 +537,7 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
/* Read data from the dataset with data transform set in dxpl */
if (H5Dread(did, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, dxpl, rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Verify data read is transformed a second time */
for (i = 0; i < DSET_SELECT_DIM; i++)
@@ -511,15 +550,15 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
}
if (H5Sclose(sid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Dclose(did) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(ntrans_dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
PASSED();
@@ -547,7 +586,7 @@ error:
* --read dataset with H5T_NATIVE_SHORT
*/
static herr_t
-test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_smaller_mem_type_no_bkg(hid_t fid, unsigned set_cache, unsigned chunked, unsigned dtrans, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -567,14 +606,14 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
/* Create 1d data space */
dims[0] = DSET_SELECT_DIM;
if ((sid = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Generate dataset name */
@@ -583,7 +622,7 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
/* Create 1d chunked dataset with/without data transform */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize data */
for (i = 0; i < DSET_SELECT_DIM; i++) {
@@ -593,23 +632,23 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
/* Create dataset transfer property list */
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set modify write buffer if requested */
if (mwbuf)
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set data transform */
if (dtrans) {
if (H5Pset_data_transform(dxpl, expr) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Copy wbuf if the library will be modifying it */
@@ -618,7 +657,11 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
/* Write data to the dataset with/without data transform in dxpl */
if (H5Dwrite(did, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
+
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
@@ -626,7 +669,11 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
/* Read data from the dataset without data transform in dxpl */
if (H5Dread(did, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, ntrans_dxpl, rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
+
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
/* Verify data or transformed data read */
for (i = 0; i < DSET_SELECT_DIM; i++)
@@ -641,7 +688,7 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
/* Read data from the dataset with data transform set in dxpl */
if (H5Dread(did, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, dxpl, rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Verify data read is transformed a second time */
for (i = 0; i < DSET_SELECT_DIM; i++)
@@ -654,15 +701,15 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
}
if (H5Sclose(sid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Dclose(did) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(ntrans_dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
PASSED();
@@ -730,55 +777,55 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create dataset transfer property list */
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set modify write buffer if requested */
if (mwbuf)
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Allocate buffers for datasets */
if (NULL == (s1_wbuf = (s1_t *)malloc(sizeof(s1_t) * DSET_SELECT_DIM)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && NULL == (s1_wbuf_bak = (s1_t *)malloc(sizeof(s1_t) * DSET_SELECT_DIM)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (s1_rbuf = (s1_t *)malloc(sizeof(s1_t) * DSET_SELECT_DIM)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (s2_wbuf = (s2_t *)malloc(sizeof(s2_t) * DSET_SELECT_DIM)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && NULL == (s2_wbuf_bak = (s2_t *)malloc(sizeof(s2_t) * DSET_SELECT_DIM)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (s2_rbuf = (s2_t *)malloc(sizeof(s2_t) * DSET_SELECT_DIM)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Create the memory data type */
if ((s1_tid = H5Tcreate(H5T_COMPOUND, sizeof(s1_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tinsert(s1_tid, "a", HOFFSET(s1_t, a), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s1_tid, "b", HOFFSET(s1_t, b), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s1_tid, "c", HOFFSET(s1_t, c), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s1_tid, "d", HOFFSET(s1_t, d), H5T_NATIVE_INT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Create 1d data space */
dims[0] = DSET_SELECT_DIM;
if ((sid = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_fill_value(dcpl, s1_tid, &fillvalue) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Case 5(a) */
@@ -789,7 +836,7 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create 1d dataset */
if ((did = H5Dcreate2(fid, dset_name, s1_tid, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize data */
for (i = 0; i < DSET_SELECT_DIM; i++) {
@@ -805,7 +852,7 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Write all the data to the dataset */
if (H5Dwrite(did, s1_tid, H5S_ALL, H5S_ALL, dxpl, s1_wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
@@ -813,7 +860,7 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Read all the data from the dataset */
if (H5Dread(did, s1_tid, H5S_ALL, H5S_ALL, dxpl, s1_rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Verify data read */
for (i = 0; i < DSET_SELECT_DIM; i++) {
@@ -838,12 +885,12 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create a compound type same size as s1_t */
if ((ss_ac_tid = H5Tcreate(H5T_COMPOUND, sizeof(s1_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* but contains only subset members of s1_t */
if (H5Tinsert(ss_ac_tid, "a", HOFFSET(s1_t, a), H5T_NATIVE_INT) < 0 ||
H5Tinsert(ss_ac_tid, "c", HOFFSET(s1_t, c), H5T_NATIVE_INT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Copy wbuf if the library will be modifying it */
if (mwbuf)
@@ -851,7 +898,7 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Write s1_wbuf to the dataset with only subset members in ss_tid */
if (H5Dwrite(did, ss_ac_tid, H5S_ALL, H5S_ALL, dxpl, s1_wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
@@ -859,7 +906,7 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Read the whole compound back */
if (H5Dread(did, ss_ac_tid, H5S_ALL, H5S_ALL, dxpl, s1_rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Verify the compound fields have the correct (old or new) values */
for (i = 0; i < DSET_SELECT_DIM; i++) {
@@ -884,16 +931,16 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create a compound type same size as s1_t */
if ((ss_bc_tid = H5Tcreate(H5T_COMPOUND, sizeof(s1_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* but contains only subset members of s1_t */
if (H5Tinsert(ss_bc_tid, "b", HOFFSET(s1_t, b), H5T_NATIVE_INT) < 0 ||
H5Tinsert(ss_bc_tid, "c", HOFFSET(s1_t, c), H5T_NATIVE_INT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Read the dataset: will read only what is set in */
if (H5Dread(did, ss_bc_tid, H5S_ALL, H5S_ALL, dxpl, s1_rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Verify data read */
for (i = 0; i < DSET_SELECT_DIM; i++) {
@@ -915,13 +962,13 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* --1 smaller mem type
*/
if ((s2_tid = H5Tcreate(H5T_COMPOUND, sizeof(s2_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tinsert(s2_tid, "a", HOFFSET(s2_t, a), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s2_tid, "b", HOFFSET(s2_t, b), H5T_NATIVE_LONG) < 0 ||
H5Tinsert(s2_tid, "c", HOFFSET(s2_t, c), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s2_tid, "d", HOFFSET(s2_t, d), H5T_NATIVE_SHORT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Update s2_wbuf with unique values */
for (i = 0; i < DSET_SELECT_DIM; i++) {
@@ -936,7 +983,7 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
memcpy(s2_wbuf_bak, s2_wbuf, sizeof(s2_t) * DSET_SELECT_DIM);
if (H5Dwrite(did, s2_tid, H5S_ALL, H5S_ALL, dxpl, s2_wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
@@ -959,21 +1006,21 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
}
if (H5Sclose(sid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tclose(s1_tid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tclose(s2_tid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tclose(ss_ac_tid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tclose(ss_bc_tid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Dclose(did) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Release buffers */
free(s1_wbuf);
@@ -1030,7 +1077,7 @@ error:
* Datatype for all datasets: H5T_NATIVE_LONG
*/
static herr_t
-test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_multi_dsets_no_bkg(hid_t fid, unsigned set_cache, unsigned chunked, unsigned dtrans, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -1074,41 +1121,41 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
dims[0] = DSET_SELECT_DIM;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Create dataset transfer property list */
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set modify write buffer if requested */
if (mwbuf)
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set data transform */
if (dtrans)
if (H5Pset_data_transform(dxpl, expr) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set up file space ids, mem space ids, and dataset ids */
for (i = 0; i < (int)ndsets; i++) {
if ((file_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((mem_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Generate dataset name */
snprintf(dset_names[i], sizeof(dset_names[i]), "multi_dset%d_%s_%s_%s", i,
@@ -1118,31 +1165,31 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
if ((dset_dids[i] =
H5Dcreate2(fid, dset_names[i], ((HDrandom() % 2) ? H5T_NATIVE_LONG : H5T_NATIVE_INT),
file_sids[i], H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
buf_size = ndsets * DSET_SELECT_DIM * sizeof(int);
/* Allocate buffers for all datasets */
if (NULL == (total_wbuf = (int *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && NULL == (total_wbuf_bak = (int *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_trans_wbuf = (int *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_rbuf = (int *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
buf_size = ndsets * DSET_SELECT_DIM * sizeof(long);
if (NULL == (total_lwbuf = (long *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && NULL == (total_lwbuf_bak = (long *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_trans_lwbuf = (long *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_lrbuf = (long *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize buffer indices */
for (i = 0; i < (int)ndsets; i++) {
@@ -1175,6 +1222,10 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
if (H5Dwrite_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, dxpl, wbufs) < 0)
TEST_ERROR;
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
+
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
memcpy(total_wbuf, total_wbuf_bak, ndsets * DSET_SELECT_DIM * sizeof(int));
@@ -1183,6 +1234,10 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, ntrans_dxpl, rbufs) < 0)
TEST_ERROR;
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
+
/* Verify */
for (i = 0; i < (int)ndsets; i++)
for (j = 0; j < DSET_SELECT_DIM; j++)
@@ -1199,6 +1254,10 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
TEST_ERROR;
+ /* Verify selection I/O mode */
+ if (check_actual_selection_io_mode(dxpl, chunked && !set_cache ? 0 : H5D_SCALAR_IO) < 0)
+ TEST_ERROR;
+
/* Verify */
for (i = 0; i < (int)ndsets; i++)
for (j = 0; j < DSET_SELECT_DIM; j++)
@@ -1260,19 +1319,19 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
}
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(ntrans_dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
for (i = 0; i < (int)ndsets; i++) {
if (H5Sclose(file_sids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Sclose(mem_sids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Dclose(dset_dids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
free(total_wbuf);
@@ -1315,7 +1374,7 @@ error:
if (total_lrbuf)
free(total_lrbuf);
if (total_trans_lwbuf)
- free(total_lrbuf);
+ free(total_trans_lwbuf);
return FAIL;
@@ -1404,41 +1463,41 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create dataset transfer property list */
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set modify write buffer if requested */
if (mwbuf)
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
dims[0] = DSET_SELECT_DIM;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Create the memory data type */
if ((s1_tid = H5Tcreate(H5T_COMPOUND, sizeof(s1_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tinsert(s1_tid, "a", HOFFSET(s1_t, a), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s1_tid, "b", HOFFSET(s1_t, b), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s1_tid, "c", HOFFSET(s1_t, c), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s1_tid, "d", HOFFSET(s1_t, d), H5T_NATIVE_INT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
for (i = 0; i < (int)ndsets; i++) {
if ((file_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((mem_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Generate dataset name */
snprintf(dset_names[i], sizeof(dset_names[i]), "multi_cmpd_dset%d_%s_%s", i,
@@ -1447,7 +1506,7 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create ith dataset */
if ((dset_dids[i] =
H5Dcreate2(fid, dset_names[i], s1_tid, file_sids[i], H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
buf_size = ndsets * DSET_SELECT_DIM * sizeof(s1_t);
@@ -1530,12 +1589,12 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create a compound type same size as s1_t */
if ((ss_ac_tid = H5Tcreate(H5T_COMPOUND, sizeof(s1_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* but contains only subset members of s1_t */
if (H5Tinsert(ss_ac_tid, "a", HOFFSET(s1_t, a), H5T_NATIVE_INT) < 0 ||
H5Tinsert(ss_ac_tid, "c", HOFFSET(s1_t, c), H5T_NATIVE_INT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Untouched memory and file spaces for other datasets */
for (i = 0; i < (int)ndsets; i++) {
@@ -1603,18 +1662,18 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create a compound type same size as s1_t */
if ((ss_bc_tid = H5Tcreate(H5T_COMPOUND, sizeof(s1_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* but contains only subset members of s1_t */
if (H5Tinsert(ss_bc_tid, "b", HOFFSET(s1_t, b), H5T_NATIVE_INT) < 0 ||
H5Tinsert(ss_bc_tid, "c", HOFFSET(s1_t, c), H5T_NATIVE_INT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Reset memory and file space for <mm> dataset */
if (H5Sselect_all(mem_sids[mm]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Sselect_all(file_sids[mm]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Untouched memory and file space for other datasets */
for (i = 0; i < (int)ndsets; i++) {
@@ -1677,13 +1736,13 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* --1 smaller mem type
*/
if ((s2_tid = H5Tcreate(H5T_COMPOUND, sizeof(s2_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tinsert(s2_tid, "a", HOFFSET(s2_t, a), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s2_tid, "b", HOFFSET(s2_t, b), H5T_NATIVE_LONG) < 0 ||
H5Tinsert(s2_tid, "c", HOFFSET(s2_t, c), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s2_tid, "d", HOFFSET(s2_t, d), H5T_NATIVE_SHORT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
for (i = 0; i < (int)ndsets; i++) {
s2_wbufi[i] = s2_total_wbuf + (i * DSET_SELECT_DIM);
@@ -1735,17 +1794,17 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
}
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
for (i = 0; i < (int)ndsets; i++) {
if (H5Sclose(file_sids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Sclose(mem_sids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Dclose(dset_dids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
free(total_wbuf);
@@ -1845,34 +1904,34 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create dataset transfer property list */
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set modify write buffer if requested */
if (mwbuf)
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
dims[0] = DSET_SELECT_DIM;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Set up file space ids, mem space ids, and dataset ids */
for (i = 0; i < (int)ndsets; i++) {
if ((file_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((mem_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Generate dataset name */
snprintf(dset_names[i], sizeof(dset_names[i]), "multi_size_dset%d_%s_%s", i,
@@ -1881,7 +1940,7 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create ith dataset */
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_STD_I32BE, file_sids[i], H5P_DEFAULT, dcpl,
H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Case a */
@@ -1891,11 +1950,11 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Allocate buffers for all datasets */
if (NULL == (total_wbuf = (uint8_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_wbuf_bak = (uint8_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_rbuf = (uint8_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize buffer indices */
for (i = 0; i < (int)ndsets; i++) {
@@ -1958,11 +2017,11 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Allocate buffers for all datasets */
if (NULL == (total_lwbuf = (uint8_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_lwbuf_bak = (uint8_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_lrbuf = (uint8_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize buffer indices */
for (i = 0; i < (int)ndsets; i++) {
@@ -2033,11 +2092,11 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Allocate buffers for all datasets */
if (NULL == (total_swbuf = (uint8_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_swbuf_bak = (uint8_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_srbuf = (uint8_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize buffer indices */
for (i = 0; i < (int)ndsets; i++) {
@@ -2088,17 +2147,17 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
}
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
for (i = 0; i < (int)ndsets; i++) {
if (H5Sclose(file_sids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Sclose(mem_sids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Dclose(dset_dids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
free(total_wbuf);
@@ -2278,66 +2337,66 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
/* Create dataset transfer property list */
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Enable selection I/O */
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set modify write buffer if requested */
if (mwbuf)
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Set dataset layout: contiguous or chunked */
dims[0] = DSET_SELECT_DIM;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Create compound data type: s1_t */
if ((s1_tid = H5Tcreate(H5T_COMPOUND, sizeof(s1_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tinsert(s1_tid, "a", HOFFSET(s1_t, a), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s1_tid, "b", HOFFSET(s1_t, b), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s1_tid, "c", HOFFSET(s1_t, c), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s1_tid, "d", HOFFSET(s1_t, d), H5T_NATIVE_INT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Create compound data type: s3_t */
if ((s3_tid = H5Tcreate(H5T_COMPOUND, sizeof(s3_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tinsert(s3_tid, "a", HOFFSET(s3_t, a), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s3_tid, "b", HOFFSET(s3_t, b), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s3_tid, "c", HOFFSET(s3_t, c), H5T_NATIVE_INT) < 0 ||
H5Tinsert(s3_tid, "d", HOFFSET(s3_t, d), H5T_NATIVE_INT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Create compound data type: s4_t */
if ((s4_tid = H5Tcreate(H5T_COMPOUND, sizeof(s4_t))) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tinsert(s4_tid, "b", HOFFSET(s4_t, b), H5T_NATIVE_UINT) < 0 ||
H5Tinsert(s4_tid, "d", HOFFSET(s4_t, d), H5T_NATIVE_UINT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Create dataset for i ndsets */
for (i = 0; i < (int)ndsets; i++) {
/* File space ids */
if ((file_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Memory space ids */
if ((mem_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
mm = HDrandom() % (int)ndsets;
if (mm == 0) {
@@ -2346,7 +2405,7 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_INT, file_sids[i], H5P_DEFAULT,
dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
else if (mm == 1) {
dset_types[i] = DSET_WITH_CONV_AND_NO_BKG;
@@ -2354,7 +2413,7 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_LONG, file_sids[i], H5P_DEFAULT,
dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
else {
dset_types[i] = DSET_WITH_CONV_AND_BKG;
@@ -2362,7 +2421,7 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], s1_tid, file_sids[i], H5P_DEFAULT, dcpl,
H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
} /* end for i ndsets */
@@ -2372,49 +2431,49 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
/* DSET_WITH_NO_CONV */
buf_size = ndsets * DSET_SELECT_DIM * sizeof(int);
if (NULL == (total_wbuf1 = (int *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && NULL == (total_wbuf1_bak = (int *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (NULL == (total_rbuf1 = (int *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* DSET_WITH_CONV_AND_NO_BKG */
buf_size = ndsets * DSET_SELECT_DIM * sizeof(unsigned long);
if (NULL == (ul_total_wbuf2 = (unsigned long *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && NULL == (ul_total_wbuf2_bak = (unsigned long *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
buf_size = ndsets * DSET_SELECT_DIM * sizeof(long);
if (NULL == (l_total_rbuf2 = (long *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
buf_size = ndsets * DSET_SELECT_DIM * sizeof(long);
if (NULL == (l_total_wbuf2 = (long *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && NULL == (l_total_wbuf2_bak = (long *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
buf_size = ndsets * DSET_SELECT_DIM * sizeof(short);
if (NULL == (s_total_rbuf2 = (short *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* DSET_WITH_CONV_AND_BKG */
buf_size = ndsets * DSET_SELECT_DIM * sizeof(s1_t);
if (NULL == (s1_total_wbuf3 = (s1_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && NULL == (s1_total_wbuf3_bak = (s1_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
buf_size = ndsets * DSET_SELECT_DIM * sizeof(s3_t);
if (NULL == (s3_total_rbuf3 = (s3_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
buf_size = ndsets * DSET_SELECT_DIM * sizeof(s4_t);
if (NULL == (s4_total_wbuf3 = (s4_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (mwbuf && NULL == (s4_total_wbuf3_bak = (s4_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
buf_size = ndsets * DSET_SELECT_DIM * sizeof(s1_t);
if (NULL == (s1_total_rbuf3 = (s1_t *)malloc(buf_size)))
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Test with s settings for ndsets */
for (s = SETTING_A; s <= SETTING_B; s++) {
@@ -2622,26 +2681,26 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
/* Closing */
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tclose(s1_tid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tclose(s3_tid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Tclose(s4_tid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
for (i = 0; i < (int)ndsets; i++) {
if (H5Sclose(file_sids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Dclose(dset_dids[i]) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Don't delete the last set of datasets */
if ((n + 1) != niter)
if (H5Ldelete(fid, dset_names[i], H5P_DEFAULT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
/* Freeing */
@@ -2756,7 +2815,7 @@ test_set_get_select_io_mode(const char *filename, hid_t fapl)
TESTING("H5Pget/set_selection_io_mode()");
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
TEST_ERROR;
@@ -2788,16 +2847,16 @@ test_set_get_select_io_mode(const char *filename, hid_t fapl)
/* Create 1d data space */
dims[0] = DSET_SELECT_DIM;
if ((sid = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((did = H5Dcreate2(fid, "test_chk_dset", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize data */
for (i = 0; i < DSET_SELECT_DIM; i++)
@@ -2805,7 +2864,7 @@ test_set_get_select_io_mode(const char *filename, hid_t fapl)
/* May change the selection io actually performed */
if (H5Dwrite(did, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pget_selection_io(dxpl, &selection_io_mode) < 0)
TEST_ERROR;
@@ -2815,15 +2874,15 @@ test_set_get_select_io_mode(const char *filename, hid_t fapl)
TEST_ERROR;
if (H5Dclose(did) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Sclose(sid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Fclose(fid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
PASSED();
@@ -2882,34 +2941,31 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
}
if ((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Enable page buffering to trigger H5D_PAGE_BUFFER */
if (test_mode & TEST_PAGE_BUFFER) {
if (H5Pset_page_buffer_size(fapl, 4096, 0, 0) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, 0, (hsize_t)1) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
else {
/* Not page buffer test, reset to default */
if (H5Pset_page_buffer_size(fapl, 0, 0, 0) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_FSM_AGGR, 0, (hsize_t)1) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
- /* If default mode, 1st write will trigger cb, 2nd write will trigger sieve */
- /* If on mode, will trigger nothing because the on mode path is different */
- /* Need 2 writes */
if (test_mode & TEST_CONTIGUOUS_SIEVE_BUFFER) {
no_selection_io_cause_write_expected |= H5D_SEL_IO_CONTIGUOUS_SIEVE_BUFFER;
no_selection_io_cause_read_expected |= H5D_SEL_IO_CONTIGUOUS_SIEVE_BUFFER;
@@ -2917,14 +2973,14 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if (test_mode & TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET) {
if (H5Pset_layout(dcpl, H5D_COMPACT) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
no_selection_io_cause_write_expected |= H5D_SEL_IO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET;
no_selection_io_cause_read_expected |= H5D_SEL_IO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET;
}
if (test_mode == TEST_DATASET_FILTER) {
if (H5Pset_deflate(dcpl, 9) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
is_chunked = true;
no_selection_io_cause_write_expected |= H5D_SEL_IO_DATASET_FILTER;
no_selection_io_cause_read_expected |= H5D_SEL_IO_DATASET_FILTER;
@@ -2938,7 +2994,7 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if (test_mode == TEST_DISABLE_BY_API) {
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_OFF) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
no_selection_io_cause_write_expected |= H5D_SEL_IO_DISABLE_BY_API;
no_selection_io_cause_read_expected |= H5D_SEL_IO_DISABLE_BY_API;
}
@@ -2951,19 +3007,19 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
/* Datatype conversion */
if (test_mode & TEST_DATATYPE_CONVERSION) {
if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
tid = H5T_NATIVE_UINT;
/* If we're testing a too small tconv buffer, set the buffer to be too small */
if (test_mode & TEST_TCONV_BUF_TOO_SMALL) {
if (H5Pset_buffer(dxpl, sizeof(int), NULL, NULL) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* If we're using in-place type conversion sel io will succeed and only switch to scalar at the
* VFL */
if (test_mode & TEST_IN_PLACE_TCONV) {
if (H5Pset_modify_write_buf(dxpl, true) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
no_selection_io_cause_write_expected |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
}
else
@@ -2987,28 +3043,28 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
/* Create 1d data space */
dims[0] = DSET_SELECT_DIM;
if ((sid = H5Screate_simple(1, dims, NULL)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (is_chunked) {
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
if ((did = H5Dcreate2(fid, "no_selection_io_cause", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl,
H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Initialize data */
for (i = 0; i < DSET_SELECT_DIM; i++)
wbuf[i] = i;
if (H5Dwrite(did, tid, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (test_mode & TEST_CONTIGUOUS_SIEVE_BUFFER) {
if (H5Dwrite(did, tid, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
if (H5Pget_no_selection_io_cause(dxpl, &no_selection_io_cause_write) < 0)
@@ -3023,11 +3079,11 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
test_mode & TEST_PAGE_BUFFER) {
if (H5Dflush(did) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
}
if (H5Dread(did, tid, H5S_ALL, H5S_ALL, dxpl, rbuf) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* Verify causes of no selection I/O for write is as expected */
if (H5Pget_no_selection_io_cause(dxpl, &no_selection_io_cause_read) < 0)
@@ -3038,20 +3094,20 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
TEST_ERROR;
if (H5Dclose(did) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Sclose(sid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Fclose(fid) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pclose(fcpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
return SUCCEED;
@@ -3085,13 +3141,13 @@ test_get_no_selection_io_cause(const char *filename, hid_t fapl)
TESTING("H5Pget_no_selection_io_cause()");
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
if (H5Pget_selection_io(dxpl, &selection_io_mode) < 0)
TEST_ERROR;
if (H5Pclose(dxpl) < 0)
- FAIL_STACK_ERROR;
+ TEST_ERROR;
/* The following tests are based on H5D_SELECTION_IO_MODE_DEFAULT as the
default setting in the library; skip the tests if that is not true */
@@ -3208,7 +3264,8 @@ main(void)
case TEST_NO_TYPE_CONV: /* case 1 */
TESTING_2("No type conversion (null case)");
- nerrors += (test_no_type_conv(fid, chunked, dtrans, mwbuf) < 0 ? 1 : 0);
+ nerrors +=
+ (test_no_type_conv(fid, set_cache, chunked, dtrans, mwbuf) < 0 ? 1 : 0);
break;
@@ -3219,7 +3276,9 @@ main(void)
if (dtrans)
SKIPPED();
else
- nerrors += (test_no_size_change_no_bkg(fid, chunked, mwbuf) < 0 ? 1 : 0);
+ nerrors +=
+ (test_no_size_change_no_bkg(fid, set_cache, chunked, mwbuf) < 0 ? 1
+ : 0);
break;
@@ -3227,7 +3286,9 @@ main(void)
TESTING_2("Larger memory type, no background buffer");
nerrors +=
- (test_larger_mem_type_no_bkg(fid, chunked, dtrans, mwbuf) < 0 ? 1 : 0);
+ (test_larger_mem_type_no_bkg(fid, set_cache, chunked, dtrans, mwbuf) < 0
+ ? 1
+ : 0);
break;
@@ -3235,7 +3296,9 @@ main(void)
TESTING_2("Smaller memory type, no background buffer");
nerrors +=
- (test_smaller_mem_type_no_bkg(fid, chunked, dtrans, mwbuf) < 0 ? 1 : 0);
+ (test_smaller_mem_type_no_bkg(fid, set_cache, chunked, dtrans, mwbuf) < 0
+ ? 1
+ : 0);
break;
@@ -3253,7 +3316,7 @@ main(void)
case TEST_MULTI_CONV_NO_BKG: /* case 6 */
TESTING_2("multi-datasets: type conv + no bkg buffer");
- nerrors += test_multi_dsets_no_bkg(fid, chunked, dtrans, mwbuf);
+ nerrors += test_multi_dsets_no_bkg(fid, set_cache, chunked, dtrans, mwbuf);
break;
diff --git a/testpar/t_filters_parallel.c b/testpar/t_filters_parallel.c
index bdfde09..6c05408 100644
--- a/testpar/t_filters_parallel.c
+++ b/testpar/t_filters_parallel.c
@@ -69,10 +69,11 @@ typedef enum num_chunks_written_t {
typedef void (*test_func)(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id, hid_t dcpl_id,
hid_t dxpl_id, test_mode_t test_mode);
-static herr_t set_dcpl_filter(hid_t dcpl_id, H5Z_filter_t filter_id, filter_options_t *filter_options);
-static void verify_space_alloc_status(size_t num_dsets, hid_t *dset_ids, hid_t dcpl_id,
- num_chunks_written_t chunks_written);
-static void verify_chunk_opt_status(size_t num_dsets, hid_t dxpl_id);
+static herr_t set_dcpl_filter(hid_t dcpl_id, H5Z_filter_t filter_id, filter_options_t *filter_options);
+static void verify_space_alloc_status(size_t num_dsets, hid_t *dset_ids, hid_t dcpl_id,
+ num_chunks_written_t chunks_written);
+static void verify_chunk_opt_status(size_t num_dsets, test_mode_t test_mode, bool any_io, bool any_filters,
+ bool collective, bool unalloc_read, bool did_alloc, hid_t dxpl_id);
static const char *test_mode_to_string(test_mode_t test_mode);
static void create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t type_id, hid_t filespace_id,
@@ -80,9 +81,11 @@ static void create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t ty
static void open_datasets(hid_t parent_obj_id, const char *dset_name, size_t num_dsets, test_mode_t test_mode,
hid_t *dset_ids);
static void write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id,
- hid_t *fspace_ids, hid_t dxpl_id, const void **bufs, test_mode_t test_mode);
+ hid_t *fspace_ids, hid_t dcpl_id, hid_t dxpl_id, const void **bufs,
+ test_mode_t test_mode, bool any_io, bool collective, bool overwrite);
static void read_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id, hid_t fspace_id,
- hid_t dxpl_id, void **bufs, test_mode_t test_mode);
+ hid_t dcpl_id, hid_t dxpl_id, void **bufs, test_mode_t test_mode, bool any_io,
+ bool collective, bool all_uninit_read);
static void select_hyperslab(size_t num_dsets, hid_t *dset_ids, hsize_t *start, hsize_t *stride,
hsize_t *count, hsize_t *block, hid_t *fspace_ids);
@@ -471,11 +474,15 @@ verify_space_alloc_status(size_t num_dsets, hid_t *dset_ids, hid_t dcpl_id,
* I/O was performed.
*/
static void
-verify_chunk_opt_status(size_t num_dsets, hid_t dxpl_id)
+verify_chunk_opt_status(size_t num_dsets, test_mode_t test_mode, bool any_io, bool any_filters,
+ bool collective, bool unalloc_read, bool did_alloc, hid_t dxpl_id)
{
H5D_mpio_actual_chunk_opt_mode_t chunk_opt_mode;
H5D_selection_io_mode_t sel_io_mode;
+ uint32_t actual_sel_io_mode;
+ uint32_t actual_sel_io_mode_reduced;
uint32_t no_sel_io_cause = 0;
+ int mpi_code;
herr_t ret;
if (H5P_DEFAULT != dxpl_id) {
@@ -528,6 +535,95 @@ verify_chunk_opt_status(size_t num_dsets, hid_t dxpl_id)
"verified I/O optimization was linked-chunk I/O");
}
}
+
+ /* Verify actual selection I/O mode */
+ ret = H5Pget_actual_selection_io_mode(dxpl_id, &actual_sel_io_mode);
+ VRFY((ret >= 0), "H5Pget_actual_selection_io_mode succeeded");
+
+ /* Reduce results to process 0 (bitwise OR so we get all I/O types) */
+ mpi_code =
+ MPI_Reduce(&actual_sel_io_mode, &actual_sel_io_mode_reduced, 1, MPI_UINT32_T, MPI_BOR, 0, comm);
+ VRFY((MPI_SUCCESS == mpi_code), "MPI_Reduce succeeded");
+
+ /* Verify selection I/O mode on rank 0 */
+ if (mpi_rank == 0) {
+ /* No actual I/O performed, only reported I/O will be from allocation, even if "no" datasets were
+ * involved (num_dsets == 0 implies the call was expected to fail, but it fails after allocation).
+ * Also if the test mode is mixed filtered and unfiltered and the call did not fail, then there
+ * will always be an I/O callback made with raw data. This is because unfiltered datasets fall
+ * back to scalar I/O when mixed with filtered, and scalar I/O reports an I/O call was made even
+ * with a size of 0 bytes, while vector I/O does not report I/O was made if passed 0 vector
+ * elements (because no elements were raw data), which is what happens when performing I/O on a
+ * filtered dataset with no selection. Vector I/O does report an I/O call was made if passed a raw
+ * data element of size 0, so this is consistent. */
+ if (!any_io) {
+ if (did_alloc || (num_dsets > 0 && test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ else
+ VRFY(0 == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was 0 (no I/O)");
+ }
+ /* No filters, library should have used selection I/O if enabled, scalar I/O otherwise */
+ else if (!any_filters) {
+ assert(!unalloc_read && !did_alloc);
+ if (sel_io_mode == H5D_SELECTION_IO_MODE_DEFAULT || sel_io_mode == H5D_SELECTION_IO_MODE_ON)
+ VRFY(H5D_SELECTION_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was selection I/O");
+ else
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ }
+ /* Independent I/O, library should have done no I/O if reading from unallocated datasets, scalar
+ * I/O otherwise, since filtered I/O is only supported with scalar I/O in independent/serial */
+ else if (!collective) {
+ if (unalloc_read)
+ VRFY(0 == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was 0 (no I/O)");
+ else
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ }
+ else
+ switch (test_mode) {
+ case USE_SINGLE_DATASET:
+ case USE_MULTIPLE_DATASETS:
+ /* Collective case with only filtered datasets. If we performed allocation then there
+ * should be scalar I/O for allocation in addition to vector I/O for the actual data.
+ * If we're reading from an unallocated dataset then there should be no actual I/O.
+ * Otherwise there should only be vector I/O. */
+ if (did_alloc)
+ VRFY((H5D_SCALAR_IO | H5D_VECTOR_IO) == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar and vector I/O");
+ else if (unalloc_read)
+ VRFY(0 == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was 0 (no I/O)");
+ else
+ VRFY(H5D_VECTOR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was vector I/O");
+ break;
+
+ case USE_MULTIPLE_DATASETS_MIXED_FILTERED:
+ /* Collective case with mixed filtered and unfiltered datasets. If we're reading from
+ * a unallocated datasets then there should be scalar I/O from reading the unfilitered
+ * datasets, since they are always allocated in parallel. Otherwise there should be
+ * vector I/O from the filtered datasets and scalar I/O from the unfiltered datasets.
+ */
+ if (unalloc_read)
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ else
+ VRFY((H5D_SCALAR_IO | H5D_VECTOR_IO) == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar and vector I/O");
+ break;
+
+ case TEST_MODE_SENTINEL:
+ default:
+ printf("Invalid test mode\n");
+ fflush(stdout);
+ MPI_Abort(MPI_COMM_WORLD, -1);
+ }
+ }
}
}
@@ -576,11 +672,21 @@ create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t type_id, hid_t
case USE_MULTIPLE_DATASETS:
case USE_MULTIPLE_DATASETS_MIXED_FILTERED:
dset_name_ptr = dset_name_multi_buf;
- n_dsets = (rand() % (MAX_NUM_DSETS_MULTI - 1)) + 2;
+
+ if (MAINPROCESS)
+ n_dsets = (rand() % (MAX_NUM_DSETS_MULTI - 1)) + 2;
+
+ if (mpi_size > 1)
+ VRFY((MPI_SUCCESS == MPI_Bcast(&n_dsets, 1, MPI_INT, 0, comm)), "MPI_Bcast succeeded");
/* Select between 1 and (n_dsets - 1) datasets to be unfiltered */
if (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED) {
- n_unfiltered = (rand() % (n_dsets - 1)) + 1;
+ if (MAINPROCESS)
+ n_unfiltered = (rand() % (n_dsets - 1)) + 1;
+
+ if (mpi_size > 1)
+ VRFY((MPI_SUCCESS == MPI_Bcast(&n_unfiltered, 1, MPI_INT, 0, comm)),
+ "MPI_Bcast succeeded");
unfiltered_dcpl = H5Pcopy(dcpl_id);
VRFY((unfiltered_dcpl >= 0), "H5Pcopy succeeded");
@@ -621,7 +727,11 @@ create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t type_id, hid_t
* remaining datasets as unfiltered datasets. Otherwise,
* randomly determine if a dataset will be unfiltered.
*/
- unfiltered = ((size_t)n_unfiltered == dsets_left) || ((rand() % 2) == 0);
+ if (MAINPROCESS)
+ unfiltered = ((size_t)n_unfiltered == dsets_left) || ((rand() % 2) == 0);
+
+ if (mpi_size > 1)
+ VRFY((MPI_SUCCESS == MPI_Bcast(&unfiltered, 1, MPI_C_BOOL, 0, comm)), "MPI_Bcast succeeded");
if (unfiltered) {
curr_dcpl = unfiltered_dcpl;
@@ -693,10 +803,12 @@ open_datasets(hid_t parent_obj_id, const char *dset_name, size_t num_dsets, test
*/
static void
write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id, hid_t *fspace_ids,
- hid_t dxpl_id, const void **bufs, test_mode_t test_mode)
+ hid_t dcpl_id, hid_t dxpl_id, const void **bufs, test_mode_t test_mode, bool any_io,
+ bool collective, bool overwrite)
{
- hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
- hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
+ H5D_alloc_time_t alloc_time = H5D_ALLOC_TIME_DEFAULT;
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
mem_type_ids[dset_idx] = type_id;
@@ -724,7 +836,11 @@ write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id
MPI_Abort(MPI_COMM_WORLD, -1);
}
- verify_chunk_opt_status(num_dsets, dxpl_id);
+ if (!overwrite)
+ VRFY(H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0, "H5Pget_alloc_time succeeded");
+
+ verify_chunk_opt_status(num_dsets, test_mode, any_io, true, collective, false,
+ !overwrite && (alloc_time == H5D_ALLOC_TIME_LATE), dxpl_id);
}
/*
@@ -733,11 +849,13 @@ write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id
*/
static void
read_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id, hid_t fspace_id,
- hid_t dxpl_id, void **bufs, test_mode_t test_mode)
+ hid_t dcpl_id, hid_t dxpl_id, void **bufs, test_mode_t test_mode, bool any_io, bool collective,
+ bool all_uninit_read)
{
- hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
- hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_space_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
+ hid_t file_space_ids[MAX_NUM_DSETS_MULTI];
+ H5D_alloc_time_t alloc_time = H5D_ALLOC_TIME_DEFAULT;
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
mem_type_ids[dset_idx] = type_id;
@@ -766,7 +884,13 @@ read_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id,
MPI_Abort(MPI_COMM_WORLD, -1);
}
- verify_chunk_opt_status(num_dsets, dxpl_id);
+ if (all_uninit_read)
+ VRFY(H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0, "H5Pget_alloc_time succeeded");
+
+ verify_chunk_opt_status(num_dsets, test_mode, any_io, true, collective,
+ all_uninit_read &&
+ (alloc_time == H5D_ALLOC_TIME_INCR || alloc_time == H5D_ALLOC_TIME_LATE),
+ false, dxpl_id);
}
static void
@@ -940,8 +1064,8 @@ test_write_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t fil
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -973,7 +1097,8 @@ test_write_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t fil
(C_DATATYPE)dset_idx;
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1094,8 +1219,8 @@ test_write_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fi
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -1124,7 +1249,8 @@ test_write_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fi
(j / (dataset_dims[0] / (hsize_t)mpi_size * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1201,6 +1327,12 @@ test_write_filtered_dataset_no_overlap_partial(const char *parent_group, H5Z_fil
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /*
+ * Since we're only doing a partial write to the dataset, make
+ * sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, WRITE_UNSHARED_FILTERED_CHUNKS_PARTIAL_DATASET_DIMS, chunk_dims) >= 0),
"Chunk size set");
@@ -1245,8 +1377,8 @@ test_write_filtered_dataset_no_overlap_partial(const char *parent_group, H5Z_fil
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -1283,7 +1415,8 @@ test_write_filtered_dataset_no_overlap_partial(const char *parent_group, H5Z_fil
}
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1404,8 +1537,8 @@ test_write_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filte
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -1436,7 +1569,8 @@ test_write_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filte
dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1485,6 +1619,7 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
hsize_t block[WRITE_UNSHARED_ONE_UNLIM_DIM_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -1551,7 +1686,12 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
read_bufs[dset_idx] = tmp_buf;
}
- for (size_t i = 0; i < (size_t)WRITE_UNSHARED_ONE_UNLIM_DIM_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = WRITE_UNSHARED_ONE_UNLIM_DIM_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
/* Each process defines the dataset selection in memory and writes
* it to the hyperslab in the file
*/
@@ -1567,8 +1707,8 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -1582,15 +1722,15 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
"Data verification succeeded");
- if (i < (size_t)WRITE_UNSHARED_ONE_UNLIM_DIM_NLOOPS - 1) {
+ if (i < num_loops - 1) {
/* Extend the dataset(s) by count[1] chunks in the extensible dimension */
dataset_dims[1] += count[1] * block[1];
@@ -1646,6 +1786,7 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
hsize_t block[WRITE_SHARED_ONE_UNLIM_DIM_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -1712,7 +1853,12 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
read_bufs[dset_idx] = tmp_buf;
}
- for (size_t i = 0; i < (size_t)WRITE_SHARED_ONE_UNLIM_DIM_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = WRITE_SHARED_ONE_UNLIM_DIM_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
/* Each process defines the dataset selection in memory and writes
* it to the hyperslab in the file
*/
@@ -1727,8 +1873,8 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -1742,15 +1888,15 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
"Data verification succeeded");
- if (i < (size_t)WRITE_SHARED_ONE_UNLIM_DIM_NLOOPS - 1) {
+ if (i < num_loops - 1) {
/* Extend the dataset(s) by count[1] chunks in the extensible dimension */
dataset_dims[1] += count[1] * block[1];
@@ -1808,6 +1954,7 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
hsize_t block[WRITE_UNSHARED_TWO_UNLIM_DIM_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -1855,7 +2002,12 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
VRFY((H5Sclose(filespace) >= 0), "File dataspace close succeeded");
- for (size_t i = 0; i < (size_t)WRITE_UNSHARED_TWO_UNLIM_DIM_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = WRITE_UNSHARED_TWO_UNLIM_DIM_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
/* Set selected dimensions */
sel_dims[0] = (i + 1) * WRITE_UNSHARED_TWO_UNLIM_DIM_CH_NROWS;
sel_dims[1] = (i + 1) * WRITE_UNSHARED_TWO_UNLIM_DIM_CH_NCOLS;
@@ -1893,8 +2045,8 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -1908,15 +2060,15 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
"Data verification succeeded");
- if (i < (size_t)WRITE_UNSHARED_TWO_UNLIM_DIM_NLOOPS - 1) {
+ if (i < num_loops - 1) {
/*
* Extend the dataset(s) by the size of one chunk per rank
* in the first extensible dimension. Extend the dataset(s)
@@ -1977,6 +2129,7 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
hsize_t block[WRITE_SHARED_TWO_UNLIM_DIM_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -2024,7 +2177,12 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
VRFY((H5Sclose(filespace) >= 0), "File dataspace close succeeded");
- for (size_t i = 0; i < (size_t)WRITE_SHARED_TWO_UNLIM_DIM_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = WRITE_SHARED_TWO_UNLIM_DIM_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
/* Set selected dimensions */
sel_dims[0] = (i + 1);
sel_dims[1] = (i + 1) * (size_t)WRITE_SHARED_TWO_UNLIM_DIM_CH_NCOLS;
@@ -2062,8 +2220,8 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -2077,15 +2235,15 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
"Data verification succeeded");
- if (i < (size_t)WRITE_SHARED_TWO_UNLIM_DIM_NLOOPS - 1) {
+ if (i < num_loops - 1) {
/* Extend the dataset(s) by the size of a chunk in each extensible dimension */
dataset_dims[0] += (hsize_t)WRITE_SHARED_TWO_UNLIM_DIM_CH_NROWS;
dataset_dims[1] += (hsize_t)WRITE_SHARED_TWO_UNLIM_DIM_CH_NCOLS;
@@ -2131,28 +2289,31 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
hid_t fapl_id, hid_t dcpl_id, hid_t dxpl_id,
test_mode_t test_mode)
{
- C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
- const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
- void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
- void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
- hsize_t dataset_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t chunk_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t sel_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t start[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t stride[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t count[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t block[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- size_t data_size, correct_buf_size;
- size_t num_dsets;
- hid_t dset_ids[MAX_NUM_DSETS_MULTI];
- hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
- hid_t group_id = H5I_INVALID_HID;
- hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
+ C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
+ void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ hsize_t dataset_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t chunk_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t sel_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t start[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t stride[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t count[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t block[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ size_t data_size, correct_buf_size;
+ size_t num_dsets;
+ hid_t dset_ids[MAX_NUM_DSETS_MULTI];
+ hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
+ hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
+ hid_t group_id = H5I_INVALID_HID;
+ hid_t filespace = H5I_INVALID_HID;
if (MAINPROCESS)
puts("Testing write to filtered chunks with a single process having no selection");
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
file_id = H5Fopen(filenames[0], H5F_ACC_RDWR, fapl_id);
VRFY((file_id >= 0), "Test file open succeeded");
@@ -2177,6 +2338,12 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /*
+ * Since we're only doing a partial write to the dataset, make
+ * sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS, chunk_dims) >= 0),
"Chunk size set");
@@ -2226,8 +2393,8 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
}
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, mpi_size > 1, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2267,7 +2434,8 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
}
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, mpi_size == 1 && alloc_time == H5D_ALLOC_TIME_INCR);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2305,23 +2473,26 @@ static void
test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id,
hid_t dcpl_id, hid_t dxpl_id, test_mode_t test_mode)
{
- C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
- const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
- void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
- void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
- hsize_t dataset_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t chunk_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- size_t data_size, correct_buf_size;
- size_t num_dsets;
- hid_t dset_ids[MAX_NUM_DSETS_MULTI];
- hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
- hid_t group_id = H5I_INVALID_HID;
- hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
+ C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
+ void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ hsize_t dataset_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t chunk_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ size_t data_size, correct_buf_size;
+ size_t num_dsets;
+ hid_t dset_ids[MAX_NUM_DSETS_MULTI];
+ hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
+ hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
+ hid_t group_id = H5I_INVALID_HID;
+ hid_t filespace = H5I_INVALID_HID;
if (MAINPROCESS)
puts("Testing write to filtered chunks with all processes having no selection");
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
file_id = H5Fopen(filenames[0], H5F_ACC_RDWR, fapl_id);
VRFY((file_id >= 0), "Test file open succeeded");
@@ -2341,6 +2512,12 @@ test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filte
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /*
+ * Since we're doing a no-op write to the dataset,
+ * make sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS, chunk_dims) >= 0),
"Chunk size set");
@@ -2372,8 +2549,8 @@ test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filte
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, false, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2397,7 +2574,8 @@ test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filte
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, alloc_time == H5D_ALLOC_TIME_INCR);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2514,8 +2692,8 @@ test_write_filtered_dataset_point_selection(const char *parent_group, H5Z_filter
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2547,7 +2725,8 @@ test_write_filtered_dataset_point_selection(const char *parent_group, H5Z_filter
dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2673,8 +2852,8 @@ test_write_filtered_dataset_interleaved_write(const char *parent_group, H5Z_filt
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2715,7 +2894,8 @@ test_write_filtered_dataset_interleaved_write(const char *parent_group, H5Z_filt
+ dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2852,8 +3032,8 @@ test_write_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z
/* Set data transform expression */
VRFY((H5Pset_data_transform(plist_id, "x") >= 0), "Set data transform expression succeeded");
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, plist_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, plist_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2887,7 +3067,8 @@ test_write_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z
(j / (dataset_dims[0] / (hsize_t)mpi_size * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3016,8 +3197,8 @@ test_write_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_grou
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3046,7 +3227,8 @@ test_write_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_grou
(C_DATATYPE)((j % (hsize_t)mpi_size) + (j / (hsize_t)mpi_size) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3176,8 +3358,8 @@ test_write_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3206,7 +3388,8 @@ test_write_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H
(j / (dataset_dims[0] * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3333,8 +3516,8 @@ test_write_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fi
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3380,7 +3563,8 @@ test_write_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fi
+ dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3524,7 +3708,8 @@ test_write_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id, data_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3557,7 +3742,8 @@ test_write_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group
}
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3702,7 +3888,8 @@ test_write_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group,
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id, data_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3738,7 +3925,8 @@ test_write_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group,
}
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3797,6 +3985,7 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
hid_t group_id = H5I_INVALID_HID;
hid_t filetype = H5I_INVALID_HID, memtype = H5I_INVALID_HID;
hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
if (MAINPROCESS)
puts("Testing write to unshared filtered chunks in Compound Datatype dataset with Datatype "
@@ -3831,6 +4020,9 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /* Retrieve allocation time */
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
/* Create chunked dataset */
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
@@ -3915,7 +4107,7 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
* of the H5Dwrite loop:
*/
/* write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids,
- dxpl_id, data_bufs, test_mode); */
+ dcpl_id, dxpl_id, data_bufs, test_mode, true, true, false); */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
herr_t expected = FAIL;
herr_t ret;
@@ -3958,9 +4150,10 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
VRFY((ret == expected), "Dataset write");
if (expected == SUCCEED)
- verify_chunk_opt_status(1, dxpl_id);
+ verify_chunk_opt_status(1, test_mode, true, false, true, false, false, dxpl_id);
else
- verify_chunk_opt_status(0, dxpl_id);
+ verify_chunk_opt_status(0, test_mode, false, true, true, false, alloc_time == H5D_ALLOC_TIME_LATE,
+ dxpl_id);
}
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -3986,7 +4179,11 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ /* If some writes succeeded (due to mixed filtered mode) or if allocation time is late, then there is data
+ * on disk to be read */
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, false,
+ !(test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED || alloc_time == H5D_ALLOC_TIME_LATE));
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
hid_t dset_dcpl;
@@ -4066,6 +4263,7 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
hid_t group_id = H5I_INVALID_HID;
hid_t filetype = H5I_INVALID_HID, memtype = H5I_INVALID_HID;
hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
if (MAINPROCESS)
puts("Testing write to shared filtered chunks in Compound Datatype dataset with Datatype conversion");
@@ -4099,6 +4297,9 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /* Retrieve allocation time */
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
/* Create chunked dataset */
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
@@ -4183,7 +4384,7 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
* of the H5Dwrite loop:
*/
/* write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids,
- dxpl_id, data_bufs, test_mode); */
+ dcpl_id, dxpl_id, data_bufs, test_mode, true, true, false); */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
herr_t expected = FAIL;
herr_t ret;
@@ -4226,9 +4427,10 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
VRFY((ret == expected), "Dataset write");
if (expected == SUCCEED)
- verify_chunk_opt_status(1, dxpl_id);
+ verify_chunk_opt_status(1, test_mode, true, false, true, false, false, dxpl_id);
else
- verify_chunk_opt_status(0, dxpl_id);
+ verify_chunk_opt_status(0, test_mode, false, true, true, false, alloc_time == H5D_ALLOC_TIME_LATE,
+ dxpl_id);
}
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -4254,7 +4456,11 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ /* If some writes succeeded (due to mixed filtered mode) or if allocation time is late, then there is data
+ * on disk to be read */
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, false,
+ !(test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED || alloc_time == H5D_ALLOC_TIME_LATE));
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
hid_t dset_dcpl;
@@ -4419,8 +4625,8 @@ test_read_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t filt
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -4475,8 +4681,8 @@ test_read_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t filt
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -4639,8 +4845,8 @@ test_read_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fil
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -4695,8 +4901,8 @@ test_read_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fil
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -4861,8 +5067,8 @@ test_read_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filter
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -4917,8 +5123,8 @@ test_read_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filter
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -5107,8 +5313,8 @@ test_read_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fil
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5173,8 +5379,8 @@ test_read_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fil
}
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, mpi_size > 1 ? true : false, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -5250,7 +5456,6 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
hsize_t dataset_dims[READ_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
hsize_t chunk_dims[READ_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t sel_dims[READ_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
size_t data_size, read_buf_size;
size_t num_dsets;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
@@ -5339,8 +5544,8 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5368,8 +5573,6 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
open_datasets(group_id, READ_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_NAME, num_dsets, test_mode,
dset_ids);
- sel_dims[0] = sel_dims[1] = 0;
-
select_none(num_dsets, dset_ids, fspace_ids);
read_buf_size = dataset_dims[0] * dataset_dims[1] * sizeof(C_DATATYPE);
@@ -5385,8 +5588,8 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(data_bufs_nc[dset_idx], 0, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, false, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -5529,8 +5732,8 @@ test_read_filtered_dataset_point_selection(const char *parent_group, H5Z_filter_
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5586,8 +5789,8 @@ test_read_filtered_dataset_point_selection(const char *parent_group, H5Z_filter_
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -5784,8 +5987,8 @@ test_read_filtered_dataset_interleaved_read(const char *parent_group, H5Z_filter
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5842,8 +6045,8 @@ test_read_filtered_dataset_interleaved_read(const char *parent_group, H5Z_filter
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6025,8 +6228,8 @@ test_read_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_group
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -6089,8 +6292,8 @@ test_read_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_group
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6282,8 +6485,8 @@ test_read_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z_
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
VRFY((H5Pclose(plist_id) >= 0), "DXPL close succeeded");
@@ -6349,8 +6552,8 @@ test_read_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z_
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6518,8 +6721,8 @@ test_read_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H5
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -6581,8 +6784,8 @@ test_read_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H5
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6765,8 +6968,8 @@ test_read_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fil
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -6826,8 +7029,8 @@ test_read_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fil
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7035,7 +7238,8 @@ test_read_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group,
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7091,7 +7295,8 @@ test_read_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group,
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7285,7 +7490,8 @@ test_read_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group, H
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7341,7 +7547,8 @@ test_read_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group, H
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7538,7 +7745,8 @@ test_read_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_grou
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7594,7 +7802,8 @@ test_read_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_grou
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, false, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7797,7 +8006,8 @@ test_read_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group,
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7853,7 +8063,8 @@ test_read_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group,
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, false, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -8006,8 +8217,8 @@ test_write_serial_read_parallel(const char *parent_group, H5Z_filter_t filter_id
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -8051,7 +8262,8 @@ test_write_serial_read_parallel(const char *parent_group, H5Z_filter_t filter_id
open_datasets(group_id, WRITE_SERIAL_READ_PARALLEL_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -8177,8 +8389,8 @@ test_write_parallel_read_serial(const char *parent_group, H5Z_filter_t filter_id
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -8228,8 +8440,8 @@ test_write_parallel_read_serial(const char *parent_group, H5Z_filter_t filter_id
(j / (dataset_dims[0] * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, H5P_DEFAULT, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, H5P_DEFAULT,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -8275,6 +8487,7 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
hsize_t block[SHRINKING_GROWING_CHUNKS_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -8352,7 +8565,12 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
read_bufs[dset_idx] = tmp_buf;
}
- for (size_t i = 0; i < SHRINKING_GROWING_CHUNKS_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = SHRINKING_GROWING_CHUNKS_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
/* Continually write random float data, followed by zeroed-out data */
if (i % 2)
@@ -8366,8 +8584,8 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
}
}
- write_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -8381,8 +8599,8 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
}
}
- read_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8511,8 +8729,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
read_bufs[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id,
@@ -8525,8 +8743,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
/* Verify the correct data was written */
open_datasets(group_id, WRITE_UNSHARED_FILTERED_EDGE_CHUNKS_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8544,6 +8762,12 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
filespace = H5Screate_simple(WRITE_UNSHARED_FILTERED_EDGE_CHUNKS_DATASET_DIMS, dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /*
+ * Since we're only doing a partial write to the dataset, make
+ * sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
H5Pset_chunk_opts(plist_id, H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS);
/* Create datasets depending on the current test mode */
@@ -8570,8 +8794,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id,
@@ -8587,8 +8811,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8717,8 +8941,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
read_bufs[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -8729,8 +8953,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
/* Verify the correct data was written */
open_datasets(group_id, WRITE_SHARED_FILTERED_EDGE_CHUNKS_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8748,6 +8972,12 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
filespace = H5Screate_simple(WRITE_SHARED_FILTERED_EDGE_CHUNKS_DATASET_DIMS, dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /*
+ * Since we're only doing a partial write to the dataset, make
+ * sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
H5Pset_chunk_opts(plist_id, H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS);
/* Create datasets depending on the current test mode */
@@ -8775,8 +9005,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -8790,8 +9020,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8870,6 +9100,9 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /* Make sure the fill time is set appropriately */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, FILL_VALUES_TEST_DATASET_DIMS, chunk_dims) >= 0), "Chunk size set");
/* Add test filter to the pipeline */
@@ -8899,7 +9132,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
}
/* Read entire dataset and verify that the fill value is returned */
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
for (size_t j = 0; j < read_buf_size / sizeof(C_DATATYPE); j++)
@@ -8941,8 +9175,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -8953,7 +9187,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
/*
* Each MPI rank communicates their written piece of data
@@ -9001,8 +9236,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, true);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9013,7 +9248,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
C_DATATYPE *tmp_buf = read_bufs[dset_idx];
@@ -9046,7 +9282,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
VRFY((H5Sclose(filespace) >= 0), "File dataspace close succeeded");
/* Read entire dataset and verify that the fill value is returned */
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
for (size_t j = 0; j < read_buf_size / sizeof(C_DATATYPE); j++)
@@ -9081,8 +9318,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
tmp_buf[j] = (C_DATATYPE)(GEN_DATA(j) + dset_idx);
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9093,7 +9330,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME2, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t i = 0; i < (size_t)mpi_size; i++) {
recvcounts[i] = (int)(count[1] * block[1]);
@@ -9135,8 +9373,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, true);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9147,7 +9385,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME2, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
C_DATATYPE *tmp_buf = read_bufs[dset_idx];
@@ -9231,6 +9470,9 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /* Make sure the fill time is set appropriately */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, FILL_VALUE_UNDEFINED_TEST_DATASET_DIMS, chunk_dims) >= 0), "Chunk size set");
/* Add test filter to the pipeline */
@@ -9283,8 +9525,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
* allocation in parallel, so the read should succeed in that case.
*/
if (alloc_time == H5D_ALLOC_TIME_EARLY) {
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
}
else {
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
@@ -9322,9 +9564,11 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
VRFY((ret == expected), "Dataset write");
if (expected == SUCCEED)
- verify_chunk_opt_status(1, dxpl_id);
+ verify_chunk_opt_status(1, test_mode, true, false, true, false, false, dxpl_id);
else
- verify_chunk_opt_status(0, dxpl_id);
+ verify_chunk_opt_status(
+ 0, test_mode, false, true, true,
+ alloc_time == H5D_ALLOC_TIME_INCR || alloc_time == H5D_ALLOC_TIME_LATE, false, dxpl_id);
}
}
@@ -9358,8 +9602,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9369,7 +9613,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
open_datasets(group_id, FILL_VALUE_UNDEFINED_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((H5Sclose(fspace_ids[dset_idx]) >= 0), "File dataspace close succeeded");
@@ -9393,8 +9638,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, true);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9405,7 +9650,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUE_UNDEFINED_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
free(data_bufs_nc[dset_idx]);
@@ -9449,12 +9695,10 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
size_t num_dsets;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
- hid_t group_id = H5I_INVALID_HID;
- hid_t filespace = H5I_INVALID_HID;
- int *recvcounts = NULL;
- int *displs = NULL;
- int mpi_code;
+ hid_t file_id = H5I_INVALID_HID;
+ hid_t plist_id = H5I_INVALID_HID;
+ hid_t group_id = H5I_INVALID_HID;
+ hid_t filespace = H5I_INVALID_HID;
if (MAINPROCESS)
puts("Testing fill time H5D_FILL_TIME_NEVER");
@@ -9504,7 +9748,7 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
VRFY((set_dcpl_filter(plist_id, filter_id, NULL) >= 0), "Filter set");
/* Set a fill value */
- fill_value = FILL_VALUES_TEST_FILL_VAL;
+ fill_value = FILL_TIME_NEVER_TEST_FILL_VAL;
VRFY((H5Pset_fill_value(plist_id, HDF5_DATATYPE_NAME, &fill_value) >= 0), "Fill Value set");
/* Set fill time of 'never' */
@@ -9519,6 +9763,21 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
VRFY((H5Sclose(filespace) >= 0), "File dataspace close succeeded");
+ /* Allocate buffer for reading entire dataset */
+ read_buf_size = dataset_dims[0] * dataset_dims[1] * sizeof(C_DATATYPE);
+
+ for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
+ read_bufs[dset_idx] = calloc(1, read_buf_size);
+ VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
+ }
+
+ /* Allocate buffer of fill values */
+ fill_buf = calloc(1, read_buf_size);
+ VRFY((NULL != fill_buf), "calloc succeeded");
+
+ for (size_t i = 0; i < read_buf_size / sizeof(C_DATATYPE); i++)
+ fill_buf[i] = FILL_TIME_NEVER_TEST_FILL_VAL;
+
/*
* Since we aren't writing fill values to the chunks of the
* datasets we just created, close and re-open file to ensure
@@ -9538,37 +9797,22 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
open_datasets(group_id, FILL_TIME_NEVER_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- /* Allocate buffer for reading entire dataset */
- read_buf_size = dataset_dims[0] * dataset_dims[1] * sizeof(C_DATATYPE);
-
- for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
- read_bufs[dset_idx] = calloc(1, read_buf_size);
- VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
- }
-
- fill_buf = calloc(1, read_buf_size);
- VRFY((NULL != fill_buf), "calloc succeeded");
-
- /* Read entire dataset and verify that the fill value isn't returned */
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
-
- for (size_t i = 0; i < read_buf_size / sizeof(C_DATATYPE); i++)
- fill_buf[i] = FILL_TIME_NEVER_TEST_FILL_VAL;
-
/*
- * It should be very unlikely for the dataset's random
- * values to all be the fill value, so this should be
- * a safe comparison in theory.
+ * Read entire dataset just to try to verify bad behavior doesn't
+ * occur. Don't attempt to verify the contents of the read buffer(s)
+ * yet, because there's no guarantee as to what may have been
+ * read from the dataset.
*/
- for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
- VRFY((0 != memcmp(read_bufs[dset_idx], fill_buf, read_buf_size)), "Data verification succeeded");
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
/*
* Write to part of the first chunk in the dataset with
- * all ranks, then read the whole dataset and ensure that
- * the fill value isn't returned for the unwritten part of
- * the chunk, as well as for the rest of the dataset that
- * hasn't been written to yet.
+ * all ranks, then read the whole dataset just to try to
+ * verify bad behavior doesn't occur. Don't attempt to
+ * verify the contents of the read buffer(s) yet, because
+ * there's no guarantee as to what may have been read from
+ * the dataset.
*/
count[0] = 1;
count[1] = 1;
@@ -9595,8 +9839,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9607,35 +9851,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
/* Verify correct data was written */
open_datasets(group_id, FILL_TIME_NEVER_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
-
- /*
- * Each MPI rank communicates their written piece of data
- * into each other rank's correctness-checking buffer
- */
- recvcounts = calloc(1, (size_t)mpi_size * sizeof(*recvcounts));
- VRFY((NULL != recvcounts), "calloc succeeded");
-
- displs = calloc(1, (size_t)mpi_size * sizeof(*displs));
- VRFY((NULL != displs), "calloc succeeded");
-
- for (size_t i = 0; i < (size_t)mpi_size; i++) {
- recvcounts[i] = (int)(count[1] * block[1]);
- displs[i] = (int)(i * dataset_dims[1]);
- }
-
- for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
- mpi_code = MPI_Allgatherv(data_bufs[dset_idx], recvcounts[mpi_rank], C_DATATYPE_MPI, fill_buf,
- recvcounts, displs, C_DATATYPE_MPI, comm);
- VRFY((MPI_SUCCESS == mpi_code), "MPI_Allgatherv succeeded");
-
- /*
- * It should be very unlikely for the dataset's random
- * values to all be the fill value, so this should be
- * a safe comparison in theory.
- */
- VRFY((0 != memcmp(read_bufs[dset_idx], fill_buf, read_buf_size)), "Data verification succeeded");
- }
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((H5Sclose(fspace_ids[dset_idx]) >= 0), "File dataspace close succeeded");
@@ -9659,8 +9876,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9671,7 +9888,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
/* Verify correct data was written */
open_datasets(group_id, FILL_TIME_NEVER_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
C_DATATYPE *tmp_buf = read_bufs[dset_idx];
@@ -9680,9 +9898,6 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
VRFY((tmp_buf[j] != FILL_TIME_NEVER_TEST_FILL_VAL), "Data verification succeeded");
}
- free(displs);
- free(recvcounts);
-
free(fill_buf);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
@@ -9827,7 +10042,13 @@ main(int argc, char **argv)
fcpl_id = H5Pcreate(H5P_FILE_CREATE);
VRFY((fcpl_id >= 0), "FCPL creation succeeded");
- VRFY((H5Pset_file_space_strategy(fcpl_id, H5F_FSPACE_STRATEGY_PAGE, true, 1) >= 0),
+ /*
+ * TODO: Ideally, use persistent free space management. However,
+ * this occasionally runs into an infinite loop in the library's
+ * free space management code, so don't persist free space for now
+ * until that is fixed.
+ */
+ VRFY((H5Pset_file_space_strategy(fcpl_id, H5F_FSPACE_STRATEGY_PAGE, false, 1) >= 0),
"H5Pset_file_space_strategy succeeded");
VRFY((h5_fixname(FILENAME[0], fapl_id, filenames[0], sizeof(filenames[0])) != NULL),
@@ -9956,6 +10177,19 @@ main(int argc, char **argv)
continue;
}
+ /*
+ * If TestExpress is > 1, only run the multi-chunk I/O
+ * configuration tests for the 'USE_SINGLE_DATASET' case,
+ * as the 'USE_MULTIPLE_DATASETS' and 'USE_MULTIPLE_DATASETS_MIXED_FILTERED'
+ * cases are more stressful on the file system.
+ */
+ if (test_express_level_g > 1) {
+ if (((test_mode == USE_MULTIPLE_DATASETS) ||
+ (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED)) &&
+ (chunk_opt != H5FD_MPIO_CHUNK_ONE_IO))
+ continue;
+ }
+
if (MAINPROCESS) {
printf("== Running tests in mode '%s' with filter '%s' using selection I/O mode "
"'%s', '%s' and '%s' allocation time ==\n\n",
@@ -9992,6 +10226,15 @@ main(int argc, char **argv)
VRFY((H5Pset_dxpl_mpio_chunk_opt(dxpl_id, chunk_opt) >= 0),
"H5Pset_dxpl_mpio_chunk_opt succeeded");
+ /*
+ * Disable writing of fill values by default. Otherwise, a
+ * lot of time may be spent writing fill values to chunks
+ * when they're going to be fully overwritten anyway.
+ * Individual tests will alter this behavior as necessary.
+ */
+ VRFY((H5Pset_fill_time(dcpl_id, H5D_FILL_TIME_NEVER) >= 0),
+ "H5Pset_fill_time succeeded");
+
/* Create a group to hold all the datasets for this combination
* of filter and chunk optimization mode. Then, close the file
* again since some tests may need to open the file in a special
diff --git a/testpar/t_filters_parallel.h b/testpar/t_filters_parallel.h
index c0b1db8..04d3639 100644
--- a/testpar/t_filters_parallel.h
+++ b/testpar/t_filters_parallel.h
@@ -444,7 +444,7 @@ typedef struct {
#define SHRINKING_GROWING_CHUNKS_NCOLS (mpi_size * DIM1_SCALE_FACTOR)
#define SHRINKING_GROWING_CHUNKS_CH_NROWS (SHRINKING_GROWING_CHUNKS_NROWS / mpi_size)
#define SHRINKING_GROWING_CHUNKS_CH_NCOLS (SHRINKING_GROWING_CHUNKS_NCOLS / mpi_size)
-#define SHRINKING_GROWING_CHUNKS_NLOOPS 20
+#define SHRINKING_GROWING_CHUNKS_NLOOPS 8
/* Defines for the unshared filtered edge chunks write test */
#define WRITE_UNSHARED_FILTERED_EDGE_CHUNKS_DATASET_NAME "unshared_filtered_edge_chunks_write"
diff --git a/testpar/t_select_io_dset.c b/testpar/t_select_io_dset.c
index 2e6839e..2be2b40 100644
--- a/testpar/t_select_io_dset.c
+++ b/testpar/t_select_io_dset.c
@@ -159,7 +159,7 @@ set_dxpl(hid_t dxpl, H5D_selection_io_mode_t select_io_mode, H5FD_mpio_xfer_t mp
} /* set_dxpl() */
/*
- * Helper routine to check actual I/O mode on a dxpl
+ * Helper routine to check actual parallel I/O mode on a dxpl
*/
static void
check_io_mode(hid_t dxpl, unsigned chunked)
@@ -186,29 +186,65 @@ check_io_mode(hid_t dxpl, unsigned chunked)
} /* check_io_mode() */
+static void
+testing_check_io_mode(hid_t dxpl, H5D_mpio_actual_io_mode_t exp_io_mode)
+{
+ H5D_mpio_actual_io_mode_t actual_io_mode;
+
+ if (H5Pget_mpio_actual_io_mode(dxpl, &actual_io_mode) < 0)
+ P_TEST_ERROR;
+
+ if (actual_io_mode != exp_io_mode) {
+ nerrors++;
+ if (MAINPROCESS)
+ printf("\n Failed: Incorrect I/O mode (expected/actual) %u:%u", (unsigned)exp_io_mode,
+ (unsigned)actual_io_mode);
+ }
+
+} /* testing_check_io_mode() */
+
+/*
+ * Helper routine to check actual selection I/O mode on a dxpl
+ */
+static void
+check_actual_selection_io_mode(hid_t dxpl, uint32_t sel_io_mode_expected)
+{
+ uint32_t actual_sel_io_mode;
+
+ if (H5Pget_actual_selection_io_mode(dxpl, &actual_sel_io_mode) < 0)
+ P_TEST_ERROR;
+ if (actual_sel_io_mode != sel_io_mode_expected) {
+ if (MAINPROCESS)
+ printf("\n Failed: Incorrect selection I/O mode (expected/actual) %u:%u",
+ (unsigned)sel_io_mode_expected, (unsigned)actual_sel_io_mode);
+ P_TEST_ERROR;
+ }
+}
+
/*
* Case 1: single dataset read/write, no type conversion (null case)
*/
static void
-test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
- int i;
- hid_t did = H5I_INVALID_HID;
- hid_t sid = H5I_INVALID_HID;
- hid_t dcpl = H5I_INVALID_HID;
- hid_t dxpl = H5I_INVALID_HID;
- hid_t ntrans_dxpl = H5I_INVALID_HID;
- hid_t fspace_id = H5I_INVALID_HID;
- hid_t mspace_id = H5I_INVALID_HID;
- hsize_t dims[1];
- hsize_t cdims[1];
- hsize_t start[1], stride[1], count[1], block[1];
- int wbuf[DSET_SELECT_DIM];
- int wbuf_bak[DSET_SELECT_DIM];
- int trans_wbuf[DSET_SELECT_DIM];
- int rbuf[DSET_SELECT_DIM];
- char dset_name[DSET_NAME_LEN];
- const char *expr = "2*x";
+ int i;
+ hid_t did = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t dcpl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ hid_t ntrans_dxpl = H5I_INVALID_HID;
+ hid_t fspace_id = H5I_INVALID_HID;
+ hid_t mspace_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t cdims[1];
+ hsize_t start[1], stride[1], count[1], block[1];
+ int wbuf[DSET_SELECT_DIM];
+ int wbuf_bak[DSET_SELECT_DIM];
+ int trans_wbuf[DSET_SELECT_DIM];
+ int rbuf[DSET_SELECT_DIM];
+ char dset_name[DSET_NAME_LEN];
+ const char *expr = "2*x";
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
curr_nerrors = nerrors;
@@ -224,11 +260,13 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
P_TEST_ERROR;
+ if (!dtrans && H5Pset_deflate(dcpl, 2) < 0)
+ P_TEST_ERROR;
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "no_tconv_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "no_tconv_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -262,7 +300,8 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -284,7 +323,14 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
if (mwbuf)
memcpy(wbuf, wbuf_bak, sizeof(wbuf));
- check_io_mode(dxpl, chunked);
+ if (!dtrans || select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+ testing_check_io_mode(dxpl, exp_io_mode);
+
+ if (chunked && !dtrans)
+ check_actual_selection_io_mode(dxpl, H5D_VECTOR_IO);
+ else
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread(did, H5T_NATIVE_INT, mspace_id, fspace_id, ntrans_dxpl, rbuf) < 0)
@@ -327,6 +373,8 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
P_TEST_ERROR;
if (H5Pclose(dxpl) < 0)
P_TEST_ERROR;
+ if (H5Pclose(dcpl) < 0)
+ P_TEST_ERROR;
if (H5Pclose(ntrans_dxpl) < 0)
P_TEST_ERROR;
@@ -339,7 +387,7 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
* Case 2: single dataset read/write, no size change, no background buffer
*/
static void
-test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -356,6 +404,8 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
char *rbuf = NULL;
char dset_name[DSET_NAME_LEN];
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
+
curr_nerrors = nerrors;
if ((wbuf = (char *)malloc((size_t)(4 * DSET_SELECT_DIM))) == NULL)
@@ -379,8 +429,8 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "no_size_change_%s_%s", chunked ? "chunked" : "contig",
- mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "no_size_change_%s_%s_%s", chunked ? "chunked" : "contig",
+ select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_STD_I32BE, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -416,7 +466,8 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Copy wbuf if the library will be modifying it */
if (mwbuf)
@@ -430,7 +481,11 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
if (mwbuf)
memcpy(wbuf, wbuf_bak, (size_t)(4 * DSET_SELECT_DIM));
- check_io_mode(dxpl, chunked);
+ if (select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+
+ testing_check_io_mode(dxpl, exp_io_mode);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read the data from the dataset with little endian */
if (H5Dread(did, H5T_STD_I32LE, mspace_id, fspace_id, dxpl, rbuf) < 0)
@@ -489,25 +544,26 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* Case 3: single dataset read/write, larger mem type, no background buffer
*/
static void
-test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
- int i;
- hid_t did = H5I_INVALID_HID;
- hid_t sid = H5I_INVALID_HID;
- hid_t dcpl = H5I_INVALID_HID;
- hid_t dxpl = H5I_INVALID_HID;
- hid_t ntrans_dxpl = H5I_INVALID_HID;
- hid_t fspace_id = H5I_INVALID_HID;
- hid_t mspace_id = H5I_INVALID_HID;
- hsize_t dims[1];
- hsize_t cdims[1];
- hsize_t start[1], stride[1], count[1], block[1];
- long wbuf[DSET_SELECT_DIM];
- long wbuf_bak[DSET_SELECT_DIM];
- long trans_wbuf[DSET_SELECT_DIM];
- long long rbuf[DSET_SELECT_DIM];
- char dset_name[DSET_NAME_LEN];
- const char *expr = "100 - x";
+ int i;
+ hid_t did = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t dcpl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ hid_t ntrans_dxpl = H5I_INVALID_HID;
+ hid_t fspace_id = H5I_INVALID_HID;
+ hid_t mspace_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t cdims[1];
+ hsize_t start[1], stride[1], count[1], block[1];
+ long wbuf[DSET_SELECT_DIM];
+ long wbuf_bak[DSET_SELECT_DIM];
+ long trans_wbuf[DSET_SELECT_DIM];
+ long long rbuf[DSET_SELECT_DIM];
+ char dset_name[DSET_NAME_LEN];
+ const char *expr = "100 - x";
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
curr_nerrors = nerrors;
@@ -525,8 +581,8 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "larger_no_bkg_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "larger_no_bkg_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d chunked dataset with/without data transform */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -560,7 +616,8 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -582,7 +639,11 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
if (mwbuf)
memcpy(wbuf, wbuf_bak, sizeof(wbuf));
- check_io_mode(dxpl, chunked);
+ if (select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+
+ testing_check_io_mode(dxpl, exp_io_mode);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread(did, H5T_NATIVE_LLONG, mspace_id, fspace_id, ntrans_dxpl, rbuf) < 0)
@@ -637,25 +698,26 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
* Case 4: single dataset reader/write, smaller mem type, no background buffer
*/
static void
-test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
- int i;
- hid_t did = H5I_INVALID_HID;
- hid_t sid = H5I_INVALID_HID;
- hid_t dcpl = H5I_INVALID_HID;
- hid_t dxpl = H5I_INVALID_HID;
- hid_t ntrans_dxpl = H5I_INVALID_HID;
- hid_t fspace_id = H5I_INVALID_HID;
- hid_t mspace_id = H5I_INVALID_HID;
- hsize_t dims[1];
- hsize_t cdims[1];
- hsize_t start[1], stride[1], count[1], block[1];
- short wbuf[DSET_SELECT_DIM];
- int wbuf_bak[DSET_SELECT_DIM];
- short trans_wbuf[DSET_SELECT_DIM];
- short rbuf[DSET_SELECT_DIM];
- char dset_name[DSET_NAME_LEN];
- const char *expr = "2 * (10 + x)";
+ int i;
+ hid_t did = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t dcpl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ hid_t ntrans_dxpl = H5I_INVALID_HID;
+ hid_t fspace_id = H5I_INVALID_HID;
+ hid_t mspace_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t cdims[1];
+ hsize_t start[1], stride[1], count[1], block[1];
+ short wbuf[DSET_SELECT_DIM];
+ int wbuf_bak[DSET_SELECT_DIM];
+ short trans_wbuf[DSET_SELECT_DIM];
+ short rbuf[DSET_SELECT_DIM];
+ char dset_name[DSET_NAME_LEN];
+ const char *expr = "2 * (10 + x)";
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
curr_nerrors = nerrors;
@@ -673,8 +735,8 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "smaller_no_bkg_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "smaller_no_bkg_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d chunked dataset with/without data transform */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -708,7 +770,8 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -731,7 +794,11 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
if (mwbuf)
memcpy(wbuf, wbuf_bak, sizeof(wbuf));
- check_io_mode(dxpl, chunked);
+ if (select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+
+ testing_check_io_mode(dxpl, exp_io_mode);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread(did, H5T_NATIVE_SHORT, mspace_id, fspace_id, ntrans_dxpl, rbuf) < 0)
@@ -804,7 +871,7 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
* Verify the values read
*/
static void
-test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -870,8 +937,8 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Case 5(a) */
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "cmpd_with_bkg_%s_%s", chunked ? "chunked" : "contig",
- mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "cmpd_with_bkg_%s_%s_%s", chunked ? "chunked" : "contig",
+ select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d dataset */
if ((did = H5Dcreate2(fid, dset_name, s1_tid, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -907,7 +974,8 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Copy wbuf if the library will be modifying it */
if (mwbuf)
@@ -917,12 +985,12 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
if (H5Dwrite(did, s1_tid, mspace_id, fspace_id, dxpl, s1_wbuf) < 0)
P_TEST_ERROR;
+ check_io_mode(dxpl, chunked);
+
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
memcpy(s1_wbuf, s1_wbuf_bak, sizeof(s1_t) * DSET_SELECT_DIM);
- check_io_mode(dxpl, chunked);
-
/* Read all the data from the dataset */
memset(s1_rbuf, 0, sizeof(s1_t) * DSET_SELECT_DIM);
if (H5Dread(did, s1_tid, mspace_id, fspace_id, dxpl, s1_rbuf) < 0)
@@ -1094,6 +1162,10 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
if (H5Tclose(ss_bc_tid) < 0)
P_TEST_ERROR;
+ if (H5Pclose(dxpl) < 0)
+ P_TEST_ERROR;
+ if (H5Pclose(dcpl) < 0)
+ P_TEST_ERROR;
if (H5Dclose(did) < 0)
P_TEST_ERROR;
@@ -1115,7 +1187,7 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* Case 6: Type conversions + some processes have null/empty selections in datasets
*/
static void
-test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -1158,8 +1230,8 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "tconv_sel_empty_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "tconv_sel_empty_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -1170,7 +1242,8 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -1210,7 +1283,7 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
/* Create a memory dataspace */
if ((mspace_id = H5Screate_simple(1, block, NULL)) < 0)
P_TEST_ERROR;
- if (mpi_rank) {
+ if (!MAINPROCESS) {
if (H5Sselect_none(mspace_id) < 0)
P_TEST_ERROR;
}
@@ -1227,7 +1300,13 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
if (mwbuf)
memcpy(lwbuf, lwbuf_bak, sizeof(lwbuf));
- check_io_mode(dxpl, chunked);
+ /* If not using selection I/O there will be no collective I/O, since type conversion is unsupported by
+ * legacy collective I/O */
+ testing_check_io_mode(
+ dxpl, select ? (chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE) : 0);
+
+ /* If not using selection I/O then the main process will do scalar I/O and others will do none */
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : (MAINPROCESS ? H5D_SCALAR_IO : 0));
/* Read the data from the dataset: type conversion int-->long */
/* If dtrans, without data transform set in dxpl */
@@ -1395,7 +1474,7 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
* Datatype for all datasets: H5T_NATIVE_LONG
*/
static void
-test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -1410,6 +1489,8 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
hid_t mem_sids[MULTI_NUM_DSETS];
hid_t mem_tids[MULTI_NUM_DSETS];
+ bool any_tconv = false;
+
char dset_names[MULTI_NUM_DSETS][DSET_NAME_LEN];
hid_t dset_dids[MULTI_NUM_DSETS];
@@ -1457,7 +1538,8 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -1469,17 +1551,24 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
/* Set up file space ids and dataset ids */
for (i = 0; i < (int)ndsets; i++) {
+ bool tconv;
+
if ((file_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_dset%d_%s_%s_%s", i,
- chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_dset%d_%s_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
+
+ /* Flip a coin to see if we're doing type conversion */
+ tconv = HDrandom() % 2;
+ if (tconv)
+ any_tconv = true;
/* Create ith dataset */
- if ((dset_dids[i] =
- H5Dcreate2(fid, dset_names[i], ((HDrandom() % 2) ? H5T_NATIVE_LONG : H5T_NATIVE_INT),
- file_sids[i], H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+ if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], (tconv ? H5T_NATIVE_LONG : H5T_NATIVE_INT),
+ file_sids[i], H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
P_TEST_ERROR;
}
@@ -1555,7 +1644,12 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
if (mwbuf)
memcpy(total_wbuf, total_wbuf_bak, ndsets * DSET_SELECT_DIM * sizeof(int));
- check_io_mode(dxpl, chunked);
+ /* If doing type conversion or transform and not using selection I/O there will be no collective I/O,
+ * since type conversion is unsupported by legacy collective I/O */
+ testing_check_io_mode(dxpl, ((any_tconv || dtrans) && !select)
+ ? 0
+ : (chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE));
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, ntrans_dxpl, rbufs) < 0)
@@ -1708,7 +1802,7 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
* --Verify values read
*/
static void
-test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j, mm;
@@ -1769,7 +1863,8 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Each process takes x number of elements */
block[0] = dims[0] / (hsize_t)mpi_size;
@@ -1794,8 +1889,8 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_cmpd_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_cmpd_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect", mwbuf ? "mwbuf" : "nomwbuf");
/* Create ith dataset */
if ((dset_dids[i] =
@@ -1860,6 +1955,7 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
memcpy(total_wbuf, total_wbuf_bak, buf_size);
check_io_mode(dxpl, chunked);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
P_TEST_ERROR;
@@ -2164,7 +2260,7 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* Datatype for all datasets: H5T_STD_I16BE
*/
static void
-test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -2222,7 +2318,8 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Set up file space ids, mem space ids, and dataset ids */
for (i = 0; i < (int)ndsets; i++) {
@@ -2230,8 +2327,8 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_size_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_size_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect", mwbuf ? "mwbuf" : "nomwbuf");
/* Create ith dataset */
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_STD_I32BE, file_sids[i], H5P_DEFAULT, dcpl,
@@ -2301,6 +2398,7 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
memcpy(total_wbuf, total_wbuf_bak, buf_size);
check_io_mode(dxpl, chunked);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset */
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
@@ -2510,7 +2608,7 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* --this will trigger type conversion for (a), (b) & (c)
*/
static void
-test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -2568,7 +2666,8 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -2584,8 +2683,9 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_sel_dset%d_%s_%s_%s", i,
- chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_sel_dset%d_%s_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if (i == 0) {
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_INT, file_sids[i], H5P_DEFAULT,
@@ -2769,7 +2869,11 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
if (mwbuf)
memcpy(total_wbuf, total_wbuf_bak, buf_size);
- check_io_mode(dxpl, chunked);
+ /* If not using selection I/O there will be no collective I/O, since type conversion is unsupported by
+ * legacy collective I/O */
+ testing_check_io_mode(
+ dxpl, select ? (chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE) : 0);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Initialize buffer indices */
for (i = 0; i < (int)ndsets; i++) {
@@ -2903,7 +3007,7 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
* --fields 'b' and 'd' are (DSET_SELECT_DIM + j + start[0])
*/
static void
-test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
+test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j, mm;
@@ -2920,6 +3024,8 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
hid_t mem_tids[MULTI_NUM_DSETS];
hid_t r_mem_tids[MULTI_NUM_DSETS];
+ bool any_tconv;
+
multi_dset_type_t dset_types[MULTI_NUM_DSETS];
hid_t s1_tid = H5I_INVALID_HID;
@@ -2978,7 +3084,8 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Set dataset layout: contiguous or chunked */
dims[0] = DSET_SELECT_DIM;
@@ -3039,24 +3146,27 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
mm = HDrandom() % (int)ndsets;
if (mm == 0) {
dset_types[i] = DSET_WITH_NO_CONV;
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_nconv_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_nconv_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_INT, file_sids[i], H5P_DEFAULT,
dcpl, H5P_DEFAULT)) < 0)
P_TEST_ERROR;
}
else if (mm == 1) {
dset_types[i] = DSET_WITH_CONV_AND_NO_BKG;
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_nbkg_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_nbkg_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_LONG, file_sids[i], H5P_DEFAULT,
dcpl, H5P_DEFAULT)) < 0)
P_TEST_ERROR;
}
else {
dset_types[i] = DSET_WITH_CONV_AND_BKG;
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_bkg_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_bkg_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], s1_tid, file_sids[i], H5P_DEFAULT, dcpl,
H5P_DEFAULT)) < 0)
P_TEST_ERROR;
@@ -3119,6 +3229,8 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
/* Test with s settings for ndsets */
for (s = SETTING_A; s <= SETTING_B; s++) {
+ any_tconv = false;
+
/* for i ndsets */
for (i = 0; i < (int)ndsets; i++) {
@@ -3171,6 +3283,9 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
mem_tids[i] = H5T_NATIVE_LONG;
r_mem_tids[i] = H5T_NATIVE_SHORT;
+
+ /* There is type conversion in the read op */
+ any_tconv = true;
}
break;
@@ -3194,6 +3309,9 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
}
mem_tids[i] = s1_tid;
r_mem_tids[i] = s3_tid;
+
+ /* There is type conversion in the read op */
+ any_tconv = true;
}
else if (s == SETTING_B) {
/* Initialize buffer indices */
@@ -3246,7 +3364,12 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
if (H5Dread_multi(ndsets, dset_dids, r_mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
P_TEST_ERROR;
- check_io_mode(dxpl, chunked);
+ /* If doing type conversion and not using selection I/O there will be no collective I/O, since
+ * type conversion is unsupported by legacy collective I/O */
+ testing_check_io_mode(dxpl, (any_tconv && !select) ? 0
+ : (chunked ? H5D_MPIO_CHUNK_COLLECTIVE
+ : H5D_MPIO_CONTIGUOUS_COLLECTIVE));
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Verify result read */
/* for i ndsets */
@@ -3422,6 +3545,8 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
P_TEST_ERROR;
+ set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, false);
+
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
P_TEST_ERROR;
@@ -3442,20 +3567,12 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
/* Datatype conversion */
if (test_mode & TEST_DATATYPE_CONVERSION) {
- /* With one exception, all will land at H5FD__mpio_read/write_selection().
- * As the xfer mode is H5FD_MPIO_INDEPENDENT, this will call
- * H5FD__read/write_from_selection() triggering H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB.
- */
- no_selection_io_cause_read_expected |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ /* With one exception, all will land at H5FD__mpio_read/write_selection() */
- /* Exception case: This will turn off selection I/O landing at H5FD__mpio_write() */
- if ((test_mode & TEST_TCONV_BUF_TOO_SMALL) && !(test_mode & TEST_IN_PLACE_TCONV))
- no_selection_io_cause_write_expected |= H5D_SEL_IO_TCONV_BUF_TOO_SMALL;
- else
- no_selection_io_cause_write_expected |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ if (test_mode & TEST_IN_PLACE_TCONV)
+ if (H5Pset_modify_write_buf(dxpl, true) < 0)
+ P_TEST_ERROR;
- if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- P_TEST_ERROR;
tid = H5T_NATIVE_UINT;
/* If we're testing a too small tconv buffer, set the buffer to be too small */
@@ -3463,11 +3580,13 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if (H5Pset_buffer(dxpl, sizeof(int), NULL, NULL) < 0)
P_TEST_ERROR;
- if (test_mode & TEST_IN_PLACE_TCONV) {
- if (H5Pset_modify_write_buf(dxpl, true) < 0)
- P_TEST_ERROR;
- }
- /* In-place type conversion for read doesn't require modify_write_buf */
+ /* Exception case: When the type conversion buffer is too small and we're not allowing the library
+ * to modify the write buffer, the library will fall back to scalar independent I/O since the
+ * selection I/O path with type conversion requires a full size conversion buffer */
+ if (!(test_mode & TEST_IN_PLACE_TCONV))
+ /* In-place type conversion for read doesn't require modify_write_buf, so the read will still
+ * use selection I/O */
+ no_selection_io_cause_write_expected |= H5D_SEL_IO_TCONV_BUF_TOO_SMALL;
}
}
@@ -3493,6 +3612,10 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if (H5Dwrite(did, tid, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
P_TEST_ERROR;
+ if (!(test_mode & TEST_DISABLE_BY_API || test_mode & TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET ||
+ ((test_mode & TEST_TCONV_BUF_TOO_SMALL) && !(test_mode & TEST_IN_PLACE_TCONV))))
+ check_actual_selection_io_mode(dxpl, H5D_SELECTION_IO);
+
if (H5Pget_no_selection_io_cause(dxpl, &no_selection_io_cause_write) < 0)
P_TEST_ERROR;
@@ -3535,9 +3658,6 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
static void
test_get_no_selection_io_cause(const char *filename, hid_t fapl)
{
- hid_t dxpl = H5I_INVALID_HID;
- H5D_selection_io_mode_t selection_io_mode;
-
if (MAINPROCESS) {
printf("\n");
TESTING("for H5Pget_no_selection_io_cause()");
@@ -3545,21 +3665,6 @@ test_get_no_selection_io_cause(const char *filename, hid_t fapl)
curr_nerrors = nerrors;
- if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- P_TEST_ERROR;
- if (H5Pget_selection_io(dxpl, &selection_io_mode) < 0)
- P_TEST_ERROR;
- if (H5Pclose(dxpl) < 0)
- P_TEST_ERROR;
-
- /* The following tests are based on H5D_SELECTION_IO_MODE_DEFAULT as the
- * default setting in the library; skip the tests if that is not true */
- if (selection_io_mode != H5D_SELECTION_IO_MODE_DEFAULT) {
- if (MAINPROCESS)
- SKIPPED();
- return;
- }
-
test_no_selection_io_cause_mode(filename, fapl, TEST_DISABLE_BY_API);
test_no_selection_io_cause_mode(filename, fapl, TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET);
test_no_selection_io_cause_mode(filename, fapl, TEST_DATATYPE_CONVERSION);
@@ -3952,6 +4057,7 @@ main(int argc, char *argv[])
int test_select_config;
unsigned chunked;
unsigned dtrans;
+ unsigned select;
unsigned mwbuf;
h5_reset();
@@ -3978,163 +4084,170 @@ main(int argc, char *argv[])
/* therefore, not all tests are run with data transform */
for (dtrans = false; dtrans <= true; dtrans++) {
- /* Test with and without modify_write_buf turned on */
- for (mwbuf = false; mwbuf <= true; mwbuf++) {
-
- if (MAINPROCESS) {
- /* Print configuration message */
- printf("Testing for selection I/O ");
- if (chunked)
- printf("with chunked dataset, ");
- else
- printf("with contiguous dataset, ");
- if (dtrans)
- printf("data transform, ");
- else
- printf("without data transform, ");
- if (mwbuf)
- printf("and with modifying write buffers\n");
- else
- printf("and without modifying write buffers\n");
- }
+ for (select = false; select <= true; select++) {
+
+ /* Test with and without modify_write_buf turned on */
+ for (mwbuf = false; mwbuf <= true; mwbuf++) {
+
+ if (MAINPROCESS) {
+ /* Print configuration message */
+ printf("Testing for selection I/O ");
+ if (chunked)
+ printf("with chunked dataset, ");
+ else
+ printf("with contiguous dataset, ");
+ if (dtrans)
+ printf("data transform, ");
+ else
+ printf("without data transform, ");
+ if (select)
+ printf("selection I/O ON, ");
+ else
+ printf("selection I/O OFF, ");
+ if (mwbuf)
+ printf("and with modifying write buffers\n");
+ else
+ printf("and without modifying write buffers\n");
+ }
+
+ for (test_select_config = (int)TEST_NO_TYPE_CONV;
+ test_select_config < (int)TEST_SELECT_NTESTS; test_select_config++) {
+
+ switch (test_select_config) {
+
+ case TEST_NO_TYPE_CONV: /* case 1 */
+ if (MAINPROCESS)
+ TESTING_2("No type conversion (null case)");
- for (test_select_config = (int)TEST_NO_TYPE_CONV;
- test_select_config < (int)TEST_SELECT_NTESTS; test_select_config++) {
+ test_no_type_conv(fid, chunked, dtrans, select, mwbuf);
- switch (test_select_config) {
+ break;
- case TEST_NO_TYPE_CONV: /* case 1 */
- if (MAINPROCESS)
- TESTING_2("No type conversion (null case)");
+ case TEST_NO_SIZE_CHANGE_NO_BKG: /* case 2 */
+ if (MAINPROCESS)
+ TESTING_2("No size change, no background buffer");
- test_no_type_conv(fid, chunked, dtrans, mwbuf);
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ continue;
+ }
- break;
+ test_no_size_change_no_bkg(fid, chunked, select, mwbuf);
- case TEST_NO_SIZE_CHANGE_NO_BKG: /* case 2 */
- if (MAINPROCESS)
- TESTING_2("No size change, no background buffer");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_LARGER_MEM_NO_BKG: /* case 3 */
if (MAINPROCESS)
- SKIPPED();
- continue;
- }
-
- test_no_size_change_no_bkg(fid, chunked, mwbuf);
+ TESTING_2("Larger memory type, no background buffer");
- break;
+ test_larger_mem_type_no_bkg(fid, chunked, dtrans, select, mwbuf);
- case TEST_LARGER_MEM_NO_BKG: /* case 3 */
- if (MAINPROCESS)
- TESTING_2("Larger memory type, no background buffer");
-
- test_larger_mem_type_no_bkg(fid, chunked, dtrans, mwbuf);
-
- break;
+ break;
- case TEST_SMALLER_MEM_NO_BKG: /* case 4 */
- if (MAINPROCESS)
- TESTING_2("Smaller memory type, no background buffer");
+ case TEST_SMALLER_MEM_NO_BKG: /* case 4 */
+ if (MAINPROCESS)
+ TESTING_2("Smaller memory type, no background buffer");
- test_smaller_mem_type_no_bkg(fid, chunked, dtrans, mwbuf);
+ test_smaller_mem_type_no_bkg(fid, chunked, dtrans, select, mwbuf);
- break;
+ break;
- case TEST_CMPD_WITH_BKG: /* case 5 */
- if (MAINPROCESS)
- TESTING_2("Compound types with background buffer");
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_CMPD_WITH_BKG: /* case 5 */
if (MAINPROCESS)
- SKIPPED();
- continue;
- }
-
- test_cmpd_with_bkg(fid, chunked, mwbuf);
+ TESTING_2("Compound types with background buffer");
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ continue;
+ }
- break;
+ test_cmpd_with_bkg(fid, chunked, select, mwbuf);
- case TEST_TYPE_CONV_SEL_EMPTY: /* case 6 */
- if (MAINPROCESS)
- TESTING_2("Empty selections + Type conversion");
+ break;
- test_type_conv_sel_empty(fid, chunked, dtrans, mwbuf);
+ case TEST_TYPE_CONV_SEL_EMPTY: /* case 6 */
+ if (MAINPROCESS)
+ TESTING_2("Empty selections + Type conversion");
- break;
+ test_type_conv_sel_empty(fid, chunked, dtrans, select, mwbuf);
- case TEST_MULTI_CONV_NO_BKG: /* case 7 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + no bkg buffer");
+ break;
- test_multi_dsets_no_bkg(fid, chunked, dtrans, mwbuf);
+ case TEST_MULTI_CONV_NO_BKG: /* case 7 */
+ if (MAINPROCESS)
+ TESTING_2("multi-datasets: type conv + no bkg buffer");
- break;
+ test_multi_dsets_no_bkg(fid, chunked, dtrans, select, mwbuf);
- case TEST_MULTI_CONV_BKG: /* case 8 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + bkg buffer");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_MULTI_CONV_BKG: /* case 8 */
if (MAINPROCESS)
- SKIPPED();
- }
- else
- test_multi_dsets_cmpd_with_bkg(fid, chunked, mwbuf);
+ TESTING_2("multi-datasets: type conv + bkg buffer");
- break;
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ }
+ else
+ test_multi_dsets_cmpd_with_bkg(fid, chunked, select, mwbuf);
- case TEST_MULTI_CONV_SIZE_CHANGE: /* case 9 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + size change + no bkg buffer");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_MULTI_CONV_SIZE_CHANGE: /* case 9 */
if (MAINPROCESS)
- SKIPPED();
- }
- else
- test_multi_dsets_size_change_no_bkg(fid, chunked, mwbuf);
+ TESTING_2("multi-datasets: type conv + size change + no bkg buffer");
- break;
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ }
+ else
+ test_multi_dsets_size_change_no_bkg(fid, chunked, select, mwbuf);
- case TEST_MULTI_CONV_SEL_EMPTY: /* case 10 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + empty selections");
+ break;
- test_multi_dsets_conv_sel_empty(fid, chunked, dtrans, mwbuf);
+ case TEST_MULTI_CONV_SEL_EMPTY: /* case 10 */
+ if (MAINPROCESS)
+ TESTING_2("multi-datasets: type conv + empty selections");
- break;
+ test_multi_dsets_conv_sel_empty(fid, chunked, dtrans, select, mwbuf);
- case TEST_MULTI_ALL: /* case 11 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: no conv + conv without bkg + conv with bkg");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_MULTI_ALL: /* case 11 */
if (MAINPROCESS)
- SKIPPED();
- }
- else
- test_multi_dsets_all(2, fid, chunked, mwbuf);
+ TESTING_2("multi-datasets: no conv + conv without bkg + conv with bkg");
+
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ }
+ else
+ test_multi_dsets_all(2, fid, chunked, select, mwbuf);
- break;
+ break;
- case TEST_SELECT_NTESTS:
- default:
- P_TEST_ERROR;
- break;
+ case TEST_SELECT_NTESTS:
+ default:
+ P_TEST_ERROR;
+ break;
- } /* end switch */
+ } /* end switch */
- } /* end for test_select_config */
+ } /* end for test_select_config */
- } /* end mwbuf */
+ } /* end mwbuf */
- } /* end dtrans */
- } /* end chunked */
+ } /* end select */
+ } /* end dtrans */
+ } /* end chunked */
if (H5Fclose(fid) < 0)
P_TEST_ERROR;
diff --git a/tools/lib/h5diff.c b/tools/lib/h5diff.c
index 924f9f3..15f2a14 100644
--- a/tools/lib/h5diff.c
+++ b/tools/lib/h5diff.c
@@ -1485,9 +1485,6 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1, hid_t file2_id,
} /* end else */
} /* end while */
- for (i = 1; (int)i < g_nTasks; i++)
- MPI_Send(NULL, 0, MPI_BYTE, (int)i, MPI_TAG_END, MPI_COMM_WORLD);
-
/* Print any final data waiting in our queue */
print_incoming_data();
} /* end if */
diff --git a/tools/src/h5diff/ph5diff_main.c b/tools/src/h5diff/ph5diff_main.c
index 0f43261..f90bd48 100644
--- a/tools/src/h5diff/ph5diff_main.c
+++ b/tools/src/h5diff/ph5diff_main.c
@@ -127,7 +127,7 @@ ph5diff_worker(int nID)
char filenames[2][MAX_FILENAME];
/* Retrieve filenames */
- MPI_Recv(filenames, MAX_FILENAME * 2, MPI_CHAR, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &Status);
+ MPI_Recv(filenames, MAX_FILENAME * 2, MPI_CHAR, 0, MPI_TAG_PARALLEL, MPI_COMM_WORLD, &Status);
/* disable error reporting */
H5E_BEGIN_TRY
@@ -173,7 +173,7 @@ ph5diff_worker(int nID)
/* When get token, send all of our output to the manager task and then return the token */
for (i = 0; i < outBuffOffset; i += PRINT_DATA_MAX_SIZE)
- MPI_Send(outBuff + i, PRINT_DATA_MAX_SIZE, MPI_BYTE, 0, MPI_TAG_PRINT_DATA,
+ MPI_Send(outBuff + i, PRINT_DATA_MAX_SIZE, MPI_CHAR, 0, MPI_TAG_PRINT_DATA,
MPI_COMM_WORLD);
/* An overflow file exists, so we send it's output to the manager too and then delete it */
@@ -188,7 +188,7 @@ ph5diff_worker(int nID)
while ((tmp = getc(overflow_file)) >= 0) {
*(out_data + i++) = (char)tmp;
if (i == PRINT_DATA_MAX_SIZE) {
- MPI_Send(out_data, PRINT_DATA_MAX_SIZE, MPI_BYTE, 0, MPI_TAG_PRINT_DATA,
+ MPI_Send(out_data, PRINT_DATA_MAX_SIZE, MPI_CHAR, 0, MPI_TAG_PRINT_DATA,
MPI_COMM_WORLD);
i = 0;
memset(out_data, 0, PRINT_DATA_MAX_SIZE);
@@ -196,7 +196,7 @@ ph5diff_worker(int nID)
}
if (i > 0)
- MPI_Send(out_data, PRINT_DATA_MAX_SIZE, MPI_BYTE, 0, MPI_TAG_PRINT_DATA,
+ MPI_Send(out_data, PRINT_DATA_MAX_SIZE, MPI_CHAR, 0, MPI_TAG_PRINT_DATA,
MPI_COMM_WORLD);
fclose(overflow_file);
diff --git a/tools/test/h5copy/testh5copy.sh.in b/tools/test/h5copy/testh5copy.sh.in
index f2c4a8e..916e2be 100644
--- a/tools/test/h5copy/testh5copy.sh.in
+++ b/tools/test/h5copy/testh5copy.sh.in
@@ -84,7 +84,7 @@ nerrors=0
verbose=yes
h5haveexitcode=yes # default is yes
-TESTDIR=./testfiles
+TESTDIR=./tmp
test -d $TESTDIR || mkdir $TESTDIR
# RUNSERIAL is used. Check if it can return exit code from executalbe correctly.
diff --git a/tools/test/h5diff/h5diff_plugin.sh.in b/tools/test/h5diff/h5diff_plugin.sh.in
index 525503d..f6783af 100644
--- a/tools/test/h5diff/h5diff_plugin.sh.in
+++ b/tools/test/h5diff/h5diff_plugin.sh.in
@@ -47,7 +47,7 @@ SRC_TOOLS="$srcdir/../.."
SRC_H5DIFF_TESTFILES="$SRC_TOOLS/test/h5diff/testfiles"
SRC_H5DIFF_OUTFILES="$SRC_TOOLS/test/h5diff/expected"
-TESTDIR=./testplug
+TESTDIR=./tmppl
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/h5diff/testh5diff.sh.in b/tools/test/h5diff/testh5diff.sh.in
index efaac2e..1378f07 100644
--- a/tools/test/h5diff/testh5diff.sh.in
+++ b/tools/test/h5diff/testh5diff.sh.in
@@ -49,7 +49,7 @@ SRC_H5STAT_TESTFILES="$SRC_TOOLS/test/h5stat/testfiles"
SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
SRC_H5DIFF_OUTFILES="$SRC_TOOLS/test/h5diff/expected"
-TESTDIR=./testfiles
+TESTDIR=./tmp
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/h5dump/h5dump_plugin.sh.in b/tools/test/h5dump/h5dump_plugin.sh.in
index d080c1d..c9e485d 100644
--- a/tools/test/h5dump/h5dump_plugin.sh.in
+++ b/tools/test/h5dump/h5dump_plugin.sh.in
@@ -48,7 +48,7 @@ SRC_TOOLS="$srcdir/../.."
SRC_H5DUMP_TESTFILES="$SRC_TOOLS/test/h5dump/testfiles"
SRC_H5DUMP_OUTFILES="$SRC_TOOLS/test/h5dump/expected"
-TESTDIR=./testplug
+TESTDIR=./tmppl
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/h5dump/testh5dump.sh.in b/tools/test/h5dump/testh5dump.sh.in
index 8796aa9..fdeb17d 100644
--- a/tools/test/h5dump/testh5dump.sh.in
+++ b/tools/test/h5dump/testh5dump.sh.in
@@ -66,7 +66,7 @@ SRC_H5STAT_TESTFILES="$SRC_TOOLS/test/h5stat/testfiles"
SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
TEST_P_DIR=./testfiles
-TESTDIR=./testfiles/std
+TESTDIR=./tmp
test -d $TEST_P_DIR || mkdir -p $TEST_P_DIR
test -d $TESTDIR || mkdir -p $TESTDIR
diff --git a/tools/test/h5dump/testh5dumppbits.sh.in b/tools/test/h5dump/testh5dumppbits.sh.in
index 4094bfc..e90cc86 100644
--- a/tools/test/h5dump/testh5dumppbits.sh.in
+++ b/tools/test/h5dump/testh5dumppbits.sh.in
@@ -58,7 +58,7 @@ SRC_H5STAT_TESTFILES="$SRC_TOOLS/test/h5stat/testfiles"
SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
TEST_P_DIR=./testfiles
-TESTDIR=./testfiles/pbits
+TESTDIR=./tmpbits
test -d $TEST_P_DIR || mkdir -p $TEST_P_DIR
test -d $TESTDIR || mkdir -p $TESTDIR
@@ -187,7 +187,7 @@ CLEAN_TESTFILES_AND_TESTDIR()
# skip rm if srcdir is same as destdir
# this occurs when build/test performed in source dir and
# make cp fail
- SDIR=$SRC_H5DUMP_TESTFILES/pbits
+ SDIR=$SRC_H5DUMP_TESTFILES
INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
diff --git a/tools/test/h5dump/testh5dumpvds.sh.in b/tools/test/h5dump/testh5dumpvds.sh.in
index e09e429..2bd38dc 100644
--- a/tools/test/h5dump/testh5dumpvds.sh.in
+++ b/tools/test/h5dump/testh5dumpvds.sh.in
@@ -58,7 +58,7 @@ SRC_H5STAT_TESTFILES="$SRC_TOOLS/test/h5stat/testfiles"
SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
TEST_P_DIR=./testfiles
-TESTDIR=./testfiles/vds
+TESTDIR=./tmpvds
test -d $TEST_P_DIR || mkdir -p $TEST_P_DIR
test -d $TESTDIR || mkdir -p $TESTDIR
@@ -166,7 +166,7 @@ CLEAN_TESTFILES_AND_TESTDIR()
# skip rm if srcdir is same as destdir
# this occurs when build/test performed in source dir and
# make cp fail
- SDIR=$SRC_H5DUMP_TESTFILES/vds
+ SDIR=$SRC_H5DUMP_TESTFILES
INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
diff --git a/tools/test/h5dump/testh5dumpxml.sh.in b/tools/test/h5dump/testh5dumpxml.sh.in
index b433fa2..880fc6b 100644
--- a/tools/test/h5dump/testh5dumpxml.sh.in
+++ b/tools/test/h5dump/testh5dumpxml.sh.in
@@ -49,7 +49,7 @@ SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
SRC_H5DUMP_OUTFILES="$SRC_TOOLS/test/h5dump/expected"
TEST_P_DIR=./testfiles
-TESTDIR=./testfiles/xml
+TESTDIR=./tmpxml
test -d $TEST_P_DIR || mkdir -p $TEST_P_DIR
test -d $TESTDIR || mkdir -p $TESTDIR
diff --git a/tools/test/h5format_convert/CMakeTests.cmake b/tools/test/h5format_convert/CMakeTests.cmake
index 3046521..ab14a8c 100644
--- a/tools/test/h5format_convert/CMakeTests.cmake
+++ b/tools/test/h5format_convert/CMakeTests.cmake
@@ -378,11 +378,11 @@
COMMAND "${CMAKE_COMMAND}"
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump${tgt_file_ext}>"
- -D "TEST_ARGS:STRING=-BH;./testfiles/${testname}-tmp.h5"
- -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
- -D "TEST_OUTPUT=testfiles/${testname}_chk.out"
+ -D "TEST_ARGS:STRING=-BH;${testname}-tmp.h5"
+ -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
+ -D "TEST_OUTPUT=${testname}_chk.out"
-D "TEST_EXPECT=0"
- -D "TEST_REFERENCE=testfiles/${testname}.ddl"
+ -D "TEST_REFERENCE=${testname}.ddl"
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
set_tests_properties (H5FC_H5DUMP_CHECK-${testname}-dump PROPERTIES
diff --git a/tools/test/h5format_convert/expected/h5fc_ext1_f.ddl b/tools/test/h5format_convert/expected/h5fc_ext1_f.ddl
index f788913..98806a7 100644
--- a/tools/test/h5format_convert/expected/h5fc_ext1_f.ddl
+++ b/tools/test/h5format_convert/expected/h5fc_ext1_f.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/h5fc_ext1_f-tmp.h5" {
+HDF5 "h5fc_ext1_f-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/h5fc_ext1_i.ddl b/tools/test/h5format_convert/expected/h5fc_ext1_i.ddl
index 6564031..0372910 100644
--- a/tools/test/h5format_convert/expected/h5fc_ext1_i.ddl
+++ b/tools/test/h5format_convert/expected/h5fc_ext1_i.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/h5fc_ext1_i-tmp.h5" {
+HDF5 "h5fc_ext1_i-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/h5fc_ext1_s.ddl b/tools/test/h5format_convert/expected/h5fc_ext1_s.ddl
index 746de2b..f97ebf3 100644
--- a/tools/test/h5format_convert/expected/h5fc_ext1_s.ddl
+++ b/tools/test/h5format_convert/expected/h5fc_ext1_s.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/h5fc_ext1_s-tmp.h5" {
+HDF5 "h5fc_ext1_s-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/h5fc_ext2_if.ddl b/tools/test/h5format_convert/expected/h5fc_ext2_if.ddl
index 57781ec..003defc 100644
--- a/tools/test/h5format_convert/expected/h5fc_ext2_if.ddl
+++ b/tools/test/h5format_convert/expected/h5fc_ext2_if.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/h5fc_ext2_if-tmp.h5" {
+HDF5 "h5fc_ext2_if-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/h5fc_ext2_is.ddl b/tools/test/h5format_convert/expected/h5fc_ext2_is.ddl
index 8fd061d..6b5d0d6 100644
--- a/tools/test/h5format_convert/expected/h5fc_ext2_is.ddl
+++ b/tools/test/h5format_convert/expected/h5fc_ext2_is.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/h5fc_ext2_is-tmp.h5" {
+HDF5 "h5fc_ext2_is-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/h5fc_ext2_sf.ddl b/tools/test/h5format_convert/expected/h5fc_ext2_sf.ddl
index 435ed46..47e8c3b 100644
--- a/tools/test/h5format_convert/expected/h5fc_ext2_sf.ddl
+++ b/tools/test/h5format_convert/expected/h5fc_ext2_sf.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/h5fc_ext2_sf-tmp.h5" {
+HDF5 "h5fc_ext2_sf-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/h5fc_ext3_isf.ddl b/tools/test/h5format_convert/expected/h5fc_ext3_isf.ddl
index 57a78d3..bd7058a 100644
--- a/tools/test/h5format_convert/expected/h5fc_ext3_isf.ddl
+++ b/tools/test/h5format_convert/expected/h5fc_ext3_isf.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/h5fc_ext3_isf-tmp.h5" {
+HDF5 "h5fc_ext3_isf-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/old_h5fc_ext1_f.ddl b/tools/test/h5format_convert/expected/old_h5fc_ext1_f.ddl
index 45fa3fb..420191b 100644
--- a/tools/test/h5format_convert/expected/old_h5fc_ext1_f.ddl
+++ b/tools/test/h5format_convert/expected/old_h5fc_ext1_f.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/old_h5fc_ext1_f-tmp.h5" {
+HDF5 "old_h5fc_ext1_f-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/old_h5fc_ext1_i.ddl b/tools/test/h5format_convert/expected/old_h5fc_ext1_i.ddl
index 67a7116..1ea1663 100644
--- a/tools/test/h5format_convert/expected/old_h5fc_ext1_i.ddl
+++ b/tools/test/h5format_convert/expected/old_h5fc_ext1_i.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/old_h5fc_ext1_i-tmp.h5" {
+HDF5 "old_h5fc_ext1_i-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 1
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/old_h5fc_ext1_s.ddl b/tools/test/h5format_convert/expected/old_h5fc_ext1_s.ddl
index 7f67d9f..eeaece7 100644
--- a/tools/test/h5format_convert/expected/old_h5fc_ext1_s.ddl
+++ b/tools/test/h5format_convert/expected/old_h5fc_ext1_s.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/old_h5fc_ext1_s-tmp.h5" {
+HDF5 "old_h5fc_ext1_s-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/old_h5fc_ext2_if.ddl b/tools/test/h5format_convert/expected/old_h5fc_ext2_if.ddl
index 350d3ba..40a7f69 100644
--- a/tools/test/h5format_convert/expected/old_h5fc_ext2_if.ddl
+++ b/tools/test/h5format_convert/expected/old_h5fc_ext2_if.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/old_h5fc_ext2_if-tmp.h5" {
+HDF5 "old_h5fc_ext2_if-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/old_h5fc_ext2_is.ddl b/tools/test/h5format_convert/expected/old_h5fc_ext2_is.ddl
index 6b2b2c3..d83042a 100644
--- a/tools/test/h5format_convert/expected/old_h5fc_ext2_is.ddl
+++ b/tools/test/h5format_convert/expected/old_h5fc_ext2_is.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/old_h5fc_ext2_is-tmp.h5" {
+HDF5 "old_h5fc_ext2_is-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/old_h5fc_ext2_sf.ddl b/tools/test/h5format_convert/expected/old_h5fc_ext2_sf.ddl
index 4a038e3..4cc7b2f 100644
--- a/tools/test/h5format_convert/expected/old_h5fc_ext2_sf.ddl
+++ b/tools/test/h5format_convert/expected/old_h5fc_ext2_sf.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/old_h5fc_ext2_sf-tmp.h5" {
+HDF5 "old_h5fc_ext2_sf-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/expected/old_h5fc_ext3_isf.ddl b/tools/test/h5format_convert/expected/old_h5fc_ext3_isf.ddl
index 602627f..e3bb994 100644
--- a/tools/test/h5format_convert/expected/old_h5fc_ext3_isf.ddl
+++ b/tools/test/h5format_convert/expected/old_h5fc_ext3_isf.ddl
@@ -1,4 +1,4 @@
-HDF5 "./testfiles/old_h5fc_ext3_isf-tmp.h5" {
+HDF5 "old_h5fc_ext3_isf-tmp.h5" {
SUPER_BLOCK {
SUPERBLOCK_VERSION 2
FREELIST_VERSION 0
diff --git a/tools/test/h5format_convert/testh5fc.sh.in b/tools/test/h5format_convert/testh5fc.sh.in
index 4ba46cb..756156e 100644
--- a/tools/test/h5format_convert/testh5fc.sh.in
+++ b/tools/test/h5format_convert/testh5fc.sh.in
@@ -62,7 +62,7 @@ SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
SRC_H5FORMCONV_TESTFILES="$SRC_TOOLS/test/h5format_convert/testfiles"
SRC_H5FORMCONV_OUTFILES="$SRC_TOOLS/test/h5format_convert/expected"
-TESTDIR=./testfiles
+TESTDIR=./tmp
test -d $TESTDIR || mkdir $TESTDIR
# Copy the testfile to a temporary file for testing as h5format_convert is changing the file in place
@@ -419,8 +419,15 @@ H5DUMP_CHECK() {
actual="$TESTDIR/`basename $2 .ddl`.out"
actual_err="$TESTDIR/`basename $2 .ddl`.err"
testfile="`basename $2 .ddl`-tmp.h5"
- $RUNSERIAL $H5DUMP_BIN -BH $TESTDIR/$testfile > $actual 2>$actual_err
+ # Run test.
+ (
+ cd $TESTDIR
+ $RUNSERIAL $H5DUMP_BIN -BH $testfile
+ ) >$actual 2>$actual_err
cat $actual_err >> $actual
+ cp $actual $actual_sav
+ cp $actual_err $actual_err_sav
+ STDERR_FILTER $actual_err
# Compare output
COMPARE_OUT $expect $actual
diff --git a/tools/test/h5import/h5importtestutil.sh.in b/tools/test/h5import/h5importtestutil.sh.in
index 65b899f..04582ee 100644
--- a/tools/test/h5import/h5importtestutil.sh.in
+++ b/tools/test/h5import/h5importtestutil.sh.in
@@ -52,7 +52,7 @@ SRC_H5JAM_TESTFILES="$SRC_TOOLS/test/h5jam/testfiles"
SRC_H5STAT_TESTFILES="$SRC_TOOLS/test/h5stat/testfiles"
SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
-TESTDIR=./testfiles
+TESTDIR=./tmp
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/h5jam/testh5jam.sh.in b/tools/test/h5jam/testh5jam.sh.in
index 49598da..ee34377 100644
--- a/tools/test/h5jam/testh5jam.sh.in
+++ b/tools/test/h5jam/testh5jam.sh.in
@@ -55,7 +55,7 @@ SRC_H5STAT_TESTFILES="$SRC_TOOLS/test/h5stat/testfiles"
SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
SRC_H5JAM_OUTFILES="$SRC_TOOLS/test/h5jam/expected"
-TESTDIR=./testfiles
+TESTDIR=./tmp
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/h5ls/h5ls_plugin.sh.in b/tools/test/h5ls/h5ls_plugin.sh.in
index 3408876..8b606d6 100644
--- a/tools/test/h5ls/h5ls_plugin.sh.in
+++ b/tools/test/h5ls/h5ls_plugin.sh.in
@@ -49,7 +49,7 @@ SRC_H5LS_TESTFILES="$SRC_TOOLS/test/h5ls/testfiles"
SRC_H5DUMP_TESTFILES="$SRC_TOOLS/test/h5dump/testfiles"
SRC_H5LS_OUTFILES="$SRC_TOOLS/test/h5ls/expected"
-TESTDIR=./testplug
+TESTDIR=./tmppl
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/h5ls/testh5ls.sh.in b/tools/test/h5ls/testh5ls.sh.in
index fc6daab..01f9402 100644
--- a/tools/test/h5ls/testh5ls.sh.in
+++ b/tools/test/h5ls/testh5ls.sh.in
@@ -54,7 +54,7 @@ SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
SRC_H5LS_ERRFILES="$SRC_TOOLS/test/h5ls/errfiles"
SRC_H5LS_OUTFILES="$SRC_TOOLS/test/h5ls/expected"
-TESTDIR=./testfiles
+TESTDIR=./tmp
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/h5ls/testh5lsvds.sh.in b/tools/test/h5ls/testh5lsvds.sh.in
index 2408ee2..9038cf1 100644
--- a/tools/test/h5ls/testh5lsvds.sh.in
+++ b/tools/test/h5ls/testh5lsvds.sh.in
@@ -51,7 +51,7 @@ SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
SRC_H5LS_OUTFILES="$SRC_TOOLS/test/h5ls/expected"
TEST_P_DIR=./testfiles
-TESTDIR=./testfiles/vds
+TESTDIR=./tmpvds
test -d $TEST_P_DIR || mkdir -p $TEST_P_DIR
test -d $TESTDIR || mkdir $TESTDIR
@@ -145,7 +145,7 @@ CLEAN_TESTFILES_AND_TESTDIR()
# skip rm if srcdir is same as destdir
# this occurs when build/test performed in source dir and
# make cp fail
- SDIR=$SRC_H5LS_TESTFILES/vds
+ SDIR=$SRC_H5LS_TESTFILES
INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
diff --git a/tools/test/h5repack/h5repack.sh.in b/tools/test/h5repack/h5repack.sh.in
index f3b8d3e..ac213f1 100644
--- a/tools/test/h5repack/h5repack.sh.in
+++ b/tools/test/h5repack/h5repack.sh.in
@@ -68,7 +68,7 @@ SRC_H5STAT_TESTFILES="$SRC_TOOLS/test/h5stat/testfiles"
SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
SRC_H5REPACK_OUTFILES="$SRC_TOOLS/test/h5repack/expected"
-TESTDIR=./testpack
+TESTDIR=./tmp
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/h5repack/h5repack_plugin.sh.in b/tools/test/h5repack/h5repack_plugin.sh.in
index 43be1ee..a39cd7b 100644
--- a/tools/test/h5repack/h5repack_plugin.sh.in
+++ b/tools/test/h5repack/h5repack_plugin.sh.in
@@ -49,7 +49,7 @@ SRC_TOOLS="$srcdir/../.."
SRC_H5REPACK_TESTFILES="$SRC_TOOLS/test/h5repack/testfiles"
SRC_H5REPACK_OUTFILES="$SRC_TOOLS/test/h5repack/expected"
-TESTDIR=testplug
+TESTDIR=./tmppl
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/h5stat/testh5stat.sh.in b/tools/test/h5stat/testh5stat.sh.in
index 7ce0ad4..1d732c6 100644
--- a/tools/test/h5stat/testh5stat.sh.in
+++ b/tools/test/h5stat/testh5stat.sh.in
@@ -51,7 +51,7 @@ SRC_H5STAT_TESTFILES="$SRC_TOOLS/test/h5stat/testfiles"
SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
SRC_H5STAT_OUTFILES="$SRC_TOOLS/test/h5stat/expected"
-TESTDIR=./testfiles
+TESTDIR=./tmp
test -d $TESTDIR || mkdir $TESTDIR
######################################################################
diff --git a/tools/test/misc/testh5clear.sh.in b/tools/test/misc/testh5clear.sh.in
index b5bf5cc..2306d58 100644
--- a/tools/test/misc/testh5clear.sh.in
+++ b/tools/test/misc/testh5clear.sh.in
@@ -44,7 +44,7 @@ SRC_TOOLS="$srcdir/../.."
SRC_H5CLEAR_TESTFILES="$SRC_TOOLS/test/misc/testfiles"
SRC_H5CLEAR_OUTFILES="$SRC_TOOLS/test/misc/expected"
-TESTDIR=./testh5clear
+TESTDIR=./tmpclr
test -d $TESTDIR || mkdir -p $TESTDIR
######################################################################
diff --git a/tools/test/misc/testh5mkgrp.sh.in b/tools/test/misc/testh5mkgrp.sh.in
index 676f6b0..297f89f 100644
--- a/tools/test/misc/testh5mkgrp.sh.in
+++ b/tools/test/misc/testh5mkgrp.sh.in
@@ -43,7 +43,7 @@ SRC_TOOLS="$srcdir/../.."
SRC_H5MKGRP_TESTFILES="$SRC_TOOLS/test/misc/testfiles"
SRC_H5MKGRP_OUTFILES="$SRC_TOOLS/test/misc/expected"
-TESTDIR=./testgrp
+TESTDIR=./tmpmkg
test -d $TESTDIR || mkdir -p $TESTDIR
######################################################################
diff --git a/tools/test/misc/testh5repart.sh.in b/tools/test/misc/testh5repart.sh.in
index addd0db..e101b08 100644
--- a/tools/test/misc/testh5repart.sh.in
+++ b/tools/test/misc/testh5repart.sh.in
@@ -40,7 +40,7 @@ SRC_TOOLS="$srcdir/../.."
SRC_H5REPART_TESTFILES="$SRC_TOOLS/test/misc/testfiles"
-TESTDIR=./testrepart
+TESTDIR=./tmprp
test -d $TESTDIR || mkdir -p $TESTDIR
#
diff --git a/utils/subfiling_vfd/h5fuse.sh.in b/utils/subfiling_vfd/h5fuse.sh.in
index 82d497e..6f4bf61 100755
--- a/utils/subfiling_vfd/h5fuse.sh.in
+++ b/utils/subfiling_vfd/h5fuse.sh.in
@@ -243,9 +243,15 @@ if test -z "$subfile_dir"; then
exit $FAILED
fi
-# For bash 4.4+
subfs=$(sed -e '1,/subfile_dir=/d' "$file_config")
-mapfile -t subfiles <<< "$subfs"
+if command -v mapfile > /dev/null; then
+ # For bash 4.4+
+ mapfile -t subfiles <<< "$subfs"
+else
+ while IFS= read -r line; do
+ subfiles+=("$line")
+ done <<< "$subfs"
+fi
if [ ${#subfiles[@]} -eq 0 ]; then
echo -e "$RED failed to find subfiles list in $file_config $NC"
exit $FAILED
diff --git a/utils/tools/test/h5dwalk/copy_demo_files.sh.in b/utils/tools/test/h5dwalk/copy_demo_files.sh.in
index 02df202..8ccc5e8 100644
--- a/utils/tools/test/h5dwalk/copy_demo_files.sh.in
+++ b/utils/tools/test/h5dwalk/copy_demo_files.sh.in
@@ -30,7 +30,7 @@ exit_code=$EXIT_SUCCESS
# Add Testing files into the local testfiles directory::
-TESTDIR=./testfiles
+TESTDIR=./tmp
test -d $TESTDIR || mkdir $TESTDIR
echo "HDF5 \"$THIS_DIR/testfiles/h5diff_basic1.h5\" {" > "$THIS_DIR"/testfiles/h5diff_basic1.h5_h5dump.txt
diff --git a/utils/tools/test/h5dwalk/testh5dwalk.sh.in b/utils/tools/test/h5dwalk/testh5dwalk.sh.in
index a123f8d..694dad0 100644
--- a/utils/tools/test/h5dwalk/testh5dwalk.sh.in
+++ b/utils/tools/test/h5dwalk/testh5dwalk.sh.in
@@ -68,7 +68,7 @@ SRC_H5JAM_TESTFILES="$SRC_TOOLS/h5jam/testfiles"
SRC_H5DWALK_TESTFILES="$SRC_TOOLS/h5dwalk/testfiles"
SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/h5import/testfiles"
-TESTDIR=./testfiles
+TESTDIR=./tmpdw
test -d $TESTDIR || mkdir $TESTDIR
echo "SRC_H5DIFF_TESTFILES = $SRC_H5DIFF_TESTFILES"