ADIOS2
ADIOS2 copied to clipboard
HDF5 VOL: VOL connector has incompatible version
Describe the bug Using the HDF5 VOL fails with
HDF5-DIAG: Error detected in HDF5 (1.13.1) thread 0:
#000: H5.c line 1109 in H5open(): library initialization failed
major: Function entry/exit
minor: Unable to initialize object
#001: H5.c line 286 in H5_init_library(): unable to initialize VOL interface
major: Function entry/exit
minor: Unable to initialize object
#002: H5VLint.c line 213 in H5VL_init_phase2(): unable to set default VOL connector
major: Virtual Object Layer
minor: Can't set value
#003: H5VLint.c line 423 in H5VL__set_def_conn(): can't register connector
major: Virtual Object Layer
minor: Unable to register new ID
#004: H5VLint.c line 1354 in H5VL__register_connector_by_name(): unable to load VOL connector
major: Virtual Object Layer
minor: Unable to initialize object
HDF5-DIAG: Error detected in HDF5 (1.13.1) thread 0:
#000: H5VL.c line 98 in H5VLregister_connector(): unable to register VOL connector
major: Virtual Object Layer
minor: Unable to register new ID
#001: H5VLint.c line 1263 in H5VL__register_connector_by_class(): VOL connector has incompatible version
major: Virtual Object Layer
minor: Unable to register new ID
HDF5-DIAG: Error detected in HDF5 (1.13.1) thread 0:
#000: H5Pfapl.c line 6188 in H5Pget_vol_info(): not a property list
major: Invalid arguments to routine
minor: Inappropriate type
Unable to get vol info
I have noticed that HDF5 1.13.0+ defines H5VL_VERSION
as 2
:
https://github.com/HDFGroup/hdf5/blob/55f4cc0caa69d65c505e926fb7b2568ab1a76c58/src/H5VLpublic.h#L37
In ADIOS2, H5VL_ADIOS2_VERSION
is 0
:
https://github.com/ornladios/ADIOS2/blob/482970ff5b2b310fdcdea974b6260149cbd333ba/source/h5vol/H5Vol_def.h#L21
This value is used to initialize the H5VL_class_t
instance used in the VOL:
https://github.com/ornladios/ADIOS2/blob/482970ff5b2b310fdcdea974b6260149cbd333ba/source/h5vol/H5VolReadWrite.h#L53-L57
and presumably that is why at runtime the relevant check in HDF5 fails:
https://github.com/HDFGroup/hdf5/blob/d433f0f7a67a0bf6336ad6a98ad820302e82b44d/src/H5VLint.c#L1263
To Reproduce This can be reproduced using the h5_rdwt.c example, e.g. by inserting the relevant VOL setup and teardown instructions:
H5VL_ADIOS2_set(H5P_DEFAULT);
...
H5VL_ADIOS2_unset();
The value of H5VL_VERSION
has changed with release 1.13 of HDF5. Building the ADIOS2 VOL against HDF5 1.12.2 did not work (explicitly disabled in CMake, removing that safeguard fails during compilation - didn't bother investigating further)
Setting H5VL_ADIOS2_VERSION
to 2
allows to pass the above check but fails with a similar error:
HDF5-DIAG: Error detected in HDF5 (1.13.1) thread 0:
#000: H5.c line 1109 in H5open(): library initialization failed
major: Function entry/exit
minor: Unable to initialize object
#001: H5.c line 286 in H5_init_library(): unable to initialize VOL interface
major: Function entry/exit
minor: Unable to initialize object
#002: H5VLint.c line 213 in H5VL_init_phase2(): unable to set default VOL connector
major: Virtual Object Layer
minor: Can't set value
#003: H5VLint.c line 423 in H5VL__set_def_conn(): can't register connector
major: Virtual Object Layer
minor: Unable to register new ID
#004: H5VLint.c line 1354 in H5VL__register_connector_by_name(): unable to load VOL connector
major: Virtual Object Layer
minor: Unable to initialize object
HDF5-DIAG: Error detected in HDF5 (1.13.1) thread 0:
#000: H5Pfapl.c line 6188 in H5Pget_vol_info(): not a property list
major: Invalid arguments to routine
minor: Inappropriate type
Unable to get vol info
Expected behavior The example should build and run without warnings or error.
Desktop (please complete the following information):
- Cambridge CSD3, Icelake partition
- Intel OneAPI compilers 2022.1 (icx, icpx, ifx)
- ADIOS2 2.8.1 tag
Additional context Add any other context about the problem here.
Following up Was the issue fixed? Please report back.
Thanks for the issue.
This VOL was built before hdf5 1.13, so some adjustments are needed and a pull request was merged to address it.
However, there are some limitations due to the functionality differences between ADIOS2 and HDF5. For example, ADIOS2 does not have an equivalent state as H5F_ACC_RDWR. So h5_rdwt.c can not run successfully under VOL. You can use h5_write.c instead. The h5_read.c. has memory space that will not be handled in the current VOL.