ADIOS2 icon indicating copy to clipboard operation
ADIOS2 copied to clipboard

HDF5 VOL: VOL connector has incompatible version

Open stefaniereuter opened this issue 2 years ago • 1 comments

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.

stefaniereuter avatar Jun 21 '22 22:06 stefaniereuter

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.

guj avatar Jul 10 '22 17:07 guj