Re-enable collective metadata reads after disabling for chunk lookup (#1173)

This commit is contained in:
jhendersonHDF 2021-11-09 08:05:08 -06:00 committed by GitHub
parent a0445d806c
commit b736d442ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 7 deletions

View File

@ -1039,6 +1039,13 @@ Bug Fixes since HDF5-1.12.0 release
===================================
Library
-------
- Fixed an issue with collective metadata reads being permanently disabled
after a dataset chunk lookup operation. This would usually cause a
mismatched MPI_Bcast and MPI_ERR_TRUNCATE issue in the library for
simple cases of H5Dcreate() -> H5Dwrite() -> H5Dcreate().
(JTH - 2021/11/08, HDFFV-11090)
- Fixed cross platform incompatibility of references within variable length
types

View File

@ -3166,11 +3166,14 @@ H5D__chunk_hash_val(const H5D_shared_t *shared, const hsize_t *scaled)
herr_t
H5D__chunk_lookup(const H5D_t *dset, const hsize_t *scaled, H5D_chunk_ud_t *udata)
{
H5D_rdcc_ent_t * ent = NULL; /* Cache entry */
H5O_storage_chunk_t *sc = &(dset->shared->layout.storage.u.chunk);
unsigned idx = 0; /* Index of chunk in cache, if present */
hbool_t found = FALSE; /* In cache? */
herr_t ret_value = SUCCEED; /* Return value */
H5D_rdcc_ent_t * ent = NULL; /* Cache entry */
H5O_storage_chunk_t *sc = &(dset->shared->layout.storage.u.chunk);
unsigned idx = 0; /* Index of chunk in cache, if present */
hbool_t found = FALSE; /* In cache? */
#ifdef H5_HAVE_PARALLEL
hbool_t reenable_coll_md_reads = FALSE;
#endif
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
@ -3241,8 +3244,13 @@ H5D__chunk_lookup(const H5D_t *dset, const hsize_t *scaled, H5D_chunk_ud_t *udat
* highly unlikely that users would read the same chunks from all
* processes.
*/
if (H5F_HAS_FEATURE(idx_info.f, H5FD_FEAT_HAS_MPI))
H5CX_set_coll_metadata_read(FALSE);
if (H5F_HAS_FEATURE(idx_info.f, H5FD_FEAT_HAS_MPI)) {
hbool_t do_coll_md_reads = H5CX_get_coll_metadata_read();
if (do_coll_md_reads) {
H5CX_set_coll_metadata_read(FALSE);
reenable_coll_md_reads = TRUE;
}
}
#endif /* H5_HAVE_PARALLEL */
/* Go get the chunk information */
@ -3285,6 +3293,12 @@ H5D__chunk_lookup(const H5D_t *dset, const hsize_t *scaled, H5D_chunk_ud_t *udat
} /* end else */
done:
#ifdef H5_HAVE_PARALLEL
/* Re-enable collective metadata reads if we disabled them */
if (reenable_coll_md_reads)
H5CX_set_coll_metadata_read(TRUE);
#endif /* H5_HAVE_PARALLEL */
FUNC_LEAVE_NOAPI(ret_value)
} /* H5D__chunk_lookup() */