Merge pull request #7463 from gpaulsen/topic/v4.0.x/update_pmix_to_v3.1.5
Updating OMPI v4.0.x to PMIx v3.1.5 released
Этот коммит содержится в:
Коммит
2a3ec874f4
@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
|
Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||||
Copyright (c) 2017-2020 IBM Corporation. All rights reserved.
|
Copyright (c) 2017-2020 IBM Corporation. All rights reserved.
|
||||||
$COPYRIGHT$
|
$COPYRIGHT$
|
||||||
|
|
||||||
@ -58,6 +58,11 @@ in accordance with an Errata update of the PMIx v3 Standard
|
|||||||
- PR #1613: dstore: Fix cache size calculation
|
- PR #1613: dstore: Fix cache size calculation
|
||||||
- PR #1622: Fix multiple occurrences of unaligned access in pmix tests
|
- PR #1622: Fix multiple occurrences of unaligned access in pmix tests
|
||||||
- PR #1620: Re-address the collective tracker problem
|
- PR #1620: Re-address the collective tracker problem
|
||||||
|
- PR #1625: Fix library triplet
|
||||||
|
- PR #1630: Fix support for PGI compiler pgcc18
|
||||||
|
- PR #1637: Realign behavior of PMIx_Get and PMIx_Get_nb
|
||||||
|
- PR #1640: Properly handle forwarded output when no handler registered
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
3.1.4 -- 9 Aug 2019
|
3.1.4 -- 9 Aug 2019
|
||||||
|
@ -25,14 +25,14 @@ release=5
|
|||||||
# The only requirement is that it must be entirely printable ASCII
|
# The only requirement is that it must be entirely printable ASCII
|
||||||
# characters and have no white space.
|
# characters and have no white space.
|
||||||
|
|
||||||
greek=rc2
|
greek=
|
||||||
|
|
||||||
# If repo_rev is empty, then the repository version number will be
|
# If repo_rev is empty, then the repository version number will be
|
||||||
# obtained during "make dist" via the "git describe --tags --always"
|
# obtained during "make dist" via the "git describe --tags --always"
|
||||||
# command, or with the date (if "git describe" fails) in the form of
|
# command, or with the date (if "git describe" fails) in the form of
|
||||||
# "date<date>".
|
# "date<date>".
|
||||||
|
|
||||||
repo_rev=git1fca232
|
repo_rev=gitedebb24
|
||||||
|
|
||||||
# If tarball_version is not empty, it is used as the version string in
|
# If tarball_version is not empty, it is used as the version string in
|
||||||
# the tarball filename, regardless of all other versions listed in
|
# the tarball filename, regardless of all other versions listed in
|
||||||
@ -46,7 +46,7 @@ tarball_version=
|
|||||||
|
|
||||||
# The date when this release was created
|
# The date when this release was created
|
||||||
|
|
||||||
date="Feb 10, 2020"
|
date="Feb 19, 2020"
|
||||||
|
|
||||||
# The shared library version of each of PMIx's public libraries.
|
# The shared library version of each of PMIx's public libraries.
|
||||||
# These versions are maintained in accordance with the "Library
|
# These versions are maintained in accordance with the "Library
|
||||||
@ -82,8 +82,8 @@ libpmi_so_version=1:1:0
|
|||||||
libpmi2_so_version=1:0:0
|
libpmi2_so_version=1:0:0
|
||||||
|
|
||||||
# "Common" components install standalone libraries that are run-time
|
# "Common" components install standalone libraries that are run-time
|
||||||
# # linked by one or more components. So they need to be versioned as
|
# linked by one or more components. So they need to be versioned as
|
||||||
# # well. Yuck; this somewhat breaks the
|
# well. Yuck; this somewhat breaks the
|
||||||
# # components-don't-affect-the-build-system abstraction.
|
# components-don't-affect-the-build-system abstraction.
|
||||||
#
|
#
|
||||||
libmca_common_dstore_so_version=1:2:0
|
libmca_common_dstore_so_version=1:2:0
|
||||||
|
@ -11,7 +11,7 @@ dnl University of Stuttgart. All rights reserved.
|
|||||||
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
dnl All rights reserved.
|
dnl All rights reserved.
|
||||||
dnl Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
dnl Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
||||||
dnl Copyright (c) 2013 Intel, Inc. All rights reserved
|
dnl Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||||
dnl Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
|
dnl Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
|
||||||
dnl Copyright (c) 2015 Research Organization for Information Science
|
dnl Copyright (c) 2015 Research Organization for Information Science
|
||||||
dnl and Technology (RIST). All rights reserved.
|
dnl and Technology (RIST). All rights reserved.
|
||||||
@ -45,7 +45,7 @@ AC_DEFUN([PMIX_C_COMPILER_VENDOR], [
|
|||||||
|
|
||||||
# workaround to avoid syntax error with Autoconf < 2.68:
|
# workaround to avoid syntax error with Autoconf < 2.68:
|
||||||
m4_ifndef([AC_LANG_DEFINES_PROVIDED],
|
m4_ifndef([AC_LANG_DEFINES_PROVIDED],
|
||||||
[m4_define([AC_LANG_DEFINES_PROVIDED])])
|
[m4_define([AC_LANG_DEFINES_PROVIDED])])
|
||||||
|
|
||||||
# PMIX_IFDEF_IFELSE(symbol, [action-if-defined],
|
# PMIX_IFDEF_IFELSE(symbol, [action-if-defined],
|
||||||
# [action-if-not-defined])
|
# [action-if-not-defined])
|
||||||
@ -85,14 +85,19 @@ AC_DEFUN([_PMIX_CHECK_COMPILER_VENDOR], [
|
|||||||
pmix_check_compiler_vendor_result="unknown"
|
pmix_check_compiler_vendor_result="unknown"
|
||||||
|
|
||||||
# GNU is probably the most common, so check that one as soon as
|
# GNU is probably the most common, so check that one as soon as
|
||||||
# possible. Intel pretends to be GNU, so need to check Intel
|
# possible. Intel and PGI18 pretend to be GNU, so need to check Intel
|
||||||
# before checking for GNU.
|
# and PGI before checking for GNU.
|
||||||
|
|
||||||
# Intel
|
# Intel
|
||||||
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
||||||
[PMIX_IF_IFELSE([defined(__INTEL_COMPILER) || defined(__ICC)],
|
[PMIX_IF_IFELSE([defined(__INTEL_COMPILER) || defined(__ICC)],
|
||||||
[pmix_check_compiler_vendor_result="intel"])])
|
[pmix_check_compiler_vendor_result="intel"])])
|
||||||
|
|
||||||
|
# Portland Group
|
||||||
|
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
||||||
|
[PMIX_IFDEF_IFELSE([__PGI],
|
||||||
|
[pmix_check_compiler_vendor_result="portland group"])])
|
||||||
|
|
||||||
# Fujitsu
|
# Fujitsu
|
||||||
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
||||||
[PMIX_IF_IFELSE([defined(__FUJITSU)],
|
[PMIX_IF_IFELSE([defined(__FUJITSU)],
|
||||||
@ -212,11 +217,6 @@ AC_DEFUN([_PMIX_CHECK_COMPILER_VENDOR], [
|
|||||||
[PMIX_IFDEF_IFELSE([__POCC__],
|
[PMIX_IFDEF_IFELSE([__POCC__],
|
||||||
[pmix_check_compiler_vendor_result="pelles"])])
|
[pmix_check_compiler_vendor_result="pelles"])])
|
||||||
|
|
||||||
# Portland Group
|
|
||||||
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
|
||||||
[PMIX_IFDEF_IFELSE([__PGI],
|
|
||||||
[pmix_check_compiler_vendor_result="portland group"])])
|
|
||||||
|
|
||||||
# SAS/C
|
# SAS/C
|
||||||
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
||||||
[PMIX_IF_IFELSE([defined(SASC) || defined(__SASC) || defined(__SASC__)],
|
[PMIX_IF_IFELSE([defined(SASC) || defined(__SASC) || defined(__SASC__)],
|
||||||
|
@ -192,7 +192,7 @@
|
|||||||
|
|
||||||
Summary: An extended/exascale implementation of PMI
|
Summary: An extended/exascale implementation of PMI
|
||||||
Name: %{?_name:%{_name}}%{!?_name:pmix}
|
Name: %{?_name:%{_name}}%{!?_name:pmix}
|
||||||
Version: 3.1.5rc2
|
Version: 3.1.5
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
License: BSD
|
License: BSD
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||||
* Copyright (c) 2014-2016 Research Organization for Information Science
|
* Copyright (c) 2014-2016 Research Organization for Information Science
|
||||||
* and Technology (RIST). All rights reserved.
|
* and Technology (RIST). All rights reserved.
|
||||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||||
@ -89,11 +89,8 @@ PMIX_EXPORT pmix_status_t PMIx_Get(const pmix_proc_t *proc,
|
|||||||
const pmix_info_t info[], size_t ninfo,
|
const pmix_info_t info[], size_t ninfo,
|
||||||
pmix_value_t **val)
|
pmix_value_t **val)
|
||||||
{
|
{
|
||||||
pmix_cb_t *cb;
|
pmix_cb_t cb;
|
||||||
pmix_status_t rc;
|
pmix_status_t rc;
|
||||||
size_t n, nfo;
|
|
||||||
pmix_proc_t p;
|
|
||||||
pmix_info_t nodeinfo, *iptr;
|
|
||||||
|
|
||||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||||
|
|
||||||
@ -108,76 +105,23 @@ PMIX_EXPORT pmix_status_t PMIx_Get(const pmix_proc_t *proc,
|
|||||||
(NULL == proc) ? "NULL" : PMIX_NAME_PRINT(proc),
|
(NULL == proc) ? "NULL" : PMIX_NAME_PRINT(proc),
|
||||||
(NULL == key) ? "NULL" : key);
|
(NULL == key) ? "NULL" : key);
|
||||||
|
|
||||||
memcpy(&p, proc, sizeof(pmix_proc_t));
|
/* create a callback object so we can be notified when
|
||||||
iptr = (pmix_info_t*)info;
|
* the non-blocking operation is complete */
|
||||||
nfo = ninfo;
|
PMIX_CONSTRUCT(&cb, pmix_cb_t);
|
||||||
|
if (PMIX_SUCCESS != (rc = PMIx_Get_nb(proc, key, info, ninfo, _value_cbfunc, &cb))) {
|
||||||
if (!PMIX_PEER_IS_EARLIER(pmix_client_globals.myserver, 3, 1, 5)) {
|
PMIX_DESTRUCT(&cb);
|
||||||
if (PMIX_RANK_UNDEF == proc->rank || NULL == key) {
|
|
||||||
goto doget;
|
|
||||||
}
|
|
||||||
/* if they are asking about a node-level piece of info,
|
|
||||||
* then the rank must be UNDEF */
|
|
||||||
if (pmix_check_node_info(key)) {
|
|
||||||
p.rank = PMIX_RANK_UNDEF;
|
|
||||||
/* see if they told us to get node info */
|
|
||||||
if (NULL == info) {
|
|
||||||
/* guess not - better do it */
|
|
||||||
PMIX_INFO_LOAD(&nodeinfo, PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
|
||||||
iptr = &nodeinfo;
|
|
||||||
nfo = 1;
|
|
||||||
}
|
|
||||||
goto doget;
|
|
||||||
}
|
|
||||||
/* if they are asking about an app-level piece of info,
|
|
||||||
* then the rank must be UNDEF */
|
|
||||||
if (pmix_check_app_info(key)) {
|
|
||||||
p.rank = PMIX_RANK_UNDEF;
|
|
||||||
/* see if they told us to get app info */
|
|
||||||
if (NULL == info) {
|
|
||||||
/* guess not - better do it */
|
|
||||||
PMIX_INFO_LOAD(&nodeinfo, PMIX_APP_INFO, NULL, PMIX_BOOL);
|
|
||||||
iptr = &nodeinfo;
|
|
||||||
nfo = 1;
|
|
||||||
}
|
|
||||||
goto doget;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* see if they are requesting session, node, or app-level info */
|
|
||||||
for (n=0; n < ninfo; n++) {
|
|
||||||
if (PMIX_CHECK_KEY(info, PMIX_NODE_INFO) ||
|
|
||||||
PMIX_CHECK_KEY(info, PMIX_APP_INFO) ||
|
|
||||||
PMIX_CHECK_KEY(info, PMIX_SESSION_INFO)) {
|
|
||||||
goto doget;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* try to get data directly, without threadshift */
|
|
||||||
if (PMIX_SUCCESS == (rc = _getfn_fastpath(&p, key, iptr, nfo, val))) {
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
doget:
|
|
||||||
/* create a callback object as we need to pass it to the
|
|
||||||
* recv routine so we know which callback to use when
|
|
||||||
* the return message is recvd */
|
|
||||||
cb = PMIX_NEW(pmix_cb_t);
|
|
||||||
if (PMIX_SUCCESS != (rc = PMIx_Get_nb(&p, key, iptr, nfo, _value_cbfunc, cb))) {
|
|
||||||
PMIX_RELEASE(cb);
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* wait for the data to return */
|
/* wait for the data to return */
|
||||||
PMIX_WAIT_THREAD(&cb->lock);
|
PMIX_WAIT_THREAD(&cb.lock);
|
||||||
rc = cb->status;
|
rc = cb.status;
|
||||||
if (NULL != val) {
|
if (NULL != val) {
|
||||||
*val = cb->value;
|
*val = cb.value;
|
||||||
cb->value = NULL;
|
cb.value = NULL;
|
||||||
}
|
}
|
||||||
PMIX_RELEASE(cb);
|
PMIX_DESTRUCT(&cb);
|
||||||
|
|
||||||
done:
|
|
||||||
pmix_output_verbose(2, pmix_client_globals.get_output,
|
pmix_output_verbose(2, pmix_client_globals.get_output,
|
||||||
"pmix:client get completed");
|
"pmix:client get completed");
|
||||||
|
|
||||||
@ -189,8 +133,15 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
|||||||
pmix_value_cbfunc_t cbfunc, void *cbdata)
|
pmix_value_cbfunc_t cbfunc, void *cbdata)
|
||||||
{
|
{
|
||||||
pmix_cb_t *cb;
|
pmix_cb_t *cb;
|
||||||
int rank;
|
pmix_status_t rc;
|
||||||
char *nm;
|
size_t n, nfo;
|
||||||
|
bool wantinfo = false;
|
||||||
|
bool haveid = false;
|
||||||
|
pmix_proc_t p;
|
||||||
|
pmix_info_t *iptr;
|
||||||
|
bool copy = false;
|
||||||
|
uint32_t appnum;
|
||||||
|
pmix_value_t *ival = NULL;
|
||||||
|
|
||||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||||
|
|
||||||
@ -228,31 +179,181 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
|||||||
/* if the given proc param is NULL, or the nspace is
|
/* if the given proc param is NULL, or the nspace is
|
||||||
* empty, then the caller is referencing our own nspace */
|
* empty, then the caller is referencing our own nspace */
|
||||||
if (NULL == proc || 0 == strlen(proc->nspace)) {
|
if (NULL == proc || 0 == strlen(proc->nspace)) {
|
||||||
nm = pmix_globals.myid.nspace;
|
PMIX_LOAD_NSPACE(p.nspace, pmix_globals.myid.nspace);
|
||||||
} else {
|
} else {
|
||||||
nm = (char*)proc->nspace;
|
PMIX_LOAD_NSPACE(p.nspace, proc->nspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if the proc param is NULL, then we are seeking a key that
|
/* if the proc param is NULL, then we are seeking a key that
|
||||||
* must be globally unique, so communicate this to the hash
|
* must be globally unique, so communicate this to the hash
|
||||||
* functions with the UNDEF rank */
|
* functions with the UNDEF rank */
|
||||||
if (NULL == proc) {
|
if (NULL == proc) {
|
||||||
rank = PMIX_RANK_UNDEF;
|
p.rank = PMIX_RANK_UNDEF;
|
||||||
} else {
|
} else {
|
||||||
rank = proc->rank;
|
p.rank = proc->rank;
|
||||||
}
|
}
|
||||||
|
iptr = (pmix_info_t*)info;
|
||||||
|
nfo = ninfo;
|
||||||
|
|
||||||
pmix_output_verbose(2, pmix_client_globals.get_output,
|
pmix_output_verbose(2, pmix_client_globals.get_output,
|
||||||
"pmix: get_nb value for proc %s:%u key %s",
|
"pmix: get_nb value for proc %s key %s",
|
||||||
nm, rank, (NULL == key) ? "NULL" : key);
|
PMIX_NAME_PRINT(&p), (NULL == key) ? "NULL" : key);
|
||||||
|
|
||||||
|
if (!PMIX_PEER_IS_EARLIER(pmix_client_globals.myserver, 3, 1, 5)) {
|
||||||
|
/* ]don't consider the fastpath option
|
||||||
|
* for undefined rank or NULL keys */
|
||||||
|
if (PMIX_RANK_UNDEF == p.rank || NULL == key) {
|
||||||
|
goto doget;
|
||||||
|
}
|
||||||
|
/* if they are asking about a node-level piece of info,
|
||||||
|
* then the rank must be UNDEF */
|
||||||
|
if (pmix_check_node_info(key)) {
|
||||||
|
p.rank = PMIX_RANK_UNDEF;
|
||||||
|
/* the key is node-related - see if the target node is in the
|
||||||
|
* info array and if they tagged the request accordingly */
|
||||||
|
if (NULL != info) {
|
||||||
|
for (n=0; n < ninfo; n++) {
|
||||||
|
if (PMIX_CHECK_KEY(&info[n], PMIX_NODE_INFO)) {
|
||||||
|
wantinfo = true;
|
||||||
|
} else if (PMIX_CHECK_KEY(&info[n], PMIX_HOSTNAME)) {
|
||||||
|
haveid = true;
|
||||||
|
} else if (PMIX_CHECK_KEY(&info[n], PMIX_NODEID)) {
|
||||||
|
haveid = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (wantinfo && haveid) {
|
||||||
|
goto doget;
|
||||||
|
} else if (wantinfo) {
|
||||||
|
/* missing the nodeid/hostname - add our hostname */
|
||||||
|
nfo = ninfo + 1;
|
||||||
|
PMIX_INFO_CREATE(iptr, nfo);
|
||||||
|
for (n=0; n < ninfo; n++) {
|
||||||
|
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||||
|
}
|
||||||
|
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_HOSTNAME, pmix_globals.hostname, PMIX_STRING);
|
||||||
|
copy = true;
|
||||||
|
goto doget;
|
||||||
|
} else if (haveid) {
|
||||||
|
/* flag that we want node info */
|
||||||
|
nfo = ninfo + 1;
|
||||||
|
PMIX_INFO_CREATE(iptr, nfo);
|
||||||
|
for (n=0; n < ninfo; n++) {
|
||||||
|
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||||
|
}
|
||||||
|
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
||||||
|
copy = true;
|
||||||
|
goto doget;
|
||||||
|
} else {
|
||||||
|
/* missing both */
|
||||||
|
nfo = ninfo + 2;
|
||||||
|
PMIX_INFO_CREATE(iptr, nfo);
|
||||||
|
for (n=0; n < ninfo; n++) {
|
||||||
|
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||||
|
}
|
||||||
|
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
||||||
|
PMIX_INFO_LOAD(&iptr[ninfo+1], PMIX_HOSTNAME, pmix_globals.hostname, PMIX_STRING);
|
||||||
|
copy = true;
|
||||||
|
goto doget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* see if they are asking about an app-level piece of info */
|
||||||
|
wantinfo = false;
|
||||||
|
haveid = false;
|
||||||
|
if (pmix_check_app_info(key)) {
|
||||||
|
p.rank = PMIX_RANK_UNDEF;
|
||||||
|
/* the key is app-related - see if the target appnum is in the
|
||||||
|
* info array and if they tagged the request accordingly */
|
||||||
|
if (NULL != info) {
|
||||||
|
for (n=0; n < ninfo; n++) {
|
||||||
|
if (PMIX_CHECK_KEY(&info[n], PMIX_APP_INFO)) {
|
||||||
|
wantinfo = true;
|
||||||
|
} else if (PMIX_CHECK_KEY(&info[n], PMIX_APPNUM) &&
|
||||||
|
0 != info[n].value.data.uint32) {
|
||||||
|
haveid = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (wantinfo && haveid) {
|
||||||
|
goto doget;
|
||||||
|
} else if (wantinfo) {
|
||||||
|
/* missing the appnum - add ours */
|
||||||
|
nfo = ninfo + 1;
|
||||||
|
PMIX_INFO_CREATE(iptr, nfo);
|
||||||
|
for (n=0; n < ninfo; n++) {
|
||||||
|
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||||
|
}
|
||||||
|
/* try to retrieve it */
|
||||||
|
rc = _getfn_fastpath(&pmix_globals.myid, PMIX_APPNUM, NULL, 0, &ival);
|
||||||
|
if (PMIX_SUCCESS != rc) {
|
||||||
|
appnum = ival->data.uint32;
|
||||||
|
PMIX_VALUE_RELEASE(ival);
|
||||||
|
} else {
|
||||||
|
appnum = 0;
|
||||||
|
}
|
||||||
|
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APPNUM, &appnum, PMIX_UINT32);
|
||||||
|
copy = true;
|
||||||
|
goto doget;
|
||||||
|
} else if (haveid) {
|
||||||
|
/* flag that we want app info */
|
||||||
|
nfo = ninfo + 1;
|
||||||
|
PMIX_INFO_CREATE(iptr, nfo);
|
||||||
|
for (n=0; n < ninfo; n++) {
|
||||||
|
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||||
|
}
|
||||||
|
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APP_INFO, NULL, PMIX_BOOL);
|
||||||
|
copy = true;
|
||||||
|
goto doget;
|
||||||
|
} else {
|
||||||
|
/* missing both */
|
||||||
|
nfo = ninfo + 2;
|
||||||
|
PMIX_INFO_CREATE(iptr, nfo);
|
||||||
|
for (n=0; n < ninfo; n++) {
|
||||||
|
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||||
|
}
|
||||||
|
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APP_INFO, NULL, PMIX_BOOL);
|
||||||
|
/* try to retrieve it */
|
||||||
|
rc = _getfn_fastpath(&pmix_globals.myid, PMIX_APPNUM, NULL, 0, &ival);
|
||||||
|
if (PMIX_SUCCESS != rc) {
|
||||||
|
appnum = ival->data.uint32;
|
||||||
|
PMIX_VALUE_RELEASE(ival);
|
||||||
|
} else {
|
||||||
|
appnum = 0;
|
||||||
|
}
|
||||||
|
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APPNUM, &appnum, PMIX_UINT32);
|
||||||
|
copy = true;
|
||||||
|
goto doget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* see if they are requesting session info or requesting cache refresh */
|
||||||
|
for (n=0; n < ninfo; n++) {
|
||||||
|
if (PMIX_CHECK_KEY(info, PMIX_SESSION_INFO)) {
|
||||||
|
goto doget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* try to get data directly, without threadshift */
|
||||||
|
if (PMIX_SUCCESS == (rc = _getfn_fastpath(&p, key, iptr, nfo, &ival))) {
|
||||||
|
if (NULL != cbfunc) {
|
||||||
|
cbfunc(rc, ival, cbdata);
|
||||||
|
/* ownership of the memory in ival is passed to the
|
||||||
|
* user in the cbfunc, so don't release it here */
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
doget:
|
||||||
/* threadshift this request so we can access global structures */
|
/* threadshift this request so we can access global structures */
|
||||||
cb = PMIX_NEW(pmix_cb_t);
|
cb = PMIX_NEW(pmix_cb_t);
|
||||||
cb->pname.nspace = strdup(nm);
|
cb->pname.nspace = strdup(p.nspace);
|
||||||
cb->pname.rank = rank;
|
cb->pname.rank = p.rank;
|
||||||
cb->key = (char*)key;
|
cb->key = (char*)key;
|
||||||
cb->info = (pmix_info_t*)info;
|
cb->info = iptr;
|
||||||
cb->ninfo = ninfo;
|
cb->ninfo = nfo;
|
||||||
|
cb->infocopy = copy;
|
||||||
cb->cbfunc.valuefn = cbfunc;
|
cb->cbfunc.valuefn = cbfunc;
|
||||||
cb->cbdata = cbdata;
|
cb->cbdata = cbdata;
|
||||||
PMIX_THREADSHIFT(cb, _getnbfn);
|
PMIX_THREADSHIFT(cb, _getnbfn);
|
||||||
@ -469,7 +570,7 @@ static pmix_status_t process_values(pmix_value_t **v, pmix_cb_t *cb)
|
|||||||
}
|
}
|
||||||
/* we will return the data as an array of pmix_info_t
|
/* we will return the data as an array of pmix_info_t
|
||||||
* in the kvs pmix_value_t */
|
* in the kvs pmix_value_t */
|
||||||
val = (pmix_value_t*)malloc(sizeof(pmix_value_t));
|
PMIX_VALUE_CREATE(val, 1);
|
||||||
if (NULL == val) {
|
if (NULL == val) {
|
||||||
return PMIX_ERR_NOMEM;
|
return PMIX_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
|
@ -307,6 +307,7 @@ static void cbcon(pmix_cb_t *p)
|
|||||||
p->nprocs = 0;
|
p->nprocs = 0;
|
||||||
p->info = NULL;
|
p->info = NULL;
|
||||||
p->ninfo = 0;
|
p->ninfo = 0;
|
||||||
|
p->infocopy = false;
|
||||||
p->nvals = 0;
|
p->nvals = 0;
|
||||||
PMIX_CONSTRUCT(&p->kvs, pmix_list_t);
|
PMIX_CONSTRUCT(&p->kvs, pmix_list_t);
|
||||||
p->copy = false;
|
p->copy = false;
|
||||||
@ -321,6 +322,9 @@ static void cbdes(pmix_cb_t *p)
|
|||||||
free(p->pname.nspace);
|
free(p->pname.nspace);
|
||||||
}
|
}
|
||||||
PMIX_DESTRUCT(&p->data);
|
PMIX_DESTRUCT(&p->data);
|
||||||
|
if (p->infocopy) {
|
||||||
|
PMIX_INFO_FREE(p->info, p->ninfo);
|
||||||
|
}
|
||||||
PMIX_LIST_DESTRUCT(&p->kvs);
|
PMIX_LIST_DESTRUCT(&p->kvs);
|
||||||
}
|
}
|
||||||
PMIX_EXPORT PMIX_CLASS_INSTANCE(pmix_cb_t,
|
PMIX_EXPORT PMIX_CLASS_INSTANCE(pmix_cb_t,
|
||||||
|
@ -11,6 +11,10 @@
|
|||||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||||
|
* Copyright (c) 2019 Research Organization for Information Science
|
||||||
|
* and Technology (RIST). All rights reserved.
|
||||||
|
* Copyright (c) 2019 Mellanox Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -391,6 +395,7 @@ typedef struct {
|
|||||||
size_t nprocs;
|
size_t nprocs;
|
||||||
pmix_info_t *info;
|
pmix_info_t *info;
|
||||||
size_t ninfo;
|
size_t ninfo;
|
||||||
|
bool infocopy;
|
||||||
size_t nvals;
|
size_t nvals;
|
||||||
pmix_list_t kvs;
|
pmix_list_t kvs;
|
||||||
bool copy;
|
bool copy;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||||
* Copyright (c) 2014-2016 Research Organization for Information Science
|
* Copyright (c) 2014-2016 Research Organization for Information Science
|
||||||
* and Technology (RIST). All rights reserved.
|
* and Technology (RIST). All rights reserved.
|
||||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||||
@ -249,13 +249,8 @@ static void tool_iof_handler(struct pmix_peer_t *pr,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
/* lookup the handler for this IOF package */
|
/* lookup the handler for this IOF package */
|
||||||
if (NULL == (req = (pmix_iof_req_t*)pmix_pointer_array_get_item(&pmix_globals.iof_requests, refid))) {
|
if (NULL != (req = (pmix_iof_req_t*)pmix_pointer_array_get_item(&pmix_globals.iof_requests, refid)) &&
|
||||||
/* something wrong here - should not happen */
|
NULL != req->cbfunc) {
|
||||||
PMIX_ERROR_LOG(PMIX_ERR_NOT_FOUND);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
/* if the handler invokes a callback function, do so */
|
|
||||||
if (NULL != req->cbfunc) {
|
|
||||||
req->cbfunc(refid, channel, &source, &bo, info, ninfo);
|
req->cbfunc(refid, channel, &source, &bo, info, ninfo);
|
||||||
} else {
|
} else {
|
||||||
/* otherwise, simply write it out to the specified std IO channel */
|
/* otherwise, simply write it out to the specified std IO channel */
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user