Merge pull request #1212 from rhc54/pmix112
Update the PMIx native component to release v1.1.2
Этот коммит содержится в:
Коммит
6b23c917e5
7
.gitignore
поставляемый
7
.gitignore
поставляемый
@ -300,9 +300,9 @@ opal/mca/hwloc/hwloc*/hwloc/include/private/autogen/config.h
|
||||
|
||||
opal/mca/installdirs/config/install_dirs.h
|
||||
|
||||
opal/mca/pmix/pmix1xx/pmix/include/pmix/autogen/config.h
|
||||
opal/mca/pmix/pmix1xx/pmix/include/private/autogen/config.h
|
||||
opal/mca/pmix/pmix1xx/pmix/include/private/autogen/config.h.in
|
||||
opal/mca/pmix/pmix112/pmix/include/pmix/autogen/config.h
|
||||
opal/mca/pmix/pmix112/pmix/include/private/autogen/config.h
|
||||
opal/mca/pmix/pmix112/pmix/include/private/autogen/config.h.in
|
||||
|
||||
opal/tools/opal-checkpoint/opal-checkpoint
|
||||
opal/tools/opal-checkpoint/opal-checkpoint.1
|
||||
@ -363,6 +363,7 @@ orte/test/mpi/parallel_w64
|
||||
orte/test/mpi/pubsub
|
||||
orte/test/mpi/read_write
|
||||
orte/test/mpi/reduce-hang
|
||||
orte/test/mpi/ring
|
||||
orte/test/mpi/segv
|
||||
orte/test/mpi/simple_spawn
|
||||
orte/test/mpi/slave
|
||||
|
@ -10,8 +10,8 @@ dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
dnl University of Stuttgart. All rights reserved.
|
||||
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
dnl All rights reserved.
|
||||
dnl Copyright (c) 2014 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
dnl
|
||||
dnl Additional copyrights may follow
|
||||
@ -30,7 +30,9 @@ OPAL_VAR_SCOPE_PUSH([subdirs_str subdirs_skip subdirs_args subdirs_arg])
|
||||
#
|
||||
# Make a list of command line args --eliminate the --srcdir and
|
||||
# --cache-file args, because we need to replace them with our own
|
||||
# values when invoking the sub-configure script.
|
||||
# values when invoking the sub-configure script. Also eliminate
|
||||
# the --with-platform as this will confuse any subdir with
|
||||
# similar options
|
||||
#
|
||||
|
||||
subdirs_args=
|
||||
@ -56,6 +58,8 @@ do
|
||||
;;
|
||||
-srcdir=* | --srcdir=*)
|
||||
;;
|
||||
-with-platform=* | --with-platform=*)
|
||||
;;
|
||||
*)
|
||||
case $subdir_arg in
|
||||
*\'*) subdir_arg=`echo "$subdir_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
|
||||
|
@ -26,26 +26,26 @@ sources = \
|
||||
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
||||
# (for static builds).
|
||||
|
||||
if MCA_BUILD_opal_pmix_pmix1xx_DSO
|
||||
if MCA_BUILD_opal_pmix_pmix112_DSO
|
||||
component_noinst =
|
||||
component_install = mca_pmix_pmix1xx.la
|
||||
component_install = mca_pmix_pmix112.la
|
||||
else
|
||||
component_noinst = libmca_pmix_pmix1xx.la
|
||||
component_noinst = libmca_pmix_pmix112.la
|
||||
component_install =
|
||||
endif
|
||||
|
||||
mcacomponentdir = $(opallibdir)
|
||||
mcacomponent_LTLIBRARIES = $(component_install)
|
||||
mca_pmix_pmix1xx_la_SOURCES = $(sources)
|
||||
mca_pmix_pmix1xx_la_CFLAGS = $(opal_pmix_pmix1xx_CFLAGS)
|
||||
mca_pmix_pmix1xx_la_CPPFLAGS = \
|
||||
-I$(srcdir)/pmix/include $(opal_pmix_pmix1xx_CPPFLAGS)
|
||||
mca_pmix_pmix1xx_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix1xx_LDFLAGS)
|
||||
mca_pmix_pmix1xx_la_LIBADD = $(opal_pmix_pmix1xx_LIBS)
|
||||
mca_pmix_pmix112_la_SOURCES = $(sources)
|
||||
mca_pmix_pmix112_la_CFLAGS = $(opal_pmix_pmix112_CFLAGS)
|
||||
mca_pmix_pmix112_la_CPPFLAGS = \
|
||||
-I$(srcdir)/pmix/include $(opal_pmix_pmix112_CPPFLAGS)
|
||||
mca_pmix_pmix112_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix112_LDFLAGS)
|
||||
mca_pmix_pmix112_la_LIBADD = $(opal_pmix_pmix112_LIBS)
|
||||
|
||||
noinst_LTLIBRARIES = $(component_noinst)
|
||||
libmca_pmix_pmix1xx_la_SOURCES =$(sources)
|
||||
libmca_pmix_pmix1xx_la_CFLAGS = $(opal_pmix_pmix1xx_CFLAGS)
|
||||
libmca_pmix_pmix1xx_la_CPPFLAGS = -I$(srcdir)/pmix/include $(opal_pmix_pmix1xx_CPPFLAGS)
|
||||
libmca_pmix_pmix1xx_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix1xx_LDFLAGS)
|
||||
libmca_pmix_pmix1xx_la_LIBADD = $(opal_pmix_pmix1xx_LIBS)
|
||||
libmca_pmix_pmix112_la_SOURCES =$(sources)
|
||||
libmca_pmix_pmix112_la_CFLAGS = $(opal_pmix_pmix112_CFLAGS)
|
||||
libmca_pmix_pmix112_la_CPPFLAGS = -I$(srcdir)/pmix/include $(opal_pmix_pmix112_CPPFLAGS)
|
||||
libmca_pmix_pmix112_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix112_LDFLAGS)
|
||||
libmca_pmix_pmix112_la_LIBADD = $(opal_pmix_pmix112_LIBS)
|
@ -23,42 +23,42 @@
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# MCA_pmix_pmix1xx_CONFIG([action-if-found], [action-if-not-found])
|
||||
# MCA_pmix_pmix112_CONFIG([action-if-found], [action-if-not-found])
|
||||
# -----------------------------------------------------------
|
||||
AC_DEFUN([MCA_opal_pmix_pmix1xx_CONFIG],[
|
||||
AC_CONFIG_FILES([opal/mca/pmix/pmix1xx/Makefile])
|
||||
AC_DEFUN([MCA_opal_pmix_pmix112_CONFIG],[
|
||||
AC_CONFIG_FILES([opal/mca/pmix/pmix112/Makefile])
|
||||
|
||||
OPAL_VAR_SCOPE_PUSH([PMIX_VERSION opal_pmix_pmix1xx_save_CPPFLAGS opal_pmix_pmix1xx_save_LDFLAGS opal_pmix_pmix1xx_save_LIBS opal_pmix_pmix1xx_basedir opal_pmix_pmix1xx_save_cflags])
|
||||
OPAL_VAR_SCOPE_PUSH([PMIX_VERSION opal_pmix_pmix112_save_CPPFLAGS opal_pmix_pmix112_save_LDFLAGS opal_pmix_pmix112_save_LIBS opal_pmix_pmix112_basedir opal_pmix_pmix112_save_cflags])
|
||||
|
||||
PMIX_VERSION=
|
||||
opal_pmix_pmix1xx_basedir=opal/mca/pmix/pmix1xx
|
||||
opal_pmix_pmix112_basedir=opal/mca/pmix/pmix112
|
||||
|
||||
opal_pmix_pmix1xx_save_CFLAGS=$CFLAGS
|
||||
opal_pmix_pmix1xx_save_CPPFLAGS=$CPPFLAGS
|
||||
opal_pmix_pmix1xx_save_LDFLAGS=$LDFLAGS
|
||||
opal_pmix_pmix1xx_save_LIBS=$LIBS
|
||||
opal_pmix_pmix112_save_CFLAGS=$CFLAGS
|
||||
opal_pmix_pmix112_save_CPPFLAGS=$CPPFLAGS
|
||||
opal_pmix_pmix112_save_LDFLAGS=$LDFLAGS
|
||||
opal_pmix_pmix112_save_LIBS=$LIBS
|
||||
|
||||
opal_pmix_pmix1xx_args="--enable-embedded-mode --with-pmix-symbol-prefix=opal_pmix_pmix1xx_ --with-libevent-header=\\\"opal/mca/event/$opal_event_base_include\\\" --with-hwloc-header=\\\"$opal_hwloc_base_include\\\""
|
||||
opal_pmix_pmix112_args="--enable-embedded-mode --with-pmix-symbol-prefix=opal_pmix_pmix112_ --with-libevent-header=\\\"opal/mca/event/$opal_event_base_include\\\" --with-hwloc-header=\\\"$opal_hwloc_base_include\\\""
|
||||
if test "$enable_debug" = "yes"; then
|
||||
opal_pmix_pmix1xx_args="--enable-debug $opal_pmix_pmix1xx_args"
|
||||
opal_pmix_pmix112_args="--enable-debug $opal_pmix_pmix112_args"
|
||||
CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS -g"
|
||||
else
|
||||
opal_pmix_pmix111_args="--disable-debug $opal_pmix_pmix111_args"
|
||||
opal_pmix_pmix112_args="--disable-debug $opal_pmix_pmix112_args"
|
||||
CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS"
|
||||
fi
|
||||
CPPFLAGS="-I$OPAL_TOP_SRCDIR -I$OPAL_TOP_BUILDDIR -I$OPAL_TOP_SRCDIR/opal/include -I$OPAL_TOP_BUILDDIR/opal/include $CPPFLAGS"
|
||||
|
||||
OPAL_CONFIG_SUBDIR([$opal_pmix_pmix1xx_basedir/pmix],
|
||||
[$opal_pmix_pmix1xx_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'],
|
||||
[opal_pmix_pmix1xx_happy=1], [opal_pmix_pmix1xx_happy=0])
|
||||
OPAL_CONFIG_SUBDIR([$opal_pmix_pmix112_basedir/pmix],
|
||||
[$opal_pmix_pmix112_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'],
|
||||
[opal_pmix_pmix112_happy=1], [opal_pmix_pmix112_happy=0])
|
||||
|
||||
if test $opal_pmix_pmix1xx_happy -eq 1; then
|
||||
PMIX_VERSION="internal v`$srcdir/$opal_pmix_pmix1xx_basedir/pmix/config/pmix_get_version.sh $srcdir/$opal_pmix_pmix1xx_basedir/pmix/VERSION`"
|
||||
if test $opal_pmix_pmix112_happy -eq 1; then
|
||||
PMIX_VERSION="internal v`$srcdir/$opal_pmix_pmix112_basedir/pmix/config/pmix_get_version.sh $srcdir/$opal_pmix_pmix112_basedir/pmix/VERSION`"
|
||||
# Build flags for our Makefile.am
|
||||
opal_pmix_pmix1xx_LIBS='$(OPAL_TOP_BUILDDIR)/'"$opal_pmix_pmix1xx_basedir"'/pmix/libpmix.la'
|
||||
opal_pmix_pmix1xx_CPPFLAGS='-I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix1xx/pmix/include/pmix -I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix1xx/pmix/include -I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix1xx/pmix -I$(OPAL_TOP_SRCDIR)/opal/mca/pmix/pmix1xx/pmix'
|
||||
AC_SUBST([opal_pmix_pmix1xx_LIBS])
|
||||
AC_SUBST([opal_pmix_pmix1xx_CPPFLAGS])
|
||||
opal_pmix_pmix112_LIBS='$(OPAL_TOP_BUILDDIR)/'"$opal_pmix_pmix112_basedir"'/pmix/libpmix.la'
|
||||
opal_pmix_pmix112_CPPFLAGS='-I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix112/pmix/include/pmix -I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix112/pmix/include -I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix112/pmix -I$(OPAL_TOP_SRCDIR)/opal/mca/pmix/pmix112/pmix'
|
||||
AC_SUBST([opal_pmix_pmix112_LIBS])
|
||||
AC_SUBST([opal_pmix_pmix112_CPPFLAGS])
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_PMIX1XX_PMIX_VERSION],
|
||||
@ -66,14 +66,14 @@ AC_DEFUN([MCA_opal_pmix_pmix1xx_CONFIG],[
|
||||
[Version of PMIx])
|
||||
|
||||
# Finally, add a flag to support static builds
|
||||
pmix_pmix1xx_WRAPPER_EXTRA_LIBS=-lpmix
|
||||
pmix_pmix112_WRAPPER_EXTRA_LIBS=-lpmix
|
||||
|
||||
CFLAGS=$opal_pmix_pmix1xx_save_CFLAGS
|
||||
CPPFLAGS=$opal_pmix_pmix1xx_save_CPPFLAGS
|
||||
LDFLAGS=$opal_pmix_pmix1xx_save_LDFLAGS
|
||||
LIBS=$opal_pmix_pmix1xx_save_LIBS
|
||||
CFLAGS=$opal_pmix_pmix112_save_CFLAGS
|
||||
CPPFLAGS=$opal_pmix_pmix112_save_CPPFLAGS
|
||||
LDFLAGS=$opal_pmix_pmix112_save_LDFLAGS
|
||||
LIBS=$opal_pmix_pmix112_save_LIBS
|
||||
|
||||
AS_IF([test $opal_pmix_pmix1xx_happy -eq 1],
|
||||
AS_IF([test $opal_pmix_pmix112_happy -eq 1],
|
||||
[$1],
|
||||
[$2])
|
||||
|
@ -4,12 +4,12 @@ Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
of Tennessee Research Foundation. All rights
|
||||
reserved.
|
||||
Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
University of Stuttgart. All rights reserved.
|
||||
Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
All rights reserved.
|
||||
Copyright (c) 2008-2015 Cisco Systems, Inc. All rights reserved.
|
||||
Copyright (c) 2013 Intel, Inc. All rights reserved.
|
||||
Copyright (c) 2013-2015 Intel, Inc. All rights reserved.
|
||||
$COPYRIGHT$
|
||||
|
||||
Additional copyrights may follow
|
||||
@ -24,7 +24,7 @@ This file is a *very* short overview of building and installing
|
||||
the PMIx library. Much more information is available on the
|
||||
PMIx web site (e.g., see the FAQ section):
|
||||
|
||||
http://www.open-mpi.org/projects/pmix
|
||||
http://pmix.github.io/pmix/master
|
||||
|
||||
|
||||
Developer Builds
|
||||
@ -34,10 +34,10 @@ If you have checked out a DEVELOPER'S COPY of PMIx (i.e., you checked
|
||||
out from Git), you should read the HACKING file before attempting to
|
||||
build PMIx. You must then run:
|
||||
|
||||
shell$ ./autogen.pl
|
||||
shell$ ./autogen.sh
|
||||
|
||||
You will need very recent versions of GNU Autoconf, Automake, and
|
||||
Libtool. If autogen.pl fails, read the HACKING file. If anything
|
||||
Libtool. If autogen.sh fails, read the HACKING file. If anything
|
||||
else fails, read the HACKING file. Finally, we suggest reading the
|
||||
HACKING file.
|
||||
|
||||
@ -61,8 +61,8 @@ all" as a user with write permissions in the build tree, and a
|
||||
separate "make install" as a user with write permissions to the
|
||||
install tree.
|
||||
|
||||
Compiling support for various networks or other specific hardware may
|
||||
require additional command ling flags when running configure. See the
|
||||
Compiling support for specific compilers and environments may
|
||||
require additional command line flags when running configure. See the
|
||||
README file for more details. Note that VPATH builds are fully
|
||||
supported. For example:
|
||||
|
@ -63,7 +63,7 @@ libpmix_la_SOURCES = $(headers) $(sources)
|
||||
libpmix_la_LDFLAGS = -version-info $(libpmix_so_version)
|
||||
|
||||
if ! PMIX_EMBEDDED_MODE
|
||||
SUBDIRS = . test examples
|
||||
SUBDIRS = . test
|
||||
pmixdir = $(pmixincludedir)/$(subdir)
|
||||
nobase_pmix_HEADERS = $(headers)
|
||||
endif
|
||||
@ -76,10 +76,13 @@ nroff:
|
||||
|
||||
EXTRA_DIST += README INSTALL VERSION LICENSE autogen.sh \
|
||||
config/pmix_get_version.sh $(man_MANS) \
|
||||
contrib/platform/optimized \
|
||||
test/test_common.h test/cli_stages.h \
|
||||
test/server_callbacks.h test/test_fence.h \
|
||||
test/test_publish.h test/test_resolve_peers.h \
|
||||
test/test_spawn.h test/utils.h test/test_cd.h
|
||||
test/test_spawn.h test/utils.h test/test_cd.h \
|
||||
examples/client.c examples/dmodex.c examples/dynamic.c \
|
||||
examples/fault.c examples/pub.c
|
||||
|
||||
|
||||
dist-hook:
|
61
opal/mca/pmix/pmix112/pmix/NEWS
Обычный файл
61
opal/mca/pmix/pmix112/pmix/NEWS
Обычный файл
@ -0,0 +1,61 @@
|
||||
Copyright (c) 2015 Intel, Inc. All rights reserved.
|
||||
$COPYRIGHT$
|
||||
|
||||
Additional copyrights may follow
|
||||
|
||||
$HEADER$
|
||||
|
||||
===========================================================================
|
||||
|
||||
This file contains the main features as well as overviews of specific
|
||||
bug fixes (and other actions) for each version of PMIx since
|
||||
version 1.0.
|
||||
|
||||
As more fully described in the "Software Version Number" section in
|
||||
the README file, PMIx typically maintains two separate version
|
||||
series simultaneously - the current release and one that is locked
|
||||
to only bug fixes. Since these series are semi-independent of each
|
||||
other, a single NEWS-worthy item might apply to different series. For
|
||||
example, a bug might be fixed in the master, and then moved to the
|
||||
current release as well as the "stable" bug fix release branch.
|
||||
|
||||
|
||||
Master (not on release branches yet)
|
||||
------------------------------------
|
||||
|
||||
|
||||
1.1.2
|
||||
-----
|
||||
- Provide a check for hwloc support - if not found, then
|
||||
don't pass any topology info down to the client as it
|
||||
won't know how to unpack it anyway.
|
||||
- Fix a few places where thread safety wasn't provided
|
||||
- Fix several issues identified by Paul Hargrove:
|
||||
* PMIx_Init(NULL) is supported
|
||||
* Incomplete PMIx_constants man page had some lingering cruft
|
||||
* Missing prototype for pmix_value_load
|
||||
- Fix race condition in PMIx_Get/PMIx_Get_nb
|
||||
- Fix double-free error in pmix_server_commit.
|
||||
- Fix PMIX_LOAD_BUFFER to be safe.
|
||||
|
||||
|
||||
1.1.1
|
||||
-----
|
||||
- Fix an issue where the example and test programs
|
||||
were incorrectly being installed. Thanks to Orion
|
||||
Poplawski for reporting it
|
||||
|
||||
|
||||
1.1.0
|
||||
-----
|
||||
- major update of APIs to reflect comments received from 1.0.0
|
||||
non-production release
|
||||
- fixed thread-safety issues
|
||||
- fixed a range of pack/unpack issues
|
||||
- added unit tests for all APIs
|
||||
|
||||
|
||||
1.0.0
|
||||
------
|
||||
Initial public release of draft APIs for comment - not production
|
||||
intended
|
@ -15,7 +15,7 @@ Copyright (c) 2007 Myricom, Inc. All rights reserved.
|
||||
Copyright (c) 2008 IBM Corporation. All rights reserved.
|
||||
Copyright (c) 2010 Oak Ridge National Labs. All rights reserved.
|
||||
Copyright (c) 2011 University of Houston. All rights reserved.
|
||||
Copyright (c) 2013 Intel, Inc. All rights reserved
|
||||
Copyright (c) 2013-2015 Intel, Inc. All rights reserved
|
||||
$COPYRIGHT$
|
||||
|
||||
Additional copyrights may follow
|
||||
@ -28,64 +28,51 @@ When submitting questions and problems, be sure to include as much
|
||||
extra information as possible. This web page details all the
|
||||
information that we request in order to provide assistance:
|
||||
|
||||
http://www.open-mpi.org/community/help/
|
||||
http://pmix.github.io/master/community/help/
|
||||
|
||||
The best way to report bugs, send comments, or ask questions is to
|
||||
sign up on the user's and/or developer's mailing list (for user-level
|
||||
and developer-level questions; when in doubt, send to the user's
|
||||
list):
|
||||
sign up on the PMIx mailing list, which is hosted by GoogleGroups:
|
||||
|
||||
pmix-users@open-mpi.org
|
||||
pmix-devel@open-mpi.org
|
||||
pmix@googlegroups.com
|
||||
|
||||
Because of spam, only subscribers are allowed to post to these lists
|
||||
Because of spam, only subscribers are allowed to post to this list
|
||||
(ensure that you subscribe with and post from exactly the same e-mail
|
||||
address -- joe@example.com is considered different than
|
||||
joe@mycomputer.example.com!). Visit these pages to subscribe to the
|
||||
lists:
|
||||
joe@mycomputer.example.com!). You can subscribe to the list here:
|
||||
|
||||
http://www.open-mpi.org/mailman/listinfo.cgi/pmix-users
|
||||
http://www.open-mpi.org/mailman/listinfo.cgi/pmix-devel
|
||||
https://groups.google.com/d/forum/pmix
|
||||
|
||||
Thanks for your time.
|
||||
|
||||
===========================================================================
|
||||
|
||||
Much, much more information is also available in the PMIx FAQ:
|
||||
More information is available in the PMIx FAQ:
|
||||
|
||||
http://www.open-mpi.org/faq/
|
||||
http://pmix.github.io/master/faq/
|
||||
|
||||
We are in early days, so please be patient - info will grow as questions
|
||||
are addressed.
|
||||
|
||||
===========================================================================
|
||||
|
||||
The following abbreviated list of release notes applies to this code
|
||||
base as of this writing (11 November 2013):
|
||||
base as of this writing (12 November 2015):
|
||||
|
||||
General notes
|
||||
-------------
|
||||
|
||||
- The majority of PMIx's documentation is here in this file, the
|
||||
included man pages, and on the web site FAQ
|
||||
(http://www.open-mpi.org/projects/pmix). This will eventually be supplemented
|
||||
with cohesive installation and user documentation files.
|
||||
|
||||
- Note that PMIx documentation uses the word "component"
|
||||
frequently; the word "plugin" is probably more familiar to most
|
||||
users. As such, end users can probably completely substitute the
|
||||
word "plugin" wherever you see "component" in our documentation.
|
||||
For what it's worth, we use the word "component" for historical
|
||||
reasons, mainly because it is part of our acronyms and internal API
|
||||
functionc calls.
|
||||
(http://pmix.github.io/master/faq). This will eventually be
|
||||
supplemented with cohesive installation and user documentation files.
|
||||
|
||||
- Systems that have been tested are:
|
||||
- Linux (various flavors/distros), 32 bit, with gcc
|
||||
- Linux (various flavors/distros), 64 bit (x86), with gcc, Absoft,
|
||||
Intel, and Portland (*)
|
||||
- OS X (10.5, 10.6, 10.7), 32 and 64 bit (x86_64), with gcc and
|
||||
Absoft compilers (*)
|
||||
- Linux (various flavors/distros), 64 bit (x86), with gcc, Intel,
|
||||
and Portland (*)
|
||||
- OS X (10.7 and above), 32 and 64 bit (x86_64), with gcc (*)
|
||||
|
||||
(*) Be sure to read the Compiler Notes, below.
|
||||
|
||||
Compiler Notes
|
||||
(*) Compiler Notes
|
||||
--------------
|
||||
|
||||
- The Portland Group compilers prior to version 7.0 require the
|
||||
@ -130,79 +117,32 @@ INSTALLATION OPTIONS
|
||||
files in <directory>/include, its libraries in <directory>/lib, etc.
|
||||
|
||||
--disable-shared
|
||||
By default, libmpi is built as a shared library, and all components
|
||||
are built as dynamic shared objects (DSOs). This switch disables
|
||||
By default, libpmix is built as a shared library. This switch disables
|
||||
this default; it is really only useful when used with
|
||||
--enable-static. Specifically, this option does *not* imply
|
||||
--enable-static; enabling static libraries and disabling shared
|
||||
libraries are two independent options.
|
||||
|
||||
--enable-static
|
||||
Build libmpi as a static library, and statically link in all
|
||||
components. Note that this option does *not* imply
|
||||
Build libpmix as a static library. Note that this option does *not* imply
|
||||
--disable-shared; enabling static libraries and disabling shared
|
||||
libraries are two independent options.
|
||||
|
||||
--enable-dlopen
|
||||
Build all of PMIx's components as standalone Dynamic Shared
|
||||
Objects (DSO's) that are loaded at run-time. The opposite of this
|
||||
option, --disable-dlopen, causes two things:
|
||||
|
||||
1. All of PMIx's components will be built as part of PMIx's
|
||||
normal libraries (e.g., libmpi).
|
||||
2. PMIx will not attempt to open any DSO's at run-time.
|
||||
|
||||
Note that this option does *not* imply that PMIx's libraries will be
|
||||
built as static objects (e.g., libmpi.a). It only specifies the
|
||||
location of PMIx's components: standalone DSOs or folded into the
|
||||
PMIx libraries. You can control whether PMIx's libraries
|
||||
are build as static or dynamic via --enable|disable-static and
|
||||
--enable|disable-shared.
|
||||
|
||||
--with-platform=FILE
|
||||
Load configure options for the build from FILE. Options on the
|
||||
command line that are not in FILE are also used. Options on the
|
||||
command line and in FILE are replaced by what is in FILE.
|
||||
|
||||
MISCELLANEOUS SUPPORT LIBRARIES
|
||||
|
||||
--with-libltdl[=VALUE]
|
||||
This option specifies where to find the GNU Libtool libltdl support
|
||||
library. The following VALUEs are permitted:
|
||||
|
||||
internal: Use PMIx's internal copy of libltdl.
|
||||
external: Use an external libltdl installation (rely on default
|
||||
compiler and linker paths to find it)
|
||||
<no value>: Same as "internal".
|
||||
<directory>: Specify the location of a specific libltdl
|
||||
installation to use
|
||||
|
||||
By default (or if --with-libltdl is specified with no VALUE), PMIx
|
||||
will build and use the copy of libltdl that it has in its source
|
||||
tree. However, if the VALUE is "external", PMIx will look for
|
||||
the relevant libltdl header file and library in default compiler /
|
||||
linker locations. Or, VALUE can be a directory tree where the
|
||||
libltdl header file and library can be found. This option allows
|
||||
operating systems to include PMIx and use their default libltdl
|
||||
installation instead of PMIx's bundled libltdl.
|
||||
|
||||
Note that this option is ignored if --disable-dlopen is specified.
|
||||
|
||||
--with-threads=value
|
||||
Since thread support is only partially tested, it is disabled by
|
||||
default. To enable threading, use "--with-threads=posix". This is
|
||||
most useful when combined with --enable-mpi-thread-multiple.
|
||||
|
||||
Once PMIx has been built and installed, it is safe to run "make
|
||||
clean" and/or remove the entire build tree.
|
||||
|
||||
VPATH and parallel builds are fully supported.
|
||||
|
||||
Generally speaking, the only thing that users need to do to use Open
|
||||
MPI <prefix>/lib is in their LD_LIBRARY_PATH. Users may need to ensure to set
|
||||
LD_LIBRARY_PATH in their shell setup files (e.g., .bashrc, .cshrc)
|
||||
so that non-interactive rsh/ssh-based logins will be able to find the
|
||||
PMIx library.
|
||||
Generally speaking, the only thing that users need to do to use PMIx
|
||||
is ensure that <prefix>/lib is in their LD_LIBRARY_PATH. Users may
|
||||
need to ensure to set LD_LIBRARY_PATH in their shell setup files (e.g.,
|
||||
.bashrc, .cshrc) so that non-interactive rsh/ssh-based logins will
|
||||
be able to find the PMIx library.
|
||||
|
||||
===========================================================================
|
||||
|
||||
@ -236,22 +176,10 @@ major, minor, release, and an optional quantifier.
|
||||
functionality. The minor number is always included in the version
|
||||
number:
|
||||
|
||||
o Even minor release numbers are part of "super-stable"
|
||||
release series (e.g., v1.4.0). Releases in super stable series
|
||||
are well-tested, time-tested, and mature. Such releases are
|
||||
recommended for production sites. Changes between subsequent
|
||||
releases in super stable series are expected to be fairly small.
|
||||
o Odd minor release numbers are part of "feature" release
|
||||
series (e.g., 1.3.7). Releases in feature releases are
|
||||
well-tested, but they are not necessarily time-tested or as
|
||||
mature as super stable releases. Changes between subsequent
|
||||
releases in feature series may be large.
|
||||
|
||||
* Release: The release number is the third integer in the version
|
||||
string (e.g., v1.2.3). Changes in the release number typically
|
||||
indicate a bug fix in the code base and/or end-user
|
||||
functionality. If the release number is 0, it is omitted from the
|
||||
version number (e.g., v1.2 has a release number of 0).
|
||||
functionality.
|
||||
|
||||
* Quantifier: PMIx version numbers sometimes have an arbitrary
|
||||
string affixed to the end of the version number. Common strings
|
||||
@ -267,7 +195,7 @@ major, minor, release, and an optional quantifier.
|
||||
indicating the number of the release candidate (e.g., v1.2.3rc4
|
||||
indicates the 4th release candidate of version 1.2.3).
|
||||
|
||||
Althought the major, minor, and release values (and optional
|
||||
Although the major, minor, and release values (and optional
|
||||
quantifiers) are reported in PMIx nightly snapshot tarballs, the
|
||||
filenames of these snapshot tarballs follow a slightly different
|
||||
convention.
|
||||
@ -339,14 +267,14 @@ Application Binary Interface (ABI) Compatibility
|
||||
|
||||
PMIx provides forward ABI compatibility in all versions of a given
|
||||
feature release series and its corresponding
|
||||
super stable series. For example, on a single platform, an MPI
|
||||
super stable series. For example, on a single platform, an pmix
|
||||
application linked against PMIx v1.3.2 shared libraries can be
|
||||
updated to point to the shared libraries in any successive v1.3.x or
|
||||
v1.4 release and still work properly (e.g., via the LD_LIBRARY_PATH
|
||||
environment variable or other operating system mechanism).
|
||||
|
||||
PMIx reserves the right to break ABI compatibility at new feature
|
||||
release series. For example, the same MPI application from above
|
||||
release series. For example, the same pmix application from above
|
||||
(linked against PMIx v1.3.2 shared libraries) will *not* work with
|
||||
PMIx v1.5 shared libraries.
|
||||
|
||||
@ -358,7 +286,7 @@ Common Questions
|
||||
Many common questions about building and using PMIx are answered
|
||||
on the FAQ:
|
||||
|
||||
http://www.open-mpi.org/faq/
|
||||
http://pmix.github.io/master/faq/
|
||||
|
||||
===========================================================================
|
||||
|
||||
@ -372,24 +300,16 @@ When submitting questions and problems, be sure to include as much
|
||||
extra information as possible. This web page details all the
|
||||
information that we request in order to provide assistance:
|
||||
|
||||
http://www.open-mpi.org/community/help/
|
||||
http://pmix.github.io/master/community/help/
|
||||
|
||||
User-level questions and comments should generally be sent to the
|
||||
user's mailing list (users@open-mpi.org). Because of spam, only
|
||||
Questions and comments should generally be sent to the PMIx mailing
|
||||
list (pmix@googlegroups.com). Because of spam, only
|
||||
subscribers are allowed to post to this list (ensure that you
|
||||
subscribe with and post from *exactly* the same e-mail address --
|
||||
joe@example.com is considered different than
|
||||
joe@mycomputer.example.com!). Visit this page to subscribe to the
|
||||
user's list:
|
||||
|
||||
http://www.open-mpi.org/mailman/listinfo.cgi/pmix-users
|
||||
|
||||
Developer-level bug reports, questions, and comments should generally
|
||||
be sent to the developer's mailing list (devel@open-mpi.org). Please
|
||||
do not post the same question to both lists. As with the user's list,
|
||||
only subscribers are allowed to post to the developer's list. Visit
|
||||
the following web page to subscribe:
|
||||
|
||||
http://www.open-mpi.org/mailman/listinfo.cgi/pmix-devel
|
||||
https://groups.google.com/d/forum/pmix
|
||||
|
||||
Make today an PMIx day!
|
@ -15,7 +15,7 @@
|
||||
|
||||
major=1
|
||||
minor=1
|
||||
release=0
|
||||
release=2
|
||||
|
||||
# greek is used for alpha or beta release tags. If it is non-empty,
|
||||
# it will be appended to the version number. It does not have to be
|
||||
@ -23,14 +23,14 @@ release=0
|
||||
# The only requirement is that it must be entirely printable ASCII
|
||||
# characters and have no white space.
|
||||
|
||||
greek=a1
|
||||
greek=
|
||||
|
||||
# If repo_rev is empty, then the repository version number will be
|
||||
# obtained during "make dist" via the "git describe --tags --always"
|
||||
# command, or with the date (if "git describe" fails) in the form of
|
||||
# "date<date>".
|
||||
|
||||
repo_rev=gita4d7e07
|
||||
repo_rev=git17ae5a4
|
||||
|
||||
# If tarball_version is not empty, it is used as the version string in
|
||||
# the tarball filename, regardless of all other versions listed in
|
||||
@ -44,11 +44,24 @@ tarball_version=
|
||||
|
||||
# The date when this release was created
|
||||
|
||||
date="Nov 06, 2015"
|
||||
date="Dec 12, 2015"
|
||||
|
||||
# The shared library version of each of PMIx's public libraries.
|
||||
# These versions are maintained in accordance with the "Library
|
||||
# Interface Versions" chapter from the GNU Libtool documentation.
|
||||
# Interface Versions" chapter from the GNU Libtool documentation:
|
||||
#
|
||||
# - If the library source code has changed at all since the last
|
||||
# update, then increment revision (`c:r:a' becomes `c:r+1:a').
|
||||
#
|
||||
# - If any interfaces have been added, removed, or changed since
|
||||
# the last update, increment current, and set revision to 0.
|
||||
#
|
||||
# - If any interfaces have been added since the last public release,
|
||||
# then increment age.
|
||||
#
|
||||
# - If any interfaces have been removed since the last public release,
|
||||
# then set age to 0.
|
||||
#
|
||||
# All changes in these version numbers are dictated by the PMIx
|
||||
# release managers (not individual developers). Notes:
|
||||
|
||||
@ -62,4 +75,4 @@ date="Nov 06, 2015"
|
||||
# Version numbers are described in the Libtool current:revision:age
|
||||
# format.
|
||||
|
||||
libpmix_so_version=0:0:0
|
||||
libpmix_so_version=2:1:0
|
81
opal/mca/pmix/pmix112/pmix/config/pmix_load_platform.m4
Обычный файл
81
opal/mca/pmix/pmix112/pmix/config/pmix_load_platform.m4
Обычный файл
@ -0,0 +1,81 @@
|
||||
dnl -*- shell-script -*-
|
||||
dnl
|
||||
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
dnl University Research and Technology
|
||||
dnl Corporation. All rights reserved.
|
||||
dnl Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
dnl of Tennessee Research Foundation. All rights
|
||||
dnl reserved.
|
||||
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
dnl University of Stuttgart. All rights reserved.
|
||||
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
dnl All rights reserved.
|
||||
dnl Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2015 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
dnl
|
||||
dnl Additional copyrights may follow
|
||||
dnl
|
||||
dnl $HEADER$
|
||||
dnl
|
||||
|
||||
# PMIX_LOAD_PLATFORM()
|
||||
# --------------------
|
||||
AC_DEFUN([PMIX_LOAD_PLATFORM], [
|
||||
|
||||
AC_ARG_WITH([platform],
|
||||
[AC_HELP_STRING([--with-platform=FILE],
|
||||
[Load options for build from FILE. Options on the
|
||||
command line not in FILE are used. Options on the
|
||||
command line and in FILE are replaced by what is
|
||||
in FILE.])])
|
||||
|
||||
if test "$with_platform" = "yes" ; then
|
||||
AC_MSG_ERROR([--with-platform argument must include FILE option])
|
||||
elif test "$with_platform" = "no" ; then
|
||||
AC_MSG_ERROR([--without-platform is not a valid argument])
|
||||
elif test "$with_platform" != "" ; then
|
||||
# if not an absolute path, check in contrib/platform
|
||||
if test ! "`echo $with_platform | cut -c1`" = "/" && test ! "`echo $with_platform | cut -c2`" = ".." ; then
|
||||
if test -r "${srcdir}/contrib/platform/$with_platform" ; then
|
||||
with_platform="${srcdir}/contrib/platform/$with_platform"
|
||||
fi
|
||||
fi
|
||||
|
||||
# make sure file exists
|
||||
if test ! -r "$with_platform" ; then
|
||||
AC_MSG_ERROR([platform file $with_platform not found])
|
||||
fi
|
||||
|
||||
# eval into environment
|
||||
PMIX_LOG_MSG([Loading environment file $with_platform, with contents below])
|
||||
PMIX_LOG_FILE([$with_platform])
|
||||
|
||||
# setup by getting full pathname for the platform directories
|
||||
platform_base="`dirname $with_platform`"
|
||||
platform_file="`basename $with_platform`"
|
||||
# get full pathname of where we are so we can return
|
||||
platform_savedir="`pwd`"
|
||||
# go to where the platform file is located
|
||||
cd "$platform_base"
|
||||
# get the full path to this location
|
||||
platform_file_dir=`pwd`
|
||||
|
||||
. ./"$platform_file"
|
||||
|
||||
# see if they left us a name
|
||||
if test "$PMIX_PLATFORM_LOADED" != "" ; then
|
||||
platform_loaded="$PMIX_PLATFORM_LOADED"
|
||||
else
|
||||
platform_loaded="$with_platform"
|
||||
fi
|
||||
echo "Loaded platform arguments for $platform_loaded"
|
||||
PMIX_LOG_MSG([Loaded platform arguments for $platform_loaded])
|
||||
|
||||
# look for default mca param file
|
||||
|
||||
# return to where we started
|
||||
cd "$platform_savedir"
|
||||
fi
|
||||
])
|
@ -41,6 +41,10 @@ AC_CONFIG_AUX_DIR(./config)
|
||||
# -I in ACLOCAL_AMFLAGS in the top-level Makefile.am.
|
||||
AC_CONFIG_MACRO_DIR(./config)
|
||||
|
||||
# Get our platform support file. This has to be done very, very early
|
||||
# because it twiddles random bits of autoconf
|
||||
PMIX_LOAD_PLATFORM
|
||||
|
||||
# setup configure options (e.g., show_title and friends)
|
||||
PMIX_CONFIGURE_SETUP
|
||||
pmix_show_title "Configuring PMIx"
|
||||
@ -203,8 +207,7 @@ AC_SUBST([CONFIGURE_DEPENDENCIES], ['$(top_srcdir)/VERSION'])
|
||||
AC_SUBST([libpmix_so_version])
|
||||
|
||||
AC_CONFIG_FILES(pmix_config_prefix[test/Makefile]
|
||||
pmix_config_prefix[test/simple/Makefile]
|
||||
pmix_config_prefix[examples/Makefile])
|
||||
pmix_config_prefix[test/simple/Makefile])
|
||||
|
||||
pmix_show_title "Configuration complete"
|
||||
|
3
opal/mca/pmix/pmix112/pmix/contrib/platform/optimized
Обычный файл
3
opal/mca/pmix/pmix112/pmix/contrib/platform/optimized
Обычный файл
@ -0,0 +1,3 @@
|
||||
enable_mem_debug=no
|
||||
enable_mem_profile=no
|
||||
enable_debug=no
|
@ -23,8 +23,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <pmix/autogen/config.h>
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
@ -23,7 +23,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <pmix/autogen/config.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define _GNU_SOURCE
|
@ -23,7 +23,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <pmix/autogen/config.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define _GNU_SOURCE
|
@ -23,7 +23,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <pmix/autogen/config.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
@ -23,7 +23,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <pmix/autogen/config.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
@ -437,6 +437,16 @@ typedef struct {
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
/* expose a function that is resolved in the
|
||||
* PMIx library, but part of a header that
|
||||
* includes internal functions - so we don't
|
||||
* want to expose the entire header here
|
||||
*/
|
||||
extern void pmix_value_load(pmix_value_t *v, void *data,
|
||||
pmix_data_type_t type);
|
||||
|
||||
|
||||
|
||||
|
||||
/**** PMIX INFO STRUCT ****/
|
||||
typedef struct {
|
636
opal/mca/pmix/pmix112/pmix/include/private/autogen/config.h.in
Обычный файл
636
opal/mca/pmix/pmix112/pmix/include/private/autogen/config.h.in
Обычный файл
@ -0,0 +1,636 @@
|
||||
/* include/private/autogen/config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* -*- c -*-
|
||||
*
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2013-2015 Intel, Inc. All rights reserved
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*
|
||||
* This file is automatically generated by configure. Edits will be lost
|
||||
* the next time you run configure!
|
||||
*/
|
||||
|
||||
#ifndef PMIX_CONFIG_H
|
||||
#define PMIX_CONFIG_H
|
||||
|
||||
#include <pmix/autogen/pmix_config_top.h>
|
||||
|
||||
|
||||
|
||||
/* Define if building universal (internal helper macro) */
|
||||
#undef AC_APPLE_UNIVERSAL_BUILD
|
||||
|
||||
/* Define to 1 if you have the <arpa/inet.h> header file. */
|
||||
#undef HAVE_ARPA_INET_H
|
||||
|
||||
/* Define to 1 if you have the `asprintf' function. */
|
||||
#undef HAVE_ASPRINTF
|
||||
|
||||
/* Define to 1 if you have the <crt_externs.h> header file. */
|
||||
#undef HAVE_CRT_EXTERNS_H
|
||||
|
||||
/* Define to 1 if you have the declaration of `AF_INET6', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_AF_INET6
|
||||
|
||||
/* Define to 1 if you have the declaration of `AF_UNSPEC', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_AF_UNSPEC
|
||||
|
||||
/* Define to 1 if you have the declaration of `PF_INET6', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_PF_INET6
|
||||
|
||||
/* Define to 1 if you have the declaration of `PF_UNSPEC', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_PF_UNSPEC
|
||||
|
||||
/* Define to 1 if you have the declaration of `__func__', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL___FUNC__
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <event.h> header file. */
|
||||
#undef HAVE_EVENT_H
|
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
/* Define to 1 if you have the <hostLib.h> header file. */
|
||||
#undef HAVE_HOSTLIB_H
|
||||
|
||||
/* Define to 1 if you have the <hwloc.h> header file. */
|
||||
#undef HAVE_HWLOC_H
|
||||
|
||||
/* Define to 1 if the system has the type `int16_t'. */
|
||||
#undef HAVE_INT16_T
|
||||
|
||||
/* Define to 1 if the system has the type `int32_t'. */
|
||||
#undef HAVE_INT32_T
|
||||
|
||||
/* Define to 1 if the system has the type `int64_t'. */
|
||||
#undef HAVE_INT64_T
|
||||
|
||||
/* Define to 1 if the system has the type `int8_t'. */
|
||||
#undef HAVE_INT8_T
|
||||
|
||||
/* Define to 1 if the system has the type `intptr_t'. */
|
||||
#undef HAVE_INTPTR_T
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the <ioLib.h> header file. */
|
||||
#undef HAVE_IOLIB_H
|
||||
|
||||
/* Define to 1 if you have the `event' library (-levent). */
|
||||
#undef HAVE_LIBEVENT
|
||||
|
||||
/* Define to 1 if you have the `libevent_global_shutdown' function. */
|
||||
#undef HAVE_LIBEVENT_GLOBAL_SHUTDOWN
|
||||
|
||||
/* Define to 1 if you have the `event_pthreads' library (-levent_pthreads). */
|
||||
#undef HAVE_LIBEVENT_PTHREADS
|
||||
|
||||
/* Define to 1 if you have the <libgen.h> header file. */
|
||||
#undef HAVE_LIBGEN_H
|
||||
|
||||
/* Define to 1 if you have the <limits.h> header file. */
|
||||
#undef HAVE_LIMITS_H
|
||||
|
||||
/* Define to 1 if the system has the type `long long'. */
|
||||
#undef HAVE_LONG_LONG
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the <munge.h> header file. */
|
||||
#undef HAVE_MUNGE_H
|
||||
|
||||
/* Define to 1 if you have the <netinet/in.h> header file. */
|
||||
#undef HAVE_NETINET_IN_H
|
||||
|
||||
/* Define to 1 if you have the <net/uio.h> header file. */
|
||||
#undef HAVE_NET_UIO_H
|
||||
|
||||
/* Define to 1 if the system has the type `ptrdiff_t'. */
|
||||
#undef HAVE_PTRDIFF_T
|
||||
|
||||
/* Define to 1 if you have the <sasl/sasl.h> header file. */
|
||||
#undef HAVE_SASL_SASL_H
|
||||
|
||||
/* Define to 1 if `si_band' is a member of `siginfo_t'. */
|
||||
#undef HAVE_SIGINFO_T_SI_BAND
|
||||
|
||||
/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
|
||||
#undef HAVE_SIGINFO_T_SI_FD
|
||||
|
||||
/* Define to 1 if you have the <signal.h> header file. */
|
||||
#undef HAVE_SIGNAL_H
|
||||
|
||||
/* Define to 1 if you have the `snprintf' function. */
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
/* Define to 1 if you have the `socketpair' function. */
|
||||
#undef HAVE_SOCKETPAIR
|
||||
|
||||
/* Define to 1 if the system has the type `socklen_t'. */
|
||||
#undef HAVE_SOCKLEN_T
|
||||
|
||||
/* Define to 1 if you have the <sockLib.h> header file. */
|
||||
#undef HAVE_SOCKLIB_H
|
||||
|
||||
/* Define to 1 if you have the <stdarg.h> header file. */
|
||||
#undef HAVE_STDARG_H
|
||||
|
||||
/* Define to 1 if you have the <stdbool.h> header file. */
|
||||
#undef HAVE_STDBOOL_H
|
||||
|
||||
/* Define to 1 if you have the <stddef.h> header file. */
|
||||
#undef HAVE_STDDEF_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the `strncpy_s' function. */
|
||||
#undef HAVE_STRNCPY_S
|
||||
|
||||
/* Define to 1 if you have the `strsignal' function. */
|
||||
#undef HAVE_STRSIGNAL
|
||||
|
||||
/* Define to 1 if `d_type' is a member of `struct dirent'. */
|
||||
#undef HAVE_STRUCT_DIRENT_D_TYPE
|
||||
|
||||
/* Define to 1 if the system has the type `struct sockaddr_in'. */
|
||||
#undef HAVE_STRUCT_SOCKADDR_IN
|
||||
|
||||
/* Define to 1 if the system has the type `struct sockaddr_in6'. */
|
||||
#undef HAVE_STRUCT_SOCKADDR_IN6
|
||||
|
||||
/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
|
||||
#undef HAVE_STRUCT_SOCKADDR_SA_LEN
|
||||
|
||||
/* Define to 1 if the system has the type `struct sockaddr_storage'. */
|
||||
#undef HAVE_STRUCT_SOCKADDR_STORAGE
|
||||
|
||||
/* Define to 1 if the system has the type `struct sockaddr_un'. */
|
||||
#undef HAVE_STRUCT_SOCKADDR_UN
|
||||
|
||||
/* Define to 1 if `f_fstypename' is a member of `struct statfs'. */
|
||||
#undef HAVE_STRUCT_STATFS_F_FSTYPENAME
|
||||
|
||||
/* Define to 1 if `f_type' is a member of `struct statfs'. */
|
||||
#undef HAVE_STRUCT_STATFS_F_TYPE
|
||||
|
||||
/* Define to 1 if `f_basetype' is a member of `struct statvfs'. */
|
||||
#undef HAVE_STRUCT_STATVFS_F_BASETYPE
|
||||
|
||||
/* Define to 1 if `f_fstypename' is a member of `struct statvfs'. */
|
||||
#undef HAVE_STRUCT_STATVFS_F_FSTYPENAME
|
||||
|
||||
/* Define to 1 if you have the <syslog.h> header file. */
|
||||
#undef HAVE_SYSLOG_H
|
||||
|
||||
/* Define to 1 if you have the <sys/param.h> header file. */
|
||||
#undef HAVE_SYS_PARAM_H
|
||||
|
||||
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||
#undef HAVE_SYS_SOCKET_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||
#undef HAVE_SYS_TIME_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <sys/uio.h> header file. */
|
||||
#undef HAVE_SYS_UIO_H
|
||||
|
||||
/* Define to 1 if you have the <sys/un.h> header file. */
|
||||
#undef HAVE_SYS_UN_H
|
||||
|
||||
/* Define to 1 if you have the <sys/wait.h> header file. */
|
||||
#undef HAVE_SYS_WAIT_H
|
||||
|
||||
/* Define to 1 if you have the <time.h> header file. */
|
||||
#undef HAVE_TIME_H
|
||||
|
||||
/* Define to 1 if the system has the type `uint16_t'. */
|
||||
#undef HAVE_UINT16_T
|
||||
|
||||
/* Define to 1 if the system has the type `uint32_t'. */
|
||||
#undef HAVE_UINT32_T
|
||||
|
||||
/* Define to 1 if the system has the type `uint64_t'. */
|
||||
#undef HAVE_UINT64_T
|
||||
|
||||
/* Define to 1 if the system has the type `uint8_t'. */
|
||||
#undef HAVE_UINT8_T
|
||||
|
||||
/* Define to 1 if the system has the type `uintptr_t'. */
|
||||
#undef HAVE_UINTPTR_T
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* whether unix byteswap routines -- htonl, htons, nothl, ntohs -- are
|
||||
available */
|
||||
#undef HAVE_UNIX_BYTESWAP
|
||||
|
||||
/* Define to 1 if you have the `usleep' function. */
|
||||
#undef HAVE_USLEEP
|
||||
|
||||
/* Define to 1 if you have the `vasprintf' function. */
|
||||
#undef HAVE_VASPRINTF
|
||||
|
||||
/* Define to 1 if you have the `vsnprintf' function. */
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Alignment of type bool */
|
||||
#undef PMIX_ALIGNMENT_BOOL
|
||||
|
||||
/* Alignment of type char */
|
||||
#undef PMIX_ALIGNMENT_CHAR
|
||||
|
||||
/* Alignment of type double */
|
||||
#undef PMIX_ALIGNMENT_DOUBLE
|
||||
|
||||
/* Alignment of type float */
|
||||
#undef PMIX_ALIGNMENT_FLOAT
|
||||
|
||||
/* Alignment of type int */
|
||||
#undef PMIX_ALIGNMENT_INT
|
||||
|
||||
/* Alignment of type int16_t */
|
||||
#undef PMIX_ALIGNMENT_INT16
|
||||
|
||||
/* Alignment of type int32_t */
|
||||
#undef PMIX_ALIGNMENT_INT32
|
||||
|
||||
/* Alignment of type int64_t */
|
||||
#undef PMIX_ALIGNMENT_INT64
|
||||
|
||||
/* Alignment of type int8_t */
|
||||
#undef PMIX_ALIGNMENT_INT8
|
||||
|
||||
/* Alignment of type long */
|
||||
#undef PMIX_ALIGNMENT_LONG
|
||||
|
||||
/* Alignment of type long double */
|
||||
#undef PMIX_ALIGNMENT_LONG_DOUBLE
|
||||
|
||||
/* Alignment of type long long */
|
||||
#undef PMIX_ALIGNMENT_LONG_LONG
|
||||
|
||||
/* Alignment of type short */
|
||||
#undef PMIX_ALIGNMENT_SHORT
|
||||
|
||||
/* Alignment of type size_t */
|
||||
#undef PMIX_ALIGNMENT_SIZE_T
|
||||
|
||||
/* Alignment of type void * */
|
||||
#undef PMIX_ALIGNMENT_VOID_P
|
||||
|
||||
/* Alignment of type wchar_t */
|
||||
#undef PMIX_ALIGNMENT_WCHAR
|
||||
|
||||
/* The compiler $lower which PMIx was built with */
|
||||
#undef PMIX_BUILD_PLATFORM_COMPILER_FAMILYID
|
||||
|
||||
/* The compiler $lower which PMIX was built with */
|
||||
#undef PMIX_BUILD_PLATFORM_COMPILER_FAMILYNAME
|
||||
|
||||
/* The compiler $lower which PMIx was built with */
|
||||
#undef PMIX_BUILD_PLATFORM_COMPILER_VERSION
|
||||
|
||||
/* The compiler $lower which PMIX was built with */
|
||||
#undef PMIX_BUILD_PLATFORM_COMPILER_VERSION_STR
|
||||
|
||||
/* PMIx underlying C compiler */
|
||||
#undef PMIX_CC
|
||||
|
||||
/* Use static const char[] strings for C files */
|
||||
#undef PMIX_CC_USE_CONST_CHAR_IDENT
|
||||
|
||||
/* Use #ident strings for C files */
|
||||
#undef PMIX_CC_USE_IDENT
|
||||
|
||||
/* Use #pragma comment for C files */
|
||||
#undef PMIX_CC_USE_PRAGMA_COMMENT
|
||||
|
||||
/* Use #pragma ident strings for C files */
|
||||
#undef PMIX_CC_USE_PRAGMA_IDENT
|
||||
|
||||
/* Whether C compiler supports __builtin_clz */
|
||||
#undef PMIX_C_HAVE_BUILTIN_CLZ
|
||||
|
||||
/* Whether C compiler supports __builtin_expect */
|
||||
#undef PMIX_C_HAVE_BUILTIN_EXPECT
|
||||
|
||||
/* Whether C compiler supports __builtin_prefetch */
|
||||
#undef PMIX_C_HAVE_BUILTIN_PREFETCH
|
||||
|
||||
/* Whether C compiler supports symbol visibility or not */
|
||||
#undef PMIX_C_HAVE_VISIBILITY
|
||||
|
||||
/* Whether we are in debugging mode or not */
|
||||
#undef PMIX_ENABLE_DEBUG
|
||||
|
||||
/* Whether we want developer-level timing support or not */
|
||||
#undef PMIX_ENABLE_TIMING
|
||||
|
||||
/* Location of event2/thread.h */
|
||||
#undef PMIX_EVENT2_THREAD_HEADER
|
||||
|
||||
/* Location of event.h */
|
||||
#undef PMIX_EVENT_HEADER
|
||||
|
||||
/* Whether your compiler has __attribute__ or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE
|
||||
|
||||
/* Whether your compiler has __attribute__ aligned or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_ALIGNED
|
||||
|
||||
/* Whether your compiler has __attribute__ always_inline or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_ALWAYS_INLINE
|
||||
|
||||
/* Whether your compiler has __attribute__ cold or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_COLD
|
||||
|
||||
/* Whether your compiler has __attribute__ const or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_CONST
|
||||
|
||||
/* Whether your compiler has __attribute__ deprecated or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_DEPRECATED
|
||||
|
||||
/* Whether your compiler has __attribute__ deprecated with optional argument
|
||||
*/
|
||||
#undef PMIX_HAVE_ATTRIBUTE_DEPRECATED_ARGUMENT
|
||||
|
||||
/* Whether your compiler has __attribute__ destructor or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_DESTRUCTOR
|
||||
|
||||
/* Whether your compiler has __attribute__ format or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_FORMAT
|
||||
|
||||
/* Whether your compiler has __attribute__ format and it works on function
|
||||
pointers */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_FORMAT_FUNCPTR
|
||||
|
||||
/* Whether your compiler has __attribute__ hot or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_HOT
|
||||
|
||||
/* Whether your compiler has __attribute__ malloc or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_MALLOC
|
||||
|
||||
/* Whether your compiler has __attribute__ may_alias or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_MAY_ALIAS
|
||||
|
||||
/* Whether your compiler has __attribute__ nonnull or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_NONNULL
|
||||
|
||||
/* Whether your compiler has __attribute__ noreturn or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_NORETURN
|
||||
|
||||
/* Whether your compiler has __attribute__ noreturn and it works on function
|
||||
pointers */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_NORETURN_FUNCPTR
|
||||
|
||||
/* Whether your compiler has __attribute__ no_instrument_function or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_NO_INSTRUMENT_FUNCTION
|
||||
|
||||
/* Whether your compiler has __attribute__ packed or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_PACKED
|
||||
|
||||
/* Whether your compiler has __attribute__ pure or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_PURE
|
||||
|
||||
/* Whether your compiler has __attribute__ sentinel or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_SENTINEL
|
||||
|
||||
/* Whether your compiler has __attribute__ unused or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_UNUSED
|
||||
|
||||
/* Whether your compiler has __attribute__ visibility or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_VISIBILITY
|
||||
|
||||
/* Whether your compiler has __attribute__ warn unused result or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_WARN_UNUSED_RESULT
|
||||
|
||||
/* Whether your compiler has __attribute__ weak alias or not */
|
||||
#undef PMIX_HAVE_ATTRIBUTE_WEAK_ALIAS
|
||||
|
||||
/* whether qsort is broken or not */
|
||||
#undef PMIX_HAVE_BROKEN_QSORT
|
||||
|
||||
/* whether ceil is found and available */
|
||||
#undef PMIX_HAVE_CEIL
|
||||
|
||||
/* whether dirname is found and available */
|
||||
#undef PMIX_HAVE_DIRNAME
|
||||
|
||||
/* Whether we have hwloc support or not */
|
||||
#undef PMIX_HAVE_HWLOC
|
||||
|
||||
/* Whether we have munge support or not */
|
||||
#undef PMIX_HAVE_MUNGE
|
||||
|
||||
/* Whether we have sasl support or not */
|
||||
#undef PMIX_HAVE_SASL
|
||||
|
||||
/* Whether we have SA_RESTART in <signal.h> or not */
|
||||
#undef PMIX_HAVE_SA_RESTART
|
||||
|
||||
/* whether socket is found and available */
|
||||
#undef PMIX_HAVE_SOCKET
|
||||
|
||||
/* Whether we have __va_copy or not */
|
||||
#undef PMIX_HAVE_UNDERSCORE_VA_COPY
|
||||
|
||||
/* Whether we have va_copy or not */
|
||||
#undef PMIX_HAVE_VA_COPY
|
||||
|
||||
/* Location of hwloc.h */
|
||||
#undef PMIX_HWLOC_HEADER
|
||||
|
||||
/* ident string for PMIX */
|
||||
#undef PMIX_IDENT_STRING
|
||||
|
||||
/* Whether the C compiler supports "bool" without any other help (such as
|
||||
<stdbool.h>) */
|
||||
#undef PMIX_NEED_C_BOOL
|
||||
|
||||
/* type to use for ptrdiff_t */
|
||||
#undef PMIX_PTRDIFF_TYPE
|
||||
|
||||
/* The pmix symbol prefix */
|
||||
#undef PMIX_SYM_PREFIX
|
||||
|
||||
/* The pmix symbol prefix in all caps */
|
||||
#undef PMIX_SYM_PREFIX_CAPS
|
||||
|
||||
/* Whether we need to re-define all the pmix public symbols or not */
|
||||
#undef PMIX_SYM_TRANSFORM
|
||||
|
||||
/* Whether to use <stdbool.h> or not */
|
||||
#undef PMIX_USE_STDBOOL_H
|
||||
|
||||
/* The library version is always available, contrary to VERSION */
|
||||
#undef PMIX_VERSION
|
||||
|
||||
/* if want pretty-print stack trace feature */
|
||||
#undef PMIX_WANT_PRETTY_PRINT_STACKTRACE
|
||||
|
||||
/* The size of `char', as computed by sizeof. */
|
||||
#undef SIZEOF_CHAR
|
||||
|
||||
/* The size of `double', as computed by sizeof. */
|
||||
#undef SIZEOF_DOUBLE
|
||||
|
||||
/* The size of `float', as computed by sizeof. */
|
||||
#undef SIZEOF_FLOAT
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#undef SIZEOF_INT
|
||||
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG
|
||||
|
||||
/* The size of `long long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG_LONG
|
||||
|
||||
/* The size of `pid_t', as computed by sizeof. */
|
||||
#undef SIZEOF_PID_T
|
||||
|
||||
/* The size of `ptrdiff_t', as computed by sizeof. */
|
||||
#undef SIZEOF_PTRDIFF_T
|
||||
|
||||
/* The size of `short', as computed by sizeof. */
|
||||
#undef SIZEOF_SHORT
|
||||
|
||||
/* The size of `size_t', as computed by sizeof. */
|
||||
#undef SIZEOF_SIZE_T
|
||||
|
||||
/* The size of `ssize_t', as computed by sizeof. */
|
||||
#undef SIZEOF_SSIZE_T
|
||||
|
||||
/* The size of `void *', as computed by sizeof. */
|
||||
#undef SIZEOF_VOID_P
|
||||
|
||||
/* The size of `wchar_t', as computed by sizeof. */
|
||||
#undef SIZEOF_WCHAR_T
|
||||
|
||||
/* The size of `_Bool', as computed by sizeof. */
|
||||
#undef SIZEOF__BOOL
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Enable extensions on AIX 3, Interix. */
|
||||
#ifndef _ALL_SOURCE
|
||||
# undef _ALL_SOURCE
|
||||
#endif
|
||||
/* Enable GNU extensions on systems that have them. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# undef _GNU_SOURCE
|
||||
#endif
|
||||
/* Enable threading extensions on Solaris. */
|
||||
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||
# undef _POSIX_PTHREAD_SEMANTICS
|
||||
#endif
|
||||
/* Enable extensions on HP NonStop. */
|
||||
#ifndef _TANDEM_SOURCE
|
||||
# undef _TANDEM_SOURCE
|
||||
#endif
|
||||
/* Enable general extensions on Solaris. */
|
||||
#ifndef __EXTENSIONS__
|
||||
# undef __EXTENSIONS__
|
||||
#endif
|
||||
|
||||
|
||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||
significant byte first (like Motorola and SPARC, unlike Intel). */
|
||||
#if defined AC_APPLE_UNIVERSAL_BUILD
|
||||
# if defined __BIG_ENDIAN__
|
||||
# define WORDS_BIGENDIAN 1
|
||||
# endif
|
||||
#else
|
||||
# ifndef WORDS_BIGENDIAN
|
||||
# undef WORDS_BIGENDIAN
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Enable GNU extensions on systems that have them. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# undef _GNU_SOURCE
|
||||
#endif
|
||||
|
||||
/* Define to 1 if on MINIX. */
|
||||
#undef _MINIX
|
||||
|
||||
/* Define to 2 if the system does not provide POSIX.1 features except with
|
||||
this defined. */
|
||||
#undef _POSIX_1_SOURCE
|
||||
|
||||
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||
#undef _POSIX_SOURCE
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
|
||||
#include <pmix/autogen/pmix_config_bottom.h>
|
||||
#endif /* PMIX_CONFIG_H */
|
||||
|
@ -68,6 +68,8 @@ PMIX_DECLSPEC pmix_status_t pmix_value_unload(pmix_value_t *kv, void **data,
|
||||
(b)->bytes_allocated = (s); \
|
||||
(b)->pack_ptr = ((char*)(b)->base_ptr) + (s); \
|
||||
(b)->unpack_ptr = (b)->base_ptr; \
|
||||
(d) = NULL; \
|
||||
(s) = 0; \
|
||||
} while(0);
|
||||
|
||||
#define PMIX_UNLOAD_BUFFER(b, d, s) \
|
@ -663,7 +663,7 @@ int pmix_bfrop_print_pdata(char **output, char *prefix,
|
||||
|
||||
pmix_bfrop_print_proc(&tmp1, NULL, &src->proc, PMIX_PROC);
|
||||
pmix_bfrop_print_value(&tmp2, NULL, &src->value, PMIX_VALUE);
|
||||
asprintf(output, "%sPROC: %s KEY: %s %s", prefix, tmp1, src->key,
|
||||
asprintf(output, "%s %s KEY: %s %s", prefix, tmp1, src->key,
|
||||
(NULL == tmp2) ? "NULL" : tmp2);
|
||||
if (NULL != tmp1) {
|
||||
free(tmp1);
|
||||
@ -689,6 +689,13 @@ int pmix_bfrop_print_app(char **output, char *prefix,
|
||||
int pmix_bfrop_print_proc(char **output, char *prefix,
|
||||
pmix_proc_t *src, pmix_data_type_t type)
|
||||
{
|
||||
char *prefx;
|
||||
|
||||
/* deal with NULL prefix */
|
||||
if (NULL == prefix) asprintf(&prefx, " ");
|
||||
else prefx = prefix;
|
||||
|
||||
asprintf(output, "%sPROC: %s:%d", prefx, src->nspace, src->rank);
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
@ -228,16 +228,14 @@ int PMIx_Init(pmix_proc_t *proc)
|
||||
pmix_nspace_t *nsptr;
|
||||
pmix_cb_t cb;
|
||||
|
||||
if (NULL == proc) {
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
|
||||
if (0 < pmix_globals.init_cntr) {
|
||||
/* since we have been called before, the nspace and
|
||||
* rank should be known. So return them here if
|
||||
* requested */
|
||||
(void)strncpy(proc->nspace, pmix_globals.myid.nspace, PMIX_MAX_NSLEN);
|
||||
proc->rank = pmix_globals.myid.rank;
|
||||
if (NULL != proc) {
|
||||
(void)strncpy(proc->nspace, pmix_globals.myid.nspace, PMIX_MAX_NSLEN);
|
||||
proc->rank = pmix_globals.myid.rank;
|
||||
}
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
@ -281,7 +279,9 @@ int PMIx_Init(pmix_proc_t *proc)
|
||||
pmix_class_finalize();
|
||||
return PMIX_ERR_INVALID_NAMESPACE;
|
||||
}
|
||||
(void)strncpy(proc->nspace, evar, PMIX_MAX_NSLEN);
|
||||
if (NULL != proc) {
|
||||
(void)strncpy(proc->nspace, evar, PMIX_MAX_NSLEN);
|
||||
}
|
||||
(void)strncpy(pmix_globals.myid.nspace, evar, PMIX_MAX_NSLEN);
|
||||
nsptr = PMIX_NEW(pmix_nspace_t);
|
||||
(void)strncpy(nsptr->nspace, evar, PMIX_MAX_NSLEN);
|
||||
@ -336,7 +336,9 @@ int PMIx_Init(pmix_proc_t *proc)
|
||||
return PMIX_ERR_DATA_VALUE_NOT_FOUND;
|
||||
}
|
||||
pmix_globals.myid.rank = strtol(evar, NULL, 10);
|
||||
proc->rank = pmix_globals.myid.rank;
|
||||
if (NULL != proc) {
|
||||
proc->rank = pmix_globals.myid.rank;
|
||||
}
|
||||
pmix_globals.pindex = -1;
|
||||
|
||||
/* setup the support */
|
||||
@ -530,12 +532,70 @@ int PMIx_Abort(int flag, const char msg[],
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_Put(pmix_scope_t scope, const char key[], pmix_value_t *val)
|
||||
static void _putfn(int sd, short args, void *cbdata)
|
||||
{
|
||||
pmix_cb_t *cb = (pmix_cb_t*)cbdata;
|
||||
pmix_status_t rc;
|
||||
pmix_kval_t *kv;
|
||||
pmix_nspace_t *ns;
|
||||
|
||||
/* setup to xfer the data */
|
||||
kv = PMIX_NEW(pmix_kval_t);
|
||||
kv->key = strdup(cb->key); // need to copy as the input belongs to the user
|
||||
kv->value = (pmix_value_t*)malloc(sizeof(pmix_value_t));
|
||||
rc = pmix_value_xfer(kv->value, cb->value);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
goto done;
|
||||
}
|
||||
/* put it in our own modex hash table in case something
|
||||
* internal to us wants it - our nsrecord is always
|
||||
* first on the list */
|
||||
if (NULL == (ns = (pmix_nspace_t*)pmix_list_get_first(&pmix_globals.nspaces))) {
|
||||
/* shouldn't be possible */
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_SUCCESS != (rc = pmix_hash_store(&ns->modex, pmix_globals.myid.rank, kv))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
|
||||
/* pack the cache that matches the scope - global scope needs
|
||||
* to go into both local and remote caches */
|
||||
if (PMIX_LOCAL == cb->scope || PMIX_GLOBAL == cb->scope) {
|
||||
if (NULL == pmix_globals.cache_local) {
|
||||
pmix_globals.cache_local = PMIX_NEW(pmix_buffer_t);
|
||||
}
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix: put %s data for key %s in local cache",
|
||||
cb->key, (PMIX_GLOBAL == cb->scope) ? "global" : "local");
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(pmix_globals.cache_local, kv, 1, PMIX_KVAL))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
}
|
||||
|
||||
if (PMIX_REMOTE == cb->scope || PMIX_GLOBAL == cb->scope) {
|
||||
if (NULL == pmix_globals.cache_remote) {
|
||||
pmix_globals.cache_remote = PMIX_NEW(pmix_buffer_t);
|
||||
}
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix: put %s data for key %s in remote cache",
|
||||
cb->key, (PMIX_GLOBAL == cb->scope) ? "global" : "remote");
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(pmix_globals.cache_remote, kv, 1, PMIX_KVAL))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
PMIX_RELEASE(kv); // maintain accounting
|
||||
cb->pstatus = rc;
|
||||
cb->active = false;
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_Put(pmix_scope_t scope, const char key[], pmix_value_t *val)
|
||||
{
|
||||
pmix_cb_t *cb;
|
||||
pmix_status_t rc;
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix: executing put for key %s type %d",
|
||||
key, val->type);
|
||||
@ -544,66 +604,85 @@ pmix_status_t PMIx_Put(pmix_scope_t scope, const char key[], pmix_value_t *val)
|
||||
return PMIX_ERR_INIT;
|
||||
}
|
||||
|
||||
/* setup to xfer the data */
|
||||
kv = PMIX_NEW(pmix_kval_t);
|
||||
kv->key = strdup((char*)key);
|
||||
kv->value = (pmix_value_t*)malloc(sizeof(pmix_value_t));
|
||||
rc = pmix_value_xfer(kv->value, val);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(kv);
|
||||
return rc;
|
||||
}
|
||||
/* put it in our own modex hash table in case something
|
||||
* internal to us wants it - our nsrecord is always
|
||||
* first on the list */
|
||||
if (NULL == (ns = (pmix_nspace_t*)pmix_list_get_first(&pmix_globals.nspaces))) {
|
||||
/* shouldn't be possible */
|
||||
PMIX_RELEASE(kv);
|
||||
return PMIX_ERR_INIT;
|
||||
}
|
||||
if (PMIX_SUCCESS != (rc = pmix_hash_store(&ns->modex, pmix_globals.myid.rank, kv))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
/* create a callback object */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
cb->active = true;
|
||||
cb->scope = scope;
|
||||
cb->key = (char*)key;
|
||||
cb->value = val;
|
||||
|
||||
/* pack the cache that matches the scope - global scope needs
|
||||
* to go into both local and remote caches */
|
||||
if (PMIX_LOCAL == scope || PMIX_GLOBAL == scope) {
|
||||
if (NULL == pmix_globals.cache_local) {
|
||||
pmix_globals.cache_local = PMIX_NEW(pmix_buffer_t);
|
||||
}
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix: put %s data for key %s in local cache",
|
||||
key, (PMIX_GLOBAL == scope) ? "global" : "local");
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(pmix_globals.cache_local, kv, 1, PMIX_KVAL))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
}
|
||||
/* pass this into the event library for thread protection */
|
||||
PMIX_THREAD_SHIFT(cb, _putfn);
|
||||
|
||||
if (PMIX_REMOTE == scope || PMIX_GLOBAL == scope) {
|
||||
if (NULL == pmix_globals.cache_remote) {
|
||||
pmix_globals.cache_remote = PMIX_NEW(pmix_buffer_t);
|
||||
}
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix: put %s data for key %s in remote cache",
|
||||
key, (PMIX_GLOBAL == scope) ? "global" : "remote");
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(pmix_globals.cache_remote, kv, 1, PMIX_KVAL))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
}
|
||||
|
||||
PMIX_RELEASE(kv); // maintain accounting
|
||||
/* wait for the result */
|
||||
PMIX_WAIT_FOR_COMPLETION(cb->active);
|
||||
rc = cb->pstatus;
|
||||
PMIX_RELEASE(cb);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_Commit(void)
|
||||
static void _commitfn(int sd, short args, void *cbdata)
|
||||
{
|
||||
pmix_cb_t *cb = (pmix_cb_t*)cbdata;
|
||||
pmix_status_t rc;
|
||||
pmix_scope_t scope;
|
||||
pmix_buffer_t *msgout;
|
||||
pmix_cmd_t cmd=PMIX_COMMIT_CMD;
|
||||
|
||||
msgout = PMIX_NEW(pmix_buffer_t);
|
||||
/* pack the cmd */
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &cmd, 1, PMIX_CMD))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* if we haven't already done it, ensure we have committed our values */
|
||||
if (NULL != pmix_globals.cache_local) {
|
||||
scope = PMIX_LOCAL;
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &scope, 1, PMIX_SCOPE))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &pmix_globals.cache_local, 1, PMIX_BUFFER))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
goto done;
|
||||
}
|
||||
PMIX_RELEASE(pmix_globals.cache_local);
|
||||
}
|
||||
if (NULL != pmix_globals.cache_remote) {
|
||||
scope = PMIX_REMOTE;
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &scope, 1, PMIX_SCOPE))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &pmix_globals.cache_remote, 1, PMIX_BUFFER))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
goto done;
|
||||
}
|
||||
PMIX_RELEASE(pmix_globals.cache_remote);
|
||||
}
|
||||
|
||||
/* push the message into our event base to send to the server - always
|
||||
* send, even if we have nothing to contribute, so the server knows
|
||||
* that we contributed whatever we had */
|
||||
PMIX_ACTIVATE_SEND_RECV(&pmix_client_globals.myserver, msgout, NULL, NULL);
|
||||
|
||||
done:
|
||||
cb->pstatus = rc;
|
||||
cb->active = false;
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_Commit(void)
|
||||
{
|
||||
pmix_cb_t *cb;
|
||||
pmix_status_t rc;
|
||||
|
||||
/* if we are a server, or we aren't connected, don't attempt to send */
|
||||
if (pmix_globals.server) {
|
||||
return PMIX_SUCCESS; // not an error
|
||||
@ -612,70 +691,37 @@ pmix_status_t PMIx_Commit(void)
|
||||
return PMIX_ERR_UNREACH;
|
||||
}
|
||||
|
||||
msgout = PMIX_NEW(pmix_buffer_t);
|
||||
/* pack the cmd */
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &cmd, 1, PMIX_CMD))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
return rc;
|
||||
}
|
||||
/* create a callback object */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
cb->active = true;
|
||||
|
||||
/* if we haven't already done it, ensure we have committed our values */
|
||||
if (NULL != pmix_globals.cache_local) {
|
||||
scope = PMIX_LOCAL;
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &scope, 1, PMIX_SCOPE))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
return rc;
|
||||
}
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &pmix_globals.cache_local, 1, PMIX_BUFFER))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
return rc;
|
||||
}
|
||||
PMIX_RELEASE(pmix_globals.cache_local);
|
||||
}
|
||||
if (NULL != pmix_globals.cache_remote) {
|
||||
scope = PMIX_REMOTE;
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &scope, 1, PMIX_SCOPE))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
return rc;
|
||||
}
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(msgout, &pmix_globals.cache_remote, 1, PMIX_BUFFER))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msgout);
|
||||
return rc;
|
||||
}
|
||||
PMIX_RELEASE(pmix_globals.cache_remote);
|
||||
}
|
||||
/* pass this into the event library for thread protection */
|
||||
PMIX_THREAD_SHIFT(cb, _commitfn);
|
||||
|
||||
/* push the message into our event base to send to the server - always
|
||||
* send, even if we have nothing to contribute, so the server knows
|
||||
* that we contributed whatever we had */
|
||||
PMIX_ACTIVATE_SEND_RECV(&pmix_client_globals.myserver, msgout, NULL, NULL);
|
||||
return PMIX_SUCCESS;
|
||||
/* wait for the result */
|
||||
PMIX_WAIT_FOR_COMPLETION(cb->active);
|
||||
rc = cb->pstatus;
|
||||
PMIX_RELEASE(cb);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_Resolve_peers(const char *nodename, const char *nspace,
|
||||
pmix_proc_t **procs, size_t *nprocs)
|
||||
static void _peersfn(int sd, short args, void *cbdata)
|
||||
{
|
||||
pmix_cb_t *cb = (pmix_cb_t*)cbdata;
|
||||
pmix_status_t rc;
|
||||
char **nsprocs=NULL, **nsps=NULL, **tmp;
|
||||
pmix_nspace_t *nsptr;
|
||||
pmix_nrec_t *nptr;
|
||||
size_t i;
|
||||
|
||||
/* set the default */
|
||||
*procs = NULL;
|
||||
*nprocs = 0;
|
||||
|
||||
/* cycle across our known nspaces */
|
||||
tmp = NULL;
|
||||
PMIX_LIST_FOREACH(nsptr, &pmix_globals.nspaces, pmix_nspace_t) {
|
||||
if (NULL == nspace || 0 == strcmp(nsptr->nspace, nspace)) {
|
||||
if (0 == strncmp(nsptr->nspace, cb->nspace, PMIX_MAX_NSLEN)) {
|
||||
/* cycle across the nodes in this nspace */
|
||||
PMIX_LIST_FOREACH(nptr, &nsptr->nodes, pmix_nrec_t) {
|
||||
if (0 == strcmp(nodename, nptr->name)) {
|
||||
if (0 == strcmp(cb->key, nptr->name)) {
|
||||
/* add the contribution from this node */
|
||||
tmp = pmix_argv_split(nptr->procs, ',');
|
||||
for (i=0; NULL != tmp[i]; i++) {
|
||||
@ -689,41 +735,71 @@ pmix_status_t PMIx_Resolve_peers(const char *nodename, const char *nspace,
|
||||
}
|
||||
}
|
||||
if (0 == (i = pmix_argv_count(nsps))) {
|
||||
/* if we don't already have a record for this nspace,
|
||||
* see if we have the data in our local cache */
|
||||
|
||||
return PMIX_ERR_NOT_FOUND;
|
||||
/* we don't know this nspace */
|
||||
rc = PMIX_ERR_NOT_FOUND;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* create the required storage */
|
||||
i = pmix_argv_count(nsps);
|
||||
PMIX_PROC_CREATE(*procs, i);
|
||||
*nprocs = pmix_argv_count(nsps);
|
||||
PMIX_PROC_CREATE(cb->procs, i);
|
||||
cb->nvals = pmix_argv_count(nsps);
|
||||
|
||||
/* transfer the data */
|
||||
for (i=0; NULL != nsps[i]; i++) {
|
||||
(void)strncpy((*procs)[i].nspace, nsps[i], PMIX_MAX_NSLEN);
|
||||
(*procs)[i].rank = strtol(nsprocs[i], NULL, 10);
|
||||
(void)strncpy(cb->procs[i].nspace, nsps[i], PMIX_MAX_NSLEN);
|
||||
cb->procs[i].rank = strtol(nsprocs[i], NULL, 10);
|
||||
}
|
||||
pmix_argv_free(nsps);
|
||||
pmix_argv_free(nsprocs);
|
||||
rc = PMIX_SUCCESS;
|
||||
|
||||
return PMIX_SUCCESS;
|
||||
done:
|
||||
cb->pstatus = rc;
|
||||
cb->active = false;
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_Resolve_nodes(const char *nspace, char **nodelist)
|
||||
pmix_status_t PMIx_Resolve_peers(const char *nodename, const char *nspace,
|
||||
pmix_proc_t **procs, size_t *nprocs)
|
||||
{
|
||||
pmix_cb_t *cb;
|
||||
pmix_status_t rc;
|
||||
|
||||
/* create a callback object */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
cb->active = true;
|
||||
cb->key = (char*)nodename;
|
||||
if (NULL != nspace) {
|
||||
(void)strncpy(cb->nspace, nspace, PMIX_MAX_NSLEN);
|
||||
}
|
||||
|
||||
/* pass this into the event library for thread protection */
|
||||
PMIX_THREAD_SHIFT(cb, _peersfn);
|
||||
|
||||
/* wait for the result */
|
||||
PMIX_WAIT_FOR_COMPLETION(cb->active);
|
||||
rc = cb->pstatus;
|
||||
/* transfer the result */
|
||||
*procs = cb->procs;
|
||||
*nprocs = cb->nvals;
|
||||
|
||||
/* cleanup */
|
||||
PMIX_RELEASE(cb);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void _nodesfn(int sd, short args, void *cbdata)
|
||||
{
|
||||
pmix_cb_t *cb = (pmix_cb_t*)cbdata;
|
||||
pmix_status_t rc;
|
||||
char **tmp;
|
||||
pmix_nspace_t *nsptr;
|
||||
pmix_nrec_t *nptr;
|
||||
|
||||
/* set the default */
|
||||
*nodelist = NULL;
|
||||
|
||||
/* cycle across our known nspaces */
|
||||
tmp = NULL;
|
||||
PMIX_LIST_FOREACH(nsptr, &pmix_globals.nspaces, pmix_nspace_t) {
|
||||
if (NULL == nspace || 0 == strcmp(nsptr->nspace, nspace)) {
|
||||
if (0 == strncmp(nsptr->nspace, cb->nspace, PMIX_MAX_NSLEN)) {
|
||||
/* cycle across the nodes in this nspace */
|
||||
PMIX_LIST_FOREACH(nptr, &nsptr->nodes, pmix_nrec_t) {
|
||||
pmix_argv_append_unique_nosize(&tmp, nptr->name, false);
|
||||
@ -731,11 +807,39 @@ pmix_status_t PMIx_Resolve_nodes(const char *nspace, char **nodelist)
|
||||
}
|
||||
}
|
||||
if (NULL == tmp) {
|
||||
return PMIX_ERR_NOT_FOUND;
|
||||
rc = PMIX_ERR_NOT_FOUND;
|
||||
} else {
|
||||
cb->key = pmix_argv_join(tmp, ',');
|
||||
pmix_argv_free(tmp);
|
||||
rc = PMIX_SUCCESS;
|
||||
}
|
||||
*nodelist = pmix_argv_join(tmp, ',');
|
||||
pmix_argv_free(tmp);
|
||||
return PMIX_SUCCESS;
|
||||
|
||||
cb->pstatus = rc;
|
||||
cb->active = false;
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_Resolve_nodes(const char *nspace, char **nodelist)
|
||||
{
|
||||
pmix_cb_t *cb;
|
||||
pmix_status_t rc;
|
||||
|
||||
/* create a callback object */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
cb->active = true;
|
||||
if (NULL != nspace) {
|
||||
(void)strncpy(cb->nspace, nspace, PMIX_MAX_NSLEN);
|
||||
}
|
||||
|
||||
/* pass this into the event library for thread protection */
|
||||
PMIX_THREAD_SHIFT(cb, _nodesfn);
|
||||
|
||||
/* wait for the result */
|
||||
PMIX_WAIT_FOR_COMPLETION(cb->active);
|
||||
rc = cb->pstatus;
|
||||
*nodelist = cb->key;
|
||||
PMIX_RELEASE(cb);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
@ -919,9 +1023,6 @@ void pmix_client_process_nspace_blob(const char *nspace, pmix_buffer_t *bptr)
|
||||
bo = &(kptr->value->data.bo);
|
||||
PMIX_CONSTRUCT(&buf2, pmix_buffer_t);
|
||||
PMIX_LOAD_BUFFER(&buf2, bo->bytes, bo->size);
|
||||
/* protect the data */
|
||||
kptr->value->data.bo.bytes = NULL;
|
||||
kptr->value->data.bo.size = 0;
|
||||
PMIX_RELEASE(kptr);
|
||||
/* start by unpacking the rank */
|
||||
cnt = 1;
|
||||
@ -958,9 +1059,6 @@ void pmix_client_process_nspace_blob(const char *nspace, pmix_buffer_t *bptr)
|
||||
bo = &(kptr->value->data.bo);
|
||||
PMIX_CONSTRUCT(&buf2, pmix_buffer_t);
|
||||
PMIX_LOAD_BUFFER(&buf2, bo->bytes, bo->size);
|
||||
/* protect the data */
|
||||
kptr->value->data.bo.bytes = NULL;
|
||||
kptr->value->data.bo.size = 0;
|
||||
PMIX_RELEASE(kptr);
|
||||
/* start by unpacking the number of nodes */
|
||||
cnt = 1;
|
@ -59,9 +59,12 @@
|
||||
static pmix_buffer_t* pack_get(char *nspace, int rank,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_cmd_t cmd);
|
||||
|
||||
static void _getnbfn(int sd, short args, void *cbdata);
|
||||
|
||||
static void getnb_cbfunc(struct pmix_peer_t *pr, pmix_usock_hdr_t *hdr,
|
||||
pmix_buffer_t *buf, void *cbdata);
|
||||
static void getnb_shortcut(int fd, short flags, void *cbdata);
|
||||
|
||||
static void value_cbfunc(int status, pmix_value_t *kv, void *cbdata);
|
||||
|
||||
int PMIx_Get(const pmix_proc_t *proc, const char key[],
|
||||
@ -90,10 +93,8 @@ int PMIx_Get(const pmix_proc_t *proc, const char key[],
|
||||
* the return message is recvd */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
cb->active = true;
|
||||
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get_nb(proc, key, info, ninfo, value_cbfunc, cb))) {
|
||||
PMIX_RELEASE(cb);
|
||||
*val = NULL;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -113,13 +114,7 @@ pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const char *key,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_value_cbfunc_t cbfunc, void *cbdata)
|
||||
{
|
||||
pmix_value_t *val;
|
||||
pmix_buffer_t *msg;
|
||||
pmix_cb_t *cb;
|
||||
pmix_status_t rc;
|
||||
char *nm;
|
||||
pmix_nspace_t *ns, *nptr;
|
||||
size_t n;
|
||||
|
||||
if (NULL == proc) {
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
@ -139,184 +134,18 @@ pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const char *key,
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* if the nspace is empty, then the caller is referencing
|
||||
* our own nspace */
|
||||
if (0 == strlen(proc->nspace)) {
|
||||
nm = pmix_globals.myid.nspace;
|
||||
} else {
|
||||
nm = (char*)proc->nspace;
|
||||
}
|
||||
|
||||
/* find the nspace object */
|
||||
nptr = NULL;
|
||||
PMIX_LIST_FOREACH(ns, &pmix_globals.nspaces, pmix_nspace_t) {
|
||||
if (0 == strcmp(nm, ns->nspace)) {
|
||||
nptr = ns;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (NULL == nptr) {
|
||||
/* we are asking for info about a new nspace - give us
|
||||
* a chance to learn about it from the server. If the
|
||||
* server has never heard of it, the server will return
|
||||
* an error */
|
||||
nptr = PMIX_NEW(pmix_nspace_t);
|
||||
(void)strncpy(nptr->nspace, nm, PMIX_MAX_NSLEN);
|
||||
pmix_list_append(&pmix_globals.nspaces, &nptr->super);
|
||||
/* there is no point in looking for data in this nspace
|
||||
* object, so let's just go generate the request */
|
||||
goto request;
|
||||
}
|
||||
|
||||
/* the requested data could be in the job-data table, so let's
|
||||
* just check there first. */
|
||||
if (PMIX_SUCCESS == (rc = pmix_hash_fetch(&nptr->internal, PMIX_RANK_WILDCARD, key, &val))) {
|
||||
/* found it - return it via appropriate channel */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
(void)strncpy(cb->nspace, nm, PMIX_MAX_NSLEN);
|
||||
cb->rank = proc->rank;
|
||||
cb->key = strdup(key);
|
||||
cb->value_cbfunc = cbfunc;
|
||||
cb->cbdata = cbdata;
|
||||
/* pack the return data so the unpack routine can get it */
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(&cb->data, val, 1, PMIX_VALUE))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
/* cleanup */
|
||||
if (NULL != val) {
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
}
|
||||
/* activate the event */
|
||||
event_assign(&(cb->ev), pmix_globals.evbase, -1,
|
||||
EV_WRITE, getnb_shortcut, cb);
|
||||
event_active(&(cb->ev), EV_WRITE, 1);
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
if (PMIX_RANK_WILDCARD == proc->rank) {
|
||||
/* can't be anywhere else */
|
||||
return PMIX_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* it could still be in the job-data table, only stored under its own
|
||||
* rank and not WILDCARD - e.g., this is true of data returned about
|
||||
* ourselves during startup */
|
||||
if (PMIX_SUCCESS == (rc = pmix_hash_fetch(&nptr->internal, proc->rank, key, &val))) {
|
||||
/* found it - return it via appropriate channel */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
(void)strncpy(cb->nspace, nm, PMIX_MAX_NSLEN);
|
||||
cb->rank = proc->rank;
|
||||
cb->key = strdup(key);
|
||||
cb->value_cbfunc = cbfunc;
|
||||
cb->cbdata = cbdata;
|
||||
/* pack the return data so the unpack routine can get it */
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(&cb->data, val, 1, PMIX_VALUE))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
/* cleanup */
|
||||
if (NULL != val) {
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
}
|
||||
/* activate the event */
|
||||
event_assign(&(cb->ev), pmix_globals.evbase, -1,
|
||||
EV_WRITE, getnb_shortcut, cb);
|
||||
event_active(&(cb->ev), EV_WRITE, 1);
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
/* not finding it is not an error - it could be in the
|
||||
* modex hash table, so check it */
|
||||
if (PMIX_SUCCESS == (rc = pmix_hash_fetch(&nptr->modex, proc->rank, key, &val))) {
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix: value retrieved from dstore");
|
||||
/* need to push this into the event library to ensure
|
||||
* the callback occurs within an event */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
(void)strncpy(cb->nspace, nm, PMIX_MAX_NSLEN);
|
||||
cb->rank = proc->rank;
|
||||
cb->key = strdup(key);
|
||||
cb->value_cbfunc = cbfunc;
|
||||
cb->cbdata = cbdata;
|
||||
/* pack the return data so the unpack routine can get it */
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(&cb->data, val, 1, PMIX_VALUE))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
/* cleanup */
|
||||
if (NULL != val) {
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
}
|
||||
/* activate the event */
|
||||
event_assign(&(cb->ev), pmix_globals.evbase, -1,
|
||||
EV_WRITE, getnb_shortcut, cb);
|
||||
event_active(&(cb->ev), EV_WRITE, 1);
|
||||
return PMIX_SUCCESS;
|
||||
} else if (PMIX_ERR_NOT_FOUND == rc) {
|
||||
/* we have the modex data from this proc, but didn't find the key
|
||||
* the user requested. At this time, there is no way for the
|
||||
* key to eventually be found, so all we can do is return
|
||||
* the error */
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"Error requesting key=%s for rank = %d, namespace = %s",
|
||||
key, proc->rank, nm);
|
||||
return rc;
|
||||
}
|
||||
|
||||
request:
|
||||
/* if we got here, then we don't have the data for this proc. If we
|
||||
* are a server, or we are a client and not connected, then there is
|
||||
* nothing more we can do */
|
||||
if (pmix_globals.server || (!pmix_globals.server && !pmix_globals.connected)) {
|
||||
return PMIX_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* we also have to check the user's directives to see if they do not want
|
||||
* us to attempt to retrieve it from the server */
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (0 == strcmp(info[n].key, PMIX_OPTIONAL) &&
|
||||
info[n].value.data.flag) {
|
||||
/* they don't want us to try and retrieve it */
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"PMIx_Get key=%s for rank = %d, namespace = %s was not found - request was optional",
|
||||
key, proc->rank, nm);
|
||||
return PMIX_ERR_NOT_FOUND;
|
||||
}
|
||||
}
|
||||
/* see if we already have a request in place with the server for data from
|
||||
* this nspace:rank. If we do, then no need to ask again as the
|
||||
* request will return _all_ data from that proc */
|
||||
PMIX_LIST_FOREACH(cb, &pmix_client_globals.pending_requests, pmix_cb_t) {
|
||||
if (0 == strncmp(nm, cb->nspace, PMIX_MAX_NSLEN) && cb->rank == proc->rank) {
|
||||
/* we do have a pending request, but we still need to track this
|
||||
* outstanding request so we can satisfy it once the data is returned */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
(void)strncpy(cb->nspace, nm, PMIX_MAX_NSLEN);
|
||||
cb->rank = proc->rank;
|
||||
cb->key = strdup(key);
|
||||
cb->value_cbfunc = cbfunc;
|
||||
cb->cbdata = cbdata;
|
||||
pmix_list_append(&pmix_client_globals.pending_requests, &cb->super);
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
/* we don't have a pending request, so let's create one - don't worry
|
||||
* about packing the key as we return everything from that proc */
|
||||
if (NULL == (msg = pack_get(nm, proc->rank, info, ninfo, PMIX_GETNB_CMD))) {
|
||||
return PMIX_ERROR;
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
/* thread-shift so we can check global objects */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
(void)strncpy(cb->nspace, nm, PMIX_MAX_NSLEN);
|
||||
cb->active = true;
|
||||
(void)strncpy(cb->nspace, proc->nspace, PMIX_MAX_NSLEN);
|
||||
cb->rank = proc->rank;
|
||||
cb->key = strdup(key);
|
||||
cb->key = (char*)key;
|
||||
cb->info = (pmix_info_t*)info;
|
||||
cb->ninfo = ninfo;
|
||||
cb->value_cbfunc = cbfunc;
|
||||
cb->cbdata = cbdata;
|
||||
pmix_list_append(&pmix_client_globals.pending_requests, &cb->super);
|
||||
PMIX_THREAD_SHIFT(cb, _getnbfn);
|
||||
|
||||
/* push the message into our event base to send to the server */
|
||||
PMIX_ACTIVATE_SEND_RECV(&pmix_client_globals.myserver, msg, getnb_cbfunc, cb);
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
@ -377,6 +206,9 @@ static pmix_buffer_t* pack_get(char *nspace, int rank,
|
||||
return msg;
|
||||
}
|
||||
|
||||
/* this callback is coming from the usock recv, and thus
|
||||
* is occurring inside of our progress thread - hence, no
|
||||
* need to thread shift */
|
||||
static void getnb_cbfunc(struct pmix_peer_t *pr, pmix_usock_hdr_t *hdr,
|
||||
pmix_buffer_t *buf, void *cbdata)
|
||||
{
|
||||
@ -410,7 +242,7 @@ static void getnb_cbfunc(struct pmix_peer_t *pr, pmix_usock_hdr_t *hdr,
|
||||
/* look up the nspace object for this proc */
|
||||
nptr = NULL;
|
||||
PMIX_LIST_FOREACH(ns, &pmix_globals.nspaces, pmix_nspace_t) {
|
||||
if (0 == strcmp(cb->nspace, ns->nspace)) {
|
||||
if (0 == strncmp(cb->nspace, ns->nspace, PMIX_MAX_NSLEN)) {
|
||||
nptr = ns;
|
||||
break;
|
||||
}
|
||||
@ -500,23 +332,169 @@ static void getnb_cbfunc(struct pmix_peer_t *pr, pmix_usock_hdr_t *hdr,
|
||||
}
|
||||
}
|
||||
|
||||
static void getnb_shortcut(int fd, short flags, void *cbdata)
|
||||
static void _getnbfn(int fd, short flags, void *cbdata)
|
||||
{
|
||||
pmix_cb_t *cb = (pmix_cb_t*)cbdata;
|
||||
pmix_value_t val;
|
||||
pmix_cb_t *cbret;
|
||||
pmix_buffer_t *msg;
|
||||
pmix_value_t *val;
|
||||
pmix_status_t rc;
|
||||
int32_t m;
|
||||
char *nm;
|
||||
pmix_nspace_t *ns, *nptr;
|
||||
size_t n;
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"getnb_shortcut called with %s cbfunc",
|
||||
(NULL == cb->value_cbfunc) ? "NULL" : "NON-NULL");
|
||||
"pmix: getnbfn value for proc %s:%d key %s",
|
||||
cb->nspace, cb->rank,
|
||||
(NULL == cb->key) ? "NULL" : cb->key);
|
||||
|
||||
PMIX_VALUE_CONSTRUCT(&val);
|
||||
if (NULL != cb->value_cbfunc) {
|
||||
m=1;
|
||||
rc = pmix_bfrop.unpack(&cb->data, &val, &m, PMIX_VALUE);
|
||||
cb->value_cbfunc(rc, &val, cb->cbdata);
|
||||
/* if the nspace is empty, then the caller is referencing
|
||||
* our own nspace */
|
||||
if (0 == strlen(cb->nspace)) {
|
||||
nm = pmix_globals.myid.nspace;
|
||||
} else {
|
||||
nm = (char*)cb->nspace;
|
||||
}
|
||||
PMIX_VALUE_DESTRUCT(&val);
|
||||
PMIX_RELEASE(cb);
|
||||
|
||||
/* find the nspace object */
|
||||
nptr = NULL;
|
||||
PMIX_LIST_FOREACH(ns, &pmix_globals.nspaces, pmix_nspace_t) {
|
||||
if (0 == strcmp(nm, ns->nspace)) {
|
||||
nptr = ns;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (NULL == nptr) {
|
||||
/* we are asking for info about a new nspace - give us
|
||||
* a chance to learn about it from the server. If the
|
||||
* server has never heard of it, the server will return
|
||||
* an error */
|
||||
nptr = PMIX_NEW(pmix_nspace_t);
|
||||
(void)strncpy(nptr->nspace, nm, PMIX_MAX_NSLEN);
|
||||
pmix_list_append(&pmix_globals.nspaces, &nptr->super);
|
||||
/* there is no point in looking for data in this nspace
|
||||
* object, so let's just go generate the request */
|
||||
goto request;
|
||||
}
|
||||
|
||||
/* the requested data could be in the job-data table, so let's
|
||||
* just check there first. */
|
||||
if (PMIX_SUCCESS == (rc = pmix_hash_fetch(&nptr->internal, PMIX_RANK_WILDCARD, cb->key, &val))) {
|
||||
/* found it - we are in an event, so we can
|
||||
* just execute the callback */
|
||||
cb->value_cbfunc(rc, val, cb->cbdata);
|
||||
/* cleanup */
|
||||
if (NULL != val) {
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
}
|
||||
PMIX_RELEASE(cb);
|
||||
return;
|
||||
}
|
||||
if (PMIX_RANK_WILDCARD == cb->rank) {
|
||||
/* can't be anywhere else */
|
||||
cb->value_cbfunc(PMIX_ERR_NOT_FOUND, NULL, cb->cbdata);
|
||||
PMIX_RELEASE(cb);
|
||||
return;
|
||||
}
|
||||
|
||||
/* it could still be in the job-data table, only stored under its own
|
||||
* rank and not WILDCARD - e.g., this is true of data returned about
|
||||
* ourselves during startup */
|
||||
if (PMIX_SUCCESS == (rc = pmix_hash_fetch(&nptr->internal, cb->rank, cb->key, &val))) {
|
||||
/* found it - we are in an event, so we can
|
||||
* just execute the callback */
|
||||
cb->value_cbfunc(rc, val, cb->cbdata);
|
||||
/* cleanup */
|
||||
if (NULL != val) {
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
}
|
||||
PMIX_RELEASE(cb);
|
||||
return;
|
||||
}
|
||||
|
||||
/* not finding it is not an error - it could be in the
|
||||
* modex hash table, so check it */
|
||||
if (PMIX_SUCCESS == (rc = pmix_hash_fetch(&nptr->modex, cb->rank, cb->key, &val))) {
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix: value retrieved from dstore");
|
||||
/* found it - we are in an event, so we can
|
||||
* just execute the callback */
|
||||
cb->value_cbfunc(rc, val, cb->cbdata);
|
||||
/* cleanup */
|
||||
if (NULL != val) {
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
}
|
||||
PMIX_RELEASE(cb);
|
||||
return;
|
||||
} else if (PMIX_ERR_NOT_FOUND == rc) {
|
||||
/* we have the modex data from this proc, but didn't find the key
|
||||
* the user requested. At this time, there is no way for the
|
||||
* key to eventually be found, so all we can do is return
|
||||
* the error */
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"Error requesting key=%s for rank = %d, namespace = %s",
|
||||
cb->key, cb->rank, nm);
|
||||
cb->value_cbfunc(rc, NULL, cb->cbdata);
|
||||
/* protect the data */
|
||||
cb->procs = NULL;
|
||||
cb->key = NULL;
|
||||
cb->info = NULL;
|
||||
PMIX_RELEASE(cb);
|
||||
return;
|
||||
}
|
||||
|
||||
request:
|
||||
/* if we got here, then we don't have the data for this proc. If we
|
||||
* are a server, or we are a client and not connected, then there is
|
||||
* nothing more we can do */
|
||||
if (pmix_globals.server || (!pmix_globals.server && !pmix_globals.connected)) {
|
||||
cb->value_cbfunc(PMIX_ERR_NOT_FOUND, NULL, cb->cbdata);
|
||||
PMIX_RELEASE(cb);
|
||||
return;
|
||||
}
|
||||
|
||||
/* we also have to check the user's directives to see if they do not want
|
||||
* us to attempt to retrieve it from the server */
|
||||
for (n=0; n < cb->ninfo; n++) {
|
||||
if (0 == strcmp(cb->info[n].key, PMIX_OPTIONAL) &&
|
||||
cb->info[n].value.data.flag) {
|
||||
/* they don't want us to try and retrieve it */
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"PMIx_Get key=%s for rank = %d, namespace = %s was not found - request was optional",
|
||||
cb->key, cb->rank, nm);
|
||||
cb->value_cbfunc(PMIX_ERR_NOT_FOUND, NULL, cb->cbdata);
|
||||
PMIX_RELEASE(cb);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* see if we already have a request in place with the server for data from
|
||||
* this nspace:rank. If we do, then no need to ask again as the
|
||||
* request will return _all_ data from that proc */
|
||||
PMIX_LIST_FOREACH(cbret, &pmix_client_globals.pending_requests, pmix_cb_t) {
|
||||
if (0 == strncmp(cbret->nspace, nm, PMIX_MAX_NSLEN) &&
|
||||
cbret->rank == cb->rank) {
|
||||
/* we do have a pending request, but we still need to track this
|
||||
* outstanding request so we can satisfy it once the data is returned */
|
||||
pmix_list_append(&pmix_client_globals.pending_requests, &cb->super);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* we don't have a pending request, so let's create one - don't worry
|
||||
* about packing the key as we return everything from that proc */
|
||||
msg = pack_get(nm, cb->rank, cb->info, cb->ninfo, PMIX_GETNB_CMD);
|
||||
if (NULL == msg) {
|
||||
cb->value_cbfunc(PMIX_ERROR, NULL, cb->cbdata);
|
||||
PMIX_RELEASE(cb);
|
||||
return;
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
pmix_list_append(&pmix_client_globals.pending_requests, &cb->super);
|
||||
|
||||
/* push the message into our event base to send to the server */
|
||||
PMIX_ACTIVATE_SEND_RECV(&pmix_client_globals.myserver, msg, getnb_cbfunc, cb);
|
||||
}
|
@ -1,44 +1,44 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <private/types.h>
|
||||
#include <private/pmix_stdint.h>
|
||||
#include <private/pmix_socket_errno.h>
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
void PMIx_Register_errhandler(pmix_info_t info[], size_t ninfo,
|
||||
pmix_notification_fn_t errhandler,
|
||||
pmix_errhandler_reg_cbfunc_t cbfunc,
|
||||
void *cbdata)
|
||||
{
|
||||
/* common err handler registration to be added */
|
||||
}
|
||||
|
||||
void PMIx_Deregister_errhandler(int errhandler_ref,
|
||||
pmix_op_cbfunc_t cbfunc,
|
||||
void *cbdata)
|
||||
{
|
||||
/* common err handler deregistration goes here */
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_Notify_error(pmix_status_t status,
|
||||
pmix_proc_t procs[], size_t nprocs,
|
||||
pmix_proc_t error_procs[], size_t error_nprocs,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata)
|
||||
{
|
||||
/* common err notify goes here */
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <private/types.h>
|
||||
#include <private/pmix_stdint.h>
|
||||
#include <private/pmix_socket_errno.h>
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
void PMIx_Register_errhandler(pmix_info_t info[], size_t ninfo,
|
||||
pmix_notification_fn_t errhandler,
|
||||
pmix_errhandler_reg_cbfunc_t cbfunc,
|
||||
void *cbdata)
|
||||
{
|
||||
/* common err handler registration to be added */
|
||||
}
|
||||
|
||||
void PMIx_Deregister_errhandler(int errhandler_ref,
|
||||
pmix_op_cbfunc_t cbfunc,
|
||||
void *cbdata)
|
||||
{
|
||||
/* common err handler deregistration goes here */
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_Notify_error(pmix_status_t status,
|
||||
pmix_proc_t procs[], size_t nprocs,
|
||||
pmix_proc_t error_procs[], size_t error_nprocs,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata)
|
||||
{
|
||||
/* common err notify goes here */
|
||||
return PMIX_SUCCESS;
|
||||
}
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче
Block a user