summaryrefslogtreecommitdiffstats
path: root/src/H5Pint.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Pint.c')
-rw-r--r--src/H5Pint.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/H5Pint.c b/src/H5Pint.c
index e16379a..4064b66 100644
--- a/src/H5Pint.c
+++ b/src/H5Pint.c
@@ -29,6 +29,7 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
+#include "H5ACprivate.h" /* Metadata cache */
#include "H5Eprivate.h" /* Error handling */
#include "H5Fprivate.h" /* File access */
#include "H5FLprivate.h" /* Free lists */
@@ -5450,10 +5451,9 @@ H5P_get_class(const H5P_genplist_t *plist)
*-------------------------------------------------------------------------
*/
herr_t
-H5P_verify_apl_and_dxpl(hid_t *acspl_id, const H5P_libclass_t *libclass,
- hid_t *dxpl_id, hid_t loc_id, hbool_t is_collective)
+H5P_verify_apl_and_dxpl(hid_t *acspl_id, const H5P_libclass_t *libclass, hid_t *dxpl_id,
+ hid_t loc_id, hbool_t is_collective)
{
- MPI_Comm mpi_comm;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
@@ -5467,9 +5467,30 @@ H5P_verify_apl_and_dxpl(hid_t *acspl_id, const H5P_libclass_t *libclass,
if(H5P_DEFAULT == *acspl_id)
*acspl_id = *libclass->def_plist_id;
else {
+#ifdef H5_HAVE_PARALLEL
+ H5P_coll_md_read_flag_t is_collective; /* Collective metadata read flag */
+ H5P_genplist_t *plist; /* Property list pointer */
+#endif /* H5_HAVE_PARALLEL */
+
/* Sanity check the access property list class */
if(TRUE != H5P_isa_class(*acspl_id, *libclass->class_id))
HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not the required access property list")
+
+ *dxpl_id = H5AC_ind_read_dxpl_id;
+
+#ifdef H5_HAVE_PARALLEL
+ /* Get the plist structure for the access property list */
+ if(NULL == (plist = (H5P_genplist_t *)H5I_object(*acspl_id)))
+ HGOTO_ERROR(H5E_PLIST, H5E_BADATOM, FAIL, "can't find object for ID")
+
+ /* Get the collective metadata read flag */
+ if(H5P_peek(plist, H5_COLL_MD_READ_FLAG_NAME, &is_collective) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get core collective metadata read flag")
+
+ /* If collective metadata read requested and using internal DXPL, switch to internal collective DXPL */
+ if(H5P_USER_TRUE == is_collective)
+ *dxpl_id = H5AC_coll_read_dxpl_id;
+#endif /* H5_HAVE_PARALLEL */
} /* end else */
#ifdef H5_HAVE_PARALLEL
@@ -5479,6 +5500,8 @@ H5P_verify_apl_and_dxpl(hid_t *acspl_id, const H5P_libclass_t *libclass,
happens only when the environment variable H5_COLL_BARRIER is set
to non 0. */
if(is_collective && H5_coll_api_sanity_check_g) {
+ MPI_Comm mpi_comm;
+
/* retrieve the MPI communicator from the loc_id or the fapl_id */
if(H5F_mpi_retrieve_comm(loc_id, *acspl_id, &mpi_comm) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't get MPI communicator")
@@ -5492,3 +5515,4 @@ H5P_verify_apl_and_dxpl(hid_t *acspl_id, const H5P_libclass_t *libclass,
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P_verify_apl_and_dxpl() */
+