From c696e04c5e20974f802825a27a846a72e6cbe25b Mon Sep 17 00:00:00 2001 From: Ralph Castain Date: Sat, 7 Oct 2017 12:32:53 -0700 Subject: [PATCH] Since PMIx is moving to release v3.0, embed the new release candidate in opal/pmix framework. Move the pmix2x code over to the ext2x component. Create a new ext3x component Remove some build product. Tell PMIx that we don't need a new nspace generated when OMPI calls connect Add missing Makefile Signed-off-by: Ralph Castain --- .gitignore | 46 +- opal/mca/pmix/ext2x/Makefile.am | 27 +- opal/mca/pmix/ext2x/ext2x.c | 1547 ++++++++++++++++ opal/mca/pmix/ext2x/ext2x.h | 340 ++++ .../pmix2x_client.c => ext2x/ext2x_client.c} | 400 ++-- opal/mca/pmix/ext2x/ext2x_component.c | 129 ++ .../ext2x_server_north.c} | 306 +-- opal/mca/pmix/ext2x/ext2x_server_south.c | 560 ++++++ opal/mca/pmix/ext3x/Makefile.am | 72 + .../common_sym_whitelist.txt | 0 opal/mca/pmix/ext3x/configure.m4 | 63 + opal/mca/pmix/ext3x/ext3x.h | 340 ++++ opal/mca/pmix/ext3x/ext3x_local.c | 27 + .../help-pmix-ext3x.txt} | 0 opal/mca/pmix/pmix2x/Makefile.am | 58 - .../pmix/pmix2x/pmix/test/simple/test_pmix.c | 67 - opal/mca/pmix/pmix3x/Makefile.am | 58 + .../pmix/{pmix2x => pmix3x}/autogen.subdirs | 0 opal/mca/pmix/pmix3x/common_sym_whitelist.txt | 6 + opal/mca/pmix/{pmix2x => pmix3x}/configure.m4 | 86 +- opal/mca/pmix/pmix3x/help-pmix-pmix3x.txt | 32 + opal/mca/pmix/{pmix2x => pmix3x}/pmix/AUTHORS | 0 opal/mca/pmix/{pmix2x => pmix3x}/pmix/INSTALL | 0 opal/mca/pmix/{pmix2x => pmix3x}/pmix/LICENSE | 0 .../pmix/{pmix2x => pmix3x}/pmix/Makefile.am | 0 opal/mca/pmix/{pmix2x => pmix3x}/pmix/NEWS | 0 opal/mca/pmix/{pmix2x => pmix3x}/pmix/README | 0 opal/mca/pmix/{pmix2x => pmix3x}/pmix/VERSION | 8 +- .../pmix/{pmix2x => pmix3x}/pmix/autogen.pl | 0 .../pmix/config/Makefile.am | 0 .../pmix/config/c_get_alignment.m4 | 0 .../pmix/config/distscript.sh | 0 .../{pmix2x => pmix3x}/pmix/config/pmix.m4 | 0 .../pmix/config/pmix_check_attributes.m4 | 0 .../pmix/config/pmix_check_broken_qsort.m4 | 0 .../config/pmix_check_compiler_version.m4 | 0 .../pmix/config/pmix_check_icc.m4 | 0 .../pmix/config/pmix_check_ident.m4 | 0 .../pmix/config/pmix_check_lock.m4 | 0 .../pmix/config/pmix_check_os_flavors.m4 | 0 .../pmix/config/pmix_check_package.m4 | 0 .../pmix/config/pmix_check_psm2.m4 | 0 .../pmix/config/pmix_check_pthread_pids.m4 | 0 .../pmix/config/pmix_check_vendor.m4 | 0 .../pmix/config/pmix_check_visibility.m4 | 0 .../pmix/config/pmix_check_withdir.m4 | 0 .../pmix/config/pmix_config_asm.m4 | 0 .../pmix/config/pmix_config_pthreads.m4 | 0 .../pmix/config/pmix_config_subdir.m4 | 0 .../pmix/config/pmix_config_subdir_args.m4 | 0 .../pmix/config/pmix_config_threads.m4 | 0 .../config/pmix_ensure_contains_optflags.m4 | 0 .../pmix/config/pmix_functions.m4 | 0 .../pmix/config/pmix_get_version.sh | 0 .../pmix/config/pmix_load_platform.m4 | 0 .../pmix/config/pmix_mca.m4 | 0 .../pmix/config/pmix_mca_priority_sort.pl | 0 .../pmix/config/pmix_search_libs.m4 | 0 .../pmix/config/pmix_setup_cc.m4 | 0 .../pmix/config/pmix_setup_libevent.m4 | 0 .../pmix/config/pmix_setup_zlib.m4 | 0 .../pmix/config/pmix_try_assemble.m4 | 0 .../pmix/{pmix2x => pmix3x}/pmix/configure.ac | 0 .../pmix/contrib/Makefile.am | 0 .../pmix/contrib/buildrpm.sh | 24 +- .../pmix/contrib/cron-run-all-md2nroff.pl | 0 .../pmix/contrib/make_dist_tarball | 0 .../pmix/contrib/md2nroff.pl | 0 .../pmix/contrib/perf_tools/Makefile | 0 .../pmix/contrib/perf_tools/Makefile.include | 0 .../pmix/contrib/perf_tools/README | 0 .../pmix/contrib/perf_tools/pmi.h | 0 .../pmix/contrib/perf_tools/pmi2.c | 0 .../contrib/perf_tools/pmi2_pmap_parser.c | 0 .../contrib/perf_tools/pmi2_pmap_parser.h | 0 .../pmix/contrib/perf_tools/pmi2_utils.c | 0 .../pmix/contrib/perf_tools/pmi2_utils.h | 0 .../pmix/contrib/perf_tools/pmi_intra_perf.c | 0 .../pmix/contrib/perf_tools/pmix.c | 0 .../pmix/contrib/perf_tools/run.sh | 0 .../pmix/contrib/platform/optimized | 0 .../pmix/contrib/pmix-release.sh | 10 +- .../pmix/contrib/pmix-valgrind.supp | 2 - .../{pmix2x => pmix3x}/pmix/contrib/pmix.spec | 2 +- .../pmix/contrib/pmix_jenkins.sh | 1 - .../pmix/contrib/update-my-copyright.pl | 0 .../pmix/contrib/whitespace-purge.sh | 0 .../{pmix2x => pmix3x}/pmix/etc/Makefile.am | 0 .../pmix/etc/pmix-mca-params.conf | 0 .../pmix/examples/Makefile.am | 0 .../{pmix2x => pmix3x}/pmix/examples/alloc.c | 0 .../{pmix2x => pmix3x}/pmix/examples/client.c | 0 .../pmix/examples/client2.c | 0 .../pmix/examples/debugger.c | 0 .../pmix/examples/debuggerd.c | 0 .../{pmix2x => pmix3x}/pmix/examples/dmodex.c | 0 .../pmix/examples/dynamic.c | 11 +- .../{pmix2x => pmix3x}/pmix/examples/fault.c | 0 .../{pmix2x => pmix3x}/pmix/examples/jctrl.c | 0 .../{pmix2x => pmix3x}/pmix/examples/pub.c | 0 .../{pmix2x => pmix3x}/pmix/examples/server.c | 10 +- .../{pmix2x => pmix3x}/pmix/examples/tool.c | 0 .../pmix/include/Makefile.am | 0 .../{pmix2x => pmix3x}/pmix/include/pmi.h | 0 .../{pmix2x => pmix3x}/pmix/include/pmi2.h | 0 .../{pmix2x => pmix3x}/pmix/include/pmix.h | 67 +- .../pmix/include/pmix_common.h | 25 + .../pmix/include/pmix_rename.h.in | 0 .../pmix/include/pmix_server.h | 66 +- .../pmix/include/pmix_tool.h | 0 .../pmix/include/pmix_version.h.in | 0 .../{pmix2x => pmix3x}/pmix/man/Makefile.am | 0 .../pmix/{pmix2x => pmix3x}/pmix/man/README | 0 .../pmix/man/man3/pmix_abort.3 | 0 .../pmix/man/man3/pmix_commit.3 | 0 .../pmix/man/man3/pmix_finalize.3 | 0 .../pmix/man/man3/pmix_init.3 | 0 .../pmix/man/man3/pmix_initialized.3 | 0 .../pmix/man/man3/pmix_put.3 | 0 .../{pmix2x => pmix3x}/pmix/man/man7/pmix.7 | 0 .../pmix/man/man7/pmix_constants.7 | 0 .../{pmix2x => pmix3x}/pmix/src/Makefile.am | 0 .../pmix/src/atomics/sys/Makefile.include | 0 .../pmix/src/atomics/sys/architecture.h | 0 .../pmix/src/atomics/sys/arm/Makefile.include | 0 .../pmix/src/atomics/sys/arm/atomic.h | 0 .../pmix/src/atomics/sys/arm/timer.h | 0 .../src/atomics/sys/arm64/Makefile.include | 0 .../pmix/src/atomics/sys/arm64/atomic.h | 0 .../pmix/src/atomics/sys/arm64/timer.h | 0 .../pmix/src/atomics/sys/atomic.h | 0 .../pmix/src/atomics/sys/atomic_impl.h | 0 .../pmix/src/atomics/sys/cma.h | 0 .../atomics/sys/gcc_builtin/Makefile.include | 0 .../pmix/src/atomics/sys/gcc_builtin/atomic.h | 0 .../src/atomics/sys/ia32/Makefile.include | 0 .../pmix/src/atomics/sys/ia32/atomic.h | 0 .../pmix/src/atomics/sys/ia32/timer.h | 0 .../src/atomics/sys/ia64/Makefile.include | 0 .../pmix/src/atomics/sys/ia64/atomic.h | 0 .../pmix/src/atomics/sys/ia64/timer.h | 0 .../src/atomics/sys/mips/Makefile.include | 0 .../pmix/src/atomics/sys/mips/atomic.h | 0 .../pmix/src/atomics/sys/mips/timer.h | 0 .../src/atomics/sys/powerpc/Makefile.include | 0 .../pmix/src/atomics/sys/powerpc/atomic.h | 0 .../pmix/src/atomics/sys/powerpc/timer.h | 0 .../src/atomics/sys/sparcv9/Makefile.include | 0 .../pmix/src/atomics/sys/sparcv9/atomic.h | 0 .../pmix/src/atomics/sys/sparcv9/timer.h | 0 .../atomics/sys/sync_builtin/Makefile.include | 0 .../src/atomics/sys/sync_builtin/atomic.h | 0 .../pmix/src/atomics/sys/timer.h | 0 .../src/atomics/sys/x86_64/Makefile.include | 0 .../pmix/src/atomics/sys/x86_64/atomic.h | 0 .../pmix/src/atomics/sys/x86_64/timer.h | 0 .../pmix/src/class/Makefile.include | 0 .../pmix/src/class/pmix_hash_table.c | 0 .../pmix/src/class/pmix_hash_table.h | 0 .../pmix/src/class/pmix_hotel.c | 0 .../pmix/src/class/pmix_hotel.h | 0 .../pmix/src/class/pmix_list.c | 0 .../pmix/src/class/pmix_list.h | 0 .../pmix/src/class/pmix_object.c | 0 .../pmix/src/class/pmix_object.h | 0 .../pmix/src/class/pmix_pointer_array.c | 0 .../pmix/src/class/pmix_pointer_array.h | 0 .../pmix/src/class/pmix_ring_buffer.c | 0 .../pmix/src/class/pmix_ring_buffer.h | 0 .../pmix/src/class/pmix_value_array.c | 0 .../pmix/src/class/pmix_value_array.h | 0 .../pmix/src/client/Makefile.include | 0 .../{pmix2x => pmix3x}/pmix/src/client/pmi1.c | 0 .../{pmix2x => pmix3x}/pmix/src/client/pmi2.c | 13 +- .../pmix/src/client/pmix_client.c | 0 .../pmix/src/client/pmix_client_connect.c | 156 +- .../pmix/src/client/pmix_client_fence.c | 0 .../pmix/src/client/pmix_client_get.c | 0 .../pmix/src/client/pmix_client_ops.h | 0 .../pmix/src/client/pmix_client_pub.c | 0 .../pmix/src/client/pmix_client_spawn.c | 0 .../pmix/src/common/Makefile.include | 0 .../pmix/src/common/pmix_control.c | 0 .../pmix/src/common/pmix_data.c | 0 .../pmix/src/common/pmix_log.c | 0 .../pmix/src/common/pmix_query.c | 0 .../pmix/src/common/pmix_strings.c | 0 .../pmix/src/event/Makefile.include | 0 .../pmix/src/event/pmix_event.h | 0 .../pmix/src/event/pmix_event_notification.c | 0 .../pmix/src/event/pmix_event_registration.c | 0 .../pmix/src/include/Makefile.include | 0 .../pmix/src/include/align.h | 0 .../pmix/src/include/hash_string.h | 0 .../pmix/src/include/pmix_config_bottom.h | 0 .../pmix/src/include/pmix_config_top.h | 0 .../pmix/src/include/pmix_globals.c | 0 .../pmix/src/include/pmix_globals.h | 3 + .../pmix/src/include/pmix_socket_errno.h | 0 .../pmix/src/include/pmix_stdint.h | 0 .../pmix/src/include/prefetch.h | 0 .../pmix/src/include/types.h | 0 .../pmix/src/mca/Makefile.include | 0 .../pmix/src/mca/base/Makefile.am | 0 .../pmix/src/mca/base/base.h | 0 .../pmix/src/mca/base/help-mca-base.txt | 0 .../pmix/src/mca/base/help-mca-var.txt | 0 .../pmix/src/mca/base/pmix_mca_base_close.c | 0 .../base/pmix_mca_base_component_compare.c | 0 .../mca/base/pmix_mca_base_component_find.c | 0 .../base/pmix_mca_base_component_repository.c | 0 .../base/pmix_mca_base_component_repository.h | 0 .../mca/base/pmix_mca_base_components_close.c | 0 .../mca/base/pmix_mca_base_components_open.c | 0 .../base/pmix_mca_base_components_register.c | 0 .../base/pmix_mca_base_components_select.c | 0 .../src/mca/base/pmix_mca_base_framework.c | 0 .../src/mca/base/pmix_mca_base_framework.h | 0 .../pmix/src/mca/base/pmix_mca_base_list.c | 0 .../pmix/src/mca/base/pmix_mca_base_open.c | 0 .../mca/base/pmix_mca_base_parse_paramfile.c | 0 .../pmix/src/mca/base/pmix_mca_base_var.c | 0 .../pmix/src/mca/base/pmix_mca_base_var.h | 0 .../src/mca/base/pmix_mca_base_var_enum.c | 0 .../src/mca/base/pmix_mca_base_var_enum.h | 0 .../src/mca/base/pmix_mca_base_var_group.c | 0 .../src/mca/base/pmix_mca_base_var_group.h | 0 .../pmix/src/mca/base/pmix_mca_base_vari.h | 0 .../pmix/src/mca/bfrops/Makefile.am | 0 .../pmix/src/mca/bfrops/base/Makefile.include | 0 .../pmix/src/mca/bfrops/base/base.h | 0 .../src/mca/bfrops/base/bfrop_base_copy.c | 0 .../pmix/src/mca/bfrops/base/bfrop_base_fns.c | 0 .../src/mca/bfrops/base/bfrop_base_frame.c | 0 .../src/mca/bfrops/base/bfrop_base_pack.c | 0 .../src/mca/bfrops/base/bfrop_base_print.c | 0 .../src/mca/bfrops/base/bfrop_base_select.c | 0 .../src/mca/bfrops/base/bfrop_base_stubs.c | 0 .../src/mca/bfrops/base/bfrop_base_unpack.c | 0 .../pmix/src/mca/bfrops/bfrops.h | 0 .../pmix/src/mca/bfrops/bfrops_types.h | 0 .../pmix/src/mca/bfrops/v12/Makefile.am | 0 .../pmix/src/mca/bfrops/v12/bfrop_v12.c | 0 .../pmix/src/mca/bfrops/v12/bfrop_v12.h | 0 .../src/mca/bfrops/v12/bfrop_v12_component.c | 0 .../pmix/src/mca/bfrops/v12/copy.c | 0 .../pmix/src/mca/bfrops/v12/internal.h | 0 .../pmix/src/mca/bfrops/v12/pack.c | 0 .../pmix/src/mca/bfrops/v12/print.c | 0 .../pmix/src/mca/bfrops/v12/unpack.c | 0 .../pmix/src/mca/bfrops/v20/Makefile.am | 0 .../pmix/src/mca/bfrops/v20/bfrop_pmix20.c | 0 .../pmix/src/mca/bfrops/v20/bfrop_pmix20.h | 0 .../mca/bfrops/v20/bfrop_pmix20_component.c | 0 .../pmix/src/mca/bfrops/v20/copy.c | 0 .../pmix/src/mca/bfrops/v20/internal.h | 0 .../pmix/src/mca/bfrops/v20/pack.c | 0 .../pmix/src/mca/bfrops/v20/print.c | 0 .../pmix/src/mca/bfrops/v20/unpack.c | 0 .../pmix/src/mca/bfrops/v21/Makefile.am | 0 .../pmix/src/mca/bfrops/v21/bfrop_pmix21.c | 0 .../pmix/src/mca/bfrops/v21/bfrop_pmix21.h | 0 .../mca/bfrops/v21/bfrop_pmix21_component.c | 0 .../pmix/src/mca/gds/Makefile.am | 0 .../pmix/src/mca/gds/base/Makefile.include | 0 .../pmix/src/mca/gds/base/base.h | 0 .../pmix/src/mca/gds/base/gds_base_fns.c | 0 .../pmix/src/mca/gds/base/gds_base_frame.c | 0 .../pmix/src/mca/gds/base/gds_base_select.c | 0 .../pmix/src/mca/gds/ds12/Makefile.am | 0 .../pmix/src/mca/gds/ds12/gds_dstore.c | 0 .../pmix/src/mca/gds/ds12/gds_dstore.h | 0 .../src/mca/gds/ds12/gds_dstore_component.c | 0 .../{pmix2x => pmix3x}/pmix/src/mca/gds/gds.h | 0 .../pmix/src/mca/gds/hash/Makefile.am | 0 .../pmix/src/mca/gds/hash/gds_hash.c | 0 .../pmix/src/mca/gds/hash/gds_hash.h | 0 .../src/mca/gds/hash/gds_hash_component.c | 0 .../{pmix2x => pmix3x}/pmix/src/mca/mca.h | 0 .../pmix/src/mca/pdl/Makefile.am | 0 .../pmix/src/mca/pdl/base/Makefile.am | 0 .../pmix/src/mca/pdl/base/base.h | 0 .../pmix/src/mca/pdl/base/pdl_base_close.c | 0 .../pmix/src/mca/pdl/base/pdl_base_fns.c | 0 .../pmix/src/mca/pdl/base/pdl_base_open.c | 0 .../pmix/src/mca/pdl/base/pdl_base_select.c | 0 .../pmix/src/mca/pdl/configure.m4 | 0 .../{pmix2x => pmix3x}/pmix/src/mca/pdl/pdl.h | 0 .../pmix/src/mca/pdl/pdlopen/Makefile.am | 0 .../pmix/src/mca/pdl/pdlopen/configure.m4 | 0 .../pmix/src/mca/pdl/pdlopen/pdl_pdlopen.h | 0 .../mca/pdl/pdlopen/pdl_pdlopen_component.c | 0 .../src/mca/pdl/pdlopen/pdl_pdlopen_module.c | 0 .../pmix/src/mca/pdl/plibltdl/Makefile.am | 0 .../pmix/src/mca/pdl/plibltdl/configure.m4 | 0 .../pmix/src/mca/pdl/plibltdl/pdl_libltdl.h | 0 .../mca/pdl/plibltdl/pdl_libltdl_component.c | 0 .../src/mca/pdl/plibltdl/pdl_libltdl_module.c | 0 .../pmix/src/mca/pif/Makefile.am | 0 .../pmix/src/mca/pif/base/Makefile.am | 0 .../pmix/src/mca/pif/base/base.h | 0 .../src/mca/pif/base/pif_base_components.c | 0 .../pmix/src/mca/pif/bsdx_ipv4/Makefile.am | 0 .../pmix/src/mca/pif/bsdx_ipv4/configure.m4 | 0 .../pmix/src/mca/pif/bsdx_ipv4/pif_bsdx.c | 0 .../pmix/src/mca/pif/bsdx_ipv6/Makefile.am | 0 .../pmix/src/mca/pif/bsdx_ipv6/configure.m4 | 0 .../src/mca/pif/bsdx_ipv6/pif_bsdx_ipv6.c | 0 .../pmix/src/mca/pif/linux_ipv6/Makefile.am | 0 .../pmix/src/mca/pif/linux_ipv6/configure.m4 | 0 .../src/mca/pif/linux_ipv6/pif_linux_ipv6.c | 0 .../{pmix2x => pmix3x}/pmix/src/mca/pif/pif.h | 0 .../pmix/src/mca/pif/posix_ipv4/Makefile.am | 0 .../pmix/src/mca/pif/posix_ipv4/configure.m4 | 0 .../pmix/src/mca/pif/posix_ipv4/pif_posix.c | 0 .../pmix/src/mca/pif/solaris_ipv6/Makefile.am | 0 .../src/mca/pif/solaris_ipv6/configure.m4 | 0 .../mca/pif/solaris_ipv6/pif_solaris_ipv6.c | 0 .../pmix/src/mca/pinstalldirs/Makefile.am | 0 .../src/mca/pinstalldirs/base/Makefile.am | 0 .../pmix/src/mca/pinstalldirs/base/base.h | 0 .../base/pinstalldirs_base_components.c | 0 .../base/pinstalldirs_base_expand.c | 0 .../src/mca/pinstalldirs/config/Makefile.am | 0 .../src/mca/pinstalldirs/config/configure.m4 | 0 .../pinstalldirs/config/pinstall_dirs.h.in | 0 .../config/pmix_pinstalldirs_config.c | 0 .../pmix/src/mca/pinstalldirs/configure.m4 | 0 .../pmix/src/mca/pinstalldirs/env/Makefile.am | 0 .../src/mca/pinstalldirs/env/configure.m4 | 0 .../pinstalldirs/env/pmix_pinstalldirs_env.c | 0 .../pmix/src/mca/pinstalldirs/pinstalldirs.h | 0 .../pmix/src/mca/pnet/Makefile.am | 0 .../pmix/src/mca/pnet/base/Makefile.include | 0 .../pmix/src/mca/pnet/base/base.h | 0 .../pmix/src/mca/pnet/base/pnet_base_fns.c | 0 .../pmix/src/mca/pnet/base/pnet_base_frame.c | 0 .../pmix/src/mca/pnet/base/pnet_base_select.c | 0 .../pmix/src/mca/pnet/opa/Makefile.am | 0 .../pmix/src/mca/pnet/opa/configure.m4 | 0 .../pmix/src/mca/pnet/opa/pnet_opa.c | 0 .../pmix/src/mca/pnet/opa/pnet_opa.h | 0 .../src/mca/pnet/opa/pnet_opa_component.c | 0 .../pmix/src/mca/pnet/pnet.h | 0 .../pmix/src/mca/preg/Makefile.am | 0 .../pmix/src/mca/preg/base/Makefile.include | 0 .../pmix/src/mca/preg/base/base.h | 0 .../pmix/src/mca/preg/base/preg_base_frame.c | 0 .../pmix/src/mca/preg/base/preg_base_select.c | 0 .../pmix/src/mca/preg/base/preg_base_stubs.c | 0 .../pmix/src/mca/preg/native/Makefile.am | 0 .../pmix/src/mca/preg/native/preg_native.c | 0 .../pmix/src/mca/preg/native/preg_native.h | 0 .../mca/preg/native/preg_native_component.c | 0 .../pmix/src/mca/preg/preg.h | 0 .../pmix/src/mca/preg/preg_types.h | 0 .../pmix/src/mca/psec/Makefile.am | 0 .../pmix/src/mca/psec/base/Makefile.include | 0 .../pmix/src/mca/psec/base/base.h | 0 .../pmix/src/mca/psec/base/psec_base_fns.c | 0 .../pmix/src/mca/psec/base/psec_base_frame.c | 0 .../pmix/src/mca/psec/base/psec_base_select.c | 0 .../pmix/src/mca/psec/munge/Makefile.am | 0 .../pmix/src/mca/psec/munge/configure.m4 | 0 .../pmix/src/mca/psec/munge/psec_munge.c | 0 .../pmix/src/mca/psec/munge/psec_munge.h | 0 .../src/mca/psec/munge/psec_munge_component.c | 0 .../pmix/src/mca/psec/native/Makefile.am | 0 .../pmix/src/mca/psec/native/psec_native.c | 0 .../pmix/src/mca/psec/native/psec_native.h | 0 .../mca/psec/native/psec_native_component.c | 0 .../pmix/src/mca/psec/none/Makefile.am | 0 .../pmix/src/mca/psec/none/psec_none.c | 0 .../pmix/src/mca/psec/none/psec_none.h | 0 .../src/mca/psec/none/psec_none_component.c | 0 .../pmix/src/mca/psec/psec.h | 0 .../pmix/src/mca/psensor/Makefile.am | 0 .../pmix/src/mca/psensor/base/Makefile.am | 0 .../pmix/src/mca/psensor/base/base.h | 0 .../src/mca/psensor/base/psensor_base_frame.c | 0 .../mca/psensor/base/psensor_base_select.c | 0 .../src/mca/psensor/base/psensor_base_stubs.c | 0 .../pmix/src/mca/psensor/file/Makefile.am | 0 .../psensor/file/help-pmix-psensor-file.txt | 0 .../pmix/src/mca/psensor/file/psensor_file.c | 0 .../pmix/src/mca/psensor/file/psensor_file.h | 0 .../mca/psensor/file/psensor_file_component.c | 0 .../src/mca/psensor/heartbeat/Makefile.am | 0 .../heartbeat/help-pmix-psensor-heartbeat.txt | 0 .../mca/psensor/heartbeat/psensor_heartbeat.c | 0 .../mca/psensor/heartbeat/psensor_heartbeat.h | 0 .../heartbeat/psensor_heartbeat_component.c | 0 .../pmix/src/mca/psensor/psensor.h | 0 .../pmix/src/mca/pshmem/Makefile.am | 0 .../pmix/src/mca/pshmem/base/Makefile.include | 0 .../pmix/src/mca/pshmem/base/base.h | 0 .../src/mca/pshmem/base/pshmem_base_frame.c | 0 .../src/mca/pshmem/base/pshmem_base_select.c | 0 .../pmix/src/mca/pshmem/mmap/Makefile.am | 0 .../pmix/src/mca/pshmem/mmap/pshmem_mmap.c | 0 .../pmix/src/mca/pshmem/mmap/pshmem_mmap.h | 0 .../mca/pshmem/mmap/pshmem_mmap_component.c | 0 .../pmix/src/mca/pshmem/pshmem.h | 0 .../pmix/src/mca/ptl/Makefile.am | 0 .../pmix/src/mca/ptl/base/Makefile.include | 0 .../pmix/src/mca/ptl/base/base.h | 0 .../pmix/src/mca/ptl/base/ptl_base_connect.c | 0 .../pmix/src/mca/ptl/base/ptl_base_frame.c | 0 .../pmix/src/mca/ptl/base/ptl_base_listener.c | 0 .../pmix/src/mca/ptl/base/ptl_base_select.c | 0 .../pmix/src/mca/ptl/base/ptl_base_sendrecv.c | 0 .../pmix/src/mca/ptl/base/ptl_base_stubs.c | 0 .../{pmix2x => pmix3x}/pmix/src/mca/ptl/ptl.h | 0 .../pmix/src/mca/ptl/ptl_types.h | 0 .../pmix/src/mca/ptl/tcp/Makefile.am | 0 .../pmix/src/mca/ptl/tcp/ptl_tcp.c | 0 .../pmix/src/mca/ptl/tcp/ptl_tcp.h | 0 .../pmix/src/mca/ptl/tcp/ptl_tcp_component.c | 0 .../pmix/src/mca/ptl/usock/Makefile.am | 0 .../pmix/src/mca/ptl/usock/ptl_usock.c | 0 .../pmix/src/mca/ptl/usock/ptl_usock.h | 0 .../src/mca/ptl/usock/ptl_usock_component.c | 0 .../pmix/src/runtime/Makefile.include | 0 .../pmix/src/runtime/help-pmix-runtime.txt | 0 .../pmix/src/runtime/pmix_finalize.c | 0 .../pmix/src/runtime/pmix_init.c | 0 .../pmix/src/runtime/pmix_params.c | 0 .../pmix/src/runtime/pmix_progress_threads.c | 0 .../pmix/src/runtime/pmix_progress_threads.h | 0 .../pmix/src/runtime/pmix_rte.h | 0 .../pmix/src/server/Makefile.include | 0 .../pmix/src/server/help-pmix-server.txt | 0 .../pmix/src/server/pmix_server.c | 161 +- .../pmix/src/server/pmix_server_get.c | 0 .../pmix/src/server/pmix_server_ops.c | 141 +- .../pmix/src/server/pmix_server_ops.h | 8 +- .../pmix/src/threads/Makefile.include | 0 .../pmix/src/threads/mutex.c | 0 .../pmix/src/threads/mutex.h | 0 .../pmix/src/threads/mutex_unix.h | 0 .../pmix/src/threads/thread.c | 0 .../pmix/src/threads/thread_usage.h | 0 .../pmix/src/threads/threads.h | 0 .../{pmix2x => pmix3x}/pmix/src/threads/tsd.h | 0 .../pmix/src/threads/wait_sync.c | 0 .../pmix/src/threads/wait_sync.h | 0 .../pmix/src/tool/Makefile.include | 0 .../pmix/src/tool/pmix_tool.c | 0 .../pmix/src/util/Makefile.include | 0 .../{pmix2x => pmix3x}/pmix/src/util/alfg.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/alfg.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/argv.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/argv.h | 0 .../pmix/src/util/basename.c | 0 .../pmix/src/util/basename.h | 0 .../pmix/src/util/compress.c | 0 .../pmix/src/util/compress.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/crc.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/crc.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/error.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/error.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/fd.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/fd.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/getid.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/getid.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/hash.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/hash.h | 0 .../pmix/src/util/keyval/Makefile.am | 0 .../pmix/src/util/keyval/keyval_lex.h | 0 .../pmix/src/util/keyval/keyval_lex.l | 0 .../pmix/src/util/keyval_parse.c | 0 .../pmix/src/util/keyval_parse.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/net.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/net.h | 0 .../pmix/src/util/os_path.c | 0 .../pmix/src/util/os_path.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/output.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/output.h | 0 .../pmix/src/util/parse_options.c | 0 .../pmix/src/util/parse_options.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/path.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/path.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/pif.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/pif.h | 0 .../pmix/src/util/pmix_environ.c | 0 .../pmix/src/util/pmix_environ.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/printf.c | 0 .../{pmix2x => pmix3x}/pmix/src/util/printf.h | 0 .../pmix/src/util/show_help.c | 0 .../pmix/src/util/show_help.h | 0 .../pmix/src/util/show_help_lex.h | 0 .../pmix/src/util/show_help_lex.l | 0 .../pmix/src/util/strnlen.h | 0 .../pmix/src/util/timings.c | 0 .../pmix/src/util/timings.h | 0 .../{pmix2x => pmix3x}/pmix/src/util/tsd.h | 0 .../{pmix2x => pmix3x}/pmix/test/Makefile.am | 0 .../pmix/{pmix2x => pmix3x}/pmix/test/README | 0 .../{pmix2x => pmix3x}/pmix/test/cli_stages.c | 1 - .../{pmix2x => pmix3x}/pmix/test/cli_stages.h | 2 - .../pmix/test/pmi2_client.c | 0 .../{pmix2x => pmix3x}/pmix/test/pmi_client.c | 0 .../pmix/test/pmix_client.c | 0 .../pmix/test/pmix_client_otheruser.sh | 0 .../{pmix2x => pmix3x}/pmix/test/pmix_regex.c | 0 .../{pmix2x => pmix3x}/pmix/test/pmix_test.c | 0 .../pmix/test/server_callbacks.c | 18 +- .../pmix/test/server_callbacks.h | 6 +- .../pmix/test/simple/Makefile.am | 0 .../pmix/test/simple/simpclient.c | 0 .../pmix/test/simple/simpdie.c | 0 .../pmix/test/simple/simpdmodex.c | 0 .../pmix/test/simple/simpdyn.c | 10 +- .../pmix/test/simple/simpft.c | 0 .../pmix/test/simple/simplegacy.c | 0 .../pmix/test/simple/simppub.c | 0 .../pmix/test/simple/simptest.c | 0 .../pmix/test/simple/simptool.c | 0 .../pmix/pmix3x/pmix/test/simple/test_pmix.c | 67 + .../{pmix2x => pmix3x}/pmix/test/test_cd.c | 66 +- .../{pmix2x => pmix3x}/pmix/test/test_cd.h | 3 +- .../pmix/test/test_common.c | 0 .../pmix/test/test_common.h | 0 .../{pmix2x => pmix3x}/pmix/test/test_error.c | 0 .../{pmix2x => pmix3x}/pmix/test/test_error.h | 0 .../{pmix2x => pmix3x}/pmix/test/test_fence.c | 0 .../{pmix2x => pmix3x}/pmix/test/test_fence.h | 0 .../pmix/test/test_internal.c | 0 .../pmix/test/test_internal.h | 0 .../pmix/test/test_publish.c | 0 .../pmix/test/test_publish.h | 0 .../pmix/test/test_replace.c | 0 .../pmix/test/test_replace.h | 0 .../pmix/test/test_resolve_peers.c | 7 +- .../pmix/test/test_resolve_peers.h | 0 .../{pmix2x => pmix3x}/pmix/test/test_spawn.c | 0 .../{pmix2x => pmix3x}/pmix/test/test_spawn.h | 0 .../pmix/{pmix2x => pmix3x}/pmix/test/utils.c | 0 .../pmix/{pmix2x => pmix3x}/pmix/test/utils.h | 0 .../pmix/{pmix2x/pmix2x.c => pmix3x/pmix3x.c} | 327 ++-- .../pmix/{pmix2x/pmix2x.h => pmix3x/pmix3x.h} | 157 +- opal/mca/pmix/pmix3x/pmix3x_client.c | 1648 +++++++++++++++++ .../pmix3x_component.c} | 32 +- .../pmix2x_local.c => pmix3x/pmix3x_local.c} | 6 +- opal/mca/pmix/pmix3x/pmix3x_server_north.c | 1272 +++++++++++++ .../pmix3x_server_south.c} | 124 +- orte/mca/grpcomm/base/grpcomm_base_stubs.c | 5 + orte/test/mpi/intercomm_create.c | 2 - 548 files changed, 7524 insertions(+), 1101 deletions(-) create mode 100644 opal/mca/pmix/ext2x/ext2x.c create mode 100644 opal/mca/pmix/ext2x/ext2x.h rename opal/mca/pmix/{pmix2x/pmix2x_client.c => ext2x/ext2x_client.c} (80%) create mode 100644 opal/mca/pmix/ext2x/ext2x_component.c rename opal/mca/pmix/{pmix2x/pmix2x_server_north.c => ext2x/ext2x_server_north.c} (83%) create mode 100644 opal/mca/pmix/ext2x/ext2x_server_south.c create mode 100644 opal/mca/pmix/ext3x/Makefile.am rename opal/mca/pmix/{pmix2x => ext3x}/common_sym_whitelist.txt (100%) create mode 100644 opal/mca/pmix/ext3x/configure.m4 create mode 100644 opal/mca/pmix/ext3x/ext3x.h create mode 100644 opal/mca/pmix/ext3x/ext3x_local.c rename opal/mca/pmix/{pmix2x/help-pmix-pmix2x.txt => ext3x/help-pmix-ext3x.txt} (100%) delete mode 100644 opal/mca/pmix/pmix2x/Makefile.am delete mode 100644 opal/mca/pmix/pmix2x/pmix/test/simple/test_pmix.c create mode 100644 opal/mca/pmix/pmix3x/Makefile.am rename opal/mca/pmix/{pmix2x => pmix3x}/autogen.subdirs (100%) create mode 100644 opal/mca/pmix/pmix3x/common_sym_whitelist.txt rename opal/mca/pmix/{pmix2x => pmix3x}/configure.m4 (52%) create mode 100644 opal/mca/pmix/pmix3x/help-pmix-pmix3x.txt rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/AUTHORS (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/INSTALL (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/LICENSE (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/NEWS (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/README (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/VERSION (98%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/autogen.pl (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/c_get_alignment.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/distscript.sh (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_attributes.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_broken_qsort.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_compiler_version.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_icc.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_ident.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_lock.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_os_flavors.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_package.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_psm2.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_pthread_pids.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_vendor.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_visibility.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_check_withdir.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_config_asm.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_config_pthreads.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_config_subdir.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_config_subdir_args.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_config_threads.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_ensure_contains_optflags.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_functions.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_get_version.sh (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_load_platform.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_mca.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_mca_priority_sort.pl (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_search_libs.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_setup_cc.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_setup_libevent.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_setup_zlib.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/config/pmix_try_assemble.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/configure.ac (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/buildrpm.sh (93%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/cron-run-all-md2nroff.pl (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/make_dist_tarball (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/md2nroff.pl (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/Makefile (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/README (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/pmi.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/pmi2.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/pmi2_pmap_parser.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/pmi2_pmap_parser.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/pmi2_utils.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/pmi2_utils.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/pmi_intra_perf.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/pmix.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/perf_tools/run.sh (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/platform/optimized (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/pmix-release.sh (88%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/pmix-valgrind.supp (99%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/pmix.spec (99%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/pmix_jenkins.sh (99%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/update-my-copyright.pl (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/contrib/whitespace-purge.sh (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/etc/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/etc/pmix-mca-params.conf (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/alloc.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/client.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/client2.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/debugger.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/debuggerd.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/dmodex.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/dynamic.c (95%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/fault.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/jctrl.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/pub.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/server.c (98%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/examples/tool.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/include/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/include/pmi.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/include/pmi2.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/include/pmix.h (90%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/include/pmix_common.h (98%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/include/pmix_rename.h.in (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/include/pmix_server.h (93%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/include/pmix_tool.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/include/pmix_version.h.in (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/README (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/man3/pmix_abort.3 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/man3/pmix_commit.3 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/man3/pmix_finalize.3 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/man3/pmix_init.3 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/man3/pmix_initialized.3 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/man3/pmix_put.3 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/man7/pmix.7 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/man/man7/pmix_constants.7 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/architecture.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/arm/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/arm/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/arm/timer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/arm64/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/arm64/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/arm64/timer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/atomic_impl.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/cma.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/gcc_builtin/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/gcc_builtin/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/ia32/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/ia32/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/ia32/timer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/ia64/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/ia64/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/ia64/timer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/mips/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/mips/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/mips/timer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/powerpc/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/powerpc/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/powerpc/timer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/sparcv9/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/sparcv9/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/sparcv9/timer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/sync_builtin/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/sync_builtin/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/timer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/x86_64/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/x86_64/atomic.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/atomics/sys/x86_64/timer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_hash_table.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_hash_table.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_hotel.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_hotel.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_list.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_list.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_object.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_object.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_pointer_array.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_pointer_array.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_ring_buffer.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_ring_buffer.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_value_array.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/class/pmix_value_array.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/pmi1.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/pmi2.c (98%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/pmix_client.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/pmix_client_connect.c (74%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/pmix_client_fence.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/pmix_client_get.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/pmix_client_ops.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/pmix_client_pub.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/client/pmix_client_spawn.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/common/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/common/pmix_control.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/common/pmix_data.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/common/pmix_log.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/common/pmix_query.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/common/pmix_strings.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/event/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/event/pmix_event.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/event/pmix_event_notification.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/event/pmix_event_registration.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/align.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/hash_string.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/pmix_config_bottom.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/pmix_config_top.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/pmix_globals.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/pmix_globals.h (99%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/pmix_socket_errno.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/pmix_stdint.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/prefetch.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/include/types.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/help-mca-base.txt (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/help-mca-var.txt (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_close.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_component_compare.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_component_find.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_component_repository.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_component_repository.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_components_close.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_components_open.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_components_register.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_components_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_framework.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_framework.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_list.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_open.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_parse_paramfile.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_var.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_var.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_var_enum.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_var_enum.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_var_group.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_var_group.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/base/pmix_mca_base_vari.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/bfrop_base_copy.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/bfrop_base_fns.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/bfrop_base_frame.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/bfrop_base_pack.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/bfrop_base_print.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/bfrop_base_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/bfrop_base_stubs.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/base/bfrop_base_unpack.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/bfrops.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/bfrops_types.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v12/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v12/bfrop_v12.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v12/bfrop_v12.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v12/bfrop_v12_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v12/copy.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v12/internal.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v12/pack.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v12/print.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v12/unpack.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v20/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v20/bfrop_pmix20.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v20/bfrop_pmix20.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v20/bfrop_pmix20_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v20/copy.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v20/internal.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v20/pack.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v20/print.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v20/unpack.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v21/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v21/bfrop_pmix21.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v21/bfrop_pmix21.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/bfrops/v21/bfrop_pmix21_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/base/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/base/gds_base_fns.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/base/gds_base_frame.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/base/gds_base_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/ds12/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/ds12/gds_dstore.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/ds12/gds_dstore.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/ds12/gds_dstore_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/gds.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/hash/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/hash/gds_hash.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/hash/gds_hash.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/gds/hash/gds_hash_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/mca.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/base/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/base/pdl_base_close.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/base/pdl_base_fns.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/base/pdl_base_open.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/base/pdl_base_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/pdl.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/pdlopen/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/pdlopen/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/pdlopen/pdl_pdlopen.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_module.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/plibltdl/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/plibltdl/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/plibltdl/pdl_libltdl.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/plibltdl/pdl_libltdl_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pdl/plibltdl/pdl_libltdl_module.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/base/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/base/pif_base_components.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/bsdx_ipv4/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/bsdx_ipv4/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/bsdx_ipv4/pif_bsdx.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/bsdx_ipv6/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/bsdx_ipv6/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/bsdx_ipv6/pif_bsdx_ipv6.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/linux_ipv6/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/linux_ipv6/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/linux_ipv6/pif_linux_ipv6.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/pif.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/posix_ipv4/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/posix_ipv4/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/posix_ipv4/pif_posix.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/solaris_ipv6/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/solaris_ipv6/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pif/solaris_ipv6/pif_solaris_ipv6.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/base/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_components.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_expand.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/config/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/config/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h.in (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/config/pmix_pinstalldirs_config.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/env/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/env/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/env/pmix_pinstalldirs_env.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pinstalldirs/pinstalldirs.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/base/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/base/pnet_base_fns.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/base/pnet_base_frame.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/base/pnet_base_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/opa/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/opa/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/opa/pnet_opa.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/opa/pnet_opa.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/opa/pnet_opa_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pnet/pnet.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/base/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/base/preg_base_frame.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/base/preg_base_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/base/preg_base_stubs.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/native/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/native/preg_native.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/native/preg_native.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/native/preg_native_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/preg.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/preg/preg_types.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/base/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/base/psec_base_fns.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/base/psec_base_frame.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/base/psec_base_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/munge/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/munge/configure.m4 (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/munge/psec_munge.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/munge/psec_munge.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/munge/psec_munge_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/native/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/native/psec_native.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/native/psec_native.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/native/psec_native_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/none/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/none/psec_none.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/none/psec_none.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/none/psec_none_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psec/psec.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/base/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/base/psensor_base_frame.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/base/psensor_base_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/base/psensor_base_stubs.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/file/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/file/help-pmix-psensor-file.txt (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/file/psensor_file.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/file/psensor_file.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/file/psensor_file_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/heartbeat/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/heartbeat/help-pmix-psensor-heartbeat.txt (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/heartbeat/psensor_heartbeat_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/psensor/psensor.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/base/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/base/pshmem_base_frame.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/base/pshmem_base_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/mmap/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/mmap/pshmem_mmap.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/mmap/pshmem_mmap.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/mmap/pshmem_mmap_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/pshmem/pshmem.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/base/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/base/base.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/base/ptl_base_connect.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/base/ptl_base_frame.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/base/ptl_base_listener.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/base/ptl_base_select.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/base/ptl_base_sendrecv.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/base/ptl_base_stubs.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/ptl.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/ptl_types.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/tcp/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/tcp/ptl_tcp.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/tcp/ptl_tcp.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/tcp/ptl_tcp_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/usock/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/usock/ptl_usock.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/usock/ptl_usock.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/mca/ptl/usock/ptl_usock_component.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/runtime/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/runtime/help-pmix-runtime.txt (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/runtime/pmix_finalize.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/runtime/pmix_init.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/runtime/pmix_params.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/runtime/pmix_progress_threads.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/runtime/pmix_progress_threads.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/runtime/pmix_rte.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/server/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/server/help-pmix-server.txt (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/server/pmix_server.c (94%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/server/pmix_server_get.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/server/pmix_server_ops.c (94%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/server/pmix_server_ops.h (96%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/mutex.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/mutex.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/mutex_unix.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/thread.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/thread_usage.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/threads.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/tsd.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/wait_sync.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/threads/wait_sync.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/tool/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/tool/pmix_tool.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/Makefile.include (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/alfg.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/alfg.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/argv.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/argv.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/basename.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/basename.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/compress.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/compress.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/crc.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/crc.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/error.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/error.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/fd.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/fd.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/getid.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/getid.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/hash.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/hash.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/keyval/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/keyval/keyval_lex.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/keyval/keyval_lex.l (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/keyval_parse.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/keyval_parse.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/net.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/net.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/os_path.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/os_path.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/output.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/output.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/parse_options.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/parse_options.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/path.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/path.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/pif.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/pif.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/pmix_environ.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/pmix_environ.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/printf.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/printf.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/show_help.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/show_help.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/show_help_lex.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/show_help_lex.l (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/strnlen.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/timings.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/timings.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/src/util/tsd.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/README (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/cli_stages.c (99%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/cli_stages.h (99%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/pmi2_client.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/pmi_client.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/pmix_client.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/pmix_client_otheruser.sh (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/pmix_regex.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/pmix_test.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/server_callbacks.c (95%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/server_callbacks.h (93%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/Makefile.am (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/simpclient.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/simpdie.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/simpdmodex.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/simpdyn.c (96%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/simpft.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/simplegacy.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/simppub.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/simptest.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/simple/simptool.c (100%) create mode 100644 opal/mca/pmix/pmix3x/pmix/test/simple/test_pmix.c rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_cd.c (57%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_cd.h (60%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_common.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_common.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_error.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_error.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_fence.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_fence.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_internal.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_internal.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_publish.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_publish.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_replace.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_replace.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_resolve_peers.c (96%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_resolve_peers.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_spawn.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/test_spawn.h (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/utils.c (100%) rename opal/mca/pmix/{pmix2x => pmix3x}/pmix/test/utils.h (100%) rename opal/mca/pmix/{pmix2x/pmix2x.c => pmix3x/pmix3x.c} (83%) rename opal/mca/pmix/{pmix2x/pmix2x.h => pmix3x/pmix3x.h} (70%) create mode 100644 opal/mca/pmix/pmix3x/pmix3x_client.c rename opal/mca/pmix/{pmix2x/pmix2x_component.c => pmix3x/pmix3x_component.c} (78%) rename opal/mca/pmix/{pmix2x/pmix2x_local.c => pmix3x/pmix3x_local.c} (97%) create mode 100644 opal/mca/pmix/pmix3x/pmix3x_server_north.c rename opal/mca/pmix/{pmix2x/pmix2x_server_south.c => pmix3x/pmix3x_server_south.c} (83%) diff --git a/.gitignore b/.gitignore index 6095ff0629..a5cf6d18b4 100644 --- a/.gitignore +++ b/.gitignore @@ -310,36 +310,30 @@ opal/mca/hwloc/base/static-components.h.new.struct opal/mca/installdirs/config/install_dirs.h -opal/mca/pmix/ext2x/ext2x.c -opal/mca/pmix/ext2x/ext2x.h -opal/mca/pmix/ext2x/ext2x_client.c -opal/mca/pmix/ext2x/ext2x_component.c -opal/mca/pmix/ext2x/ext2x_server_north.c -opal/mca/pmix/ext2x/ext2x_server_south.c opal/mca/pmix/pmix*/pmix/include/pmix/autogen/config.h opal/mca/pmix/pmix*/pmix/include/pmix/autogen/config.h.in opal/mca/pmix/pmix*/pmix/src/include/private/autogen/config.h.in opal/mca/pmix/pmix*/pmix/src/include/private/autogen/config.h -opal/mca/pmix/pmix2x/pmix/src/include/frameworks.h -opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h -opal/mca/pmix/pmix2x/pmix/config/autogen_found_items.m4 -opal/mca/pmix/pmix2x/pmix/src/include/pmix_config.h -opal/mca/pmix/pmix2x/pmix/src/include/pmix_config.h.in -opal/mca/pmix/pmix2x/pmix/include/pmix_rename.h -opal/mca/pmix/pmix2x/pmix/include/pmix_version.h -opal/mca/pmix/pmix2x/pmix/src/util/keyval/keyval_lex.c -opal/mca/pmix/pmix2x/pmix/src/util/show_help_lex.c -opal/mca/pmix/pmix2x/pmix/examples/alloc -opal/mca/pmix/pmix2x/pmix/examples/client -opal/mca/pmix/pmix2x/pmix/examples/debugger -opal/mca/pmix/pmix2x/pmix/examples/debuggerd -opal/mca/pmix/pmix2x/pmix/examples/dmodex -opal/mca/pmix/pmix2x/pmix/examples/dynamic -opal/mca/pmix/pmix2x/pmix/examples/fault -opal/mca/pmix/pmix2x/pmix/examples/jctrl -opal/mca/pmix/pmix2x/pmix/examples/pub -opal/mca/pmix/pmix2x/pmix/examples/server -opal/mca/pmix/pmix2x/pmix/examples/tool +opal/mca/pmix/pmix*/pmix/src/include/frameworks.h +opal/mca/pmix/pmix*/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h +opal/mca/pmix/pmix*/pmix/config/autogen_found_items.m4 +opal/mca/pmix/pmix*/pmix/src/include/pmix_config.h +opal/mca/pmix/pmix*/pmix/src/include/pmix_config.h.in +opal/mca/pmix/pmix*/pmix/include/pmix_rename.h +opal/mca/pmix/pmix*/pmix/include/pmix_version.h +opal/mca/pmix/pmix*/pmix/src/util/keyval/keyval_lex.c +opal/mca/pmix/pmix*/pmix/src/util/show_help_lex.c +opal/mca/pmix/pmix*/pmix/examples/alloc +opal/mca/pmix/pmix*/pmix/examples/client +opal/mca/pmix/pmix*/pmix/examples/debugger +opal/mca/pmix/pmix*/pmix/examples/debuggerd +opal/mca/pmix/pmix*/pmix/examples/dmodex +opal/mca/pmix/pmix*/pmix/examples/dynamic +opal/mca/pmix/pmix*/pmix/examples/fault +opal/mca/pmix/pmix*/pmix/examples/jctrl +opal/mca/pmix/pmix*/pmix/examples/pub +opal/mca/pmix/pmix*/pmix/examples/server +opal/mca/pmix/pmix*/pmix/examples/tool opal/tools/opal-checkpoint/opal-checkpoint opal/tools/opal-checkpoint/opal-checkpoint.1 diff --git a/opal/mca/pmix/ext2x/Makefile.am b/opal/mca/pmix/ext2x/Makefile.am index 4e161c28a7..e527355843 100644 --- a/opal/mca/pmix/ext2x/Makefile.am +++ b/opal/mca/pmix/ext2x/Makefile.am @@ -14,18 +14,16 @@ dist_opaldata_DATA = help-pmix-ext2x.txt sources = \ - ext2x_local.c - -nodist_headers = \ - ext2x.h - -nodist_sources = \ + ext2x_local.c \ ext2x.c \ ext2x_client.c \ ext2x_component.c \ ext2x_server_north.c \ ext2x_server_south.c +headers = \ + ext2x.h + # Make the output library in this directory, and name it either # mca__.la (for DSO builds) or libmca__.la # (for static builds). @@ -38,23 +36,9 @@ component_noinst = libmca_pmix_ext2x.la component_install = endif -# -# Generate ext2x sources from the pmix2x component -# -$(nodist_headers): - pmix2xname=`echo $@ | sed -e s/ext2x/pmix2x/g` ; \ - $(SED) 's/pmix2x/ext2x/g' $(top_srcdir)/opal/mca/pmix/pmix2x/$$pmix2xname > $@ - -$(sources): $(nodist_headers) - -$(nodist_sources): $(nodist_headers) - pmix2xname=`echo $@ | sed -e s/ext2x/pmix2x/g` ; \ - $(SED) 's/pmix2x/ext2x/g' $(top_srcdir)/opal/mca/pmix/pmix2x/$$pmix2xname > $@ - mcacomponentdir = $(opallibdir) mcacomponent_LTLIBRARIES = $(component_install) mca_pmix_ext2x_la_SOURCES = $(sources) -nodist_mca_pmix_ext2x_la_SOURCES = $(nodist_sources) mca_pmix_ext2x_la_CFLAGS = $(opal_pmix_ext2x_CFLAGS) mca_pmix_ext2x_la_CPPFLAGS =$(opal_pmix_ext2x_CPPFLAGS) mca_pmix_ext2x_la_LDFLAGS = -module -avoid-version $(opal_pmix_ext2x_LDFLAGS) @@ -67,6 +51,3 @@ libmca_pmix_ext2x_la_CFLAGS = $(opal_pmix_ext2x_CFLAGS) libmca_pmix_ext2x_la_CPPFLAGS = $(opal_pmix_ext2x_CPPFLAGS) libmca_pmix_ext2x_la_LDFLAGS = -module -avoid-version $(opal_pmix_ext2x_LDFLAGS) libmca_pmix_ext2x_la_LIBADD = $(opal_pmix_ext2x_LIBS) - -clean-local: - $(RM) -f $(nodist_sources) $(nodist_headers) diff --git a/opal/mca/pmix/ext2x/ext2x.c b/opal/mca/pmix/ext2x/ext2x.c new file mode 100644 index 0000000000..39d6ed61ae --- /dev/null +++ b/opal/mca/pmix/ext2x/ext2x.c @@ -0,0 +1,1547 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ +/* + * Copyright (c) 2014-2017 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2017 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * Copyright (c) 2014-2015 Mellanox Technologies, Inc. + * All rights reserved. + * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. + * Copyright (c) 2017 Los Alamos National Security, LLC. All rights + * reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "opal_config.h" +#include "opal/constants.h" +#include "opal/types.h" + +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#include "opal/dss/dss.h" +#include "opal/mca/event/event.h" +#include "opal/mca/hwloc/base/base.h" +#include "opal/runtime/opal.h" +#include "opal/runtime/opal_progress_threads.h" +#include "opal/threads/threads.h" +#include "opal/util/argv.h" +#include "opal/util/error.h" +#include "opal/util/opal_environ.h" +#include "opal/util/output.h" +#include "opal/util/proc.h" +#include "opal/util/show_help.h" + +#include "ext2x.h" +#include "opal/mca/pmix/base/base.h" +#include "opal/mca/pmix/pmix_types.h" + +#include +#include + +/**** C.O.M.M.O.N I.N.T.E.R.F.A.C.E.S ****/ + +/* These are functions used by both client and server to + * access common functions in the embedded PMIx library */ + +static const char *ext2x_get_nspace(opal_jobid_t jobid); +static void ext2x_register_jobid(opal_jobid_t jobid, const char *nspace); +static void register_handler(opal_list_t *event_codes, + opal_list_t *info, + opal_pmix_notification_fn_t evhandler, + opal_pmix_evhandler_reg_cbfunc_t cbfunc, + void *cbdata); +static void deregister_handler(size_t evhandler, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +static int notify_event(int status, + const opal_process_name_t *source, + opal_pmix_data_range_t range, + opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); +static void ext2x_query(opal_list_t *queries, + opal_pmix_info_cbfunc_t cbfunc, void *cbdata); +static void ext2x_log(opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); + +const opal_pmix_base_module_t opal_pmix_ext2x_module = { + /* client APIs */ + .init = ext2x_client_init, + .finalize = ext2x_client_finalize, + .initialized = ext2x_initialized, + .abort = ext2x_abort, + .commit = ext2x_commit, + .fence = ext2x_fence, + .fence_nb = ext2x_fencenb, + .put = ext2x_put, + .get = ext2x_get, + .get_nb = ext2x_getnb, + .publish = ext2x_publish, + .publish_nb = ext2x_publishnb, + .lookup = ext2x_lookup, + .lookup_nb = ext2x_lookupnb, + .unpublish = ext2x_unpublish, + .unpublish_nb = ext2x_unpublishnb, + .spawn = ext2x_spawn, + .spawn_nb = ext2x_spawnnb, + .connect = ext2x_connect, + .connect_nb = ext2x_connectnb, + .disconnect = ext2x_disconnect, + .disconnect_nb = ext2x_disconnectnb, + .resolve_peers = ext2x_resolve_peers, + .resolve_nodes = ext2x_resolve_nodes, + .query = ext2x_query, + .log = ext2x_log, + .allocate = ext2x_allocate, + .job_control = ext2x_job_control, + /* server APIs */ + .server_init = ext2x_server_init, + .server_finalize = ext2x_server_finalize, + .generate_regex = ext2x_server_gen_regex, + .generate_ppn = ext2x_server_gen_ppn, + .server_register_nspace = ext2x_server_register_nspace, + .server_deregister_nspace = ext2x_server_deregister_nspace, + .server_register_client = ext2x_server_register_client, + .server_deregister_client = ext2x_server_deregister_client, + .server_setup_fork = ext2x_server_setup_fork, + .server_dmodex_request = ext2x_server_dmodex, + .server_notify_event = ext2x_server_notify_event, + /* tool APIs */ + .tool_init = ext2x_tool_init, + .tool_finalize = ext2x_tool_fini, + /* utility APIs */ + .get_version = PMIx_Get_version, + .register_evhandler = register_handler, + .deregister_evhandler = deregister_handler, + .notify_event = notify_event, + .store_local = ext2x_store_local, + .get_nspace = ext2x_get_nspace, + .register_jobid = ext2x_register_jobid +}; + +static void opcbfunc(pmix_status_t status, void *cbdata) +{ + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; + + OPAL_ACQUIRE_OBJECT(op); + + if (NULL != op->opcbfunc) { + op->opcbfunc(ext2x_convert_rc(status), op->cbdata); + } + OBJ_RELEASE(op); +} + + +static const char *ext2x_get_nspace(opal_jobid_t jobid) +{ + opal_ext2x_jobid_trkr_t *jptr; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + + OPAL_LIST_FOREACH(jptr, &mca_pmix_ext2x_component.jobids, opal_ext2x_jobid_trkr_t) { + if (jptr->jobid == jobid) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return jptr->nspace; + } + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return NULL; +} + +static void ext2x_register_jobid(opal_jobid_t jobid, const char *nspace) +{ + opal_ext2x_jobid_trkr_t *jptr; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + + /* if we don't already have it, add this to our jobid tracker */ + OPAL_LIST_FOREACH(jptr, &mca_pmix_ext2x_component.jobids, opal_ext2x_jobid_trkr_t) { + if (jptr->jobid == jobid) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return; + } + } + jptr = OBJ_NEW(opal_ext2x_jobid_trkr_t); + (void)strncpy(jptr->nspace, nspace, PMIX_MAX_NSLEN); + jptr->jobid = jobid; + opal_list_append(&mca_pmix_ext2x_component.jobids, &jptr->super); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); +} + +static void event_hdlr_complete(pmix_status_t status, void *cbdata) +{ + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; + + OBJ_RELEASE(op); +} + +static void return_local_event_hdlr(int status, opal_list_t *results, + opal_pmix_op_cbfunc_t cbfunc, void *thiscbdata, + void *notification_cbdata) +{ + ext2x_threadshift_t *cd = (ext2x_threadshift_t*)notification_cbdata; + ext2x_opcaddy_t *op; + opal_value_t *kv; + pmix_status_t pstatus; + size_t n; + + OPAL_ACQUIRE_OBJECT(cd); + if (NULL != cd->pmixcbfunc) { + op = OBJ_NEW(ext2x_opcaddy_t); + + if (NULL != results && 0 < (op->ninfo = opal_list_get_size(results))) { + /* convert the list of results to an array of info */ + PMIX_INFO_CREATE(op->info, op->ninfo); + n=0; + OPAL_LIST_FOREACH(kv, cd->info, opal_value_t) { + (void)strncpy(op->info[n].key, kv->key, PMIX_MAX_KEYLEN); + ext2x_value_load(&op->info[n].value, kv); + ++n; + } + } + /* convert the status */ + pstatus = ext2x_convert_opalrc(status); + /* call the library's callback function */ + cd->pmixcbfunc(pstatus, op->info, op->ninfo, event_hdlr_complete, op, cd->cbdata); + } + + /* release the threadshift object */ + if (NULL != cd->info) { + OPAL_LIST_RELEASE(cd->info); + } + OBJ_RELEASE(cd); + + /* release the caller */ + if (NULL != cbfunc) { + cbfunc(OPAL_SUCCESS, thiscbdata); + } +} + +/* this function will be called by the PMIx client library + * whenever it receives notification of an event. The + * notification can come from an ORTE daemon (when launched + * by mpirun), directly from a RM (when direct launched), or + * from another process (via the local daemon). + * The call will occur in the PMIx event base */ +void ext2x_event_hdlr(size_t evhdlr_registration_id, + pmix_status_t status, const pmix_proc_t *source, + pmix_info_t info[], size_t ninfo, + pmix_info_t results[], size_t nresults, + pmix_event_notification_cbfunc_fn_t cbfunc, + void *cbdata) +{ + ext2x_threadshift_t *cd; + int rc; + opal_value_t *iptr; + size_t n; + opal_ext2x_event_t *event; + + opal_output_verbose(2, opal_pmix_base_framework.framework_output, + "%s RECEIVED NOTIFICATION OF STATUS %d", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), status); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + + cd = OBJ_NEW(ext2x_threadshift_t); + cd->id = evhdlr_registration_id; + cd->pmixcbfunc = cbfunc; + cd->cbdata = cbdata; + + /* convert the incoming status */ + cd->status = ext2x_convert_rc(status); + opal_output_verbose(2, opal_pmix_base_framework.framework_output, + "%s CONVERTED STATUS %d TO STATUS %d", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), status, cd->status); + + /* convert the nspace/rank to an opal_process_name_t */ + if (NULL == source) { + cd->pname.jobid = OPAL_NAME_INVALID->jobid; + cd->pname.vpid = OPAL_NAME_INVALID->vpid; + } else { + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&cd->pname.jobid, source->nspace))) { + OPAL_ERROR_LOG(rc); + cd->pname.jobid = OPAL_NAME_INVALID->jobid; + } + cd->pname.vpid = ext2x_convert_rank(source->rank); + } + + /* convert the array of info */ + if (NULL != info) { + cd->info = OBJ_NEW(opal_list_t); + for (n=0; n < ninfo; n++) { + iptr = OBJ_NEW(opal_value_t); + iptr->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = ext2x_value_unload(iptr, &info[n].value))) { + OPAL_ERROR_LOG(rc); + OBJ_RELEASE(iptr); + continue; + } + opal_list_append(cd->info, &iptr->super); + } + } + + /* convert the array of prior results */ + if (NULL != results) { + for (n=0; n < nresults; n++) { + iptr = OBJ_NEW(opal_value_t); + iptr->key = strdup(results[n].key); + if (OPAL_SUCCESS != (rc = ext2x_value_unload(iptr, &results[n].value))) { + OPAL_ERROR_LOG(rc); + OBJ_RELEASE(iptr); + continue; + } + opal_list_append(&cd->results, &iptr->super); + } + } + + /* cycle thru the registrations */ + OPAL_LIST_FOREACH(event, &mca_pmix_ext2x_component.events, opal_ext2x_event_t) { + if (evhdlr_registration_id == event->index) { + /* found it - invoke the handler, pointing its + * callback function to our callback function */ + opal_output_verbose(2, opal_pmix_base_framework.framework_output, + "%s _EVENT_HDLR CALLING EVHDLR", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME)); + if (NULL != event->handler) { + OBJ_RETAIN(event); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + event->handler(cd->status, &cd->pname, + cd->info, &cd->results, + return_local_event_hdlr, cd); + OBJ_RELEASE(event); + return; + } + } + } + + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* if we didn't find a match, we still have to call their final callback */ + if (NULL != cbfunc) { + cbfunc(PMIX_SUCCESS, NULL, 0, NULL, NULL, cbdata); + } + OPAL_LIST_RELEASE(cd->info); + OBJ_RELEASE(cd); + return; +} + +opal_vpid_t ext2x_convert_rank(pmix_rank_t rank) +{ + switch(rank) { + case PMIX_RANK_UNDEF: + return OPAL_VPID_INVALID; + case PMIX_RANK_WILDCARD: + return OPAL_VPID_WILDCARD; + default: + return (opal_vpid_t)rank; + } +} + +pmix_rank_t ext2x_convert_opalrank(opal_vpid_t vpid) +{ + switch(vpid) { + case OPAL_VPID_WILDCARD: + return PMIX_RANK_WILDCARD; + case OPAL_VPID_INVALID: + return PMIX_RANK_UNDEF; + default: + return (pmix_rank_t)vpid; + } +} + +pmix_status_t ext2x_convert_opalrc(int rc) +{ + switch (rc) { + case OPAL_ERR_DEBUGGER_RELEASE: + return PMIX_ERR_DEBUGGER_RELEASE; + + case OPAL_ERR_HANDLERS_COMPLETE: + return PMIX_EVENT_ACTION_COMPLETE; + + case OPAL_ERR_PROC_ABORTED: + return PMIX_ERR_PROC_ABORTED; + + case OPAL_ERR_PROC_REQUESTED_ABORT: + return PMIX_ERR_PROC_REQUESTED_ABORT; + + case OPAL_ERR_PROC_ABORTING: + return PMIX_ERR_PROC_ABORTING; + + case OPAL_ERR_NODE_DOWN: + return PMIX_ERR_NODE_DOWN; + + case OPAL_ERR_NODE_OFFLINE: + return PMIX_ERR_NODE_OFFLINE; + + case OPAL_ERR_JOB_TERMINATED: + return PMIX_ERR_JOB_TERMINATED; + + case OPAL_ERR_PROC_RESTART: + return PMIX_ERR_PROC_RESTART; + + case OPAL_ERR_PROC_CHECKPOINT: + return PMIX_ERR_PROC_CHECKPOINT; + + case OPAL_ERR_PROC_MIGRATE: + return PMIX_ERR_PROC_MIGRATE; + + case OPAL_ERR_EVENT_REGISTRATION: + return PMIX_ERR_EVENT_REGISTRATION; + + case OPAL_ERR_NOT_IMPLEMENTED: + case OPAL_ERR_NOT_SUPPORTED: + return PMIX_ERR_NOT_SUPPORTED; + + case OPAL_ERR_NOT_FOUND: + return PMIX_ERR_NOT_FOUND; + + case OPAL_ERR_PERM: + case OPAL_ERR_UNREACH: + case OPAL_ERR_SERVER_NOT_AVAIL: + return PMIX_ERR_UNREACH; + + case OPAL_ERR_BAD_PARAM: + return PMIX_ERR_BAD_PARAM; + + case OPAL_ERR_OUT_OF_RESOURCE: + return PMIX_ERR_OUT_OF_RESOURCE; + + case OPAL_ERR_DATA_VALUE_NOT_FOUND: + return PMIX_ERR_DATA_VALUE_NOT_FOUND; + + case OPAL_ERR_TIMEOUT: + return PMIX_ERR_TIMEOUT; + + case OPAL_ERR_WOULD_BLOCK: + return PMIX_ERR_WOULD_BLOCK; + + case OPAL_EXISTS: + return PMIX_EXISTS; + + case OPAL_ERR_PARTIAL_SUCCESS: + return PMIX_QUERY_PARTIAL_SUCCESS; + + case OPAL_ERR_MODEL_DECLARED: + return PMIX_MODEL_DECLARED; + + case OPAL_ERROR: + return PMIX_ERROR; + case OPAL_SUCCESS: + return PMIX_SUCCESS; + default: + return rc; + } +} + +int ext2x_convert_rc(pmix_status_t rc) +{ + switch (rc) { + case PMIX_ERR_DEBUGGER_RELEASE: + return OPAL_ERR_DEBUGGER_RELEASE; + + case PMIX_EVENT_ACTION_COMPLETE: + return OPAL_ERR_HANDLERS_COMPLETE; + + case PMIX_ERR_PROC_ABORTED: + return OPAL_ERR_PROC_ABORTED; + + case PMIX_ERR_PROC_REQUESTED_ABORT: + return OPAL_ERR_PROC_REQUESTED_ABORT; + + case PMIX_ERR_PROC_ABORTING: + return OPAL_ERR_PROC_ABORTING; + + case PMIX_ERR_NODE_DOWN: + return OPAL_ERR_NODE_DOWN; + + case PMIX_ERR_NODE_OFFLINE: + return OPAL_ERR_NODE_OFFLINE; + + case PMIX_ERR_JOB_TERMINATED: + return OPAL_ERR_JOB_TERMINATED; + + case PMIX_ERR_PROC_RESTART: + return OPAL_ERR_PROC_RESTART; + + case PMIX_ERR_PROC_CHECKPOINT: + return OPAL_ERR_PROC_CHECKPOINT; + + case PMIX_ERR_PROC_MIGRATE: + return OPAL_ERR_PROC_MIGRATE; + + case PMIX_ERR_EVENT_REGISTRATION: + return OPAL_ERR_EVENT_REGISTRATION; + + case PMIX_ERR_NOT_SUPPORTED: + return OPAL_ERR_NOT_SUPPORTED; + + case PMIX_ERR_NOT_FOUND: + return OPAL_ERR_NOT_FOUND; + + case PMIX_ERR_OUT_OF_RESOURCE: + return OPAL_ERR_OUT_OF_RESOURCE; + + case PMIX_ERR_INIT: + return OPAL_ERROR; + + case PMIX_ERR_BAD_PARAM: + return OPAL_ERR_BAD_PARAM; + + case PMIX_ERR_UNREACH: + case PMIX_ERR_NO_PERMISSIONS: + return OPAL_ERR_UNREACH; + + case PMIX_ERR_TIMEOUT: + return OPAL_ERR_TIMEOUT; + + case PMIX_ERR_WOULD_BLOCK: + return OPAL_ERR_WOULD_BLOCK; + + case PMIX_ERR_LOST_CONNECTION_TO_SERVER: + case PMIX_ERR_LOST_PEER_CONNECTION: + case PMIX_ERR_LOST_CONNECTION_TO_CLIENT: + return OPAL_ERR_COMM_FAILURE; + + case PMIX_EXISTS: + return OPAL_EXISTS; + + case PMIX_QUERY_PARTIAL_SUCCESS: + return OPAL_ERR_PARTIAL_SUCCESS; + + case PMIX_MONITOR_HEARTBEAT_ALERT: + return OPAL_ERR_HEARTBEAT_ALERT; + + case PMIX_MONITOR_FILE_ALERT: + return OPAL_ERR_FILE_ALERT; + + case PMIX_MODEL_DECLARED: + return OPAL_ERR_MODEL_DECLARED; + + + case PMIX_ERROR: + return OPAL_ERROR; + case PMIX_SUCCESS: + return OPAL_SUCCESS; + default: + return rc; + } +} + +opal_pmix_scope_t ext2x_convert_scope(pmix_scope_t scope) +{ + switch(scope) { + case PMIX_SCOPE_UNDEF: + return OPAL_PMIX_SCOPE_UNDEF; + case PMIX_LOCAL: + return OPAL_PMIX_LOCAL; + case PMIX_REMOTE: + return OPAL_PMIX_REMOTE; + case PMIX_GLOBAL: + return OPAL_PMIX_GLOBAL; + default: + return OPAL_PMIX_SCOPE_UNDEF; + } +} + +pmix_scope_t ext2x_convert_opalscope(opal_pmix_scope_t scope) { + switch(scope) { + case OPAL_PMIX_LOCAL: + return PMIX_LOCAL; + case OPAL_PMIX_REMOTE: + return PMIX_REMOTE; + case OPAL_PMIX_GLOBAL: + return PMIX_GLOBAL; + default: + return PMIX_SCOPE_UNDEF; + } +} + +pmix_data_range_t ext2x_convert_opalrange(opal_pmix_data_range_t range) { + switch(range) { + case OPAL_PMIX_RANGE_UNDEF: + return PMIX_RANGE_UNDEF; + case OPAL_PMIX_RANGE_LOCAL: + return PMIX_RANGE_LOCAL; + case OPAL_PMIX_RANGE_NAMESPACE: + return PMIX_RANGE_NAMESPACE; + case OPAL_PMIX_RANGE_SESSION: + return PMIX_RANGE_SESSION; + case OPAL_PMIX_RANGE_GLOBAL: + return PMIX_RANGE_GLOBAL; + case OPAL_PMIX_RANGE_CUSTOM: + return PMIX_RANGE_CUSTOM; + default: + return PMIX_SCOPE_UNDEF; + } +} + +opal_pmix_data_range_t ext2x_convert_range(pmix_data_range_t range) { + switch(range) { + case PMIX_RANGE_UNDEF: + return OPAL_PMIX_RANGE_UNDEF; + case PMIX_RANGE_LOCAL: + return OPAL_PMIX_RANGE_LOCAL; + case PMIX_RANGE_NAMESPACE: + return OPAL_PMIX_RANGE_NAMESPACE; + case PMIX_RANGE_SESSION: + return OPAL_PMIX_RANGE_SESSION; + case PMIX_RANGE_GLOBAL: + return OPAL_PMIX_RANGE_GLOBAL; + case PMIX_RANGE_CUSTOM: + return OPAL_PMIX_RANGE_CUSTOM; + default: + return OPAL_PMIX_RANGE_UNDEF; + } +} + +opal_pmix_persistence_t ext2x_convert_persist(pmix_persistence_t persist) +{ + switch(persist) { + case PMIX_PERSIST_INDEF: + return OPAL_PMIX_PERSIST_INDEF; + case PMIX_PERSIST_FIRST_READ: + return OPAL_PMIX_PERSIST_FIRST_READ; + case PMIX_PERSIST_PROC: + return OPAL_PMIX_PERSIST_PROC; + case PMIX_PERSIST_APP: + return OPAL_PMIX_PERSIST_APP; + case PMIX_PERSIST_SESSION: + return OPAL_PMIX_PERSIST_SESSION; + default: + return OPAL_PMIX_PERSIST_INDEF; + } +} + +pmix_persistence_t ext2x_convert_opalpersist(opal_pmix_persistence_t persist) +{ + switch(persist) { + case OPAL_PMIX_PERSIST_INDEF: + return PMIX_PERSIST_INDEF; + case OPAL_PMIX_PERSIST_FIRST_READ: + return PMIX_PERSIST_FIRST_READ; + case OPAL_PMIX_PERSIST_PROC: + return PMIX_PERSIST_PROC; + case OPAL_PMIX_PERSIST_APP: + return PMIX_PERSIST_APP; + case OPAL_PMIX_PERSIST_SESSION: + return PMIX_PERSIST_SESSION; + default: + return PMIX_PERSIST_INDEF; + } +} + +char* ext2x_convert_jobid(opal_jobid_t jobid) +{ + opal_ext2x_jobid_trkr_t *jptr; + + /* look thru our list of jobids and find the + * corresponding nspace */ + OPAL_LIST_FOREACH(jptr, &mca_pmix_ext2x_component.jobids, opal_ext2x_jobid_trkr_t) { + if (jptr->jobid == jobid) { + return jptr->nspace; + } + } + return NULL; +} + +/**** RHC: NEED TO ADD SUPPORT FOR NEW PMIX DATA TYPES, INCLUDING + **** CONVERSION OF PROC STATES ****/ + +void ext2x_value_load(pmix_value_t *v, + opal_value_t *kv) +{ + opal_ext2x_jobid_trkr_t *job; + bool found; + opal_list_t *list; + opal_value_t *val; + pmix_info_t *info; + size_t n; + + switch(kv->type) { + case OPAL_UNDEF: + v->type = PMIX_UNDEF; + break; + case OPAL_BOOL: + v->type = PMIX_BOOL; + memcpy(&(v->data.flag), &kv->data.flag, 1); + break; + case OPAL_BYTE: + v->type = PMIX_BYTE; + memcpy(&(v->data.byte), &kv->data.byte, 1); + break; + case OPAL_STRING: + v->type = PMIX_STRING; + if (NULL != kv->data.string) { + v->data.string = strdup(kv->data.string); + } else { + v->data.string = NULL; + } + break; + case OPAL_SIZE: + v->type = PMIX_SIZE; + memcpy(&(v->data.size), &kv->data.size, sizeof(size_t)); + break; + case OPAL_PID: + v->type = PMIX_PID; + memcpy(&(v->data.pid), &kv->data.pid, sizeof(pid_t)); + break; + case OPAL_INT: + v->type = PMIX_INT; + memcpy(&(v->data.integer), &kv->data.integer, sizeof(int)); + break; + case OPAL_INT8: + v->type = PMIX_INT8; + memcpy(&(v->data.int8), &kv->data.int8, 1); + break; + case OPAL_INT16: + v->type = PMIX_INT16; + memcpy(&(v->data.int16), &kv->data.int16, 2); + break; + case OPAL_INT32: + v->type = PMIX_INT32; + memcpy(&(v->data.int32), &kv->data.int32, 4); + break; + case OPAL_INT64: + v->type = PMIX_INT64; + memcpy(&(v->data.int64), &kv->data.int64, 8); + break; + case OPAL_UINT: + v->type = PMIX_UINT; + memcpy(&(v->data.uint), &kv->data.uint, sizeof(int)); + break; + case OPAL_UINT8: + v->type = PMIX_UINT8; + memcpy(&(v->data.uint8), &kv->data.uint8, 1); + break; + case OPAL_UINT16: + v->type = PMIX_UINT16; + memcpy(&(v->data.uint16), &kv->data.uint16, 2); + break; + case OPAL_UINT32: + v->type = PMIX_UINT32; + memcpy(&(v->data.uint32), &kv->data.uint32, 4); + break; + case OPAL_UINT64: + v->type = PMIX_UINT64; + memcpy(&(v->data.uint64), &kv->data.uint64, 8); + break; + case OPAL_FLOAT: + v->type = PMIX_FLOAT; + memcpy(&(v->data.fval), &kv->data.fval, sizeof(float)); + break; + case OPAL_DOUBLE: + v->type = PMIX_DOUBLE; + memcpy(&(v->data.dval), &kv->data.dval, sizeof(double)); + break; + case OPAL_TIMEVAL: + v->type = PMIX_TIMEVAL; + memcpy(&(v->data.tv), &kv->data.tv, sizeof(struct timeval)); + break; + case OPAL_TIME: + v->type = PMIX_TIME; + memcpy(&(v->data.time), &kv->data.time, sizeof(time_t)); + break; + case OPAL_STATUS: + v->type = PMIX_STATUS; + v->data.status = ext2x_convert_opalrc(kv->data.status); + break; + case OPAL_VPID: + v->type = PMIX_PROC_RANK; + v->data.rank = ext2x_convert_opalrank(kv->data.name.vpid); + break; + case OPAL_NAME: + v->type = PMIX_PROC; + /* have to stringify the jobid */ + PMIX_PROC_CREATE(v->data.proc, 1); + /* see if this job is in our list of known nspaces */ + found = false; + OPAL_LIST_FOREACH(job, &mca_pmix_ext2x_component.jobids, opal_ext2x_jobid_trkr_t) { + if (job->jobid == kv->data.name.jobid) { + (void)strncpy(v->data.proc->nspace, job->nspace, PMIX_MAX_NSLEN); + found = true; + break; + } + } + if (!found) { + (void)opal_snprintf_jobid(v->data.proc->nspace, PMIX_MAX_NSLEN, kv->data.name.jobid); + } + v->data.proc->rank = ext2x_convert_opalrank(kv->data.name.vpid); + break; + case OPAL_BYTE_OBJECT: + v->type = PMIX_BYTE_OBJECT; + if (NULL != kv->data.bo.bytes) { + v->data.bo.bytes = (char*)malloc(kv->data.bo.size); + memcpy(v->data.bo.bytes, kv->data.bo.bytes, kv->data.bo.size); + v->data.bo.size = (size_t)kv->data.bo.size; + } else { + v->data.bo.bytes = NULL; + v->data.bo.size = 0; + } + break; + case OPAL_PERSIST: + v->type = PMIX_PERSIST; + v->data.persist = ext2x_convert_opalpersist((opal_pmix_persistence_t)kv->data.uint8); + break; + case OPAL_SCOPE: + v->type = PMIX_SCOPE; + v->data.scope = ext2x_convert_opalscope((opal_pmix_scope_t)kv->data.uint8); + break; + case OPAL_DATA_RANGE: + v->type = PMIX_DATA_RANGE; + v->data.range = ext2x_convert_opalrange((opal_pmix_data_range_t)kv->data.uint8); + break; + case OPAL_PROC_STATE: + v->type = PMIX_PROC_STATE; + /* the OPAL layer doesn't have any concept of proc state, + * so the ORTE layer is responsible for converting it */ + memcpy(&v->data.state, &kv->data.uint8, sizeof(uint8_t)); + break; + case OPAL_PTR: + /* if someone returned a pointer, it must be to a list of + * opal_value_t's that we need to convert to a pmix_data_array + * of pmix_info_t structures */ + list = (opal_list_t*)kv->data.ptr; + v->type = PMIX_DATA_ARRAY; + v->data.darray = (pmix_data_array_t*)malloc(sizeof(pmix_data_array_t)); + v->data.darray->type = PMIX_INFO; + v->data.darray->size = opal_list_get_size(list); + if (0 < v->data.darray->size) { + PMIX_INFO_CREATE(info, v->data.darray->size); + v->data.darray->array = info; + n=0; + OPAL_LIST_FOREACH(val, list, opal_value_t) { + (void)strncpy(info[n].key, val->key, PMIX_MAX_KEYLEN); + ext2x_value_load(&info[n].value, val); + ++n; + } + } else { + v->data.darray->array = NULL; + } + break; + default: + /* silence warnings */ + break; + } +} + +int ext2x_value_unload(opal_value_t *kv, + const pmix_value_t *v) +{ + int rc=OPAL_SUCCESS; + bool found; + opal_ext2x_jobid_trkr_t *job; + opal_list_t *lt; + opal_value_t *ival; + size_t n; + + switch(v->type) { + case PMIX_UNDEF: + kv->type = OPAL_UNDEF; + break; + case PMIX_BOOL: + kv->type = OPAL_BOOL; + memcpy(&kv->data.flag, &(v->data.flag), 1); + break; + case PMIX_BYTE: + kv->type = OPAL_BYTE; + memcpy(&kv->data.byte, &(v->data.byte), 1); + break; + case PMIX_STRING: + kv->type = OPAL_STRING; + if (NULL != v->data.string) { + kv->data.string = strdup(v->data.string); + } + break; + case PMIX_SIZE: + kv->type = OPAL_SIZE; + memcpy(&kv->data.size, &(v->data.size), sizeof(size_t)); + break; + case PMIX_PID: + kv->type = OPAL_PID; + memcpy(&kv->data.pid, &(v->data.pid), sizeof(pid_t)); + break; + case PMIX_INT: + kv->type = OPAL_INT; + memcpy(&kv->data.integer, &(v->data.integer), sizeof(int)); + break; + case PMIX_INT8: + kv->type = OPAL_INT8; + memcpy(&kv->data.int8, &(v->data.int8), 1); + break; + case PMIX_INT16: + kv->type = OPAL_INT16; + memcpy(&kv->data.int16, &(v->data.int16), 2); + break; + case PMIX_INT32: + kv->type = OPAL_INT32; + memcpy(&kv->data.int32, &(v->data.int32), 4); + break; + case PMIX_INT64: + kv->type = OPAL_INT64; + memcpy(&kv->data.int64, &(v->data.int64), 8); + break; + case PMIX_UINT: + kv->type = OPAL_UINT; + memcpy(&kv->data.uint, &(v->data.uint), sizeof(int)); + break; + case PMIX_UINT8: + kv->type = OPAL_UINT8; + memcpy(&kv->data.uint8, &(v->data.uint8), 1); + break; + case PMIX_UINT16: + kv->type = OPAL_UINT16; + memcpy(&kv->data.uint16, &(v->data.uint16), 2); + break; + case PMIX_UINT32: + kv->type = OPAL_UINT32; + memcpy(&kv->data.uint32, &(v->data.uint32), 4); + break; + case PMIX_UINT64: + kv->type = OPAL_UINT64; + memcpy(&kv->data.uint64, &(v->data.uint64), 8); + break; + case PMIX_FLOAT: + kv->type = OPAL_FLOAT; + memcpy(&kv->data.fval, &(v->data.fval), sizeof(float)); + break; + case PMIX_DOUBLE: + kv->type = OPAL_DOUBLE; + memcpy(&kv->data.dval, &(v->data.dval), sizeof(double)); + break; + case PMIX_TIMEVAL: + kv->type = OPAL_TIMEVAL; + memcpy(&kv->data.tv, &(v->data.tv), sizeof(struct timeval)); + break; + case PMIX_TIME: + kv->type = OPAL_TIME; + memcpy(&kv->data.time, &(v->data.time), sizeof(time_t)); + break; + case PMIX_STATUS: + kv->type = OPAL_STATUS; + kv->data.status = ext2x_convert_rc(v->data.status); + break; + case PMIX_PROC_RANK: + kv->type = OPAL_VPID; + kv->data.name.vpid = ext2x_convert_rank(v->data.rank); + break; + case PMIX_PROC: + kv->type = OPAL_NAME; + /* see if this job is in our list of known nspaces */ + found = false; + OPAL_LIST_FOREACH(job, &mca_pmix_ext2x_component.jobids, opal_ext2x_jobid_trkr_t) { + if (0 == strncmp(job->nspace, v->data.proc->nspace, PMIX_MAX_NSLEN)) { + kv->data.name.jobid = job->jobid; + found = true; + break; + } + } + if (!found) { + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&kv->data.name.jobid, v->data.proc->nspace))) { + return ext2x_convert_opalrc(rc); + } + } + kv->data.name.vpid = ext2x_convert_rank(v->data.proc->rank); + break; + case PMIX_BYTE_OBJECT: + kv->type = OPAL_BYTE_OBJECT; + if (NULL != v->data.bo.bytes && 0 < v->data.bo.size) { + kv->data.bo.bytes = (uint8_t*)malloc(v->data.bo.size); + memcpy(kv->data.bo.bytes, v->data.bo.bytes, v->data.bo.size); + kv->data.bo.size = (int)v->data.bo.size; + } else { + kv->data.bo.bytes = NULL; + kv->data.bo.size = 0; + } + break; + case PMIX_PERSIST: + kv->type = OPAL_PERSIST; + kv->data.uint8 = ext2x_convert_persist(v->data.persist); + break; + case PMIX_SCOPE: + kv->type = OPAL_SCOPE; + kv->data.uint8 = ext2x_convert_scope(v->data.scope); + break; + case PMIX_DATA_RANGE: + kv->type = OPAL_DATA_RANGE; + kv->data.uint8 = ext2x_convert_range(v->data.range); + break; + case PMIX_PROC_STATE: + kv->type = OPAL_PROC_STATE; + /* the OPAL layer doesn't have any concept of proc state, + * so the ORTE layer is responsible for converting it */ + memcpy(&kv->data.uint8, &v->data.state, sizeof(uint8_t)); + break; + case PMIX_POINTER: + kv->type = OPAL_PTR; + kv->data.ptr = v->data.ptr; + break; + case PMIX_DATA_ARRAY: + if (NULL == v->data.darray || NULL == v->data.darray->array) { + kv->data.ptr = NULL; + break; + } + lt = OBJ_NEW(opal_list_t); + kv->type = OPAL_PTR; + kv->data.ptr = (void*)lt; + for (n=0; n < v->data.darray->size; n++) { + ival = OBJ_NEW(opal_value_t); + opal_list_append(lt, &ival->super); + /* handle the various types */ + if (PMIX_INFO == v->data.darray->type) { + pmix_info_t *iptr = (pmix_info_t*)v->data.darray->array; + ival->key = strdup(iptr[n].key); + rc = ext2x_value_unload(ival, &iptr[n].value); + if (OPAL_SUCCESS != rc) { + OPAL_LIST_RELEASE(lt); + kv->type = OPAL_UNDEF; + kv->data.ptr = NULL; + break; + } + } + } + break; + default: + /* silence warnings */ + rc = OPAL_ERROR; + break; + } + return rc; +} + +static void errreg_cbfunc (pmix_status_t status, + size_t errhandler_ref, + void *cbdata) +{ + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; + + OPAL_ACQUIRE_OBJECT(op); + op->event->index = errhandler_ref; + opal_output_verbose(5, opal_pmix_base_framework.framework_output, + "PMIX2x errreg_cbfunc - error handler registered status=%d, reference=%lu", + status, (unsigned long)errhandler_ref); + if (NULL != op->evregcbfunc) { + op->evregcbfunc(ext2x_convert_rc(status), errhandler_ref, op->cbdata); + } + OBJ_RELEASE(op); +} + +static void register_handler(opal_list_t *event_codes, + opal_list_t *info, + opal_pmix_notification_fn_t evhandler, + opal_pmix_evhandler_reg_cbfunc_t cbfunc, + void *cbdata) +{ + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; + size_t n; + opal_value_t *kv; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + if (NULL != cbfunc) { + cbfunc(OPAL_ERR_NOT_INITIALIZED, 0, cbdata); + } + return; + } + + op = OBJ_NEW(ext2x_opcaddy_t); + op->evregcbfunc = cbfunc; + op->cbdata = cbdata; + + /* convert the event codes */ + if (NULL != event_codes) { + op->ncodes = opal_list_get_size(event_codes); + op->pcodes = (pmix_status_t*)malloc(op->ncodes * sizeof(pmix_status_t)); + n=0; + OPAL_LIST_FOREACH(kv, event_codes, opal_value_t) { + op->pcodes[n] = ext2x_convert_opalrc(kv->data.integer); + ++n; + } + } + + /* convert the list of info to an array of pmix_info_t */ + if (NULL != info && 0 < (op->ninfo = opal_list_get_size(info))) { + PMIX_INFO_CREATE(op->info, op->ninfo); + n=0; + OPAL_LIST_FOREACH(kv, info, opal_value_t) { + (void)strncpy(op->info[n].key, kv->key, PMIX_MAX_KEYLEN); + ext2x_value_load(&op->info[n].value, kv); + ++n; + } + } + + /* register the event */ + op->event = OBJ_NEW(opal_ext2x_event_t); + op->event->handler = evhandler; + opal_list_append(&mca_pmix_ext2x_component.events, &op->event->super); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + PMIx_Register_event_handler(op->pcodes, op->ncodes, + op->info, op->ninfo, + ext2x_event_hdlr, errreg_cbfunc, op); + return; +} + +static void deregister_handler(size_t evhandler, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata) +{ + ext2x_opcaddy_t *op; + opal_ext2x_event_t *event; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + if (NULL != cbfunc) { + cbfunc(OPAL_ERR_NOT_INITIALIZED, cbdata); + } + return; + } + + /* look for this event */ + OPAL_LIST_FOREACH(event, &mca_pmix_ext2x_component.events, opal_ext2x_event_t) { + if (evhandler == event->index) { + opal_list_remove_item(&mca_pmix_ext2x_component.events, &event->super); + OBJ_RELEASE(event); + break; + } + } + + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + op = OBJ_NEW(ext2x_opcaddy_t); + op->opcbfunc = cbfunc; + op->cbdata = cbdata; + + /* tell the library to deregister this handler */ + PMIx_Deregister_event_handler(evhandler, opcbfunc, op); + return; +} + +static void notify_complete(pmix_status_t status, void *cbdata) +{ + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; + if (NULL != op->opcbfunc) { + op->opcbfunc(ext2x_convert_rc(status), op->cbdata); + } + OBJ_RELEASE(op); +} + +static int notify_event(int status, + const opal_process_name_t *source, + opal_pmix_data_range_t range, + opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + ext2x_opcaddy_t *op; + opal_value_t *kv; + pmix_proc_t p, *pptr; + pmix_status_t pstatus; + size_t n; + pmix_data_range_t prange; + char *nsptr; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + op = OBJ_NEW(ext2x_opcaddy_t); + op->opcbfunc = cbfunc; + op->cbdata = cbdata; + + /* convert the status */ + pstatus = ext2x_convert_opalrc(status); + + /* convert the source */ + if (NULL == source) { + pptr = NULL; + } else { + if (NULL == (nsptr = ext2x_convert_jobid(source->jobid))) { + OBJ_RELEASE(op); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + (void)strncpy(p.nspace, nsptr, PMIX_MAX_NSLEN); + p.rank = ext2x_convert_opalrank(source->vpid); + pptr = &p; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* convert the range */ + prange = ext2x_convert_opalrange(range); + + /* convert the list of info */ + if (NULL != info && 0 < (op->ninfo = opal_list_get_size(info))) { + PMIX_INFO_CREATE(op->info, op->ninfo); + n=0; + OPAL_LIST_FOREACH(kv, info, opal_value_t) { + (void)strncpy(op->info[n].key, kv->key, PMIX_MAX_KEYLEN); + /* little dicey here as we need to convert a status, if + * provided, and it will be an int coming down to us */ + if (0 == strcmp(kv->key, OPAL_PMIX_JOB_TERM_STATUS)) { + op->info[n].value.type = PMIX_STATUS; + op->info[n].value.data.status = ext2x_convert_opalrc(kv->data.integer); + } else { + ext2x_value_load(&op->info[n].value, kv); + } + ++n; + } + } + + /* ask the library to notify our clients */ + pstatus = PMIx_Notify_event(pstatus, pptr, prange, op->info, op->ninfo, notify_complete, op); + + return ext2x_convert_rc(pstatus); +} + +static void relcbfunc(void *cbdata) +{ + opal_list_t *results = (opal_list_t*)cbdata; + if (NULL != results) { + OPAL_LIST_RELEASE(results); + } +} + +static void infocbfunc(pmix_status_t status, + pmix_info_t *info, size_t ninfo, + void *cbdata, + pmix_release_cbfunc_t release_fn, + void *release_cbdata) +{ + ext2x_opcaddy_t *cd = (ext2x_opcaddy_t*)cbdata; + int rc = OPAL_SUCCESS; + opal_list_t *results = NULL; + opal_value_t *iptr; + size_t n; + + OPAL_ACQUIRE_OBJECT(cd); + + /* convert the array of pmix_info_t to the list of info */ + if (NULL != info) { + results = OBJ_NEW(opal_list_t); + for (n=0; n < ninfo; n++) { + iptr = OBJ_NEW(opal_value_t); + opal_list_append(results, &iptr->super); + iptr->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = ext2x_value_unload(iptr, &info[n].value))) { + OPAL_LIST_RELEASE(results); + results = NULL; + break; + } + } + } + + if (NULL != release_fn) { + release_fn(release_cbdata); + } + + /* return the values to the original requestor */ + if (NULL != cd->qcbfunc) { + cd->qcbfunc(rc, results, cd->cbdata, relcbfunc, results); + } + OBJ_RELEASE(cd); +} + +static void ext2x_query(opal_list_t *queries, + opal_pmix_info_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + opal_value_t *ival; + size_t n, nqueries, nq; + ext2x_opcaddy_t *cd; + pmix_status_t prc; + opal_pmix_query_t *q; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + if (NULL != cbfunc) { + cbfunc(OPAL_ERR_NOT_INITIALIZED, NULL, cbdata, NULL, NULL); + } + return; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* create the caddy */ + cd = OBJ_NEW(ext2x_opcaddy_t); + + /* bozo check */ + if (NULL == queries || 0 == (nqueries = opal_list_get_size(queries))) { + rc = OPAL_ERR_BAD_PARAM; + goto CLEANUP; + } + + /* setup the operation */ + cd->qcbfunc = cbfunc; + cd->cbdata = cbdata; + cd->nqueries = nqueries; + + /* convert the list to an array of query objects */ + PMIX_QUERY_CREATE(cd->queries, cd->nqueries); + n=0; + OPAL_LIST_FOREACH(q, queries, opal_pmix_query_t) { + cd->queries[n].keys = opal_argv_copy(q->keys); + cd->queries[n].nqual = opal_list_get_size(&q->qualifiers); + if (0 < cd->queries[n].nqual) { + PMIX_INFO_CREATE(cd->queries[n].qualifiers, cd->queries[n].nqual); + nq = 0; + OPAL_LIST_FOREACH(ival, &q->qualifiers, opal_value_t) { + (void)strncpy(cd->queries[n].qualifiers[nq].key, ival->key, PMIX_MAX_KEYLEN); + ext2x_value_load(&cd->queries[n].qualifiers[nq].value, ival); + ++nq; + } + } + ++n; + } + + /* pass it down */ + if (PMIX_SUCCESS != (prc = PMIx_Query_info_nb(cd->queries, cd->nqueries, + infocbfunc, cd))) { + /* do not hang! */ + rc = ext2x_convert_rc(prc); + goto CLEANUP; + } + + return; + + CLEANUP: + if (NULL != cbfunc) { + cbfunc(rc, NULL, cbdata, NULL, NULL); + } + OBJ_RELEASE(cd); + return; +} + +static void ext2x_log(opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + opal_value_t *ival; + size_t n, ninfo; + ext2x_opcaddy_t *cd; + pmix_status_t prc; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + if (NULL != cbfunc) { + cbfunc(OPAL_ERR_NOT_INITIALIZED, cbdata); + } + return; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* create the caddy */ + cd = OBJ_NEW(ext2x_opcaddy_t); + + /* bozo check */ + if (NULL == info || 0 == (ninfo = opal_list_get_size(info))) { + rc = OPAL_ERR_BAD_PARAM; + goto CLEANUP; + } + + /* setup the operation */ + cd->opcbfunc = cbfunc; + cd->cbdata = cbdata; + cd->ninfo = ninfo; + + /* convert the list to an array of info objects */ + PMIX_INFO_CREATE(cd->info, cd->ninfo); + n=0; + OPAL_LIST_FOREACH(ival, info, opal_value_t) { + (void)strncpy(cd->info[n].key, ival->key, PMIX_MAX_KEYLEN); + ext2x_value_load(&cd->info[n].value, ival); + ++n; + } + + /* pass it down */ + if (PMIX_SUCCESS != (prc = PMIx_Log_nb(cd->info, cd->ninfo, NULL, 0, + opcbfunc, cd))) { + /* do not hang! */ + rc = ext2x_convert_rc(prc); + goto CLEANUP; + } + + return; + + CLEANUP: + if (NULL != cbfunc) { + cbfunc(rc, cbdata); + } + OBJ_RELEASE(cd); +} + +opal_pmix_alloc_directive_t ext2x_convert_allocdir(pmix_alloc_directive_t dir) +{ + switch (dir) { + case PMIX_ALLOC_NEW: + return OPAL_PMIX_ALLOC_NEW; + case PMIX_ALLOC_EXTEND: + return OPAL_PMIX_ALLOC_EXTEND; + case PMIX_ALLOC_RELEASE: + return OPAL_PMIX_ALLOC_RELEASE; + case PMIX_ALLOC_REAQUIRE: + return OPAL_PMIX_ALLOC_REAQCUIRE; + default: + return OPAL_PMIX_ALLOC_UNDEF; + } +} + +/**** INSTANTIATE INTERNAL CLASSES ****/ +OBJ_CLASS_INSTANCE(opal_ext2x_jobid_trkr_t, + opal_list_item_t, + NULL, NULL); + +static void evcon(opal_ext2x_event_t *p) +{ + OPAL_PMIX_CONSTRUCT_LOCK(&p->lock); + p->handler = NULL; + p->cbdata = NULL; +} +static void evdes(opal_ext2x_event_t *p) +{ + OPAL_PMIX_DESTRUCT_LOCK(&p->lock); +} +OBJ_CLASS_INSTANCE(opal_ext2x_event_t, + opal_list_item_t, + evcon, evdes); + +static void opcon(ext2x_opcaddy_t *p) +{ + memset(&p->p, 0, sizeof(pmix_proc_t)); + p->nspace = NULL; + p->procs = NULL; + p->nprocs = 0; + p->pdata = NULL; + p->npdata = 0; + p->error_procs = NULL; + p->nerror_procs = 0; + p->info = NULL; + p->ninfo = 0; + p->apps = NULL; + p->sz = 0; + OPAL_PMIX_CONSTRUCT_LOCK(&p->lock); + p->codes = NULL; + p->pcodes = NULL; + p->ncodes = 0; + p->queries = NULL; + p->nqueries = 0; + p->event = NULL; + p->opcbfunc = NULL; + p->mdxcbfunc = NULL; + p->valcbfunc = NULL; + p->lkcbfunc = NULL; + p->spcbfunc = NULL; + p->evregcbfunc = NULL; + p->qcbfunc = NULL; + p->cbdata = NULL; +} +static void opdes(ext2x_opcaddy_t *p) +{ + OPAL_PMIX_DESTRUCT_LOCK(&p->lock); + if (NULL != p->nspace) { + free(p->nspace); + } + if (NULL != p->procs) { + PMIX_PROC_FREE(p->procs, p->nprocs); + } + if (NULL != p->pdata) { + PMIX_PDATA_FREE(p->pdata, p->npdata); + } + if (NULL != p->error_procs) { + PMIX_PROC_FREE(p->error_procs, p->nerror_procs); + } + if (NULL != p->info) { + PMIX_INFO_FREE(p->info, p->ninfo); + } + if (NULL != p->apps) { + PMIX_APP_FREE(p->apps, p->sz); + } + if (NULL != p->pcodes) { + free(p->pcodes); + } + if (NULL != p->queries) { + PMIX_QUERY_FREE(p->queries, p->nqueries); + } +} +OBJ_CLASS_INSTANCE(ext2x_opcaddy_t, + opal_object_t, + opcon, opdes); + +static void ocadcon(ext2x_opalcaddy_t *p) +{ + OBJ_CONSTRUCT(&p->procs, opal_list_t); + OBJ_CONSTRUCT(&p->info, opal_list_t); + OBJ_CONSTRUCT(&p->apps, opal_list_t); + p->opcbfunc = NULL; + p->dmdxfunc = NULL; + p->mdxcbfunc = NULL; + p->lkupcbfunc = NULL; + p->spwncbfunc = NULL; + p->cbdata = NULL; + p->odmdxfunc = NULL; + p->infocbfunc = NULL; + p->toolcbfunc = NULL; + p->ocbdata = NULL; +} +static void ocaddes(ext2x_opalcaddy_t *p) +{ + OPAL_LIST_DESTRUCT(&p->procs); + OPAL_LIST_DESTRUCT(&p->info); + OPAL_LIST_DESTRUCT(&p->apps); +} +OBJ_CLASS_INSTANCE(ext2x_opalcaddy_t, + opal_object_t, + ocadcon, ocaddes); + +static void tscon(ext2x_threadshift_t *p) +{ + OPAL_PMIX_CONSTRUCT_LOCK(&p->lock); + p->msg = NULL; + p->strings = NULL; + p->source = NULL; + p->event_codes = NULL; + p->info = NULL; + OBJ_CONSTRUCT(&p->results, opal_list_t); + p->evhandler = NULL; + p->nondefault = false; + p->cbfunc = NULL; + p->opcbfunc = NULL; + p->cbdata = NULL; +} +static void tsdes(ext2x_threadshift_t *p) +{ + OPAL_PMIX_DESTRUCT_LOCK(&p->lock); + if (NULL != p->strings) { + free(p->strings); + } + OPAL_LIST_DESTRUCT(&p->results); +} +OBJ_CLASS_INSTANCE(ext2x_threadshift_t, + opal_object_t, + tscon, tsdes); + +static void dmcon(opal_ext2x_dmx_trkr_t *p) +{ + p->nspace = NULL; + p->cbfunc = NULL; + p->cbdata = NULL; +} +static void dmdes(opal_ext2x_dmx_trkr_t *p) +{ + if (NULL != p->nspace) { + free(p->nspace); + } +} +OBJ_CLASS_INSTANCE(opal_ext2x_dmx_trkr_t, + opal_list_item_t, + dmcon, dmdes); diff --git a/opal/mca/pmix/ext2x/ext2x.h b/opal/mca/pmix/ext2x/ext2x.h new file mode 100644 index 0000000000..45278217e3 --- /dev/null +++ b/opal/mca/pmix/ext2x/ext2x.h @@ -0,0 +1,340 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ +/* + * Copyright (c) 2014-2017 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2015 Mellanox Technologies, Inc. + * All rights reserved. + * Copyright (c) 2016 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 Los Alamos National Security, LLC. All rights + * reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef MCA_PMIX_PMIX2X_H +#define MCA_PMIX_PMIX2X_H + +#include "opal_config.h" + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_SYS_UN_H +#include +#endif + +#include "opal/class/opal_list.h" +#include "opal/mca/mca.h" +#include "opal/mca/event/event.h" +#include "opal/util/proc.h" + +#include "opal/mca/pmix/base/base.h" +#include "pmix_server.h" +#include "pmix_common.h" + +BEGIN_C_DECLS + +#ifdef OPAL_C_HAVE_VISIBILITY +#define PMIX_HAVE_VISIBILITY 1 +#else +#undef PMIX_HAVE_VISIBILITY +#endif + +typedef struct { + opal_pmix_base_component_t super; + opal_list_t jobids; + bool native_launch; + size_t evindex; + opal_list_t events; + int cache_size; + opal_list_t cache; + opal_list_t dmdx; + bool silence_warning; +} mca_pmix_ext2x_component_t; + +OPAL_DECLSPEC extern mca_pmix_ext2x_component_t mca_pmix_ext2x_component; + +OPAL_DECLSPEC extern const opal_pmix_base_module_t opal_pmix_ext2x_module; + +/**** INTERNAL OBJECTS ****/ +typedef struct { + opal_list_item_t super; + opal_jobid_t jobid; + char nspace[PMIX_MAX_NSLEN + 1]; +} opal_ext2x_jobid_trkr_t; +OBJ_CLASS_DECLARATION(opal_ext2x_jobid_trkr_t); + +typedef struct { + opal_list_item_t super; + opal_pmix_lock_t lock; + size_t index; + opal_pmix_notification_fn_t handler; + void *cbdata; +} opal_ext2x_event_t; +OBJ_CLASS_DECLARATION(opal_ext2x_event_t); + +typedef struct { + opal_list_item_t super; + char *nspace; + pmix_modex_cbfunc_t cbfunc; + void *cbdata; +} opal_ext2x_dmx_trkr_t; +OBJ_CLASS_DECLARATION(opal_ext2x_dmx_trkr_t); + +typedef struct { + opal_object_t super; + opal_event_t ev; + pmix_status_t status; + char *nspace; + pmix_proc_t p; + pmix_proc_t *procs; + size_t nprocs; + pmix_pdata_t *pdata; + size_t npdata; + pmix_proc_t *error_procs; + size_t nerror_procs; + pmix_info_t *info; + size_t ninfo; + pmix_app_t *apps; + size_t sz; + opal_pmix_lock_t lock; + opal_list_t *codes; + pmix_status_t *pcodes; + size_t ncodes; + pmix_query_t *queries; + size_t nqueries; + opal_ext2x_event_t *event; + opal_pmix_op_cbfunc_t opcbfunc; + opal_pmix_modex_cbfunc_t mdxcbfunc; + opal_pmix_value_cbfunc_t valcbfunc; + opal_pmix_lookup_cbfunc_t lkcbfunc; + opal_pmix_spawn_cbfunc_t spcbfunc; + opal_pmix_evhandler_reg_cbfunc_t evregcbfunc; + opal_pmix_info_cbfunc_t qcbfunc; + void *cbdata; +} ext2x_opcaddy_t; +OBJ_CLASS_DECLARATION(ext2x_opcaddy_t); + +typedef struct { + opal_object_t super; + opal_list_t procs; + opal_list_t info; + opal_list_t apps; + pmix_op_cbfunc_t opcbfunc; + pmix_dmodex_response_fn_t dmdxfunc; + pmix_modex_cbfunc_t mdxcbfunc; + pmix_lookup_cbfunc_t lkupcbfunc; + pmix_spawn_cbfunc_t spwncbfunc; + pmix_info_cbfunc_t infocbfunc; + pmix_tool_connection_cbfunc_t toolcbfunc; + void *cbdata; + opal_pmix_release_cbfunc_t odmdxfunc; + void *ocbdata; +} ext2x_opalcaddy_t; +OBJ_CLASS_DECLARATION(ext2x_opalcaddy_t); + +typedef struct { + opal_object_t super; + opal_event_t ev; + opal_pmix_lock_t lock; + const char *msg; + char *strings; + size_t id; + int status; + opal_process_name_t pname; + opal_jobid_t jobid; + const opal_process_name_t *source; + opal_pmix_data_range_t range; + bool nondefault; + size_t handler; + opal_value_t *val; + opal_list_t *event_codes; + opal_list_t *info; + opal_list_t results; + opal_pmix_notification_fn_t evhandler; + opal_pmix_evhandler_reg_cbfunc_t cbfunc; + opal_pmix_op_cbfunc_t opcbfunc; + pmix_event_notification_cbfunc_fn_t pmixcbfunc; + opal_pmix_value_cbfunc_t valcbfunc; + opal_pmix_lookup_cbfunc_t lkcbfunc; + void *cbdata; +} ext2x_threadshift_t; +OBJ_CLASS_DECLARATION(ext2x_threadshift_t); + +#define OPAL_PMIX_OP_THREADSHIFT(e, fn, cb, cd) \ + do { \ + ext2x_threadshift_t *_cd; \ + _cd = OBJ_NEW(ext2x_threadshift_t); \ + _cd->handler = (e); \ + _cd->opcbfunc = (cb); \ + _cd->cbdata = (cd); \ + opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase, \ + -1, EV_WRITE, (fn), (_cd)); \ + OPAL_POST_OBJECT(_cd); \ + opal_event_active(&((_cd)->ev), EV_WRITE, 1); \ + } while(0) + +#define OPAL_PMIX_THREADSHIFT(e, i, eh, fn, cb, cd) \ + do { \ + ext2x_threadshift_t *_cd; \ + _cd = OBJ_NEW(ext2x_threadshift_t); \ + _cd->event_codes = (e); \ + _cd->info = (i); \ + _cd->evhandler = (eh); \ + _cd->cbfunc = (cb); \ + _cd->cbdata = (cd); \ + opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase, \ + -1, EV_WRITE, (fn), (_cd)); \ + OPAL_POST_OBJECT(_cd); \ + opal_event_active(&((_cd)->ev), EV_WRITE, 1); \ + } while(0) + +#define OPAL_PMIX_NOTIFY_THREADSHIFT(s, sr, r, i, fn, cb, cd) \ + do { \ + ext2x_threadshift_t *_cd; \ + _cd = OBJ_NEW(ext2x_threadshift_t); \ + _cd->status = (s); \ + _cd->source = (sr); \ + _cd->range = (r); \ + _cd->info = (i); \ + _cd->opcbfunc = (cb); \ + _cd->cbdata = (cd); \ + opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase, \ + -1, EV_WRITE, (fn), (_cd)); \ + OPAL_POST_OBJECT(_cd); \ + opal_event_active(&((_cd)->ev), EV_WRITE, 1); \ + } while(0) + +#define OPAL_PMIX2X_THREADSHIFT(p, cb) \ + do { \ + opal_event_assign(&((p)->ev), opal_pmix_base.evbase, \ + -1, EV_WRITE, (cb), (p)); \ + OPAL_POST_OBJECT(p); \ + opal_event_active(&((p)->ev), EV_WRITE, 1); \ + } while(0) + +/**** CLIENT FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int ext2x_client_init(opal_list_t *ilist); +OPAL_MODULE_DECLSPEC int ext2x_client_finalize(void); +OPAL_MODULE_DECLSPEC int ext2x_initialized(void); +OPAL_MODULE_DECLSPEC int ext2x_abort(int flag, const char *msg, + opal_list_t *procs); +OPAL_MODULE_DECLSPEC int ext2x_commit(void); +OPAL_MODULE_DECLSPEC int ext2x_fence(opal_list_t *procs, int collect_data); +OPAL_MODULE_DECLSPEC int ext2x_fencenb(opal_list_t *procs, int collect_data, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_put(opal_pmix_scope_t scope, + opal_value_t *val); +OPAL_MODULE_DECLSPEC int ext2x_get(const opal_process_name_t *proc, const char *key, + opal_list_t *info, opal_value_t **val); +OPAL_MODULE_DECLSPEC int ext2x_getnb(const opal_process_name_t *proc, const char *key, + opal_list_t *info, + opal_pmix_value_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_publish(opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext2x_publishnb(opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_lookup(opal_list_t *data, opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext2x_lookupnb(char **keys, opal_list_t *info, + opal_pmix_lookup_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_unpublish(char **keys, opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext2x_unpublishnb(char **keys, opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid); +OPAL_MODULE_DECLSPEC int ext2x_spawnnb(opal_list_t *job_info, opal_list_t *apps, + opal_pmix_spawn_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_connect(opal_list_t *procs); +OPAL_MODULE_DECLSPEC int ext2x_connectnb(opal_list_t *procs, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_disconnect(opal_list_t *procs); +OPAL_MODULE_DECLSPEC int ext2x_disconnectnb(opal_list_t *procs, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_resolve_peers(const char *nodename, opal_jobid_t jobid, + opal_list_t *procs); +OPAL_MODULE_DECLSPEC int ext2x_resolve_nodes(opal_jobid_t jobid, char **nodelist); +OPAL_MODULE_DECLSPEC int ext2x_allocate(opal_pmix_alloc_directive_t directive, + opal_list_t *info, + opal_pmix_info_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_job_control(opal_list_t *targets, + opal_list_t *directives, + opal_pmix_info_cbfunc_t cbfunc, void *cbdata); + +/**** TOOL FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int ext2x_tool_init(opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext2x_tool_fini(void); + +/**** COMMON FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int ext2x_store_local(const opal_process_name_t *proc, + opal_value_t *val); + +/**** SERVER SOUTHBOUND FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int ext2x_server_init(opal_pmix_server_module_t *module, + opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext2x_server_finalize(void); +OPAL_MODULE_DECLSPEC int ext2x_server_gen_regex(const char *input, char **regex); +OPAL_MODULE_DECLSPEC int ext2x_server_gen_ppn(const char *input, char **ppn); +OPAL_MODULE_DECLSPEC int ext2x_server_register_nspace(opal_jobid_t jobid, + int nlocalprocs, + opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC void ext2x_server_deregister_nspace(opal_jobid_t jobid, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_server_register_client(const opal_process_name_t *proc, + uid_t uid, gid_t gid, + void *server_object, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC void ext2x_server_deregister_client(const opal_process_name_t *proc, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_server_setup_fork(const opal_process_name_t *proc, char ***env); +OPAL_MODULE_DECLSPEC int ext2x_server_dmodex(const opal_process_name_t *proc, + opal_pmix_modex_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext2x_server_notify_event(int status, + const opal_process_name_t *source, + opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); + + +/**** COMPONENT UTILITY FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int opal_pmix_ext2x_check_evars(void); + +OPAL_MODULE_DECLSPEC void ext2x_event_hdlr(size_t evhdlr_registration_id, + pmix_status_t status, const pmix_proc_t *source, + pmix_info_t info[], size_t ninfo, + pmix_info_t results[], size_t nresults, + pmix_event_notification_cbfunc_fn_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC pmix_status_t ext2x_convert_opalrc(int rc); +OPAL_MODULE_DECLSPEC int ext2x_convert_rc(pmix_status_t rc); + +OPAL_MODULE_DECLSPEC opal_vpid_t ext2x_convert_rank(pmix_rank_t rank); +OPAL_MODULE_DECLSPEC pmix_rank_t ext2x_convert_opalrank(opal_vpid_t vpid); + +OPAL_MODULE_DECLSPEC opal_pmix_scope_t ext2x_convert_scope(pmix_scope_t scope); +OPAL_MODULE_DECLSPEC pmix_scope_t ext2x_convert_opalscope(opal_pmix_scope_t scope); + +OPAL_MODULE_DECLSPEC pmix_data_range_t ext2x_convert_opalrange(opal_pmix_data_range_t range); +OPAL_MODULE_DECLSPEC opal_pmix_data_range_t ext2x_convert_range(pmix_data_range_t range); + +OPAL_MODULE_DECLSPEC opal_pmix_persistence_t ext2x_convert_persist(pmix_persistence_t scope); +OPAL_MODULE_DECLSPEC pmix_persistence_t ext2x_convert_opalpersist(opal_pmix_persistence_t scope); + +OPAL_MODULE_DECLSPEC void ext2x_value_load(pmix_value_t *v, + opal_value_t *kv); +OPAL_MODULE_DECLSPEC int ext2x_value_unload(opal_value_t *kv, + const pmix_value_t *v); + +OPAL_MODULE_DECLSPEC opal_pmix_alloc_directive_t ext2x_convert_allocdir(pmix_alloc_directive_t dir); + +OPAL_MODULE_DECLSPEC char* ext2x_convert_jobid(opal_jobid_t jobid); + +END_C_DECLS + +#endif /* MCA_PMIX_EXTERNAL_H */ diff --git a/opal/mca/pmix/pmix2x/pmix2x_client.c b/opal/mca/pmix/ext2x/ext2x_client.c similarity index 80% rename from opal/mca/pmix/pmix2x/pmix2x_client.c rename to opal/mca/pmix/ext2x/ext2x_client.c index 7b8c897d05..d2719c969e 100644 --- a/opal/mca/pmix/pmix2x/pmix2x_client.c +++ b/opal/mca/pmix/ext2x/ext2x_client.c @@ -34,7 +34,7 @@ #include "opal/util/show_help.h" #include "opal/mca/pmix/base/base.h" -#include "pmix2x.h" +#include "ext2x.h" #include "pmix.h" #include "pmix_tool.h" @@ -45,7 +45,7 @@ static void errreg_cbfunc (pmix_status_t status, size_t errhandler_ref, void *cbdata) { - opal_pmix2x_event_t *event = (opal_pmix2x_event_t*)cbdata; + opal_ext2x_event_t *event = (opal_ext2x_event_t*)cbdata; OPAL_ACQUIRE_OBJECT(event); @@ -57,13 +57,13 @@ static void errreg_cbfunc (pmix_status_t status, OPAL_PMIX_WAKEUP_THREAD(&event->lock); } -int pmix2x_client_init(opal_list_t *ilist) +int ext2x_client_init(opal_list_t *ilist) { opal_process_name_t pname; pmix_status_t rc; int dbg; - opal_pmix2x_jobid_trkr_t *job; - opal_pmix2x_event_t *event; + opal_ext2x_jobid_trkr_t *job; + opal_ext2x_event_t *event; pmix_info_t *pinfo; size_t ninfo, n; opal_value_t *ival; @@ -79,7 +79,7 @@ int pmix2x_client_init(opal_list_t *ilist) putenv(dbgvalue); } /* check the evars for a mismatch */ - if (OPAL_SUCCESS != (dbg = opal_pmix_pmix2x_check_evars())) { + if (OPAL_SUCCESS != (dbg = opal_pmix_ext2x_check_evars())) { OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return dbg; } @@ -91,7 +91,7 @@ int pmix2x_client_init(opal_list_t *ilist) n=0; OPAL_LIST_FOREACH(ival, ilist, opal_value_t) { (void)strncpy(pinfo[n].key, ival->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&pinfo[n].value, ival); + ext2x_value_load(&pinfo[n].value, ival); ++n; } } else { @@ -105,7 +105,7 @@ int pmix2x_client_init(opal_list_t *ilist) PMIX_INFO_FREE(pinfo, ninfo); } if (PMIX_SUCCESS != rc) { - dbg = pmix2x_convert_rc(rc); + dbg = ext2x_convert_rc(rc); OPAL_ERROR_LOG(dbg); return dbg; } @@ -121,7 +121,7 @@ int pmix2x_client_init(opal_list_t *ilist) if (NULL != getenv(OPAL_MCA_PREFIX"orte_launch")) { /* if we were launched by the OMPI RTE, then * the jobid is in a special format - so get it */ - mca_pmix_pmix2x_component.native_launch = true; + mca_pmix_ext2x_component.native_launch = true; opal_convert_string_to_jobid(&pname.jobid, my_proc.nspace); } else { /* we were launched by someone else, so make the @@ -130,12 +130,12 @@ int pmix2x_client_init(opal_list_t *ilist) } /* insert this into our list of jobids - it will be the * first, and so we'll check it first */ - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); (void)strncpy(job->nspace, my_proc.nspace, PMIX_MAX_NSLEN); job->jobid = pname.jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); - pname.vpid = pmix2x_convert_rank(my_proc.rank); + pname.vpid = ext2x_convert_rank(my_proc.rank); opal_proc_set_name(&pname); /* release the thread in case the event handler fires when @@ -143,11 +143,11 @@ int pmix2x_client_init(opal_list_t *ilist) OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* register the default event handler */ - event = OBJ_NEW(opal_pmix2x_event_t); - opal_list_append(&mca_pmix_pmix2x_component.events, &event->super); + event = OBJ_NEW(opal_ext2x_event_t); + opal_list_append(&mca_pmix_ext2x_component.events, &event->super); PMIX_INFO_CREATE(pinfo, 1); PMIX_INFO_LOAD(&pinfo[0], PMIX_EVENT_HDLR_NAME, "OPAL-PMIX-2X-DEFAULT", PMIX_STRING); - PMIx_Register_event_handler(NULL, 0, NULL, 0, pmix2x_event_hdlr, errreg_cbfunc, event); + PMIx_Register_event_handler(NULL, 0, NULL, 0, ext2x_event_hdlr, errreg_cbfunc, event); OPAL_PMIX_WAIT_THREAD(&event->lock); PMIX_INFO_FREE(pinfo, 1); @@ -157,14 +157,14 @@ int pmix2x_client_init(opal_list_t *ilist) static void dereg_cbfunc(pmix_status_t st, void *cbdata) { - opal_pmix2x_event_t *ev = (opal_pmix2x_event_t*)cbdata; + opal_ext2x_event_t *ev = (opal_ext2x_event_t*)cbdata; OPAL_PMIX_WAKEUP_THREAD(&ev->lock); } -int pmix2x_client_finalize(void) +int ext2x_client_finalize(void) { pmix_status_t rc; - opal_pmix2x_event_t *event, *ev2; + opal_ext2x_event_t *event, *ev2; opal_output_verbose(1, opal_pmix_base_framework.framework_output, "PMIx_client finalize"); @@ -174,31 +174,31 @@ int pmix2x_client_finalize(void) if (0 == opal_pmix_base.initialized) { /* deregister all event handlers */ - OPAL_LIST_FOREACH_SAFE(event, ev2, &mca_pmix_pmix2x_component.events, opal_pmix2x_event_t) { + OPAL_LIST_FOREACH_SAFE(event, ev2, &mca_pmix_ext2x_component.events, opal_ext2x_event_t) { OPAL_PMIX_DESTRUCT_LOCK(&event->lock); OPAL_PMIX_CONSTRUCT_LOCK(&event->lock); PMIx_Deregister_event_handler(event->index, dereg_cbfunc, (void*)event); OPAL_PMIX_WAIT_THREAD(&event->lock); - opal_list_remove_item(&mca_pmix_pmix2x_component.events, &event->super); + opal_list_remove_item(&mca_pmix_ext2x_component.events, &event->super); OBJ_RELEASE(event); } } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); rc = PMIx_Finalize(NULL, 0); - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } -int pmix2x_tool_init(opal_list_t *info) +int ext2x_tool_init(opal_list_t *info) { pmix_info_t *pinfo; size_t ninfo, n; - opal_pmix2x_jobid_trkr_t *job; + opal_ext2x_jobid_trkr_t *job; opal_value_t *val; pmix_status_t rc; int ret; opal_process_name_t pname = {OPAL_JOBID_INVALID, OPAL_VPID_INVALID}; - opal_pmix2x_event_t *event; + opal_ext2x_event_t *event; opal_output_verbose(1, opal_pmix_base_framework.framework_output, "PMIx_tool init"); @@ -211,7 +211,7 @@ int pmix2x_tool_init(opal_list_t *info) n=0; OPAL_LIST_FOREACH(val, info, opal_value_t) { (void)strncpy(pinfo[n].key, val->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&pinfo[n].value, val); + ext2x_value_load(&pinfo[n].value, val); ++n; /* check to see if our name is being given from above */ if (0 == strcmp(val->key, OPAL_PMIX_TOOL_NSPACE)) { @@ -228,7 +228,7 @@ int pmix2x_tool_init(opal_list_t *info) } /* we are going to get our name from the server, or we were given it by the tool, * so mark as native launch so we don't convert back/forth */ - mca_pmix_pmix2x_component.native_launch = true; + mca_pmix_ext2x_component.native_launch = true; OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); rc = PMIx_tool_init(&my_proc, pinfo, ninfo); @@ -236,7 +236,7 @@ int pmix2x_tool_init(opal_list_t *info) PMIX_INFO_FREE(pinfo, ninfo); } if (PMIX_SUCCESS != rc) { - ret = pmix2x_convert_rc(rc); + ret = ext2x_convert_rc(rc); OPAL_ERROR_LOG(ret); return ret; } @@ -250,14 +250,14 @@ int pmix2x_tool_init(opal_list_t *info) /* store our jobid and rank */ opal_convert_string_to_jobid(&pname.jobid, my_proc.nspace); - pname.vpid = pmix2x_convert_rank(my_proc.rank); + pname.vpid = ext2x_convert_rank(my_proc.rank); /* insert this into our list of jobids - it will be the * first, and so we'll check it first */ - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); (void)strncpy(job->nspace, my_proc.nspace, PMIX_MAX_NSLEN); job->jobid = pname.jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); opal_proc_set_name(&pname); @@ -266,21 +266,21 @@ int pmix2x_tool_init(opal_list_t *info) OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* register the default event handler */ - event = OBJ_NEW(opal_pmix2x_event_t); - opal_list_append(&mca_pmix_pmix2x_component.events, &event->super); + event = OBJ_NEW(opal_ext2x_event_t); + opal_list_append(&mca_pmix_ext2x_component.events, &event->super); PMIX_INFO_CREATE(pinfo, 1); PMIX_INFO_LOAD(&pinfo[0], PMIX_EVENT_HDLR_NAME, "OPAL-PMIX-2X-DEFAULT", PMIX_STRING); - PMIx_Register_event_handler(NULL, 0, NULL, 0, pmix2x_event_hdlr, errreg_cbfunc, event); + PMIx_Register_event_handler(NULL, 0, NULL, 0, ext2x_event_hdlr, errreg_cbfunc, event); OPAL_PMIX_WAIT_THREAD(&event->lock); PMIX_INFO_FREE(pinfo, 1); return OPAL_SUCCESS; } -int pmix2x_tool_fini(void) +int ext2x_tool_fini(void) { pmix_status_t rc; - opal_pmix2x_event_t *event, *ev2; + opal_ext2x_event_t *event, *ev2; opal_output_verbose(1, opal_pmix_base_framework.framework_output, "PMIx_tool finalize"); @@ -290,23 +290,23 @@ int pmix2x_tool_fini(void) if (0 == opal_pmix_base.initialized) { /* deregister all event handlers */ - OPAL_LIST_FOREACH_SAFE(event, ev2, &mca_pmix_pmix2x_component.events, opal_pmix2x_event_t) { + OPAL_LIST_FOREACH_SAFE(event, ev2, &mca_pmix_ext2x_component.events, opal_ext2x_event_t) { OPAL_PMIX_DESTRUCT_LOCK(&event->lock); OPAL_PMIX_CONSTRUCT_LOCK(&event->lock); PMIx_Deregister_event_handler(event->index, dereg_cbfunc, (void*)event); OPAL_PMIX_WAIT_THREAD(&event->lock); - opal_list_remove_item(&mca_pmix_pmix2x_component.events, &event->super); + opal_list_remove_item(&mca_pmix_ext2x_component.events, &event->super); OBJ_RELEASE(event); } } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); rc = PMIx_tool_finalize(); - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } -int pmix2x_initialized(void) +int ext2x_initialized(void) { int init; @@ -320,7 +320,7 @@ int pmix2x_initialized(void) return init; } -int pmix2x_abort(int flag, const char *msg, +int ext2x_abort(int flag, const char *msg, opal_list_t *procs) { pmix_status_t rc; @@ -345,12 +345,12 @@ int pmix2x_abort(int flag, const char *msg, PMIX_PROC_CREATE(parray, cnt); n=0; OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { - if (NULL == (nsptr = pmix2x_convert_jobid(ptr->name.jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(ptr->name.jobid))) { PMIX_PROC_FREE(parray, cnt); return OPAL_ERR_NOT_FOUND; } (void)strncpy(parray[n].nspace, nsptr, PMIX_MAX_NSLEN); - parray[n].rank = pmix2x_convert_opalrank(ptr->name.vpid); + parray[n].rank = ext2x_convert_opalrank(ptr->name.vpid); ++n; } } @@ -361,16 +361,16 @@ int pmix2x_abort(int flag, const char *msg, /* release the array */ PMIX_PROC_FREE(parray, cnt); - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } -int pmix2x_store_local(const opal_process_name_t *proc, opal_value_t *val) +int ext2x_store_local(const opal_process_name_t *proc, opal_value_t *val) { pmix_value_t kv; pmix_status_t rc; pmix_proc_t p; char *nsptr; - opal_pmix2x_jobid_trkr_t *job; + opal_ext2x_jobid_trkr_t *job; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); @@ -381,34 +381,34 @@ int pmix2x_store_local(const opal_process_name_t *proc, opal_value_t *val) OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); if (NULL != proc) { - if (NULL == (nsptr = pmix2x_convert_jobid(proc->jobid))) { - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + if (NULL == (nsptr = ext2x_convert_jobid(proc->jobid))) { + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); (void)opal_snprintf_jobid(job->nspace, PMIX_MAX_NSLEN, proc->jobid); job->jobid = proc->jobid; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); nsptr = job->nspace; } (void)strncpy(p.nspace, nsptr, PMIX_MAX_NSLEN); - p.rank = pmix2x_convert_opalrank(proc->vpid); + p.rank = ext2x_convert_opalrank(proc->vpid); } else { /* use our name */ (void)strncpy(p.nspace, my_proc.nspace, PMIX_MAX_NSLEN); - p.rank = pmix2x_convert_opalrank(OPAL_PROC_MY_NAME.vpid); + p.rank = ext2x_convert_opalrank(OPAL_PROC_MY_NAME.vpid); } PMIX_VALUE_CONSTRUCT(&kv); - pmix2x_value_load(&kv, val); + ext2x_value_load(&kv, val); /* call the library - this is a blocking call */ rc = PMIx_Store_internal(&p, val->key, &kv); PMIX_VALUE_DESTRUCT(&kv); - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } -int pmix2x_commit(void) +int ext2x_commit(void) { pmix_status_t rc; @@ -420,21 +420,21 @@ int pmix2x_commit(void) OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); rc = PMIx_Commit(); - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } static void opcbfunc(pmix_status_t status, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; OPAL_ACQUIRE_OBJECT(op); if (NULL != op->opcbfunc) { - op->opcbfunc(pmix2x_convert_rc(status), op->cbdata); + op->opcbfunc(ext2x_convert_rc(status), op->cbdata); } OBJ_RELEASE(op); } -int pmix2x_fence(opal_list_t *procs, int collect_data) +int ext2x_fence(opal_list_t *procs, int collect_data) { pmix_status_t rc; opal_namelist_t *ptr; @@ -458,13 +458,13 @@ int pmix2x_fence(opal_list_t *procs, int collect_data) PMIX_PROC_CREATE(parray, cnt); n=0; OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { - if (NULL == (nsptr = pmix2x_convert_jobid(ptr->name.jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(ptr->name.jobid))) { PMIX_PROC_FREE(parray, cnt); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(parray[n].nspace, nsptr, PMIX_MAX_NSLEN); - parray[n].rank = pmix2x_convert_opalrank(ptr->name.vpid); + parray[n].rank = ext2x_convert_opalrank(ptr->name.vpid); ++n; } } @@ -490,17 +490,17 @@ int pmix2x_fence(opal_list_t *procs, int collect_data) PMIX_PROC_FREE(parray, cnt); } - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } -int pmix2x_fencenb(opal_list_t *procs, int collect_data, +int ext2x_fencenb(opal_list_t *procs, int collect_data, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { pmix_status_t rc; pmix_proc_t *parray=NULL; size_t n, cnt=0; opal_namelist_t *ptr; - pmix2x_opcaddy_t *op; + ext2x_opcaddy_t *op; char *nsptr; opal_output_verbose(1, opal_pmix_base_framework.framework_output, @@ -518,20 +518,20 @@ int pmix2x_fencenb(opal_list_t *procs, int collect_data, PMIX_PROC_CREATE(parray, cnt); n=0; OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { - if (NULL == (nsptr = pmix2x_convert_jobid(ptr->name.jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(ptr->name.jobid))) { PMIX_PROC_FREE(parray, cnt); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(parray[n].nspace, nsptr, PMIX_MAX_NSLEN); - parray[n].rank = pmix2x_convert_opalrank(ptr->name.vpid); + parray[n].rank = ext2x_convert_opalrank(ptr->name.vpid); ++n; } } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* create the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(ext2x_opcaddy_t); op->opcbfunc = cbfunc; op->cbdata = cbdata; op->procs = parray; @@ -545,14 +545,14 @@ int pmix2x_fencenb(opal_list_t *procs, int collect_data, /* call the library function */ rc = PMIx_Fence_nb(op->procs, op->nprocs, op->info, op->ninfo, opcbfunc, op); - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } -int pmix2x_put(opal_pmix_scope_t opal_scope, +int ext2x_put(opal_pmix_scope_t opal_scope, opal_value_t *val) { pmix_value_t kv; - pmix_scope_t pmix_scope = pmix2x_convert_opalscope(opal_scope); + pmix_scope_t pmix_scope = ext2x_convert_opalscope(opal_scope); pmix_status_t rc; opal_output_verbose(1, opal_pmix_base_framework.framework_output, @@ -566,14 +566,14 @@ int pmix2x_put(opal_pmix_scope_t opal_scope, OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); PMIX_VALUE_CONSTRUCT(&kv); - pmix2x_value_load(&kv, val); + ext2x_value_load(&kv, val); rc = PMIx_Put(pmix_scope, val->key, &kv); PMIX_VALUE_DESTRUCT(&kv); - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } -int pmix2x_get(const opal_process_name_t *proc, const char *key, +int ext2x_get(const opal_process_name_t *proc, const char *key, opal_list_t *info, opal_value_t **val) { pmix_status_t rc; @@ -586,7 +586,7 @@ int pmix2x_get(const opal_process_name_t *proc, const char *key, int ret; opal_output_verbose(1, opal_pmix_base_framework.framework_output, - "%s pmix2x:client get on proc %s key %s", + "%s ext2x:client get on proc %s key %s", OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), (NULL == proc) ? "NULL" : OPAL_NAME_PRINT(*proc), key); @@ -609,7 +609,7 @@ int pmix2x_get(const opal_process_name_t *proc, const char *key, if (0 == strcmp(key, OPAL_PMIX_RANK)) { (*val) = OBJ_NEW(opal_value_t); (*val)->type = OPAL_INT; - (*val)->data.integer = pmix2x_convert_rank(my_proc.rank); + (*val)->data.integer = ext2x_convert_rank(my_proc.rank); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_SUCCESS; } @@ -618,14 +618,14 @@ int pmix2x_get(const opal_process_name_t *proc, const char *key, if (NULL == proc) { (void)strncpy(p.nspace, my_proc.nspace, PMIX_MAX_NSLEN); - p.rank = pmix2x_convert_rank(PMIX_RANK_WILDCARD); + p.rank = ext2x_convert_rank(PMIX_RANK_WILDCARD); } else { - if (NULL == (nsptr = pmix2x_convert_jobid(proc->jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(proc->jobid))) { OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(p.nspace, nsptr, PMIX_MAX_NSLEN); - p.rank = pmix2x_convert_opalrank(proc->vpid); + p.rank = ext2x_convert_opalrank(proc->vpid); } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); @@ -634,7 +634,7 @@ int pmix2x_get(const opal_process_name_t *proc, const char *key, n=0; OPAL_LIST_FOREACH(ival, info, opal_value_t) { (void)strncpy(pinfo[n].key, ival->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&pinfo[n].value, ival); + ext2x_value_load(&pinfo[n].value, ival); ++n; } } @@ -642,8 +642,8 @@ int pmix2x_get(const opal_process_name_t *proc, const char *key, rc = PMIx_Get(&p, key, pinfo, sz, &pval); if (PMIX_SUCCESS == rc) { ival = OBJ_NEW(opal_value_t); - if (OPAL_SUCCESS != (ret = pmix2x_value_unload(ival, pval))) { - rc = pmix2x_convert_opalrc(ret); + if (OPAL_SUCCESS != (ret = ext2x_value_unload(ival, pval))) { + rc = ext2x_convert_opalrc(ret); } else { *val = ival; } @@ -651,21 +651,21 @@ int pmix2x_get(const opal_process_name_t *proc, const char *key, } PMIX_INFO_FREE(pinfo, sz); - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } static void val_cbfunc(pmix_status_t status, pmix_value_t *kv, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; int rc; opal_value_t val, *v=NULL; OPAL_ACQUIRE_OBJECT(op); OBJ_CONSTRUCT(&val, opal_value_t); - rc = pmix2x_convert_opalrc(status); + rc = ext2x_convert_opalrc(status); if (PMIX_SUCCESS == status && NULL != kv) { - rc = pmix2x_value_unload(&val, kv); + rc = ext2x_value_unload(&val, kv); v = &val; } @@ -676,11 +676,11 @@ static void val_cbfunc(pmix_status_t status, OBJ_RELEASE(op); } -int pmix2x_getnb(const opal_process_name_t *proc, const char *key, +int ext2x_getnb(const opal_process_name_t *proc, const char *key, opal_list_t *info, opal_pmix_value_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opcaddy_t *op; + ext2x_opcaddy_t *op; opal_value_t *val; pmix_status_t rc; char *nsptr; @@ -714,7 +714,7 @@ int pmix2x_getnb(const opal_process_name_t *proc, const char *key, if (NULL != cbfunc) { val = OBJ_NEW(opal_value_t); val->type = OPAL_INT; - val->data.integer = pmix2x_convert_rank(my_proc.rank); + val->data.integer = ext2x_convert_rank(my_proc.rank); cbfunc(OPAL_SUCCESS, val, cbdata); } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); @@ -723,20 +723,20 @@ int pmix2x_getnb(const opal_process_name_t *proc, const char *key, } /* create the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(ext2x_opcaddy_t); op->valcbfunc = cbfunc; op->cbdata = cbdata; if (NULL == proc) { (void)strncpy(op->p.nspace, my_proc.nspace, PMIX_MAX_NSLEN); - op->p.rank = pmix2x_convert_rank(PMIX_RANK_WILDCARD); + op->p.rank = ext2x_convert_rank(PMIX_RANK_WILDCARD); } else { - if (NULL == (nsptr = pmix2x_convert_jobid(proc->jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(proc->jobid))) { OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(op->p.nspace, nsptr, PMIX_MAX_NSLEN); - op->p.rank = pmix2x_convert_opalrank(proc->vpid); + op->p.rank = ext2x_convert_opalrank(proc->vpid); } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); @@ -745,7 +745,7 @@ int pmix2x_getnb(const opal_process_name_t *proc, const char *key, n=0; OPAL_LIST_FOREACH(val, info, opal_value_t) { (void)strncpy(op->info[n].key, val->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&op->info[n].value, val); + ext2x_value_load(&op->info[n].value, val); ++n; } } @@ -756,10 +756,10 @@ int pmix2x_getnb(const opal_process_name_t *proc, const char *key, OBJ_RELEASE(op); } - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } -int pmix2x_publish(opal_list_t *info) +int ext2x_publish(opal_list_t *info) { pmix_info_t *pinfo; pmix_status_t ret; @@ -786,7 +786,7 @@ int pmix2x_publish(opal_list_t *info) n=0; OPAL_LIST_FOREACH(iptr, info, opal_value_t) { (void)strncpy(pinfo[n].key, iptr->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&pinfo[n].value, iptr); + ext2x_value_load(&pinfo[n].value, iptr); ++n; } } else { @@ -798,16 +798,16 @@ int pmix2x_publish(opal_list_t *info) PMIX_INFO_FREE(pinfo, sz); } - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_publishnb(opal_list_t *info, +int ext2x_publishnb(opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { pmix_status_t ret; opal_value_t *iptr; size_t n; - pmix2x_opcaddy_t *op; + ext2x_opcaddy_t *op; opal_output_verbose(1, opal_pmix_base_framework.framework_output, "PMIx_client publish_nb"); @@ -824,7 +824,7 @@ int pmix2x_publishnb(opal_list_t *info, } /* create the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(ext2x_opcaddy_t); op->opcbfunc = cbfunc; op->cbdata = cbdata; @@ -834,17 +834,17 @@ int pmix2x_publishnb(opal_list_t *info, n=0; OPAL_LIST_FOREACH(iptr, info, opal_value_t) { (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&op->info[n].value, iptr); + ext2x_value_load(&op->info[n].value, iptr); ++n; } } ret = PMIx_Publish_nb(op->info, op->sz, opcbfunc, op); - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_lookup(opal_list_t *data, opal_list_t *info) +int ext2x_lookup(opal_list_t *data, opal_list_t *info) { opal_pmix_pdata_t *d; pmix_pdata_t *pdata; @@ -852,11 +852,11 @@ int pmix2x_lookup(opal_list_t *data, opal_list_t *info) pmix_status_t rc; size_t cnt, n, sz = 0; opal_value_t *iptr; - opal_pmix2x_jobid_trkr_t *jptr, *job; + opal_ext2x_jobid_trkr_t *jptr, *job; int ret; opal_output_verbose(1, opal_pmix_base_framework.framework_output, - "pmix2x:client lookup"); + "ext2x:client lookup"); OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); if (0 >= opal_pmix_base.initialized) { @@ -880,7 +880,7 @@ int pmix2x_lookup(opal_list_t *data, opal_list_t *info) n=0; OPAL_LIST_FOREACH(iptr, info, opal_value_t) { (void)strncpy(pinfo[n].key, iptr->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&pinfo[n].value, iptr); + ext2x_value_load(&pinfo[n].value, iptr); ++n; } } @@ -891,7 +891,7 @@ int pmix2x_lookup(opal_list_t *data, opal_list_t *info) n=0; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); OPAL_LIST_FOREACH(d, data, opal_pmix_pdata_t) { - if (mca_pmix_pmix2x_component.native_launch) { + if (mca_pmix_ext2x_component.native_launch) { /* if we were launched by the OMPI RTE, then * the jobid is in a special format - so get it */ opal_convert_string_to_jobid(&d->proc.jobid, pdata[n].proc.nspace); @@ -902,20 +902,20 @@ int pmix2x_lookup(opal_list_t *data, opal_list_t *info) } /* if we don't already have it, add this to our jobid tracker */ job = NULL; - OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix2x_component.jobids, opal_pmix2x_jobid_trkr_t) { + OPAL_LIST_FOREACH(jptr, &mca_pmix_ext2x_component.jobids, opal_ext2x_jobid_trkr_t) { if (jptr->jobid == d->proc.jobid) { job = jptr; break; } } if (NULL == job) { - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); (void)strncpy(job->nspace, pdata[n].proc.nspace, PMIX_MAX_NSLEN); job->jobid = d->proc.jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); } - d->proc.vpid = pmix2x_convert_rank(pdata[n].proc.rank); - if (OPAL_SUCCESS != (ret = pmix2x_value_unload(&d->value, &pdata[n].value))) { + d->proc.vpid = ext2x_convert_rank(pdata[n].proc.rank); + if (OPAL_SUCCESS != (ret = ext2x_value_unload(&d->value, &pdata[n].value))) { OPAL_ERROR_LOG(ret); } } @@ -925,19 +925,19 @@ int pmix2x_lookup(opal_list_t *data, opal_list_t *info) if (NULL != pinfo) { PMIX_INFO_FREE(pinfo, sz); } - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } static void lk_cbfunc(pmix_status_t status, pmix_pdata_t data[], size_t ndata, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; opal_pmix_pdata_t *d; opal_list_t results, *r = NULL; int rc; size_t n; - opal_pmix2x_jobid_trkr_t *job, *jptr; + opal_ext2x_jobid_trkr_t *job, *jptr; OPAL_ACQUIRE_OBJECT(op); @@ -946,14 +946,14 @@ static void lk_cbfunc(pmix_status_t status, return; } - rc = pmix2x_convert_rc(op->status); + rc = ext2x_convert_rc(op->status); if (OPAL_SUCCESS == rc) { OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); OBJ_CONSTRUCT(&results, opal_list_t); for (n=0; n < ndata; n++) { d = OBJ_NEW(opal_pmix_pdata_t); opal_list_append(&results, &d->super); - if (mca_pmix_pmix2x_component.native_launch) { + if (mca_pmix_ext2x_component.native_launch) { /* if we were launched by the OMPI RTE, then * the jobid is in a special format - so get it */ opal_convert_string_to_jobid(&d->proc.jobid, data[n].proc.nspace); @@ -964,21 +964,21 @@ static void lk_cbfunc(pmix_status_t status, } /* if we don't already have it, add this to our jobid tracker */ job = NULL; - OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix2x_component.jobids, opal_pmix2x_jobid_trkr_t) { + OPAL_LIST_FOREACH(jptr, &mca_pmix_ext2x_component.jobids, opal_ext2x_jobid_trkr_t) { if (jptr->jobid == d->proc.jobid) { job = jptr; break; } } if (NULL == job) { - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); (void)strncpy(job->nspace, data[n].proc.nspace, PMIX_MAX_NSLEN); job->jobid = d->proc.jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); } - d->proc.vpid = pmix2x_convert_rank(data[n].proc.rank); + d->proc.vpid = ext2x_convert_rank(data[n].proc.rank); d->value.key = strdup(data[n].key); - rc = pmix2x_value_unload(&d->value, &data[n].value); + rc = ext2x_value_unload(&d->value, &data[n].value); if (OPAL_SUCCESS != rc) { rc = OPAL_ERR_BAD_PARAM; OPAL_ERROR_LOG(rc); @@ -1000,17 +1000,17 @@ static void lk_cbfunc(pmix_status_t status, OBJ_RELEASE(op); } -int pmix2x_lookupnb(char **keys, opal_list_t *info, +int ext2x_lookupnb(char **keys, opal_list_t *info, opal_pmix_lookup_cbfunc_t cbfunc, void *cbdata) { pmix_status_t ret; - pmix2x_opcaddy_t *op; + ext2x_opcaddy_t *op; opal_value_t *iptr; size_t n; opal_output_verbose(1, opal_pmix_base_framework.framework_output, - "pmix2x:client lookup_nb"); + "ext2x:client lookup_nb"); OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); if (0 >= opal_pmix_base.initialized) { @@ -1020,7 +1020,7 @@ int pmix2x_lookupnb(char **keys, opal_list_t *info, OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* create the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(ext2x_opcaddy_t); op->lkcbfunc = cbfunc; op->cbdata = cbdata; @@ -1029,16 +1029,16 @@ int pmix2x_lookupnb(char **keys, opal_list_t *info, n=0; OPAL_LIST_FOREACH(iptr, info, opal_value_t) { (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&op->info[n].value, iptr); + ext2x_value_load(&op->info[n].value, iptr); ++n; } } ret = PMIx_Lookup_nb(keys, op->info, op->sz, lk_cbfunc, op); - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_unpublish(char **keys, opal_list_t *info) +int ext2x_unpublish(char **keys, opal_list_t *info) { pmix_status_t ret; size_t ninfo, n; @@ -1057,7 +1057,7 @@ int pmix2x_unpublish(char **keys, opal_list_t *info) n=0; OPAL_LIST_FOREACH(iptr, info, opal_value_t) { (void)strncpy(pinfo[n].key, iptr->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&pinfo[n].value, iptr); + ext2x_value_load(&pinfo[n].value, iptr); ++n; } } else { @@ -1068,14 +1068,14 @@ int pmix2x_unpublish(char **keys, opal_list_t *info) ret = PMIx_Unpublish(keys, pinfo, ninfo); PMIX_INFO_FREE(pinfo, ninfo); - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_unpublishnb(char **keys, opal_list_t *info, +int ext2x_unpublishnb(char **keys, opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { pmix_status_t ret; - pmix2x_opcaddy_t *op; + ext2x_opcaddy_t *op; opal_value_t *iptr; size_t n; @@ -1087,7 +1087,7 @@ int pmix2x_unpublishnb(char **keys, opal_list_t *info, OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* create the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(ext2x_opcaddy_t); op->opcbfunc = cbfunc; op->cbdata = cbdata; @@ -1096,17 +1096,17 @@ int pmix2x_unpublishnb(char **keys, opal_list_t *info, n=0; OPAL_LIST_FOREACH(iptr, info, opal_value_t) { (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&op->info[n].value, iptr); + ext2x_value_load(&op->info[n].value, iptr); ++n; } } ret = PMIx_Unpublish_nb(keys, op->info, op->sz, opcbfunc, op); - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) +int ext2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) { pmix_status_t rc; pmix_info_t *info = NULL; @@ -1115,7 +1115,7 @@ int pmix2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) opal_value_t *ival; opal_pmix_app_t *app; char nspace[PMIX_MAX_NSLEN+1]; - opal_pmix2x_jobid_trkr_t *job; + opal_ext2x_jobid_trkr_t *job; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); if (0 >= opal_pmix_base.initialized) { @@ -1131,7 +1131,7 @@ int pmix2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) n=0; OPAL_LIST_FOREACH(ival, job_info, opal_value_t) { (void)strncpy(info[n].key, ival->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&info[n].value, ival); + ext2x_value_load(&info[n].value, ival); ++n; } } @@ -1156,7 +1156,7 @@ int pmix2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) m=0; OPAL_LIST_FOREACH(ival, &app->info, opal_value_t) { (void)strncpy(papps[n].info[m].key, ival->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&papps[n].info[m].value, ival); + ext2x_value_load(&papps[n].info[m].value, ival); ++m; } } @@ -1166,7 +1166,7 @@ int pmix2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) rc = PMIx_Spawn(info, ninfo, papps, napps, nspace); if (PMIX_SUCCESS == rc) { OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); - if (mca_pmix_pmix2x_component.native_launch) { + if (mca_pmix_ext2x_component.native_launch) { /* if we were launched by the OMPI RTE, then * the jobid is in a special format - so get it */ opal_convert_string_to_jobid(jobid, nspace); @@ -1176,10 +1176,10 @@ int pmix2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) OPAL_HASH_JOBID(nspace, *jobid); } /* add this to our jobid tracker */ - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); (void)strncpy(job->nspace, nspace, PMIX_MAX_NSLEN); job->jobid = *jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); } return rc; @@ -1188,19 +1188,19 @@ int pmix2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) static void spcbfunc(pmix_status_t status, char *nspace, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; - opal_pmix2x_jobid_trkr_t *job; + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; + opal_ext2x_jobid_trkr_t *job; opal_jobid_t jobid = OPAL_JOBID_INVALID; int rc; OPAL_ACQUIRE_OBJECT(op); - rc = pmix2x_convert_rc(status); + rc = ext2x_convert_rc(status); if (PMIX_SUCCESS == status) { /* this is in the PMIx local thread - need to protect * the framework-level data */ OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); - if (mca_pmix_pmix2x_component.native_launch) { + if (mca_pmix_ext2x_component.native_launch) { /* if we were launched by the OMPI RTE, then * the jobid is in a special format - so get it */ opal_convert_string_to_jobid(&jobid, nspace); @@ -1210,10 +1210,10 @@ static void spcbfunc(pmix_status_t status, OPAL_HASH_JOBID(nspace, jobid); } /* add this to our jobid tracker */ - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); (void)strncpy(job->nspace, nspace, PMIX_MAX_NSLEN); job->jobid = jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); } @@ -1221,11 +1221,11 @@ static void spcbfunc(pmix_status_t status, OBJ_RELEASE(op); } -int pmix2x_spawnnb(opal_list_t *job_info, opal_list_t *apps, +int ext2x_spawnnb(opal_list_t *job_info, opal_list_t *apps, opal_pmix_spawn_cbfunc_t cbfunc, void *cbdata) { pmix_status_t ret; - pmix2x_opcaddy_t *op; + ext2x_opcaddy_t *op; size_t n, m; opal_value_t *info; opal_pmix_app_t *app; @@ -1238,7 +1238,7 @@ int pmix2x_spawnnb(opal_list_t *job_info, opal_list_t *apps, OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* create the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(ext2x_opcaddy_t); op->spcbfunc = cbfunc; op->cbdata = cbdata; @@ -1247,7 +1247,7 @@ int pmix2x_spawnnb(opal_list_t *job_info, opal_list_t *apps, n=0; OPAL_LIST_FOREACH(info, job_info, opal_value_t) { (void)strncpy(op->info[n].key, info->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&op->info[n].value, info); + ext2x_value_load(&op->info[n].value, info); ++n; } } @@ -1269,7 +1269,7 @@ int pmix2x_spawnnb(opal_list_t *job_info, opal_list_t *apps, m=0; OPAL_LIST_FOREACH(info, &app->info, opal_value_t) { (void)strncpy(op->apps[n].info[m].key, info->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&op->apps[n].info[m].value, info); + ext2x_value_load(&op->apps[n].info[m].value, info); ++m; } } @@ -1278,10 +1278,10 @@ int pmix2x_spawnnb(opal_list_t *job_info, opal_list_t *apps, ret = PMIx_Spawn_nb(op->info, op->ninfo, op->apps, op->sz, spcbfunc, op); - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_connect(opal_list_t *procs) +int ext2x_connect(opal_list_t *procs) { pmix_proc_t *p; size_t nprocs; @@ -1291,7 +1291,7 @@ int pmix2x_connect(opal_list_t *procs) size_t n; opal_output_verbose(1, opal_pmix_base_framework.framework_output, - "pmix2x:client connect"); + "ext2x:client connect"); /* protect against bozo error */ if (NULL == procs || 0 == (nprocs = opal_list_get_size(procs))) { @@ -1309,13 +1309,13 @@ int pmix2x_connect(opal_list_t *procs) PMIX_PROC_CREATE(p, nprocs); n=0; OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { - if (NULL == (nsptr = pmix2x_convert_jobid(ptr->name.jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(ptr->name.jobid))) { PMIX_PROC_FREE(p, nprocs); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(p[n].nspace, nsptr, PMIX_MAX_NSLEN); - p[n].rank = pmix2x_convert_opalrank(ptr->name.vpid); + p[n].rank = ext2x_convert_opalrank(ptr->name.vpid); ++n; } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); @@ -1323,21 +1323,21 @@ int pmix2x_connect(opal_list_t *procs) ret = PMIx_Connect(p, nprocs, NULL, 0); PMIX_PROC_FREE(p, nprocs); - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_connectnb(opal_list_t *procs, +int ext2x_connectnb(opal_list_t *procs, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opcaddy_t *op; + ext2x_opcaddy_t *op; opal_namelist_t *ptr; pmix_status_t ret; char *nsptr; size_t n; opal_output_verbose(1, opal_pmix_base_framework.framework_output, - "pmix2x:client connect NB"); + "ext2x:client connect NB"); /* protect against bozo error */ if (NULL == procs || 0 == opal_list_get_size(procs)) { @@ -1351,7 +1351,7 @@ int pmix2x_connectnb(opal_list_t *procs, } /* create the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(ext2x_opcaddy_t); op->opcbfunc = cbfunc; op->cbdata = cbdata; op->nprocs = opal_list_get_size(procs); @@ -1361,13 +1361,13 @@ int pmix2x_connectnb(opal_list_t *procs, PMIX_PROC_CREATE(op->procs, op->nprocs); n=0; OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { - if (NULL == (nsptr = pmix2x_convert_jobid(ptr->name.jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(ptr->name.jobid))) { OBJ_RELEASE(op); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(op->procs[n].nspace, nsptr, PMIX_MAX_NSLEN); - op->procs[n].rank = pmix2x_convert_opalrank(ptr->name.vpid); + op->procs[n].rank = ext2x_convert_opalrank(ptr->name.vpid); ++n; } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); @@ -1376,10 +1376,10 @@ int pmix2x_connectnb(opal_list_t *procs, if (PMIX_SUCCESS != ret) { OBJ_RELEASE(op); } - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_disconnect(opal_list_t *procs) +int ext2x_disconnect(opal_list_t *procs) { pmix_proc_t *p; size_t nprocs; @@ -1389,7 +1389,7 @@ int pmix2x_disconnect(opal_list_t *procs) size_t n; opal_output_verbose(1, opal_pmix_base_framework.framework_output, - "pmix2x:client disconnect"); + "ext2x:client disconnect"); /* protect against bozo error */ if (NULL == procs || 0 == (nprocs = opal_list_get_size(procs))) { @@ -1407,13 +1407,13 @@ int pmix2x_disconnect(opal_list_t *procs) PMIX_PROC_CREATE(p, nprocs); n=0; OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { - if (NULL == (nsptr = pmix2x_convert_jobid(ptr->name.jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(ptr->name.jobid))) { PMIX_PROC_FREE(p, nprocs); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(p[n].nspace, nsptr, PMIX_MAX_NSLEN); - p[n].rank = pmix2x_convert_opalrank(ptr->name.vpid); + p[n].rank = ext2x_convert_opalrank(ptr->name.vpid); ++n; } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); @@ -1421,21 +1421,21 @@ int pmix2x_disconnect(opal_list_t *procs) ret = PMIx_Disconnect(p, nprocs, NULL, 0); PMIX_PROC_FREE(p, nprocs); - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_disconnectnb(opal_list_t *procs, +int ext2x_disconnectnb(opal_list_t *procs, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opcaddy_t *op; + ext2x_opcaddy_t *op; opal_namelist_t *ptr; pmix_status_t ret; char *nsptr; size_t n; opal_output_verbose(1, opal_pmix_base_framework.framework_output, - "pmix2x:client disconnect NB"); + "ext2x:client disconnect NB"); /* protect against bozo error */ if (NULL == procs || 0 == opal_list_get_size(procs)) { @@ -1449,7 +1449,7 @@ int pmix2x_disconnectnb(opal_list_t *procs, } /* create the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(ext2x_opcaddy_t); op->opcbfunc = cbfunc; op->cbdata = cbdata; op->nprocs = opal_list_get_size(procs); @@ -1459,13 +1459,13 @@ int pmix2x_disconnectnb(opal_list_t *procs, PMIX_PROC_CREATE(op->procs, op->nprocs); n=0; OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { - if (NULL == (nsptr = pmix2x_convert_jobid(ptr->name.jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(ptr->name.jobid))) { OBJ_RELEASE(op); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(op->procs[n].nspace, nsptr, PMIX_MAX_NSLEN); - op->procs[n].rank = pmix2x_convert_opalrank(ptr->name.vpid); + op->procs[n].rank = ext2x_convert_opalrank(ptr->name.vpid); ++n; } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); @@ -1474,10 +1474,10 @@ int pmix2x_disconnectnb(opal_list_t *procs, if (PMIX_SUCCESS != ret) { OBJ_RELEASE(op); } - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_resolve_peers(const char *nodename, +int ext2x_resolve_peers(const char *nodename, opal_jobid_t jobid, opal_list_t *procs) { @@ -1486,7 +1486,7 @@ int pmix2x_resolve_peers(const char *nodename, pmix_proc_t *array=NULL; size_t nprocs, n; opal_namelist_t *nm; - opal_pmix2x_jobid_trkr_t *job; + opal_ext2x_jobid_trkr_t *job; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); if (0 >= opal_pmix_base.initialized) { @@ -1495,7 +1495,7 @@ int pmix2x_resolve_peers(const char *nodename, } if (OPAL_JOBID_WILDCARD != jobid) { - if (NULL == (nspace = pmix2x_convert_jobid(jobid))) { + if (NULL == (nspace = ext2x_convert_jobid(jobid))) { OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } @@ -1511,7 +1511,7 @@ int pmix2x_resolve_peers(const char *nodename, for (n=0; n < nprocs; n++) { nm = OBJ_NEW(opal_namelist_t); opal_list_append(procs, &nm->super); - if (mca_pmix_pmix2x_component.native_launch) { + if (mca_pmix_ext2x_component.native_launch) { /* if we were launched by the OMPI RTE, then * the jobid is in a special format - so get it */ opal_convert_string_to_jobid(&nm->name.jobid, array[n].nspace); @@ -1521,21 +1521,21 @@ int pmix2x_resolve_peers(const char *nodename, OPAL_HASH_JOBID(array[n].nspace, nm->name.jobid); } /* if we don't already have it, add this to our jobid tracker */ - if (NULL == pmix2x_convert_jobid(nm->name.jobid)) { - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + if (NULL == ext2x_convert_jobid(nm->name.jobid)) { + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); (void)strncpy(job->nspace, array[n].nspace, PMIX_MAX_NSLEN); job->jobid = nm->name.jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); } - nm->name.vpid = pmix2x_convert_rank(array[n].rank); + nm->name.vpid = ext2x_convert_rank(array[n].rank); } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); } PMIX_PROC_FREE(array, nprocs); - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } -int pmix2x_resolve_nodes(opal_jobid_t jobid, char **nodelist) +int ext2x_resolve_nodes(opal_jobid_t jobid, char **nodelist) { pmix_status_t ret; char *nsptr; @@ -1546,7 +1546,7 @@ int pmix2x_resolve_nodes(opal_jobid_t jobid, char **nodelist) return OPAL_ERR_NOT_INITIALIZED; } - if (NULL == (nsptr = pmix2x_convert_jobid(jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(jobid))) { OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } @@ -1554,12 +1554,12 @@ int pmix2x_resolve_nodes(opal_jobid_t jobid, char **nodelist) ret = PMIx_Resolve_nodes(nsptr, nodelist); - return pmix2x_convert_rc(ret); + return ext2x_convert_rc(ret); } static void relcbfunc(void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; OBJ_RELEASE(op); } @@ -1569,13 +1569,13 @@ static void infocbfunc(pmix_status_t status, pmix_release_cbfunc_t release_fn, void *release_cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; int rc; if (NULL != release_fn) { release_fn(release_cbdata); } - rc = pmix2x_convert_rc(status); + rc = ext2x_convert_rc(status); if (NULL != op->qcbfunc) { op->qcbfunc(rc, NULL, op->cbdata, relcbfunc, op); } else { @@ -1583,18 +1583,18 @@ static void infocbfunc(pmix_status_t status, } } -int pmix2x_allocate(opal_pmix_alloc_directive_t directive, +int ext2x_allocate(opal_pmix_alloc_directive_t directive, opal_list_t *info, opal_pmix_info_cbfunc_t cbfunc, void *cbdata) { return OPAL_ERR_NOT_SUPPORTED; } -int pmix2x_job_control(opal_list_t *targets, +int ext2x_job_control(opal_list_t *targets, opal_list_t *directives, opal_pmix_info_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opcaddy_t *op; + ext2x_opcaddy_t *op; size_t n; opal_namelist_t *ptr; opal_value_t *iptr; @@ -1608,7 +1608,7 @@ int pmix2x_job_control(opal_list_t *targets, } /* create the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(ext2x_opcaddy_t); op->qcbfunc = cbfunc; op->cbdata = cbdata; if (NULL != targets) { @@ -1619,13 +1619,13 @@ int pmix2x_job_control(opal_list_t *targets, PMIX_PROC_CREATE(op->procs, op->nprocs); n=0; OPAL_LIST_FOREACH(ptr, targets, opal_namelist_t) { - if (NULL == (nsptr = pmix2x_convert_jobid(ptr->name.jobid))) { + if (NULL == (nsptr = ext2x_convert_jobid(ptr->name.jobid))) { OBJ_RELEASE(op); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(op->procs[n].nspace, nsptr, PMIX_MAX_NSLEN); - op->procs[n].rank = pmix2x_convert_opalrank(ptr->name.vpid); + op->procs[n].rank = ext2x_convert_opalrank(ptr->name.vpid); ++n; } } @@ -1636,7 +1636,7 @@ int pmix2x_job_control(opal_list_t *targets, n=0; OPAL_LIST_FOREACH(iptr, directives, opal_value_t) { (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&op->info[n].value, iptr); + ext2x_value_load(&op->info[n].value, iptr); ++n; } } @@ -1645,5 +1645,5 @@ int pmix2x_job_control(opal_list_t *targets, if (PMIX_SUCCESS != rc) { OBJ_RELEASE(op); } - return pmix2x_convert_rc(rc); + return ext2x_convert_rc(rc); } diff --git a/opal/mca/pmix/ext2x/ext2x_component.c b/opal/mca/pmix/ext2x/ext2x_component.c new file mode 100644 index 0000000000..5adc8db502 --- /dev/null +++ b/opal/mca/pmix/ext2x/ext2x_component.c @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2014-2017 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2015 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + * + * These symbols are in a file by themselves to provide nice linker + * semantics. Since linkers generally pull in symbols by object + * files, keeping these symbols as the only symbols in this file + * prevents utility programs such as "ompi_info" from having to import + * entire components just to query their version and parameters. + */ + +#include "opal_config.h" + +#include "opal/constants.h" +#include "opal/class/opal_list.h" +#include "opal/util/proc.h" +#include "opal/mca/pmix/pmix.h" +#include "ext2x.h" + +/* + * Public string showing the pmix external component version number + */ +const char *opal_pmix_ext2x_component_version_string = + "OPAL ext2x MCA component version " OPAL_VERSION; + +/* + * Local function + */ +static int external_register(void); +static int external_open(void); +static int external_close(void); +static int external_component_query(mca_base_module_t **module, int *priority); + + +/* + * Instantiate the public struct with all of our public information + * and pointers to our public functions in it + */ + +mca_pmix_ext2x_component_t mca_pmix_ext2x_component = { + { + /* First, the mca_component_t struct containing meta information + about the component itself */ + + .base_version = { + /* Indicate that we are a pmix v1.1.0 component (which also + implies a specific MCA version) */ + + OPAL_PMIX_BASE_VERSION_2_0_0, + + /* Component name and version */ + + .mca_component_name = "ext2x", + MCA_BASE_MAKE_VERSION(component, OPAL_MAJOR_VERSION, OPAL_MINOR_VERSION, + OPAL_RELEASE_VERSION), + + /* Component open and close functions */ + + .mca_open_component = external_open, + .mca_close_component = external_close, + .mca_query_component = external_component_query, + .mca_register_component_params = external_register + }, + /* Next the MCA v1.0.0 component meta data */ + .base_data = { + /* The component is checkpoint ready */ + MCA_BASE_METADATA_PARAM_CHECKPOINT + } + }, + .native_launch = false +}; + +static int external_register(void) +{ + mca_base_component_t *component = &mca_pmix_ext2x_component.super.base_version; + + mca_pmix_ext2x_component.silence_warning = false; + (void) mca_base_component_var_register (component, "silence_warning", + "Silence warning about PMIX_INSTALL_PREFIX", + MCA_BASE_VAR_TYPE_BOOL, NULL, 0, 0, + OPAL_INFO_LVL_4, + MCA_BASE_VAR_SCOPE_READONLY, + &mca_pmix_ext2x_component.silence_warning); + + return OPAL_SUCCESS; +} + +static int external_open(void) +{ + mca_pmix_ext2x_component.evindex = 0; + OBJ_CONSTRUCT(&mca_pmix_ext2x_component.jobids, opal_list_t); + OBJ_CONSTRUCT(&mca_pmix_ext2x_component.events, opal_list_t); + OBJ_CONSTRUCT(&mca_pmix_ext2x_component.dmdx, opal_list_t); + + return OPAL_SUCCESS; +} + +static int external_close(void) +{ + OPAL_LIST_DESTRUCT(&mca_pmix_ext2x_component.jobids); + OPAL_LIST_DESTRUCT(&mca_pmix_ext2x_component.events); + OPAL_LIST_DESTRUCT(&mca_pmix_ext2x_component.dmdx); + return OPAL_SUCCESS; +} + + +static int external_component_query(mca_base_module_t **module, int *priority) +{ + char *t, *id; + + /* see if a PMIx server is present */ + if (NULL != (t = getenv("PMIX_SERVER_URI")) || + NULL != (id = getenv("PMIX_ID"))) { + /* if PMIx is present, then we are a client and need to use it */ + *priority = 100; + } else { + /* we could be a server, so we still need to be considered */ + *priority = 5; + } + *module = (mca_base_module_t *)&opal_pmix_ext2x_module; + return OPAL_SUCCESS; +} diff --git a/opal/mca/pmix/pmix2x/pmix2x_server_north.c b/opal/mca/pmix/ext2x/ext2x_server_north.c similarity index 83% rename from opal/mca/pmix/pmix2x/pmix2x_server_north.c rename to opal/mca/pmix/ext2x/ext2x_server_north.c index 6505ac7272..0fe3935b1f 100644 --- a/opal/mca/pmix/pmix2x/pmix2x_server_north.c +++ b/opal/mca/pmix/ext2x/ext2x_server_north.c @@ -36,7 +36,7 @@ #include "opal/util/proc.h" #include "opal/util/show_help.h" #include "opal/mca/pmix/base/base.h" -#include "pmix2x.h" +#include "ext2x.h" #include "pmix.h" #include "pmix_server.h" @@ -141,11 +141,11 @@ opal_pmix_server_module_t *host_module = NULL; static void opal_opcbfunc(int status, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy = (pmix2x_opalcaddy_t*)cbdata; + ext2x_opalcaddy_t *opalcaddy = (ext2x_opalcaddy_t*)cbdata; OPAL_ACQUIRE_OBJECT(opalcaddy); if (NULL != opalcaddy->opcbfunc) { - opalcaddy->opcbfunc(pmix2x_convert_opalrc(status), opalcaddy->cbdata); + opalcaddy->opcbfunc(ext2x_convert_opalrc(status), opalcaddy->cbdata); } OBJ_RELEASE(opalcaddy); } @@ -155,33 +155,33 @@ static pmix_status_t server_client_connected_fn(const pmix_proc_t *p, void *serv { int rc; opal_process_name_t proc; - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; if (NULL == host_module || NULL == host_module->client_connected) { return PMIX_SUCCESS; } - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - proc.vpid = pmix2x_convert_rank(p->rank); + proc.vpid = ext2x_convert_rank(p->rank); /* pass it up */ rc = host_module->client_connected(&proc, server_object, opal_opcbfunc, opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static pmix_status_t server_client_finalized_fn(const pmix_proc_t *p, void* server_object, pmix_op_cbfunc_t cbfunc, void *cbdata) { int rc; - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t proc; if (NULL == host_module || NULL == host_module->client_finalized) { @@ -190,12 +190,12 @@ static pmix_status_t server_client_finalized_fn(const pmix_proc_t *p, void* serv /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - proc.vpid = pmix2x_convert_rank(p->rank); + proc.vpid = ext2x_convert_rank(p->rank); /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -208,7 +208,7 @@ static pmix_status_t server_client_finalized_fn(const pmix_proc_t *p, void* serv if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static pmix_status_t server_abort_fn(const pmix_proc_t *p, void *server_object, @@ -220,7 +220,7 @@ static pmix_status_t server_abort_fn(const pmix_proc_t *p, void *server_object, opal_namelist_t *nm; opal_process_name_t proc; int rc; - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; if (NULL == host_module || NULL == host_module->abort) { return PMIX_ERR_NOT_SUPPORTED; @@ -228,9 +228,9 @@ static pmix_status_t server_abort_fn(const pmix_proc_t *p, void *server_object, /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - proc.vpid = pmix2x_convert_rank(p->rank); + proc.vpid = ext2x_convert_rank(p->rank); opal_output_verbose(3, opal_pmix_base_framework.framework_output, "%s CLIENT %s CALLED ABORT", @@ -238,7 +238,7 @@ static pmix_status_t server_abort_fn(const pmix_proc_t *p, void *server_object, OPAL_NAME_PRINT(proc)); /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -248,9 +248,9 @@ static pmix_status_t server_abort_fn(const pmix_proc_t *p, void *server_object, opal_list_append(&opalcaddy->procs, &nm->super); if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, procs[n].nspace))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - nm->name.vpid = pmix2x_convert_rank(procs[n].rank); + nm->name.vpid = ext2x_convert_rank(procs[n].rank); } /* pass it up */ @@ -259,12 +259,12 @@ static pmix_status_t server_abort_fn(const pmix_proc_t *p, void *server_object, if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static void _data_release(void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy = (pmix2x_opalcaddy_t*)cbdata; + ext2x_opalcaddy_t *opalcaddy = (ext2x_opalcaddy_t*)cbdata; if (NULL != opalcaddy->odmdxfunc) { opalcaddy->odmdxfunc(opalcaddy->ocbdata); @@ -276,10 +276,10 @@ static void opmdx_response(int status, const char *data, size_t sz, void *cbdata opal_pmix_release_cbfunc_t relcbfunc, void *relcbdata) { pmix_status_t rc; - pmix2x_opalcaddy_t *opalcaddy = (pmix2x_opalcaddy_t*)cbdata; - opal_pmix2x_dmx_trkr_t *dmdx; + ext2x_opalcaddy_t *opalcaddy = (ext2x_opalcaddy_t*)cbdata; + opal_ext2x_dmx_trkr_t *dmdx; - rc = pmix2x_convert_rc(status); + rc = ext2x_convert_rc(status); if (NULL != opalcaddy->mdxcbfunc) { opalcaddy->odmdxfunc = relcbfunc; opalcaddy->ocbdata = relcbdata; @@ -289,7 +289,7 @@ static void opmdx_response(int status, const char *data, size_t sz, void *cbdata * dmodx requests that we cached and notify them that the * data has arrived */ OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); - while (NULL != (dmdx = (opal_pmix2x_dmx_trkr_t*)opal_list_remove_first(&mca_pmix_pmix2x_component.dmdx))) { + while (NULL != (dmdx = (opal_ext2x_dmx_trkr_t*)opal_list_remove_first(&mca_pmix_ext2x_component.dmdx))) { dmdx->cbfunc(PMIX_SUCCESS, NULL, 0, dmdx->cbdata, NULL, NULL); OBJ_RELEASE(dmdx); } @@ -304,7 +304,7 @@ static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, char *data, size_t ndata, pmix_modex_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; size_t n; opal_namelist_t *nm; opal_value_t *iptr; @@ -317,7 +317,7 @@ static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, return PMIX_ERR_NOT_SUPPORTED; } /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->mdxcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -327,9 +327,9 @@ static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, opal_list_append(&opalcaddy->procs, &nm->super); if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, procs[n].nspace))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - nm->name.vpid = pmix2x_convert_rank(procs[n].rank); + nm->name.vpid = ext2x_convert_rank(procs[n].rank); } /* convert the array of pmix_info_t to the list of info */ @@ -337,9 +337,9 @@ static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, iptr = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &iptr->super); iptr->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(iptr, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(iptr, &info[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -349,7 +349,7 @@ static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, @@ -357,11 +357,11 @@ static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, pmix_modex_cbfunc_t cbfunc, void *cbdata) { int rc; - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t proc; opal_value_t *iptr; size_t n; - opal_pmix2x_dmx_trkr_t *dmdx; + opal_ext2x_dmx_trkr_t *dmdx; if (NULL == host_module || NULL == host_module->direct_modex) { return PMIX_ERR_NOT_SUPPORTED; @@ -369,9 +369,9 @@ static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - proc.vpid = pmix2x_convert_rank(p->rank); + proc.vpid = ext2x_convert_rank(p->rank); opal_output_verbose(3, opal_pmix_base_framework.framework_output, "%s CLIENT %s CALLED DMODX", @@ -379,7 +379,7 @@ static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, OPAL_NAME_PRINT(proc)); /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->mdxcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -392,10 +392,10 @@ static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, * client that the data is available */ if (opal_pmix_base_async_modex && opal_pmix_collect_all_data) { OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); - dmdx = OBJ_NEW(opal_pmix2x_dmx_trkr_t); + dmdx = OBJ_NEW(opal_ext2x_dmx_trkr_t); dmdx->cbfunc = cbfunc; dmdx->cbdata = cbdata; - opal_list_append(&mca_pmix_pmix2x_component.dmdx, &dmdx->super); + opal_list_append(&mca_pmix_ext2x_component.dmdx, &dmdx->super); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return PMIX_SUCCESS; } @@ -405,9 +405,9 @@ static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, iptr = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &iptr->super); iptr->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(iptr, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(iptr, &info[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -419,7 +419,7 @@ static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, if (OPAL_ERR_IN_PROCESS == rc) { rc = OPAL_SUCCESS; } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static pmix_status_t server_publish_fn(const pmix_proc_t *p, @@ -428,7 +428,7 @@ static pmix_status_t server_publish_fn(const pmix_proc_t *p, { int rc; size_t n; - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t proc; opal_value_t *oinfo; @@ -438,9 +438,9 @@ static pmix_status_t server_publish_fn(const pmix_proc_t *p, /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - proc.vpid = pmix2x_convert_rank(p->rank); + proc.vpid = ext2x_convert_rank(p->rank); opal_output_verbose(3, opal_pmix_base_framework.framework_output, "%s CLIENT %s CALLED PUBLISH", @@ -448,7 +448,7 @@ static pmix_status_t server_publish_fn(const pmix_proc_t *p, OPAL_NAME_PRINT(proc)); /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -457,9 +457,9 @@ static pmix_status_t server_publish_fn(const pmix_proc_t *p, oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); oinfo->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &info[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -469,21 +469,21 @@ static pmix_status_t server_publish_fn(const pmix_proc_t *p, OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static void opal_lkupcbfunc(int status, opal_list_t *data, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy = (pmix2x_opalcaddy_t*)cbdata; + ext2x_opalcaddy_t *opalcaddy = (ext2x_opalcaddy_t*)cbdata; pmix_status_t rc; pmix_pdata_t *d=NULL; size_t nd=0, n; opal_pmix_pdata_t *p; if (NULL != opalcaddy->lkupcbfunc) { - rc = pmix2x_convert_opalrc(status); + rc = ext2x_convert_opalrc(status); /* convert any returned data */ if (NULL != data) { nd = opal_list_get_size(data); @@ -492,9 +492,9 @@ static void opal_lkupcbfunc(int status, OPAL_LIST_FOREACH(p, data, opal_pmix_pdata_t) { /* convert the jobid */ (void)opal_snprintf_jobid(d[n].proc.nspace, PMIX_MAX_NSLEN, p->proc.jobid); - d[n].proc.rank = pmix2x_convert_opalrank(p->proc.vpid); + d[n].proc.rank = ext2x_convert_opalrank(p->proc.vpid); (void)strncpy(d[n].key, p->value.key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&d[n].value, &p->value); + ext2x_value_load(&d[n].value, &p->value); } } opalcaddy->lkupcbfunc(rc, d, nd, opalcaddy->cbdata); @@ -508,7 +508,7 @@ static pmix_status_t server_lookup_fn(const pmix_proc_t *p, char **keys, pmix_lookup_cbfunc_t cbfunc, void *cbdata) { int rc; - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t proc; opal_value_t *iptr; size_t n; @@ -519,9 +519,9 @@ static pmix_status_t server_lookup_fn(const pmix_proc_t *p, char **keys, /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - proc.vpid = pmix2x_convert_rank(p->rank); + proc.vpid = ext2x_convert_rank(p->rank); opal_output_verbose(3, opal_pmix_base_framework.framework_output, "%s CLIENT %s CALLED LOOKUP", @@ -529,7 +529,7 @@ static pmix_status_t server_lookup_fn(const pmix_proc_t *p, char **keys, OPAL_NAME_PRINT(proc)); /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->lkupcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -538,9 +538,9 @@ static pmix_status_t server_lookup_fn(const pmix_proc_t *p, char **keys, iptr = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &iptr->super); iptr->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(iptr, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(iptr, &info[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -550,7 +550,7 @@ static pmix_status_t server_lookup_fn(const pmix_proc_t *p, char **keys, OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } @@ -559,7 +559,7 @@ static pmix_status_t server_unpublish_fn(const pmix_proc_t *p, char **keys, pmix_op_cbfunc_t cbfunc, void *cbdata) { int rc; - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t proc; opal_value_t *iptr; size_t n; @@ -570,9 +570,9 @@ static pmix_status_t server_unpublish_fn(const pmix_proc_t *p, char **keys, /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - proc.vpid = pmix2x_convert_rank(p->rank); + proc.vpid = ext2x_convert_rank(p->rank); opal_output_verbose(3, opal_pmix_base_framework.framework_output, "%s CLIENT %s CALLED UNPUBLISH", @@ -580,7 +580,7 @@ static pmix_status_t server_unpublish_fn(const pmix_proc_t *p, char **keys, OPAL_NAME_PRINT(proc)); /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -589,9 +589,9 @@ static pmix_status_t server_unpublish_fn(const pmix_proc_t *p, char **keys, iptr = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &iptr->super); iptr->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(iptr, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(iptr, &info[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -601,17 +601,17 @@ static pmix_status_t server_unpublish_fn(const pmix_proc_t *p, char **keys, OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static void opal_spncbfunc(int status, opal_jobid_t jobid, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy = (pmix2x_opalcaddy_t*)cbdata; + ext2x_opalcaddy_t *opalcaddy = (ext2x_opalcaddy_t*)cbdata; pmix_status_t rc; char nspace[PMIX_MAX_NSLEN]; if (NULL != opalcaddy->spwncbfunc) { - rc = pmix2x_convert_opalrc(status); + rc = ext2x_convert_opalrc(status); /* convert the jobid */ (void)opal_snprintf_jobid(nspace, PMIX_MAX_NSLEN, jobid); opalcaddy->spwncbfunc(rc, nspace, opalcaddy->cbdata); @@ -624,7 +624,7 @@ static pmix_status_t server_spawn_fn(const pmix_proc_t *p, const pmix_app_t apps[], size_t napps, pmix_spawn_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t proc; opal_pmix_app_t *app; opal_value_t *oinfo; @@ -637,12 +637,12 @@ static pmix_status_t server_spawn_fn(const pmix_proc_t *p, /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - proc.vpid = pmix2x_convert_rank(p->rank); + proc.vpid = ext2x_convert_rank(p->rank); /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->spwncbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -651,9 +651,9 @@ static pmix_status_t server_spawn_fn(const pmix_proc_t *p, oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); oinfo->key = strdup(job_info[k].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &job_info[k].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &job_info[k].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -678,9 +678,9 @@ static pmix_status_t server_spawn_fn(const pmix_proc_t *p, oinfo = OBJ_NEW(opal_value_t); opal_list_append(&app->info, &oinfo->super); oinfo->key = strdup(apps[n].info[k].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &apps[n].info[k].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &apps[n].info[k].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } } @@ -692,7 +692,7 @@ static pmix_status_t server_spawn_fn(const pmix_proc_t *p, OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } @@ -701,7 +701,7 @@ static pmix_status_t server_connect_fn(const pmix_proc_t procs[], size_t nprocs, pmix_op_cbfunc_t cbfunc, void *cbdata) { int rc; - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_namelist_t *nm; size_t n; opal_value_t *oinfo; @@ -711,7 +711,7 @@ static pmix_status_t server_connect_fn(const pmix_proc_t procs[], size_t nprocs, } /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -721,9 +721,9 @@ static pmix_status_t server_connect_fn(const pmix_proc_t procs[], size_t nprocs, opal_list_append(&opalcaddy->procs, &nm->super); if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, procs[n].nspace))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - nm->name.vpid = pmix2x_convert_rank(procs[n].rank); + nm->name.vpid = ext2x_convert_rank(procs[n].rank); } /* convert the info */ @@ -731,9 +731,9 @@ static pmix_status_t server_connect_fn(const pmix_proc_t procs[], size_t nprocs, oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); oinfo->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &info[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -743,7 +743,7 @@ static pmix_status_t server_connect_fn(const pmix_proc_t procs[], size_t nprocs, OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } @@ -752,7 +752,7 @@ static pmix_status_t server_disconnect_fn(const pmix_proc_t procs[], size_t npro pmix_op_cbfunc_t cbfunc, void *cbdata) { int rc; - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_namelist_t *nm; size_t n; opal_value_t *oinfo; @@ -762,7 +762,7 @@ static pmix_status_t server_disconnect_fn(const pmix_proc_t procs[], size_t npro } /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -772,9 +772,9 @@ static pmix_status_t server_disconnect_fn(const pmix_proc_t procs[], size_t npro opal_list_append(&opalcaddy->procs, &nm->super); if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, procs[n].nspace))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - nm->name.vpid = pmix2x_convert_rank(procs[n].rank); + nm->name.vpid = ext2x_convert_rank(procs[n].rank); } /* convert the info */ @@ -782,9 +782,9 @@ static pmix_status_t server_disconnect_fn(const pmix_proc_t procs[], size_t npro oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); oinfo->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &info[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -794,14 +794,14 @@ static pmix_status_t server_disconnect_fn(const pmix_proc_t procs[], size_t npro OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static pmix_status_t server_register_events(pmix_status_t *codes, size_t ncodes, const pmix_info_t info[], size_t ninfo, pmix_op_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; size_t n; opal_value_t *oinfo; int rc; @@ -811,7 +811,7 @@ static pmix_status_t server_register_events(pmix_status_t *codes, size_t ncodes, OPAL_NAME_PRINT(OPAL_PROC_MY_NAME)); /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -820,9 +820,9 @@ static pmix_status_t server_register_events(pmix_status_t *codes, size_t ncodes, oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); oinfo->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &info[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -832,7 +832,7 @@ static pmix_status_t server_register_events(pmix_status_t *codes, size_t ncodes, OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static pmix_status_t server_deregister_events(pmix_status_t *codes, size_t ncodes, @@ -850,7 +850,7 @@ static pmix_status_t server_notify_event(pmix_status_t code, pmix_info_t info[], size_t ninfo, pmix_op_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t src; size_t n; opal_value_t *oinfo; @@ -861,19 +861,19 @@ static pmix_status_t server_notify_event(pmix_status_t code, } /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; /* convert the code */ - status = pmix2x_convert_rc(code); + status = ext2x_convert_rc(code); /* convert the source */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&src.jobid, source->nspace))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - src.vpid = pmix2x_convert_rank(source->rank); + src.vpid = ext2x_convert_rank(source->rank); opal_output_verbose(3, opal_pmix_base_framework.framework_output, "%s CLIENT %s CALLED NOTIFY", @@ -887,9 +887,9 @@ static pmix_status_t server_notify_event(pmix_status_t code, oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); oinfo->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &info[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -898,12 +898,12 @@ static pmix_status_t server_notify_event(pmix_status_t code, opal_opcbfunc, opalcaddy))) { OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static void _info_rel(void *cbdata) { - pmix2x_opcaddy_t *pcaddy = (pmix2x_opcaddy_t*)cbdata; + ext2x_opcaddy_t *pcaddy = (ext2x_opcaddy_t*)cbdata; OBJ_RELEASE(pcaddy); } @@ -913,15 +913,15 @@ static void info_cbfunc(int status, opal_pmix_release_cbfunc_t release_fn, void *release_cbdata) { - pmix2x_opalcaddy_t *opalcaddy = (pmix2x_opalcaddy_t*)cbdata; - pmix2x_opcaddy_t *pcaddy; + ext2x_opalcaddy_t *opalcaddy = (ext2x_opalcaddy_t*)cbdata; + ext2x_opcaddy_t *pcaddy; opal_value_t *kv; size_t n; - pcaddy = OBJ_NEW(pmix2x_opcaddy_t); + pcaddy = OBJ_NEW(ext2x_opcaddy_t); /* convert the status */ - pcaddy->status = pmix2x_convert_opalrc(status); + pcaddy->status = ext2x_convert_opalrc(status); /* convert the list to a pmix_info_t array */ if (NULL != info && 0 < (pcaddy->ninfo = opal_list_get_size(info))) { @@ -929,7 +929,7 @@ static void info_cbfunc(int status, n = 0; OPAL_LIST_FOREACH(kv, info, opal_value_t) { (void)strncpy(pcaddy->info[n].key, kv->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&pcaddy->info[n].value, kv); + ext2x_value_load(&pcaddy->info[n].value, kv); } } /* we are done with the incoming data */ @@ -950,7 +950,7 @@ static pmix_status_t server_query(pmix_proc_t *proct, pmix_info_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t requestor; int rc; size_t n, m; @@ -962,16 +962,16 @@ static pmix_status_t server_query(pmix_proc_t *proct, } /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->infocbfunc = cbfunc; opalcaddy->cbdata = cbdata; /* convert the requestor */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&requestor.jobid, proct->nspace))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - requestor.vpid = pmix2x_convert_rank(proct->rank); + requestor.vpid = ext2x_convert_rank(proct->rank); opal_output_verbose(3, opal_pmix_base_framework.framework_output, "%s CLIENT %s CALLED QUERY", @@ -989,9 +989,9 @@ static pmix_status_t server_query(pmix_proc_t *proct, oinfo = OBJ_NEW(opal_value_t); opal_list_append(&q->qualifiers, &oinfo->super); oinfo->key = strdup(queries[n].qualifiers[m].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &queries[n].qualifiers[m].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &queries[n].qualifiers[m].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } } @@ -1003,32 +1003,32 @@ static pmix_status_t server_query(pmix_proc_t *proct, OBJ_RELEASE(opalcaddy); } - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } static void toolcbfunc(int status, opal_process_name_t proc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy = (pmix2x_opalcaddy_t*)cbdata; + ext2x_opalcaddy_t *opalcaddy = (ext2x_opalcaddy_t*)cbdata; pmix_status_t rc; pmix_proc_t p; - opal_pmix2x_jobid_trkr_t *job; + opal_ext2x_jobid_trkr_t *job; /* convert the status */ - rc = pmix2x_convert_opalrc(status); + rc = ext2x_convert_opalrc(status); memset(&p, 0, sizeof(pmix_proc_t)); if (OPAL_SUCCESS == status) { /* convert the process name */ (void)opal_snprintf_jobid(p.nspace, PMIX_MAX_NSLEN, proc.jobid); - p.rank = pmix2x_convert_opalrank(proc.vpid); + p.rank = ext2x_convert_opalrank(proc.vpid); /* store this job in our list of known nspaces */ - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); (void)strncpy(job->nspace, p.nspace, PMIX_MAX_NSLEN); job->jobid = proc.jobid; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); } @@ -1043,14 +1043,14 @@ static void server_tool_connection(pmix_info_t *info, size_t ninfo, pmix_tool_connection_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; size_t n; opal_value_t *oinfo; int rc; pmix_status_t err; /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->toolcbfunc = cbfunc; opalcaddy->cbdata = cbdata; @@ -1059,9 +1059,9 @@ static void server_tool_connection(pmix_info_t *info, size_t ninfo, oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); oinfo->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &info[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &info[n].value))) { OBJ_RELEASE(opalcaddy); - err = pmix2x_convert_opalrc(rc); + err = ext2x_convert_opalrc(rc); if (NULL != cbfunc) { cbfunc(err, NULL, cbdata); } @@ -1077,7 +1077,7 @@ static void server_log(const pmix_proc_t *proct, const pmix_info_t directives[], size_t ndirs, pmix_op_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t requestor; int rc; size_t n; @@ -1092,20 +1092,20 @@ static void server_log(const pmix_proc_t *proct, } /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; /* convert the requestor */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&requestor.jobid, proct->nspace))) { OBJ_RELEASE(opalcaddy); - ret = pmix2x_convert_opalrc(rc); + ret = ext2x_convert_opalrc(rc); if (NULL != cbfunc) { cbfunc(ret, cbdata); } return; } - requestor.vpid = pmix2x_convert_rank(proct->rank); + requestor.vpid = ext2x_convert_rank(proct->rank); /* convert the data */ for (n=0; n < ndata; n++) { @@ -1114,9 +1114,9 @@ static void server_log(const pmix_proc_t *proct, /* we "borrow" the info field of the caddy as we and the * server function both agree on what will be there */ opal_list_append(&opalcaddy->info, &oinfo->super); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &data[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &data[n].value))) { OBJ_RELEASE(opalcaddy); - ret = pmix2x_convert_opalrc(rc); + ret = ext2x_convert_opalrc(rc); if (NULL != cbfunc) { cbfunc(ret, cbdata); } @@ -1130,9 +1130,9 @@ static void server_log(const pmix_proc_t *proct, /* we "borrow" the apps field of the caddy as we and the * server function both agree on what will be there */ opal_list_append(&opalcaddy->apps, &oinfo->super); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &directives[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &directives[n].value))) { OBJ_RELEASE(opalcaddy); - ret = pmix2x_convert_opalrc(rc); + ret = ext2x_convert_opalrc(rc); if (NULL != cbfunc) { cbfunc(ret, cbdata); } @@ -1152,7 +1152,7 @@ static pmix_status_t server_allocate(const pmix_proc_t *proct, const pmix_info_t data[], size_t ndata, pmix_info_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t requestor; int rc; size_t n; @@ -1164,27 +1164,27 @@ static pmix_status_t server_allocate(const pmix_proc_t *proct, } /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->infocbfunc = cbfunc; opalcaddy->cbdata = cbdata; /* convert the requestor */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&requestor.jobid, proct->nspace))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - requestor.vpid = pmix2x_convert_rank(proct->rank); + requestor.vpid = ext2x_convert_rank(proct->rank); /* convert the directive */ - odir = pmix2x_convert_allocdir(directive); + odir = ext2x_convert_allocdir(directive); /* convert the data */ for (n=0; n < ndata; n++) { oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &data[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &data[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -1193,7 +1193,7 @@ static pmix_status_t server_allocate(const pmix_proc_t *proct, &opalcaddy->info, info_cbfunc, opalcaddy))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } return PMIX_SUCCESS; @@ -1205,7 +1205,7 @@ static pmix_status_t server_job_control(const pmix_proc_t *proct, const pmix_info_t directives[], size_t ndirs, pmix_info_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opalcaddy_t *opalcaddy; + ext2x_opalcaddy_t *opalcaddy; opal_process_name_t requestor; int rc; size_t n; @@ -1217,16 +1217,16 @@ static pmix_status_t server_job_control(const pmix_proc_t *proct, } /* setup the caddy */ - opalcaddy = OBJ_NEW(pmix2x_opalcaddy_t); + opalcaddy = OBJ_NEW(ext2x_opalcaddy_t); opalcaddy->infocbfunc = cbfunc; opalcaddy->cbdata = cbdata; /* convert the requestor */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&requestor.jobid, proct->nspace))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - requestor.vpid = pmix2x_convert_rank(proct->rank); + requestor.vpid = ext2x_convert_rank(proct->rank); /* convert the targets */ for (n=0; n < ntargets; n++) { @@ -1234,9 +1234,9 @@ static pmix_status_t server_job_control(const pmix_proc_t *proct, opal_list_append(&opalcaddy->procs, &nm->super); if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, targets[n].nspace))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } - nm->name.vpid = pmix2x_convert_rank(targets[n].rank); + nm->name.vpid = ext2x_convert_rank(targets[n].rank); } /* convert the directives */ @@ -1244,9 +1244,9 @@ static pmix_status_t server_job_control(const pmix_proc_t *proct, oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); oinfo->key = strdup(directives[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(oinfo, &directives[n].value))) { + if (OPAL_SUCCESS != (rc = ext2x_value_unload(oinfo, &directives[n].value))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } } @@ -1256,7 +1256,7 @@ static pmix_status_t server_job_control(const pmix_proc_t *proct, &opalcaddy->info, info_cbfunc, opalcaddy))) { OBJ_RELEASE(opalcaddy); - return pmix2x_convert_opalrc(rc); + return ext2x_convert_opalrc(rc); } return PMIX_SUCCESS; diff --git a/opal/mca/pmix/ext2x/ext2x_server_south.c b/opal/mca/pmix/ext2x/ext2x_server_south.c new file mode 100644 index 0000000000..3431713011 --- /dev/null +++ b/opal/mca/pmix/ext2x/ext2x_server_south.c @@ -0,0 +1,560 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ +/* + * Copyright (c) 2014-2017 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2017 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * Copyright (c) 2014-2016 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2017 Mellanox Technologies, Inc. + * All rights reserved. + * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. + * Copyright (c) 2017 Los Alamos National Security, LLC. All rights + * reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "opal_config.h" +#include "opal/constants.h" +#include "opal/types.h" + +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#include "opal/dss/dss.h" +#include "opal/mca/event/event.h" +#include "opal/mca/hwloc/base/base.h" +#include "opal/runtime/opal.h" +#include "opal/runtime/opal_progress_threads.h" +#include "opal/threads/threads.h" +#include "opal/util/argv.h" +#include "opal/util/error.h" +#include "opal/util/output.h" +#include "opal/util/opal_environ.h" +#include "opal/util/proc.h" +#include "opal/util/show_help.h" +#include "opal/mca/pmix/base/base.h" +#include "ext2x.h" + +#include "pmix.h" +#include "pmix_server.h" + +/**** S.O.U.T.H.B.O.U.N.D I.N.T.E.R.F.A.C.E.S ****/ + +/* These are the interfaces used by the OMPI/ORTE/OPAL layer to call + * down into the embedded PMIx server. */ + +extern pmix_server_module_t mymodule; +extern opal_pmix_server_module_t *host_module; +static char *dbgvalue=NULL; + +static void errreg_cbfunc (pmix_status_t status, + size_t errhandler_ref, + void *cbdata) +{ + opal_ext2x_event_t *ev = (opal_ext2x_event_t*)cbdata; + + OPAL_ACQUIRE_OBJECT(ev); + ev->index = errhandler_ref; + opal_output_verbose(5, opal_pmix_base_framework.framework_output, + "PMIX server errreg_cbfunc - error handler registered status=%d, reference=%lu", + status, (unsigned long)errhandler_ref); + OPAL_POST_OBJECT(ev); + OPAL_PMIX_WAKEUP_THREAD(&ev->lock); +} + +static void opcbfunc(pmix_status_t status, void *cbdata) +{ + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; + + OPAL_ACQUIRE_OBJECT(op); + + if (NULL != op->opcbfunc) { + op->opcbfunc(ext2x_convert_rc(status), op->cbdata); + } + OBJ_RELEASE(op); +} + +static void lkcbfunc(pmix_status_t status, void *cbdata) +{ + opal_pmix_lock_t *lk = (opal_pmix_lock_t*)cbdata; + + OPAL_POST_OBJECT(lk); + OPAL_PMIX_WAKEUP_THREAD(lk); +} + +int ext2x_server_init(opal_pmix_server_module_t *module, + opal_list_t *info) +{ + pmix_status_t rc; + int dbg; + opal_value_t *kv; + pmix_info_t *pinfo; + size_t sz, n; + opal_ext2x_event_t *event; + opal_ext2x_jobid_trkr_t *job; + opal_pmix_lock_t lk; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + + if (0 == opal_pmix_base.initialized) { + if (0 < (dbg = opal_output_get_verbosity(opal_pmix_base_framework.framework_output))) { + asprintf(&dbgvalue, "PMIX_DEBUG=%d", dbg); + putenv(dbgvalue); + } + /* check the evars for a mismatch */ + if (OPAL_SUCCESS != (dbg = opal_pmix_ext2x_check_evars())) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return dbg; + } + } + ++opal_pmix_base.initialized; + + /* convert the list to an array of pmix_info_t */ + sz = 2 + ((NULL==info)?0:opal_list_get_size(info)); + PMIX_INFO_CREATE(pinfo, sz); + n = 0; + if (NULL != info) { + OPAL_LIST_FOREACH(kv, info, opal_value_t) { + (void)strncpy(pinfo[n].key, kv->key, PMIX_MAX_KEYLEN); + ext2x_value_load(&pinfo[n].value, kv); + ++n; + } + } + + /* insert ourselves into our list of jobids - it will be the + * first, and so we'll check it first */ + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); + (void)opal_snprintf_jobid(job->nspace, PMIX_MAX_NSLEN, OPAL_PROC_MY_NAME.jobid); + job->jobid = OPAL_PROC_MY_NAME.jobid; + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* add our nspace and rank to the array going down to the PMIx server */ + PMIX_INFO_LOAD(&pinfo[sz-2], PMIX_SERVER_NSPACE, job->nspace, PMIX_STRING); + PMIX_INFO_LOAD(&pinfo[sz-1], PMIX_SERVER_RANK, &OPAL_PROC_MY_NAME.vpid, PMIX_PROC_RANK); + if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule, pinfo, sz))) { + PMIX_INFO_FREE(pinfo, sz); + return ext2x_convert_rc(rc); + } + PMIX_INFO_FREE(pinfo, sz); + + /* record the host module */ + host_module = module; + + /* register the default event handler */ + event = OBJ_NEW(opal_ext2x_event_t); + opal_list_append(&mca_pmix_ext2x_component.events, &event->super); + PMIX_INFO_CREATE(pinfo, 1); + PMIX_INFO_LOAD(&pinfo[0], PMIX_EVENT_HDLR_NAME, "OPAL-PMIX-2X-SERVER-DEFAULT", PMIX_STRING); + PMIx_Register_event_handler(NULL, 0, pinfo, 1, ext2x_event_hdlr, errreg_cbfunc, (void*)event); + OPAL_PMIX_WAIT_THREAD(&event->lock); + PMIX_INFO_FREE(pinfo, 1); + + /* as we might want to use some client-side functions, be sure + * to register our own nspace */ + OPAL_PMIX_CONSTRUCT_LOCK(&lk); + PMIX_INFO_CREATE(pinfo, 1); + PMIX_INFO_LOAD(&pinfo[0], PMIX_REGISTER_NODATA, NULL, PMIX_BOOL); + PMIx_server_register_nspace(job->nspace, 1, pinfo, 1, lkcbfunc, (void*)&lk); + OPAL_PMIX_WAIT_THREAD(&lk); + OPAL_PMIX_DESTRUCT_LOCK(&lk); + PMIX_INFO_FREE(pinfo, 1); + + return OPAL_SUCCESS; +} + +static void dereg_cbfunc(pmix_status_t st, void *cbdata) +{ + opal_ext2x_event_t *ev = (opal_ext2x_event_t*)cbdata; + OPAL_PMIX_WAKEUP_THREAD(&ev->lock); +} + +int ext2x_server_finalize(void) +{ + pmix_status_t rc; + opal_ext2x_event_t *event, *ev2; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + --opal_pmix_base.initialized; + + if (0 < opal_pmix_base.initialized) { + /* deregister all event handlers */ + OPAL_LIST_FOREACH_SAFE(event, ev2, &mca_pmix_ext2x_component.events, opal_ext2x_event_t) { + OPAL_PMIX_DESTRUCT_LOCK(&event->lock); + OPAL_PMIX_CONSTRUCT_LOCK(&event->lock); + PMIx_Deregister_event_handler(event->index, dereg_cbfunc, (void*)event); + OPAL_PMIX_WAIT_THREAD(&event->lock); + opal_list_remove_item(&mca_pmix_ext2x_component.events, &event->super); + OBJ_RELEASE(event); + } + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + rc = PMIx_server_finalize(); + return ext2x_convert_rc(rc); +} + +int ext2x_server_gen_regex(const char *input, char **regex) +{ + pmix_status_t rc; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + rc = PMIx_generate_regex(input, regex); + return ext2x_convert_rc(rc); +} + + +int ext2x_server_gen_ppn(const char *input, char **ppn) +{ + pmix_status_t rc; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + rc = PMIx_generate_ppn(input, ppn); + return ext2x_convert_rc(rc); +} + +int ext2x_server_register_nspace(opal_jobid_t jobid, + int nlocalprocs, + opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata) +{ + opal_value_t *kv, *k2; + pmix_info_t *pinfo = NULL, *pmap; + size_t sz, szmap, m, n; + char nspace[PMIX_MAX_NSLEN]; + pmix_status_t rc; + opal_list_t *pmapinfo; + opal_ext2x_jobid_trkr_t *job; + opal_pmix_lock_t lock; + int ret; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + /* convert the jobid */ + (void)opal_snprintf_jobid(nspace, PMIX_MAX_NSLEN, jobid); + + /* store this job in our list of known nspaces */ + job = OBJ_NEW(opal_ext2x_jobid_trkr_t); + (void)strncpy(job->nspace, nspace, PMIX_MAX_NSLEN); + job->jobid = jobid; + opal_list_append(&mca_pmix_ext2x_component.jobids, &job->super); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* convert the list to an array of pmix_info_t */ + if (NULL != info && 0 < (sz = opal_list_get_size(info))) { + PMIX_INFO_CREATE(pinfo, sz); + n = 0; + OPAL_LIST_FOREACH(kv, info, opal_value_t) { + (void)strncpy(pinfo[n].key, kv->key, PMIX_MAX_KEYLEN); + if (0 == strcmp(kv->key, OPAL_PMIX_PROC_DATA)) { + pinfo[n].value.type = PMIX_DATA_ARRAY; + /* the value contains a list of values - convert + * that list to another array */ + pmapinfo = (opal_list_t*)kv->data.ptr; + szmap = opal_list_get_size(pmapinfo); + if (0 < szmap) { + PMIX_INFO_CREATE(pmap, szmap); + pinfo[n].value.data.darray = (pmix_data_array_t*)calloc(1, sizeof(pmix_data_array_t)); + pinfo[n].value.data.darray->type = PMIX_INFO; + pinfo[n].value.data.darray->array = (struct pmix_info_t*)pmap; + pinfo[n].value.data.darray->size = szmap; + m = 0; + OPAL_LIST_FOREACH(k2, pmapinfo, opal_value_t) { + (void)strncpy(pmap[m].key, k2->key, PMIX_MAX_KEYLEN); + ext2x_value_load(&pmap[m].value, k2); + ++m; + } + } + OPAL_LIST_RELEASE(pmapinfo); + } else { + ext2x_value_load(&pinfo[n].value, kv); + } + ++n; + } + } else { + sz = 0; + pinfo = NULL; + } + + OPAL_PMIX_CONSTRUCT_LOCK(&lock); + rc = PMIx_server_register_nspace(nspace, nlocalprocs, pinfo, sz, + lkcbfunc, (void*)&lock); + if (PMIX_SUCCESS == rc) { + OPAL_PMIX_WAIT_THREAD(&lock); + } + OPAL_PMIX_DESTRUCT_LOCK(&lock); + + if (NULL != pinfo) { + PMIX_INFO_FREE(pinfo, sz); + } + + ret = ext2x_convert_rc(rc); + + /* release the caller */ + if (NULL != cbfunc) { + cbfunc(ret, cbdata); + } + return ret; +} + +void ext2x_server_deregister_nspace(opal_jobid_t jobid, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata) +{ + opal_ext2x_jobid_trkr_t *jptr; + opal_pmix_lock_t lock; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + /* release the caller */ + if (NULL != cbfunc) { + cbfunc(OPAL_ERR_NOT_INITIALIZED, cbdata); + } + return; + } + + /* if we don't already have it, we can ignore this */ + OPAL_LIST_FOREACH(jptr, &mca_pmix_ext2x_component.jobids, opal_ext2x_jobid_trkr_t) { + if (jptr->jobid == jobid) { + /* found it - tell the server to deregister */ + OPAL_PMIX_CONSTRUCT_LOCK(&lock); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + PMIx_server_deregister_nspace(jptr->nspace, lkcbfunc, (void*)&lock); + OPAL_PMIX_WAIT_THREAD(&lock); + OPAL_PMIX_DESTRUCT_LOCK(&lock); + /* now get rid of it from our list */ + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + opal_list_remove_item(&mca_pmix_ext2x_component.jobids, &jptr->super); + OBJ_RELEASE(jptr); + break; + } + } + + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + /* release the caller */ + if (NULL != cbfunc) { + cbfunc(OPAL_SUCCESS, cbdata); + } +} + +int ext2x_server_register_client(const opal_process_name_t *proc, + uid_t uid, gid_t gid, + void *server_object, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata) +{ + pmix_status_t rc; + pmix_proc_t p; + opal_pmix_lock_t lock; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* convert the jobid */ + (void)opal_snprintf_jobid(p.nspace, PMIX_MAX_NSLEN, proc->jobid); + p.rank = ext2x_convert_opalrank(proc->vpid); + + OPAL_PMIX_CONSTRUCT_LOCK(&lock); + rc = PMIx_server_register_client(&p, uid, gid, server_object, + lkcbfunc, (void*)&lock); + if (PMIX_SUCCESS == rc) { + OPAL_PMIX_WAIT_THREAD(&lock); + } + OPAL_PMIX_DESTRUCT_LOCK(&lock); + return ext2x_convert_rc(rc); +} + +/* tell the local PMIx server to cleanup this client as it is + * done executing */ +void ext2x_server_deregister_client(const opal_process_name_t *proc, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata) +{ + opal_ext2x_jobid_trkr_t *jptr; + pmix_proc_t p; + opal_pmix_lock_t lock; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + if (NULL != cbfunc) { + cbfunc(OPAL_ERR_NOT_INITIALIZED, cbdata); + } + return; + } + + /* if we don't already have it, we can ignore this */ + OPAL_LIST_FOREACH(jptr, &mca_pmix_ext2x_component.jobids, opal_ext2x_jobid_trkr_t) { + if (jptr->jobid == proc->jobid) { + /* found it - tell the server to deregister */ + (void)strncpy(p.nspace, jptr->nspace, PMIX_MAX_NSLEN); + p.rank = ext2x_convert_opalrank(proc->vpid); + OPAL_PMIX_CONSTRUCT_LOCK(&lock); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + PMIx_server_deregister_client(&p, lkcbfunc, (void*)&lock); + OPAL_PMIX_WAIT_THREAD(&lock); + OPAL_PMIX_DESTRUCT_LOCK(&lock); + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + break; + } + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + if (NULL != cbfunc) { + cbfunc(OPAL_SUCCESS, cbdata); + } +} + +/* have the local PMIx server setup the environment for this client */ +int ext2x_server_setup_fork(const opal_process_name_t *proc, char ***env) +{ + pmix_status_t rc; + pmix_proc_t p; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* convert the jobid */ + (void)opal_snprintf_jobid(p.nspace, PMIX_MAX_NSLEN, proc->jobid); + p.rank = ext2x_convert_opalrank(proc->vpid); + + rc = PMIx_server_setup_fork(&p, env); + return ext2x_convert_rc(rc); +} + +/* this is the call back up from the embedded PMIx server that + * will contain the returned data. Note that the embedded server + * "owns" the data and will free it upon return from this function */ +static void dmdx_response(pmix_status_t status, char *data, size_t sz, void *cbdata) +{ + int rc; + ext2x_opcaddy_t *op = (ext2x_opcaddy_t*)cbdata; + + rc = ext2x_convert_rc(status); + if (NULL != op->mdxcbfunc) { + op->mdxcbfunc(rc, data, sz, op->cbdata, NULL, NULL); + } + OBJ_RELEASE(op); +} + +/* request modex data for a local proc from the PMIx server */ +int ext2x_server_dmodex(const opal_process_name_t *proc, + opal_pmix_modex_cbfunc_t cbfunc, void *cbdata) +{ + ext2x_opcaddy_t *op; + pmix_status_t rc; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* setup the caddy */ + op = OBJ_NEW(ext2x_opcaddy_t); + op->mdxcbfunc = cbfunc; + op->cbdata = cbdata; + + /* convert the jobid */ + (void)opal_snprintf_jobid(op->p.nspace, PMIX_MAX_NSLEN, proc->jobid); + op->p.rank = ext2x_convert_opalrank(proc->vpid); + + /* find the internally-cached data for this proc */ + rc = PMIx_server_dmodex_request(&op->p, dmdx_response, op); + if (PMIX_SUCCESS != rc) { + OBJ_RELEASE(op); + } + return ext2x_convert_rc(rc); +} + +/* tell the PMIx server to notify its local clients of an event */ +int ext2x_server_notify_event(int status, + const opal_process_name_t *source, + opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + opal_value_t *kv; + pmix_info_t *pinfo; + size_t sz, n; + pmix_status_t rc; + ext2x_opcaddy_t *op; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* convert the list to an array of pmix_info_t */ + if (NULL != info && 0 < (sz = opal_list_get_size(info))) { + PMIX_INFO_CREATE(pinfo, sz); + n = 0; + OPAL_LIST_FOREACH(kv, info, opal_value_t) { + (void)strncpy(pinfo[n].key, kv->key, PMIX_MAX_KEYLEN); + ext2x_value_load(&pinfo[n].value, kv); + ++n; + } + } else { + sz = 0; + pinfo = NULL; + } + /* setup the caddy */ + op = OBJ_NEW(ext2x_opcaddy_t); + op->info = pinfo; + op->sz = sz; + op->opcbfunc = cbfunc; + op->cbdata = cbdata; + /* convert the jobid */ + if (NULL == source) { + (void)opal_snprintf_jobid(op->p.nspace, PMIX_MAX_NSLEN, OPAL_JOBID_INVALID); + op->p.rank = ext2x_convert_opalrank(OPAL_VPID_INVALID); + } else { + (void)opal_snprintf_jobid(op->p.nspace, PMIX_MAX_NSLEN, source->jobid); + op->p.rank = ext2x_convert_opalrank(source->vpid); + } + + + rc = ext2x_convert_opalrc(status); + /* the range must be nonlocal so the server will pass + * the event down to its local clients */ + rc = PMIx_Notify_event(rc, &op->p, PMIX_RANGE_SESSION, + pinfo, sz, opcbfunc, op); + if (PMIX_SUCCESS != rc) { + OBJ_RELEASE(op); + } + return ext2x_convert_rc(rc); +} diff --git a/opal/mca/pmix/ext3x/Makefile.am b/opal/mca/pmix/ext3x/Makefile.am new file mode 100644 index 0000000000..c13fa42512 --- /dev/null +++ b/opal/mca/pmix/ext3x/Makefile.am @@ -0,0 +1,72 @@ +# +# Copyright (c) 2014-2017 Intel, Inc. All rights reserved. +# Copyright (c) 2015 Cisco Systems, Inc. All rights reserved. +# Copyright (c) 2015 Research Organization for Information Science +# and Technology (RIST). All rights reserved. +# Copyright (c) 2017 IBM Corporation. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +dist_opaldata_DATA = help-pmix-ext3x.txt + +sources = \ + ext3x_local.c + +nodist_headers = \ + ext3x.h + +nodist_sources = \ + ext3x.c \ + ext3x_client.c \ + ext3x_component.c \ + ext3x_server_north.c \ + ext3x_server_south.c + +# Make the output library in this directory, and name it either +# mca__.la (for DSO builds) or libmca__.la +# (for static builds). + +if MCA_BUILD_opal_pmix_ext3x_DSO +component_noinst = +component_install = mca_pmix_ext3x.la +else +component_noinst = libmca_pmix_ext3x.la +component_install = +endif + +# +# Generate ext3x sources from the pmix3x component +# +$(nodist_headers): + pmix3xname=`echo $@ | sed -e s/ext3x/pmix3x/g` ; \ + $(SED) 's/pmix3x/ext3x/g' $(top_srcdir)/opal/mca/pmix/pmix3x/$$pmix3xname > $@ + +$(sources): $(nodist_headers) + +$(nodist_sources): $(nodist_headers) + pmix3xname=`echo $@ | sed -e s/ext3x/pmix3x/g` ; \ + $(SED) 's/pmix3x/ext3x/g' $(top_srcdir)/opal/mca/pmix/pmix3x/$$pmix3xname > $@ + +mcacomponentdir = $(opallibdir) +mcacomponent_LTLIBRARIES = $(component_install) +mca_pmix_ext3x_la_SOURCES = $(sources) +nodist_mca_pmix_ext3x_la_SOURCES = $(nodist_sources) +mca_pmix_ext3x_la_CFLAGS = $(opal_pmix_ext3x_CFLAGS) +mca_pmix_ext3x_la_CPPFLAGS =$(opal_pmix_ext3x_CPPFLAGS) +mca_pmix_ext3x_la_LDFLAGS = -module -avoid-version $(opal_pmix_ext3x_LDFLAGS) +mca_pmix_ext3x_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la \ + $(opal_pmix_ext3x_LIBS) + +noinst_LTLIBRARIES = $(component_noinst) +libmca_pmix_ext3x_la_SOURCES =$(sources) +libmca_pmix_ext3x_la_CFLAGS = $(opal_pmix_ext3x_CFLAGS) +libmca_pmix_ext3x_la_CPPFLAGS = $(opal_pmix_ext3x_CPPFLAGS) +libmca_pmix_ext3x_la_LDFLAGS = -module -avoid-version $(opal_pmix_ext3x_LDFLAGS) +libmca_pmix_ext3x_la_LIBADD = $(opal_pmix_ext3x_LIBS) + +clean-local: + $(RM) -f $(nodist_sources) $(nodist_headers) diff --git a/opal/mca/pmix/pmix2x/common_sym_whitelist.txt b/opal/mca/pmix/ext3x/common_sym_whitelist.txt similarity index 100% rename from opal/mca/pmix/pmix2x/common_sym_whitelist.txt rename to opal/mca/pmix/ext3x/common_sym_whitelist.txt diff --git a/opal/mca/pmix/ext3x/configure.m4 b/opal/mca/pmix/ext3x/configure.m4 new file mode 100644 index 0000000000..acfda71112 --- /dev/null +++ b/opal/mca/pmix/ext3x/configure.m4 @@ -0,0 +1,63 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana +# University Research and Technology +# Corporation. All rights reserved. +# 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, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# Copyright (c) 2011-2013 Los Alamos National Security, LLC. +# All rights reserved. +# Copyright (c) 2010-2015 Cisco Systems, Inc. All rights reserved. +# Copyright (c) 2013-2017 Intel, Inc. All rights reserved. +# Copyright (c) 2015-2017 Research Organization for Information Science +# and Technology (RIST). All rights reserved. +# Copyright (c) 2014-2015 Mellanox Technologies, Inc. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# MCA_pmix_ext3x_CONFIG([action-if-found], [action-if-not-found]) +# ----------------------------------------------------------- +AC_DEFUN([MCA_opal_pmix_ext3x_CONFIG],[ + AC_CONFIG_FILES([opal/mca/pmix/ext3x/Makefile]) + + AS_IF([test "$opal_external_pmix_happy" = "yes"], + [ # check for the 3.x version + AC_MSG_CHECKING([if external component is version 3.x]) + AS_IF([test "$opal_external_pmix_version" = "3x"], + [AC_MSG_RESULT([yes]) + AS_IF([test "$opal_event_external_support" != "yes"], + [AC_MSG_WARN([EXTERNAL PMIX SUPPORT REQUIRES USE OF EXTERNAL LIBEVENT]) + AC_MSG_WARN([LIBRARY. THIS LIBRARY MUST POINT TO THE SAME ONE USED]) + AC_MSG_WARN([TO BUILD PMIX OR ELSE UNPREDICTABLE BEHAVIOR MAY RESULT]) + AC_MSG_ERROR([PLEASE CORRECT THE CONFIGURE COMMAND LINE AND REBUILD])]) + opal_pmix_external_3x_happy=yes], + [AC_MSG_RESULT([no]) + opal_pmix_external_3x_happy=no]) + + AS_IF([test "$opal_pmix_external_3x_happy" = "yes"], + [$1 + # need to set the wrapper flags for static builds + pmix_ext3x_WRAPPER_EXTRA_LDFLAGS=$opal_external_pmix_LDFLAGS + pmix_ext3x_WRAPPER_EXTRA_LIBS=$opal_external_pmix_LIBS], + [$2])], + [$2]) + + opal_pmix_ext3x_CPPFLAGS=$opal_external_pmix_CPPFLAGS + opal_pmix_ext3x_LDFLAGS=$opal_external_pmix_LDFLAGS + opal_pmix_ext3x_LIBS=$opal_external_pmix_LIBS + + AC_SUBST([opal_pmix_ext3x_CPPFLAGS]) + AC_SUBST([opal_pmix_ext3x_LDFLAGS]) + AC_SUBST([opal_pmix_ext3x_LIBS]) + +])dnl diff --git a/opal/mca/pmix/ext3x/ext3x.h b/opal/mca/pmix/ext3x/ext3x.h new file mode 100644 index 0000000000..41c033746e --- /dev/null +++ b/opal/mca/pmix/ext3x/ext3x.h @@ -0,0 +1,340 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ +/* + * Copyright (c) 2014-2017 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2015 Mellanox Technologies, Inc. + * All rights reserved. + * Copyright (c) 2016 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 Los Alamos National Security, LLC. All rights + * reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef MCA_PMIX_PMIX2X_H +#define MCA_PMIX_PMIX2X_H + +#include "opal_config.h" + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_SYS_UN_H +#include +#endif + +#include "opal/class/opal_list.h" +#include "opal/mca/mca.h" +#include "opal/mca/event/event.h" +#include "opal/util/proc.h" + +#include "opal/mca/pmix/base/base.h" +#include "pmix_server.h" +#include "pmix_common.h" + +BEGIN_C_DECLS + +#ifdef OPAL_C_HAVE_VISIBILITY +#define PMIX_HAVE_VISIBILITY 1 +#else +#undef PMIX_HAVE_VISIBILITY +#endif + +typedef struct { + opal_pmix_base_component_t super; + opal_list_t jobids; + bool native_launch; + size_t evindex; + opal_list_t events; + int cache_size; + opal_list_t cache; + opal_list_t dmdx; + bool silence_warning; +} mca_pmix_ext3x_component_t; + +OPAL_DECLSPEC extern mca_pmix_ext3x_component_t mca_pmix_ext3x_component; + +OPAL_DECLSPEC extern const opal_pmix_base_module_t opal_pmix_ext3x_module; + +/**** INTERNAL OBJECTS ****/ +typedef struct { + opal_list_item_t super; + opal_jobid_t jobid; + char nspace[PMIX_MAX_NSLEN + 1]; +} opal_ext3x_jobid_trkr_t; +OBJ_CLASS_DECLARATION(opal_ext3x_jobid_trkr_t); + +typedef struct { + opal_list_item_t super; + opal_pmix_lock_t lock; + size_t index; + opal_pmix_notification_fn_t handler; + void *cbdata; +} opal_ext3x_event_t; +OBJ_CLASS_DECLARATION(opal_ext3x_event_t); + +typedef struct { + opal_list_item_t super; + char *nspace; + pmix_modex_cbfunc_t cbfunc; + void *cbdata; +} opal_ext3x_dmx_trkr_t; +OBJ_CLASS_DECLARATION(opal_ext3x_dmx_trkr_t); + +typedef struct { + opal_object_t super; + opal_event_t ev; + pmix_status_t status; + char *nspace; + pmix_proc_t p; + pmix_proc_t *procs; + size_t nprocs; + pmix_pdata_t *pdata; + size_t npdata; + pmix_proc_t *error_procs; + size_t nerror_procs; + pmix_info_t *info; + size_t ninfo; + pmix_app_t *apps; + size_t sz; + opal_pmix_lock_t lock; + opal_list_t *codes; + pmix_status_t *pcodes; + size_t ncodes; + pmix_query_t *queries; + size_t nqueries; + opal_ext3x_event_t *event; + opal_pmix_op_cbfunc_t opcbfunc; + opal_pmix_modex_cbfunc_t mdxcbfunc; + opal_pmix_value_cbfunc_t valcbfunc; + opal_pmix_lookup_cbfunc_t lkcbfunc; + opal_pmix_spawn_cbfunc_t spcbfunc; + opal_pmix_evhandler_reg_cbfunc_t evregcbfunc; + opal_pmix_info_cbfunc_t qcbfunc; + void *cbdata; +} ext3x_opcaddy_t; +OBJ_CLASS_DECLARATION(ext3x_opcaddy_t); + +typedef struct { + opal_object_t super; + opal_list_t procs; + opal_list_t info; + opal_list_t apps; + pmix_op_cbfunc_t opcbfunc; + pmix_dmodex_response_fn_t dmdxfunc; + pmix_modex_cbfunc_t mdxcbfunc; + pmix_lookup_cbfunc_t lkupcbfunc; + pmix_spawn_cbfunc_t spwncbfunc; + pmix_info_cbfunc_t infocbfunc; + pmix_tool_connection_cbfunc_t toolcbfunc; + void *cbdata; + opal_pmix_release_cbfunc_t odmdxfunc; + void *ocbdata; +} ext3x_opalcaddy_t; +OBJ_CLASS_DECLARATION(ext3x_opalcaddy_t); + +typedef struct { + opal_object_t super; + opal_event_t ev; + opal_pmix_lock_t lock; + const char *msg; + char *strings; + size_t id; + int status; + opal_process_name_t pname; + opal_jobid_t jobid; + const opal_process_name_t *source; + opal_pmix_data_range_t range; + bool nondefault; + size_t handler; + opal_value_t *val; + opal_list_t *event_codes; + opal_list_t *info; + opal_list_t results; + opal_pmix_notification_fn_t evhandler; + opal_pmix_evhandler_reg_cbfunc_t cbfunc; + opal_pmix_op_cbfunc_t opcbfunc; + pmix_event_notification_cbfunc_fn_t pmixcbfunc; + opal_pmix_value_cbfunc_t valcbfunc; + opal_pmix_lookup_cbfunc_t lkcbfunc; + void *cbdata; +} ext3x_threadshift_t; +OBJ_CLASS_DECLARATION(ext3x_threadshift_t); + +#define OPAL_PMIX_OP_THREADSHIFT(e, fn, cb, cd) \ + do { \ + ext3x_threadshift_t *_cd; \ + _cd = OBJ_NEW(ext3x_threadshift_t); \ + _cd->handler = (e); \ + _cd->opcbfunc = (cb); \ + _cd->cbdata = (cd); \ + opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase, \ + -1, EV_WRITE, (fn), (_cd)); \ + OPAL_POST_OBJECT(_cd); \ + opal_event_active(&((_cd)->ev), EV_WRITE, 1); \ + } while(0) + +#define OPAL_PMIX_THREADSHIFT(e, i, eh, fn, cb, cd) \ + do { \ + ext3x_threadshift_t *_cd; \ + _cd = OBJ_NEW(ext3x_threadshift_t); \ + _cd->event_codes = (e); \ + _cd->info = (i); \ + _cd->evhandler = (eh); \ + _cd->cbfunc = (cb); \ + _cd->cbdata = (cd); \ + opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase, \ + -1, EV_WRITE, (fn), (_cd)); \ + OPAL_POST_OBJECT(_cd); \ + opal_event_active(&((_cd)->ev), EV_WRITE, 1); \ + } while(0) + +#define OPAL_PMIX_NOTIFY_THREADSHIFT(s, sr, r, i, fn, cb, cd) \ + do { \ + ext3x_threadshift_t *_cd; \ + _cd = OBJ_NEW(ext3x_threadshift_t); \ + _cd->status = (s); \ + _cd->source = (sr); \ + _cd->range = (r); \ + _cd->info = (i); \ + _cd->opcbfunc = (cb); \ + _cd->cbdata = (cd); \ + opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase, \ + -1, EV_WRITE, (fn), (_cd)); \ + OPAL_POST_OBJECT(_cd); \ + opal_event_active(&((_cd)->ev), EV_WRITE, 1); \ + } while(0) + +#define OPAL_PMIX2X_THREADSHIFT(p, cb) \ + do { \ + opal_event_assign(&((p)->ev), opal_pmix_base.evbase, \ + -1, EV_WRITE, (cb), (p)); \ + OPAL_POST_OBJECT(p); \ + opal_event_active(&((p)->ev), EV_WRITE, 1); \ + } while(0) + +/**** CLIENT FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int ext3x_client_init(opal_list_t *ilist); +OPAL_MODULE_DECLSPEC int ext3x_client_finalize(void); +OPAL_MODULE_DECLSPEC int ext3x_initialized(void); +OPAL_MODULE_DECLSPEC int ext3x_abort(int flag, const char *msg, + opal_list_t *procs); +OPAL_MODULE_DECLSPEC int ext3x_commit(void); +OPAL_MODULE_DECLSPEC int ext3x_fence(opal_list_t *procs, int collect_data); +OPAL_MODULE_DECLSPEC int ext3x_fencenb(opal_list_t *procs, int collect_data, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_put(opal_pmix_scope_t scope, + opal_value_t *val); +OPAL_MODULE_DECLSPEC int ext3x_get(const opal_process_name_t *proc, const char *key, + opal_list_t *info, opal_value_t **val); +OPAL_MODULE_DECLSPEC int ext3x_getnb(const opal_process_name_t *proc, const char *key, + opal_list_t *info, + opal_pmix_value_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_publish(opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext3x_publishnb(opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_lookup(opal_list_t *data, opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext3x_lookupnb(char **keys, opal_list_t *info, + opal_pmix_lookup_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_unpublish(char **keys, opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext3x_unpublishnb(char **keys, opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid); +OPAL_MODULE_DECLSPEC int ext3x_spawnnb(opal_list_t *job_info, opal_list_t *apps, + opal_pmix_spawn_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_connect(opal_list_t *procs); +OPAL_MODULE_DECLSPEC int ext3x_connectnb(opal_list_t *procs, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_disconnect(opal_list_t *procs); +OPAL_MODULE_DECLSPEC int ext3x_disconnectnb(opal_list_t *procs, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_resolve_peers(const char *nodename, opal_jobid_t jobid, + opal_list_t *procs); +OPAL_MODULE_DECLSPEC int ext3x_resolve_nodes(opal_jobid_t jobid, char **nodelist); +OPAL_MODULE_DECLSPEC int ext3x_allocate(opal_pmix_alloc_directive_t directive, + opal_list_t *info, + opal_pmix_info_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_job_control(opal_list_t *targets, + opal_list_t *directives, + opal_pmix_info_cbfunc_t cbfunc, void *cbdata); + +/**** TOOL FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int ext3x_tool_init(opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext3x_tool_fini(void); + +/**** COMMON FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int ext3x_store_local(const opal_process_name_t *proc, + opal_value_t *val); + +/**** SERVER SOUTHBOUND FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int ext3x_server_init(opal_pmix_server_module_t *module, + opal_list_t *info); +OPAL_MODULE_DECLSPEC int ext3x_server_finalize(void); +OPAL_MODULE_DECLSPEC int ext3x_server_gen_regex(const char *input, char **regex); +OPAL_MODULE_DECLSPEC int ext3x_server_gen_ppn(const char *input, char **ppn); +OPAL_MODULE_DECLSPEC int ext3x_server_register_nspace(opal_jobid_t jobid, + int nlocalprocs, + opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC void ext3x_server_deregister_nspace(opal_jobid_t jobid, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_server_register_client(const opal_process_name_t *proc, + uid_t uid, gid_t gid, + void *server_object, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC void ext3x_server_deregister_client(const opal_process_name_t *proc, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_server_setup_fork(const opal_process_name_t *proc, char ***env); +OPAL_MODULE_DECLSPEC int ext3x_server_dmodex(const opal_process_name_t *proc, + opal_pmix_modex_cbfunc_t cbfunc, void *cbdata); +OPAL_MODULE_DECLSPEC int ext3x_server_notify_event(int status, + const opal_process_name_t *source, + opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); + + +/**** COMPONENT UTILITY FUNCTIONS ****/ +OPAL_MODULE_DECLSPEC int opal_pmix_ext3x_check_evars(void); + +OPAL_MODULE_DECLSPEC void ext3x_event_hdlr(size_t evhdlr_registration_id, + pmix_status_t status, const pmix_proc_t *source, + pmix_info_t info[], size_t ninfo, + pmix_info_t results[], size_t nresults, + pmix_event_notification_cbfunc_fn_t cbfunc, + void *cbdata); +OPAL_MODULE_DECLSPEC pmix_status_t ext3x_convert_opalrc(int rc); +OPAL_MODULE_DECLSPEC int ext3x_convert_rc(pmix_status_t rc); + +OPAL_MODULE_DECLSPEC opal_vpid_t ext3x_convert_rank(pmix_rank_t rank); +OPAL_MODULE_DECLSPEC pmix_rank_t ext3x_convert_opalrank(opal_vpid_t vpid); + +OPAL_MODULE_DECLSPEC opal_pmix_scope_t ext3x_convert_scope(pmix_scope_t scope); +OPAL_MODULE_DECLSPEC pmix_scope_t ext3x_convert_opalscope(opal_pmix_scope_t scope); + +OPAL_MODULE_DECLSPEC pmix_data_range_t ext3x_convert_opalrange(opal_pmix_data_range_t range); +OPAL_MODULE_DECLSPEC opal_pmix_data_range_t ext3x_convert_range(pmix_data_range_t range); + +OPAL_MODULE_DECLSPEC opal_pmix_persistence_t ext3x_convert_persist(pmix_persistence_t scope); +OPAL_MODULE_DECLSPEC pmix_persistence_t ext3x_convert_opalpersist(opal_pmix_persistence_t scope); + +OPAL_MODULE_DECLSPEC void ext3x_value_load(pmix_value_t *v, + opal_value_t *kv); +OPAL_MODULE_DECLSPEC int ext3x_value_unload(opal_value_t *kv, + const pmix_value_t *v); + +OPAL_MODULE_DECLSPEC opal_pmix_alloc_directive_t ext3x_convert_allocdir(pmix_alloc_directive_t dir); + +OPAL_MODULE_DECLSPEC char* ext3x_convert_jobid(opal_jobid_t jobid); + +END_C_DECLS + +#endif /* MCA_PMIX_EXTERNAL_H */ diff --git a/opal/mca/pmix/ext3x/ext3x_local.c b/opal/mca/pmix/ext3x/ext3x_local.c new file mode 100644 index 0000000000..dda58e2f48 --- /dev/null +++ b/opal/mca/pmix/ext3x/ext3x_local.c @@ -0,0 +1,27 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ +/* + * Copyright (c) 2014-2017 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2017 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * Copyright (c) 2014-2015 Mellanox Technologies, Inc. + * All rights reserved. + * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. + * Copyright (c) 2017 Los Alamos National Security, LLC. All rights + * reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "opal_config.h" +#include "opal/constants.h" + +#include "ext3x.h" + +int opal_pmix_ext3x_check_evars(void) +{ + /* a dummy function */ + return OPAL_SUCCESS; +} diff --git a/opal/mca/pmix/pmix2x/help-pmix-pmix2x.txt b/opal/mca/pmix/ext3x/help-pmix-ext3x.txt similarity index 100% rename from opal/mca/pmix/pmix2x/help-pmix-pmix2x.txt rename to opal/mca/pmix/ext3x/help-pmix-ext3x.txt diff --git a/opal/mca/pmix/pmix2x/Makefile.am b/opal/mca/pmix/pmix2x/Makefile.am deleted file mode 100644 index 6546b2a822..0000000000 --- a/opal/mca/pmix/pmix2x/Makefile.am +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (c) 2014-2017 Intel, Inc. All rights reserved. -# Copyright (c) 2015 Cisco Systems, Inc. All rights reserved. -# Copyright (c) 2015 Research Organization for Information Science -# and Technology (RIST). All rights reserved. -# Copyright (c) 2017 IBM Corporation. All rights reserved. -# $COPYRIGHT$ -# -# Additional copyrights may follow -# -# $HEADER$ -# - -EXTRA_DIST = autogen.subdirs - -dist_opaldata_DATA = help-pmix-pmix2x.txt - -SUBDIRS = pmix - -sources = \ - pmix2x.h \ - pmix2x_component.c \ - pmix2x.c \ - pmix2x_client.c \ - pmix2x_local.c \ - pmix2x_server_south.c \ - pmix2x_server_north.c - -# Make the output library in this directory, and name it either -# mca__.la (for DSO builds) or libmca__.la -# (for static builds). - -if MCA_BUILD_opal_pmix_pmix2x_DSO -component_noinst = -component_install = mca_pmix_pmix2x.la -else -component_noinst = libmca_pmix_pmix2x.la -component_install = -endif - -mcacomponentdir = $(opallibdir) -mcacomponent_LTLIBRARIES = $(component_install) -mca_pmix_pmix2x_la_SOURCES = $(sources) -mca_pmix_pmix2x_la_CFLAGS = $(opal_pmix_pmix2x_CFLAGS) -mca_pmix_pmix2x_la_CPPFLAGS = \ - -I$(srcdir)/pmix/include $(opal_pmix_pmix2x_CPPFLAGS) -mca_pmix_pmix2x_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix2x_LDFLAGS) -mca_pmix_pmix2x_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la \ - $(opal_pmix_pmix2x_LIBS) -mca_pmix_pmix2x_la_DEPENDENCIES = $(opal_pmix_pmix2x_DEPENDENCIES) - -noinst_LTLIBRARIES = $(component_noinst) -libmca_pmix_pmix2x_la_SOURCES =$(sources) -libmca_pmix_pmix2x_la_CFLAGS = $(opal_pmix_pmix2x_CFLAGS) -libmca_pmix_pmix2x_la_CPPFLAGS = $(opal_pmix_pmix2x_CPPFLAGS) -libmca_pmix_pmix2x_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix2x_LDFLAGS) -libmca_pmix_pmix2x_la_LIBADD = $(opal_pmix_pmix2x_LIBS) -libmca_pmix_pmix2x_la_DEPENDENCIES = $(opal_pmix_pmix2x_DEPENDENCIES) diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/test_pmix.c b/opal/mca/pmix/pmix2x/pmix/test/simple/test_pmix.c deleted file mode 100644 index 8ecf6c1f6b..0000000000 --- a/opal/mca/pmix/pmix2x/pmix/test/simple/test_pmix.c +++ /dev/null @@ -1,67 +0,0 @@ - -#include -#include -#include - -int main(int argc, char **argv) -{ - pmix_proc_t myproc; - pmix_status_t rc; - - int rank; - rc = PMIx_Init(&myproc, NULL, 0); - assert(PMIX_SUCCESS == rc); - - { - pmix_value_t *value; - rc = PMIx_Get(&myproc, PMIX_RANK, NULL, 0, &value); - assert(PMIX_SUCCESS == rc); - printf("%d\n", value->type); - assert(value->type == PMIX_INT); - rank = value->data.uint32; - PMIX_VALUE_RELEASE(value); - } - - if (rank == 0 ) { - pmix_info_t *info; - PMIX_INFO_CREATE(info, 1); - snprintf(info[0].key, PMIX_MAX_KEYLEN, "magic-found"); - info[0].value.type = PMIX_STRING; - info[0].value.data.string = "yes"; - rc = PMIx_Publish(info, 1); - assert(PMIX_SUCCESS == rc); - } - - printf("I am rank %d\n", rank); - - { - bool flag; - pmix_info_t *info; - PMIX_INFO_CREATE(info, 1); - flag = true; - PMIX_INFO_LOAD(info, PMIX_COLLECT_DATA, &flag, PMIX_BOOL); - rc = PMIx_Fence(&myproc, 1, info, 1); - assert(PMIX_SUCCESS == rc); - PMIX_INFO_FREE(info, 1); - } - - if (rank == 1) { - int i; - pmix_pdata_t *pdata; - PMIX_PDATA_CREATE(pdata, 2); - snprintf(pdata[0].key, PMIX_MAX_KEYLEN, "magic-found"); - snprintf(pdata[1].key, PMIX_MAX_KEYLEN, "magic-not-found"); - rc = PMIx_Lookup(&pdata[0], 2, NULL, 0); - assert((PMIX_SUCCESS == rc) || (PMIX_ERR_NOT_FOUND == rc)); - for ( i = 0 ; i < 2 ; i++ ) - if (pdata[i].value.type == PMIX_STRING) - printf("Found[%d] %d %s\n", i, pdata[i].value.type, pdata[i].value.data.string); - else - printf("Found[%d] %d\n", i, pdata[i].value.type); - PMIX_PDATA_FREE(pdata, 1); - } - - rc = PMIx_Finalize(NULL, 0); - assert(PMIX_SUCCESS == rc); - -} diff --git a/opal/mca/pmix/pmix3x/Makefile.am b/opal/mca/pmix/pmix3x/Makefile.am new file mode 100644 index 0000000000..f95fcb5729 --- /dev/null +++ b/opal/mca/pmix/pmix3x/Makefile.am @@ -0,0 +1,58 @@ +# +# Copyright (c) 2014-2017 Intel, Inc. All rights reserved. +# Copyright (c) 2015 Cisco Systems, Inc. All rights reserved. +# Copyright (c) 2015 Research Organization for Information Science +# and Technology (RIST). All rights reserved. +# Copyright (c) 2017 IBM Corporation. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +EXTRA_DIST = autogen.subdirs + +dist_opaldata_DATA = help-pmix-pmix3x.txt + +SUBDIRS = pmix + +sources = \ + pmix3x.h \ + pmix3x_component.c \ + pmix3x.c \ + pmix3x_client.c \ + pmix3x_local.c \ + pmix3x_server_south.c \ + pmix3x_server_north.c + +# Make the output library in this directory, and name it either +# mca__.la (for DSO builds) or libmca__.la +# (for static builds). + +if MCA_BUILD_opal_pmix_pmix3x_DSO +component_noinst = +component_install = mca_pmix_pmix3x.la +else +component_noinst = libmca_pmix_pmix3x.la +component_install = +endif + +mcacomponentdir = $(opallibdir) +mcacomponent_LTLIBRARIES = $(component_install) +mca_pmix_pmix3x_la_SOURCES = $(sources) +mca_pmix_pmix3x_la_CFLAGS = $(opal_pmix_pmix3x_CFLAGS) +mca_pmix_pmix3x_la_CPPFLAGS = \ + -I$(srcdir)/pmix/include $(opal_pmix_pmix3x_CPPFLAGS) +mca_pmix_pmix3x_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix3x_LDFLAGS) +mca_pmix_pmix3x_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la \ + $(opal_pmix_pmix3x_LIBS) +mca_pmix_pmix3x_la_DEPENDENCIES = $(opal_pmix_pmix3x_DEPENDENCIES) + +noinst_LTLIBRARIES = $(component_noinst) +libmca_pmix_pmix3x_la_SOURCES =$(sources) +libmca_pmix_pmix3x_la_CFLAGS = $(opal_pmix_pmix3x_CFLAGS) +libmca_pmix_pmix3x_la_CPPFLAGS = $(opal_pmix_pmix3x_CPPFLAGS) +libmca_pmix_pmix3x_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix3x_LDFLAGS) +libmca_pmix_pmix3x_la_LIBADD = $(opal_pmix_pmix3x_LIBS) +libmca_pmix_pmix3x_la_DEPENDENCIES = $(opal_pmix_pmix3x_DEPENDENCIES) diff --git a/opal/mca/pmix/pmix2x/autogen.subdirs b/opal/mca/pmix/pmix3x/autogen.subdirs similarity index 100% rename from opal/mca/pmix/pmix2x/autogen.subdirs rename to opal/mca/pmix/pmix3x/autogen.subdirs diff --git a/opal/mca/pmix/pmix3x/common_sym_whitelist.txt b/opal/mca/pmix/pmix3x/common_sym_whitelist.txt new file mode 100644 index 0000000000..7a60b367d6 --- /dev/null +++ b/opal/mca/pmix/pmix3x/common_sym_whitelist.txt @@ -0,0 +1,6 @@ +# Ignore symbols in this component that are auto-generated and we +# can't do anything about them (e.g., flex/bison symbols). +pmix_util_keyval_yyleng +pmix_util_keyval_yytext +pmix_show_help_yyleng +pmix_show_help_yytext diff --git a/opal/mca/pmix/pmix2x/configure.m4 b/opal/mca/pmix/pmix3x/configure.m4 similarity index 52% rename from opal/mca/pmix/pmix2x/configure.m4 rename to opal/mca/pmix/pmix3x/configure.m4 index 933821b75d..edb06e4d28 100644 --- a/opal/mca/pmix/pmix2x/configure.m4 +++ b/opal/mca/pmix/pmix3x/configure.m4 @@ -23,19 +23,19 @@ # $HEADER$ # -# MCA_pmix_pmix2x_CONFIG([action-if-found], [action-if-not-found]) +# MCA_pmix_pmix3x_CONFIG([action-if-found], [action-if-not-found]) # ----------------------------------------------------------- -AC_DEFUN([MCA_opal_pmix_pmix2x_CONFIG],[ - AC_CONFIG_FILES([opal/mca/pmix/pmix2x/Makefile]) +AC_DEFUN([MCA_opal_pmix_pmix3x_CONFIG],[ + AC_CONFIG_FILES([opal/mca/pmix/pmix3x/Makefile]) - OPAL_VAR_SCOPE_PUSH([PMIX_VERSION opal_pmix_pmix2x_save_CPPFLAGS opal_pmix_pmix2_save_CFLAGS opal_pmix_pmix2x_save_LDFLAGS opal_pmix_pmix2x_save_LIBS opal_pmix_pmix2x_basedir opal_pmix_pmix2x_args opal_pmix_pmix2x_happy pmix_pmix2x_status_filename]) + OPAL_VAR_SCOPE_PUSH([PMIX_VERSION opal_pmix_pmix3x_save_CPPFLAGS opal_pmix_pmix2_save_CFLAGS opal_pmix_pmix3x_save_LDFLAGS opal_pmix_pmix3x_save_LIBS opal_pmix_pmix3x_basedir opal_pmix_pmix3x_args opal_pmix_pmix3x_happy pmix_pmix3x_status_filename]) - opal_pmix_pmix2x_basedir=opal/mca/pmix/pmix2x + opal_pmix_pmix3x_basedir=opal/mca/pmix/pmix3x - opal_pmix_pmix2x_save_CFLAGS=$CFLAGS - opal_pmix_pmix2x_save_CPPFLAGS=$CPPFLAGS - opal_pmix_pmix2x_save_LDFLAGS=$LDFLAGS - opal_pmix_pmix2x_save_LIBS=$LIBS + opal_pmix_pmix3x_save_CFLAGS=$CFLAGS + opal_pmix_pmix3x_save_CPPFLAGS=$CPPFLAGS + opal_pmix_pmix3x_save_LDFLAGS=$LDFLAGS + opal_pmix_pmix3x_save_LIBS=$LIBS AC_ARG_ENABLE([install-libpmix], [AC_HELP_STRING([--enable-install-libpmix], @@ -47,33 +47,33 @@ AC_DEFUN([MCA_opal_pmix_pmix2x_CONFIG],[ AC_MSG_CHECKING([if PMIx timing is enabled]) if test "$enable_pmix_timing" = "yes"; then AC_MSG_RESULT([yes]) - opal_pmix_pmix2x_timing_flag=--enable-pmix-timing + opal_pmix_pmix3x_timing_flag=--enable-pmix-timing else AC_MSG_RESULT([no (disabled)]) - opal_pmix_pmix2x_timing_flag=--disable-pmix-timing + opal_pmix_pmix3x_timing_flag=--disable-pmix-timing fi - opal_pmix_pmix2x_args="--with-pmix-symbol-rename=OPAL_MCA_PMIX2X_ $opal_pmix_pmix2x_timing_flag --without-tests-examples --disable-pmix-backward-compatibility --disable-visibility --enable-embedded-libevent --with-libevent-header=\\\"opal/mca/event/$opal_event_base_include\\\"" + opal_pmix_pmix3x_args="--with-pmix-symbol-rename=OPAL_MCA_PMIX2X_ $opal_pmix_pmix3x_timing_flag --without-tests-examples --disable-pmix-backward-compatibility --disable-visibility --enable-embedded-libevent --with-libevent-header=\\\"opal/mca/event/$opal_event_base_include\\\"" AS_IF([test "$enable_debug" = "yes"], - [opal_pmix_pmix2x_args="--enable-debug $opal_pmix_pmix2x_args" + [opal_pmix_pmix3x_args="--enable-debug $opal_pmix_pmix3x_args" CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS -g"], - [opal_pmix_pmix2x_args="--disable-debug $opal_pmix_pmix2x_args" + [opal_pmix_pmix3x_args="--disable-debug $opal_pmix_pmix3x_args" CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS"]) AS_IF([test "$enable_install_libpmix" = "yes" && test "$enable_dlopen" != "no"], - [opal_pmix_pmix2x_args="--with-pmix-extra-lib=$OPAL_TOP_BUILDDIR/opal/lib${OPAL_LIB_PREFIX}open-pal.la $opal_pmix_pmix2x_args"], - [opal_pmix_pmix2x_args="--enable-embedded-mode $opal_pmix_pmix2x_args"]) + [opal_pmix_pmix3x_args="--with-pmix-extra-lib=$OPAL_TOP_BUILDDIR/opal/lib${OPAL_LIB_PREFIX}open-pal.la $opal_pmix_pmix3x_args"], + [opal_pmix_pmix3x_args="--enable-embedded-mode $opal_pmix_pmix3x_args"]) AS_IF([test "$with_devel_headers" = "yes"], - [opal_pmix_pmix2x_args="--with-devel-headers $opal_pmix_pmix2x_args"]) + [opal_pmix_pmix3x_args="--with-devel-headers $opal_pmix_pmix3x_args"]) 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_pmix2x_basedir/pmix], - [$opal_pmix_pmix2x_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'], - [opal_pmix_pmix2x_happy=1], [opal_pmix_pmix2x_happy=0]) + OPAL_CONFIG_SUBDIR([$opal_pmix_pmix3x_basedir/pmix], + [$opal_pmix_pmix3x_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'], + [opal_pmix_pmix3x_happy=1], [opal_pmix_pmix3x_happy=0]) - CFLAGS=$opal_pmix_pmix2x_save_CFLAGS - CPPFLAGS=$opal_pmix_pmix2x_save_CPPFLAGS - LDFLAGS=$opal_pmix_pmix2x_save_LDFLAGS - LIBS=$opal_pmix_pmix2x_save_LIBS + CFLAGS=$opal_pmix_pmix3x_save_CFLAGS + CPPFLAGS=$opal_pmix_pmix3x_save_CPPFLAGS + LDFLAGS=$opal_pmix_pmix3x_save_LDFLAGS + LIBS=$opal_pmix_pmix3x_save_LIBS # If we are not building the internal pmix, then check to see # if we are linking to an external v2.x library. If not, then @@ -82,37 +82,37 @@ AC_DEFUN([MCA_opal_pmix_pmix2x_CONFIG],[ # infrastructure is setup properly (e.g., w.r.t. SUBDIRS=pmix in # this directory's Makefile.am, we still need the Autotools "make # distclean" infrastructure to work properly). - AC_MSG_CHECKING([if v2.x component is to be used]) + AC_MSG_CHECKING([if v3.x component is to be used]) AS_IF([test "$opal_external_pmix_happy" = "yes"], [AC_MSG_RESULT([no - disqualifying this component]) - opal_pmix_pmix2x_happy=0], - [AC_MSG_RESULT([yes - using the internal v2.x library]) + opal_pmix_pmix3x_happy=0], + [AC_MSG_RESULT([yes - using the internal v3.x library]) # Build flags for our Makefile.am - opal_pmix_pmix2x_LDFLAGS= - opal_pmix_pmix2x_LIBS="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix2x_basedir/pmix/src/libpmix.la" - opal_pmix_pmix2x_CPPFLAGS="-I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix2x_basedir/pmix/include -I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix2x_basedir/pmix -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix2x_basedir/pmix/include -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix2x_basedir/pmix" - opal_pmix_pmix2x_DEPENDENCIES="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix2x_basedir/pmix/src/libpmix.la"]) + opal_pmix_pmix3x_LDFLAGS= + opal_pmix_pmix3x_LIBS="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix3x_basedir/pmix/src/libpmix.la" + opal_pmix_pmix3x_CPPFLAGS="-I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix3x_basedir/pmix/include -I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix3x_basedir/pmix -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix3x_basedir/pmix/include -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix3x_basedir/pmix" + opal_pmix_pmix3x_DEPENDENCIES="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix3x_basedir/pmix/src/libpmix.la"]) - AC_SUBST([opal_pmix_pmix2x_LIBS]) - AC_SUBST([opal_pmix_pmix2x_CPPFLAGS]) - AC_SUBST([opal_pmix_pmix2x_LDFLAGS]) - AC_SUBST([opal_pmix_pmix2x_DEPENDENCIES]) + AC_SUBST([opal_pmix_pmix3x_LIBS]) + AC_SUBST([opal_pmix_pmix3x_CPPFLAGS]) + AC_SUBST([opal_pmix_pmix3x_LDFLAGS]) + AC_SUBST([opal_pmix_pmix3x_DEPENDENCIES]) # Finally, add some flags to the wrapper compiler so that our # headers can be found. - pmix_pmix2x_status_filename="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix2x_basedir/pmix/config.status" - pmix_pmix2x_WRAPPER_EXTRA_CPPFLAGS=`egrep PMIX_EMBEDDED_CPPFLAGS $pmix_pmix2x_status_filename | cut -d\" -f4` - pmix_pmix2x_WRAPPER_EXTRA_LDFLAGS=`egrep PMIX_EMBEDDED_LDFLAGS $pmix_pmix2x_status_filename | cut -d\" -f4` - pmix_pmix2x_WRAPPER_EXTRA_LIBS=`egrep PMIX_EMBEDDED_LIBS $pmix_pmix2x_status_filename | cut -d\" -f4` + pmix_pmix3x_status_filename="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix3x_basedir/pmix/config.status" + pmix_pmix3x_WRAPPER_EXTRA_CPPFLAGS=`egrep PMIX_EMBEDDED_CPPFLAGS $pmix_pmix3x_status_filename | cut -d\" -f4` + pmix_pmix3x_WRAPPER_EXTRA_LDFLAGS=`egrep PMIX_EMBEDDED_LDFLAGS $pmix_pmix3x_status_filename | cut -d\" -f4` + pmix_pmix3x_WRAPPER_EXTRA_LIBS=`egrep PMIX_EMBEDDED_LIBS $pmix_pmix3x_status_filename | cut -d\" -f4` AC_MSG_CHECKING([PMIx extra wrapper CPPFLAGS]) - AC_MSG_RESULT([$pmix_pmix2x_WRAPPER_EXTRA_CPPFLAGS]) + AC_MSG_RESULT([$pmix_pmix3x_WRAPPER_EXTRA_CPPFLAGS]) AC_MSG_CHECKING([PMIx extra wrapper LDFLAGS]) - AC_MSG_RESULT([$pmix_pmix2x_WRAPPER_EXTRA_LDFLAGS]) + AC_MSG_RESULT([$pmix_pmix3x_WRAPPER_EXTRA_LDFLAGS]) AC_MSG_CHECKING([PMIx extra wrapper LIBS]) - AC_MSG_RESULT([$pmix_pmix2x_WRAPPER_EXTRA_LIBS]) + AC_MSG_RESULT([$pmix_pmix3x_WRAPPER_EXTRA_LIBS]) - AS_IF([test $opal_pmix_pmix2x_happy -eq 1], + AS_IF([test $opal_pmix_pmix3x_happy -eq 1], [$1], [$2]) diff --git a/opal/mca/pmix/pmix3x/help-pmix-pmix3x.txt b/opal/mca/pmix/pmix3x/help-pmix-pmix3x.txt new file mode 100644 index 0000000000..07327e1163 --- /dev/null +++ b/opal/mca/pmix/pmix3x/help-pmix-pmix3x.txt @@ -0,0 +1,32 @@ +# -*- text -*- +# +# Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana +# University Research and Technology +# Corporation. All rights reserved. +# 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, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# Copyright (c) 2017 Intel, Inc. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# +# This is the US/English help file for Open MPI MCA error messages. +# +[evars] +We found conflicting directives regarding the location of OPAL vs PMIx +installation directories: + +%s + +This usually indicates that OMPI was configured to use its internal copy +of PMIx, but another installation of PMIx is also in use on this system +and could potentially cause confusion between the two sets of plugins. +Please either unset the indicated environment variables, or configure +OMPI to use the external PMIx installation. diff --git a/opal/mca/pmix/pmix2x/pmix/AUTHORS b/opal/mca/pmix/pmix3x/pmix/AUTHORS similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/AUTHORS rename to opal/mca/pmix/pmix3x/pmix/AUTHORS diff --git a/opal/mca/pmix/pmix2x/pmix/INSTALL b/opal/mca/pmix/pmix3x/pmix/INSTALL similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/INSTALL rename to opal/mca/pmix/pmix3x/pmix/INSTALL diff --git a/opal/mca/pmix/pmix2x/pmix/LICENSE b/opal/mca/pmix/pmix3x/pmix/LICENSE similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/LICENSE rename to opal/mca/pmix/pmix3x/pmix/LICENSE diff --git a/opal/mca/pmix/pmix2x/pmix/Makefile.am b/opal/mca/pmix/pmix3x/pmix/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/NEWS b/opal/mca/pmix/pmix3x/pmix/NEWS similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/NEWS rename to opal/mca/pmix/pmix3x/pmix/NEWS diff --git a/opal/mca/pmix/pmix2x/pmix/README b/opal/mca/pmix/pmix3x/pmix/README similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/README rename to opal/mca/pmix/pmix3x/pmix/README diff --git a/opal/mca/pmix/pmix2x/pmix/VERSION b/opal/mca/pmix/pmix3x/pmix/VERSION similarity index 98% rename from opal/mca/pmix/pmix2x/pmix/VERSION rename to opal/mca/pmix/pmix3x/pmix/VERSION index a9ea7ac684..0953e608d0 100644 --- a/opal/mca/pmix/pmix2x/pmix/VERSION +++ b/opal/mca/pmix/pmix3x/pmix/VERSION @@ -13,8 +13,8 @@ # major, minor, and release are generally combined in the form # ... -major=2 -minor=1 +major=3 +minor=0 release=0 # greek is used for alpha or beta release tags. If it is non-empty, @@ -30,7 +30,7 @@ greek= # command, or with the date (if "git describe" fails) in the form of # "date". -repo_rev=git9526eb3 +repo_rev=git6001265 # 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,7 +44,7 @@ tarball_version= # The date when this release was created -date="Oct 06, 2017" +date="Oct 09, 2017" # The shared library version of each of PMIx's public libraries. # These versions are maintained in accordance with the "Library diff --git a/opal/mca/pmix/pmix2x/pmix/autogen.pl b/opal/mca/pmix/pmix3x/pmix/autogen.pl similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/autogen.pl rename to opal/mca/pmix/pmix3x/pmix/autogen.pl diff --git a/opal/mca/pmix/pmix2x/pmix/config/Makefile.am b/opal/mca/pmix/pmix3x/pmix/config/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/config/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/config/c_get_alignment.m4 b/opal/mca/pmix/pmix3x/pmix/config/c_get_alignment.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/c_get_alignment.m4 rename to opal/mca/pmix/pmix3x/pmix/config/c_get_alignment.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/distscript.sh b/opal/mca/pmix/pmix3x/pmix/config/distscript.sh similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/distscript.sh rename to opal/mca/pmix/pmix3x/pmix/config/distscript.sh diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_attributes.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_attributes.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_attributes.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_attributes.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_broken_qsort.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_broken_qsort.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_broken_qsort.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_broken_qsort.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_compiler_version.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_compiler_version.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_compiler_version.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_compiler_version.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_icc.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_icc.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_icc.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_icc.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_ident.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_ident.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_ident.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_ident.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_lock.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_lock.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_lock.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_lock.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_os_flavors.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_os_flavors.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_os_flavors.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_os_flavors.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_package.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_package.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_package.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_package.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_psm2.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_psm2.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_psm2.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_psm2.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_pthread_pids.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_pthread_pids.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_pthread_pids.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_pthread_pids.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_vendor.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_vendor.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_vendor.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_vendor.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_visibility.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_visibility.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_visibility.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_visibility.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_check_withdir.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_check_withdir.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_check_withdir.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_check_withdir.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_config_asm.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_config_asm.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_config_asm.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_config_asm.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_config_pthreads.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_config_pthreads.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_config_pthreads.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_config_pthreads.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_config_subdir.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_config_subdir.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_config_subdir.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_config_subdir.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_config_subdir_args.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_config_subdir_args.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_config_subdir_args.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_config_subdir_args.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_config_threads.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_config_threads.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_config_threads.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_config_threads.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_ensure_contains_optflags.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_ensure_contains_optflags.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_ensure_contains_optflags.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_ensure_contains_optflags.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_functions.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_functions.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_functions.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_functions.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_get_version.sh b/opal/mca/pmix/pmix3x/pmix/config/pmix_get_version.sh similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_get_version.sh rename to opal/mca/pmix/pmix3x/pmix/config/pmix_get_version.sh diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_load_platform.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_load_platform.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_load_platform.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_load_platform.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_mca.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_mca.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_mca.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_mca.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_mca_priority_sort.pl b/opal/mca/pmix/pmix3x/pmix/config/pmix_mca_priority_sort.pl similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_mca_priority_sort.pl rename to opal/mca/pmix/pmix3x/pmix/config/pmix_mca_priority_sort.pl diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_search_libs.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_search_libs.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_search_libs.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_search_libs.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_setup_cc.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_setup_cc.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_setup_cc.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_setup_cc.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_setup_libevent.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_setup_libevent.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_setup_libevent.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_setup_libevent.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_setup_zlib.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_setup_zlib.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_setup_zlib.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_setup_zlib.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/config/pmix_try_assemble.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_try_assemble.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/config/pmix_try_assemble.m4 rename to opal/mca/pmix/pmix3x/pmix/config/pmix_try_assemble.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/configure.ac b/opal/mca/pmix/pmix3x/pmix/configure.ac similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/configure.ac rename to opal/mca/pmix/pmix3x/pmix/configure.ac diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/Makefile.am b/opal/mca/pmix/pmix3x/pmix/contrib/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/contrib/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/buildrpm.sh b/opal/mca/pmix/pmix3x/pmix/contrib/buildrpm.sh similarity index 93% rename from opal/mca/pmix/pmix2x/pmix/contrib/buildrpm.sh rename to opal/mca/pmix/pmix3x/pmix/contrib/buildrpm.sh index 9b65ceefed..77ad94d09b 100755 --- a/opal/mca/pmix/pmix2x/pmix/contrib/buildrpm.sh +++ b/opal/mca/pmix/pmix3x/pmix/contrib/buildrpm.sh @@ -96,19 +96,19 @@ echo "--> Found specfile: $specfile" rpmtopdir=${rpmtopdir:-"`grep %_topdir $HOME/.rpmmacros | awk '{ print $2 }'`"} if test "$rpmtopdir" != ""; then - rpmbuild_options="$rpmbuild_options --define '_topdir $rpmtopdir'" + rpmbuild_options="$rpmbuild_options --define '_topdir $rpmtopdir'" if test ! -d "$rpmtopdir"; then - mkdir -p "$rpmtopdir" - mkdir -p "$rpmtopdir/BUILD" - mkdir -p "$rpmtopdir/RPMS" - mkdir -p "$rpmtopdir/RPMS/i386" - mkdir -p "$rpmtopdir/RPMS/i586" - mkdir -p "$rpmtopdir/RPMS/i686" - mkdir -p "$rpmtopdir/RPMS/noarch" - mkdir -p "$rpmtopdir/RPMS/athlon" - mkdir -p "$rpmtopdir/SOURCES" - mkdir -p "$rpmtopdir/SPECS" - mkdir -p "$rpmtopdir/SRPMS" + mkdir -p "$rpmtopdir" + mkdir -p "$rpmtopdir/BUILD" + mkdir -p "$rpmtopdir/RPMS" + mkdir -p "$rpmtopdir/RPMS/i386" + mkdir -p "$rpmtopdir/RPMS/i586" + mkdir -p "$rpmtopdir/RPMS/i686" + mkdir -p "$rpmtopdir/RPMS/noarch" + mkdir -p "$rpmtopdir/RPMS/athlon" + mkdir -p "$rpmtopdir/SOURCES" + mkdir -p "$rpmtopdir/SPECS" + mkdir -p "$rpmtopdir/SRPMS" fi need_root=0 elif test -d /usr/src/RPM; then diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/cron-run-all-md2nroff.pl b/opal/mca/pmix/pmix3x/pmix/contrib/cron-run-all-md2nroff.pl similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/cron-run-all-md2nroff.pl rename to opal/mca/pmix/pmix3x/pmix/contrib/cron-run-all-md2nroff.pl diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/make_dist_tarball b/opal/mca/pmix/pmix3x/pmix/contrib/make_dist_tarball similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/make_dist_tarball rename to opal/mca/pmix/pmix3x/pmix/contrib/make_dist_tarball diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/md2nroff.pl b/opal/mca/pmix/pmix3x/pmix/contrib/md2nroff.pl similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/md2nroff.pl rename to opal/mca/pmix/pmix3x/pmix/contrib/md2nroff.pl diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/Makefile b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/Makefile similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/Makefile rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/Makefile diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/Makefile.include b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/README b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/README similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/README rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/README diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi.h b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi.h rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi.h diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2.c b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2.c rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2.c diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2_pmap_parser.c b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2_pmap_parser.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2_pmap_parser.c rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2_pmap_parser.c diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2_pmap_parser.h b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2_pmap_parser.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2_pmap_parser.h rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2_pmap_parser.h diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2_utils.c b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2_utils.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2_utils.c rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2_utils.c diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2_utils.h b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2_utils.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi2_utils.h rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi2_utils.h diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi_intra_perf.c b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi_intra_perf.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmi_intra_perf.c rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmi_intra_perf.c diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmix.c b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmix.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/pmix.c rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/pmix.c diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/run.sh b/opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/run.sh similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/perf_tools/run.sh rename to opal/mca/pmix/pmix3x/pmix/contrib/perf_tools/run.sh diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/platform/optimized b/opal/mca/pmix/pmix3x/pmix/contrib/platform/optimized similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/contrib/platform/optimized rename to opal/mca/pmix/pmix3x/pmix/contrib/platform/optimized diff --git a/opal/mca/pmix/pmix2x/pmix/contrib/pmix-release.sh b/opal/mca/pmix/pmix3x/pmix/contrib/pmix-release.sh similarity index 88% rename from opal/mca/pmix/pmix2x/pmix/contrib/pmix-release.sh rename to opal/mca/pmix/pmix3x/pmix/contrib/pmix-release.sh index ec64d5522f..7ff1e2918d 100755 --- a/opal/mca/pmix/pmix2x/pmix/contrib/pmix-release.sh +++ b/opal/mca/pmix/pmix3x/pmix/contrib/pmix-release.sh @@ -36,16 +36,16 @@ for branch in $branches; do module load libevent/pmix-$branch ./$script $@ >dist.out 2>&1 - if test "$?" != "0"; then - cat <checked = true; + for (n=0; n < ninfo; n++) { + if (0 == strncmp(info[n].key, PMIX_CONNECT_XCHG_ONLY, PMIX_MAX_KEYLEN)) { + cb->checked = false; + break; + } + } /* push the message into our event base to send to the server */ - if (PMIX_SUCCESS != (rc = PMIx_Connect_nb(procs, nprocs, info, ninfo, op_cbfunc, cb))) { + if (PMIX_SUCCESS != (rc = PMIx_Connect_nb(procs, nprocs, info, ninfo, cnct_cbfunc, cb))) { PMIX_RELEASE(cb); return rc; } @@ -101,6 +119,15 @@ PMIX_EXPORT pmix_status_t PMIx_Connect(const pmix_proc_t procs[], size_t nprocs, /* wait for the connect to complete */ PMIX_WAIT_THREAD(&cb->lock); rc = cb->status; + + if (cb->checked && PMIX_SUCCESS == rc) { + if (NULL != nspace) { + (void)strncpy(nspace, cb->pname.nspace, PMIX_MAX_NSLEN); + } + if (NULL != newrank) { + *newrank = cb->pname.rank; + } + } PMIX_RELEASE(cb); pmix_output_verbose(2, pmix_globals.debug_output, @@ -111,12 +138,13 @@ PMIX_EXPORT pmix_status_t PMIx_Connect(const pmix_proc_t procs[], size_t nprocs, PMIX_EXPORT pmix_status_t PMIx_Connect_nb(const pmix_proc_t procs[], size_t nprocs, const pmix_info_t info[], size_t ninfo, - pmix_op_cbfunc_t cbfunc, void *cbdata) + pmix_connect_cbfunc_t cbfunc, void *cbdata) { pmix_buffer_t *msg; pmix_cmd_t cmd = PMIX_CONNECTNB_CMD; pmix_status_t rc; pmix_cb_t *cb; + size_t n; PMIX_ACQUIRE_THREAD(&pmix_global_lock); @@ -185,9 +213,19 @@ PMIX_EXPORT pmix_status_t PMIx_Connect_nb(const pmix_proc_t procs[], size_t npro * recv routine so we know which callback to use when * the return message is recvd */ cb = PMIX_NEW(pmix_cb_t); - cb->cbfunc.opfn = cbfunc; + cb->cbfunc.cnctfn = cbfunc; cb->cbdata = cbdata; + /* see if this connect request was to return a new nspace/rank, or + * was just an exchange of info */ + cb->checked = true; + for (n=0; n < ninfo; n++) { + if (0 == strncmp(info[n].key, PMIX_CONNECT_XCHG_ONLY, PMIX_MAX_KEYLEN)) { + cb->checked = false; + break; + } + } + /* push the message into our event base to send to the server */ PMIX_PTL_SEND_RECV(rc, pmix_client_globals.myserver, msg, wait_cbfunc, (void*)cb); @@ -199,7 +237,7 @@ PMIX_EXPORT pmix_status_t PMIx_Connect_nb(const pmix_proc_t procs[], size_t npro return rc; } -PMIX_EXPORT pmix_status_t PMIx_Disconnect(const pmix_proc_t procs[], size_t nprocs, +PMIX_EXPORT pmix_status_t PMIx_Disconnect(const char nspace[], const pmix_info_t info[], size_t ninfo) { pmix_status_t rc; @@ -223,7 +261,7 @@ PMIX_EXPORT pmix_status_t PMIx_Disconnect(const pmix_proc_t procs[], size_t npro * the return message is recvd */ cb = PMIX_NEW(pmix_cb_t); - if (PMIX_SUCCESS != (rc = PMIx_Disconnect_nb(procs, nprocs, info, ninfo, op_cbfunc, cb))) { + if (PMIX_SUCCESS != (rc = PMIx_Disconnect_nb(nspace, info, ninfo, op_cbfunc, cb))) { PMIX_RELEASE(cb); return rc; } @@ -239,7 +277,7 @@ PMIX_EXPORT pmix_status_t PMIx_Disconnect(const pmix_proc_t procs[], size_t npro return rc; } -PMIX_EXPORT pmix_status_t PMIx_Disconnect_nb(const pmix_proc_t procs[], size_t nprocs, +PMIX_EXPORT pmix_status_t PMIx_Disconnect_nb(const char nspace[], const pmix_info_t info[], size_t ninfo, pmix_op_cbfunc_t cbfunc, void *cbdata) { @@ -253,13 +291,6 @@ PMIX_EXPORT pmix_status_t PMIx_Disconnect_nb(const pmix_proc_t procs[], size_t n pmix_output_verbose(2, pmix_globals.debug_output, "pmix: disconnect called"); - size_t cnt; - for (cnt = 0; cnt < nprocs; cnt++) { - if (0 != strcmp(pmix_globals.myid.nspace, procs[cnt].nspace)) { - PMIX_GDS_DEL_NSPACE(rc, procs[cnt].nspace); - } - } - if (pmix_globals.init_cntr <= 0) { PMIX_RELEASE_THREAD(&pmix_global_lock); return PMIX_ERR_INIT; @@ -273,10 +304,15 @@ PMIX_EXPORT pmix_status_t PMIx_Disconnect_nb(const pmix_proc_t procs[], size_t n PMIX_RELEASE_THREAD(&pmix_global_lock); /* check for bozo input */ - if (NULL == procs || 0 >= nprocs) { + if (NULL == nspace) { return PMIX_ERR_BAD_PARAM; } + /* release our internal resources */ + if (0 != strncmp(pmix_globals.myid.nspace, nspace, PMIX_MAX_NSLEN)) { + PMIX_GDS_DEL_NSPACE(rc, nspace); + } + msg = PMIX_NEW(pmix_buffer_t); /* pack the cmd */ PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver, @@ -286,15 +322,9 @@ PMIX_EXPORT pmix_status_t PMIx_Disconnect_nb(const pmix_proc_t procs[], size_t n return rc; } - /* pack the number of procs */ + /* pack the nspace */ PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver, - msg, &nprocs, 1, PMIX_SIZE); - if (PMIX_SUCCESS != rc) { - PMIX_ERROR_LOG(rc); - return rc; - } - PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver, - msg, procs, nprocs, PMIX_PROC); + msg, &nspace, 1, PMIX_STRING); if (PMIX_SUCCESS != rc) { PMIX_ERROR_LOG(rc); return rc; @@ -327,7 +357,7 @@ PMIX_EXPORT pmix_status_t PMIx_Disconnect_nb(const pmix_proc_t procs[], size_t n /* push the message into our event base to send to the server */ PMIX_PTL_SEND_RECV(rc, pmix_client_globals.myserver, - msg, wait_cbfunc, (void*)cb); + msg, discbfunc, (void*)cb); if (PMIX_SUCCESS != rc) { PMIX_RELEASE(msg); PMIX_RELEASE(cb); @@ -350,6 +380,7 @@ static void wait_cbfunc(struct pmix_peer_t *pr, char *nspace; pmix_buffer_t bkt; pmix_byte_object_t bo; + pmix_proc_t pname; pmix_output_verbose(2, pmix_globals.debug_output, "pmix:client recv callback activated with %d bytes", @@ -367,6 +398,10 @@ static void wait_cbfunc(struct pmix_peer_t *pr, goto report; } + /* set the default nspace/rank */ + memset(pname.nspace, 0, PMIX_MAX_NSLEN+1); + pname.rank = PMIX_RANK_UNDEF; + /* unpack the returned status */ cnt = 1; PMIX_BFROPS_UNPACK(rc, pmix_client_globals.myserver, @@ -375,6 +410,23 @@ static void wait_cbfunc(struct pmix_peer_t *pr, PMIX_ERROR_LOG(rc); ret = rc; } + + if (PMIX_SUCCESS != ret) { + goto report; + } + + if (cb->checked) { + /* unpack the returned nspace/rank */ + cnt = 1; + PMIX_BFROPS_UNPACK(rc, pmix_client_globals.myserver, + buf, &pname, &cnt, PMIX_PROC); + if (PMIX_SUCCESS != rc) { + PMIX_ERROR_LOG(rc); + ret = rc; + goto report; + } + } + /* connect has to also pass back data from all nspace's involved in * the operation, including our own. Each will come as a byte object */ cnt = 1; @@ -411,6 +463,47 @@ static void wait_cbfunc(struct pmix_peer_t *pr, ret = rc; } + report: + if (NULL != cb->cbfunc.cnctfn) { + cb->cbfunc.cnctfn(ret, pname.nspace, pname.rank, cb->cbdata); + } + PMIX_RELEASE(cb); +} + +static void discbfunc(struct pmix_peer_t *pr, + pmix_ptl_hdr_t *hdr, + pmix_buffer_t *buf, void *cbdata) +{ + pmix_cb_t *cb = (pmix_cb_t*)cbdata; + pmix_status_t rc; + pmix_status_t ret; + int32_t cnt; + + pmix_output_verbose(2, pmix_globals.debug_output, + "pmix:client recv callback activated with %d bytes", + (NULL == buf) ? -1 : (int)buf->bytes_used); + + if (NULL == buf) { + ret = PMIX_ERR_BAD_PARAM; + goto report; + } + + /* a zero-byte buffer indicates that this recv is being + * completed due to a lost connection */ + if (PMIX_BUFFER_IS_EMPTY(buf)) { + ret = PMIX_ERR_UNREACH; + goto report; + } + + /* unpack the returned status */ + cnt = 1; + PMIX_BFROPS_UNPACK(rc, pmix_client_globals.myserver, + buf, &ret, &cnt, PMIX_STATUS); + if (PMIX_SUCCESS != rc) { + PMIX_ERROR_LOG(rc); + ret = rc; + } + report: if (NULL != cb->cbfunc.opfn) { cb->cbfunc.opfn(ret, cb->cbdata); @@ -426,3 +519,18 @@ static void op_cbfunc(pmix_status_t status, void *cbdata) PMIX_POST_OBJECT(cb); PMIX_WAKEUP_THREAD(&cb->lock); } + +static void cnct_cbfunc(pmix_status_t status, + char nspace[], int rank, + void *cbdata) +{ + pmix_cb_t *cb = (pmix_cb_t*)cbdata; + + cb->status = status; + if (NULL != nspace) { + cb->pname.nspace = strdup(nspace); + } + cb->pname.rank = rank; + PMIX_POST_OBJECT(cb); + PMIX_WAKEUP_THREAD(&cb->lock); +} diff --git a/opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_fence.c b/opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_fence.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_fence.c rename to opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_fence.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_get.c b/opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_get.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_get.c rename to opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_get.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_ops.h b/opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_ops.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_ops.h rename to opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_ops.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_pub.c b/opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_pub.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_pub.c rename to opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_pub.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_spawn.c b/opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_spawn.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/client/pmix_client_spawn.c rename to opal/mca/pmix/pmix3x/pmix/src/client/pmix_client_spawn.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/common/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/common/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/common/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/common/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/common/pmix_control.c b/opal/mca/pmix/pmix3x/pmix/src/common/pmix_control.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/common/pmix_control.c rename to opal/mca/pmix/pmix3x/pmix/src/common/pmix_control.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/common/pmix_data.c b/opal/mca/pmix/pmix3x/pmix/src/common/pmix_data.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/common/pmix_data.c rename to opal/mca/pmix/pmix3x/pmix/src/common/pmix_data.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/common/pmix_log.c b/opal/mca/pmix/pmix3x/pmix/src/common/pmix_log.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/common/pmix_log.c rename to opal/mca/pmix/pmix3x/pmix/src/common/pmix_log.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/common/pmix_query.c b/opal/mca/pmix/pmix3x/pmix/src/common/pmix_query.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/common/pmix_query.c rename to opal/mca/pmix/pmix3x/pmix/src/common/pmix_query.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/common/pmix_strings.c b/opal/mca/pmix/pmix3x/pmix/src/common/pmix_strings.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/common/pmix_strings.c rename to opal/mca/pmix/pmix3x/pmix/src/common/pmix_strings.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/event/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/event/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/event/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/event/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/event/pmix_event.h b/opal/mca/pmix/pmix3x/pmix/src/event/pmix_event.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/event/pmix_event.h rename to opal/mca/pmix/pmix3x/pmix/src/event/pmix_event.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/event/pmix_event_notification.c b/opal/mca/pmix/pmix3x/pmix/src/event/pmix_event_notification.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/event/pmix_event_notification.c rename to opal/mca/pmix/pmix3x/pmix/src/event/pmix_event_notification.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/event/pmix_event_registration.c b/opal/mca/pmix/pmix3x/pmix/src/event/pmix_event_registration.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/event/pmix_event_registration.c rename to opal/mca/pmix/pmix3x/pmix/src/event/pmix_event_registration.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/include/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/include/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/align.h b/opal/mca/pmix/pmix3x/pmix/src/include/align.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/align.h rename to opal/mca/pmix/pmix3x/pmix/src/include/align.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/hash_string.h b/opal/mca/pmix/pmix3x/pmix/src/include/hash_string.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/hash_string.h rename to opal/mca/pmix/pmix3x/pmix/src/include/hash_string.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/pmix_config_bottom.h b/opal/mca/pmix/pmix3x/pmix/src/include/pmix_config_bottom.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/pmix_config_bottom.h rename to opal/mca/pmix/pmix3x/pmix/src/include/pmix_config_bottom.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/pmix_config_top.h b/opal/mca/pmix/pmix3x/pmix/src/include/pmix_config_top.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/pmix_config_top.h rename to opal/mca/pmix/pmix3x/pmix/src/include/pmix_config_top.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/pmix_globals.c b/opal/mca/pmix/pmix3x/pmix/src/include/pmix_globals.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/pmix_globals.c rename to opal/mca/pmix/pmix3x/pmix/src/include/pmix_globals.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/pmix_globals.h b/opal/mca/pmix/pmix3x/pmix/src/include/pmix_globals.h similarity index 99% rename from opal/mca/pmix/pmix2x/pmix/src/include/pmix_globals.h rename to opal/mca/pmix/pmix3x/pmix/src/include/pmix_globals.h index 36af6e2d92..34f12a5dfe 100644 --- a/opal/mca/pmix/pmix2x/pmix/src/include/pmix_globals.h +++ b/opal/mca/pmix/pmix3x/pmix/src/include/pmix_globals.h @@ -215,6 +215,7 @@ PMIX_CLASS_DECLARATION(pmix_query_caddy_t); typedef struct { pmix_list_item_t super; pmix_cmd_t type; + pmix_proc_t pname; bool hybrid; // true if participating procs are from more than one nspace pmix_proc_t *pcs; // copy of the original array of participants size_t npcs; // number of procs in the array @@ -230,6 +231,7 @@ typedef struct { pmix_collect_t collect_type; // whether or not data is to be returned at completion pmix_modex_cbfunc_t modexcbfunc; pmix_op_cbfunc_t op_cbfunc; + pmix_connect_cbfunc_t cnct_cbfunc; } pmix_server_trkr_t; PMIX_CLASS_DECLARATION(pmix_server_trkr_t); @@ -283,6 +285,7 @@ typedef struct { pmix_value_cbfunc_t valuefn; pmix_lookup_cbfunc_t lookupfn; pmix_spawn_cbfunc_t spawnfn; + pmix_connect_cbfunc_t cnctfn; pmix_evhdlr_reg_cbfunc_t errregfn; } cbfunc; size_t errhandler_ref; diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/pmix_socket_errno.h b/opal/mca/pmix/pmix3x/pmix/src/include/pmix_socket_errno.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/pmix_socket_errno.h rename to opal/mca/pmix/pmix3x/pmix/src/include/pmix_socket_errno.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/pmix_stdint.h b/opal/mca/pmix/pmix3x/pmix/src/include/pmix_stdint.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/pmix_stdint.h rename to opal/mca/pmix/pmix3x/pmix/src/include/pmix_stdint.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/prefetch.h b/opal/mca/pmix/pmix3x/pmix/src/include/prefetch.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/prefetch.h rename to opal/mca/pmix/pmix3x/pmix/src/include/prefetch.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/include/types.h b/opal/mca/pmix/pmix3x/pmix/src/include/types.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/include/types.h rename to opal/mca/pmix/pmix3x/pmix/src/include/types.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/mca/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/mca/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/base/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/help-mca-base.txt b/opal/mca/pmix/pmix3x/pmix/src/mca/base/help-mca-base.txt similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/help-mca-base.txt rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/help-mca-base.txt diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/help-mca-var.txt b/opal/mca/pmix/pmix3x/pmix/src/mca/base/help-mca-var.txt similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/help-mca-var.txt rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/help-mca-var.txt diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_close.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_close.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_close.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_close.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_component_compare.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_component_compare.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_component_compare.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_component_compare.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_component_find.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_component_find.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_component_find.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_component_find.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_component_repository.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_component_repository.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_component_repository.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_component_repository.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_component_repository.h b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_component_repository.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_component_repository.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_component_repository.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_components_close.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_components_close.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_components_close.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_components_close.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_components_open.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_components_open.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_components_open.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_components_open.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_components_register.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_components_register.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_components_register.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_components_register.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_components_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_components_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_components_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_components_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_framework.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_framework.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_framework.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_framework.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_framework.h b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_framework.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_framework.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_framework.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_list.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_list.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_list.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_list.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_open.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_open.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_open.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_open.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_parse_paramfile.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_parse_paramfile.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_parse_paramfile.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_parse_paramfile.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var.h b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var_enum.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var_enum.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var_enum.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var_enum.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var_enum.h b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var_enum.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var_enum.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var_enum.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var_group.c b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var_group.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var_group.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var_group.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var_group.h b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var_group.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_var_group.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_var_group.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_vari.h b/opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_vari.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/base/pmix_mca_base_vari.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/base/pmix_mca_base_vari.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_copy.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_copy.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_copy.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_copy.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_fns.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_fns.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_fns.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_fns.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_frame.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_frame.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_frame.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_frame.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_pack.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_pack.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_pack.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_pack.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_print.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_print.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_print.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_print.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_stubs.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_stubs.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_stubs.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_stubs.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_unpack.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_unpack.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/base/bfrop_base_unpack.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/base/bfrop_base_unpack.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/bfrops.h b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/bfrops.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/bfrops.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/bfrops.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/bfrops_types.h b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/bfrops_types.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/bfrops_types.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/bfrops_types.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/bfrop_v12.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/bfrop_v12.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/bfrop_v12.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/bfrop_v12.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/bfrop_v12.h b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/bfrop_v12.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/bfrop_v12.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/bfrop_v12.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/bfrop_v12_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/bfrop_v12_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/bfrop_v12_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/bfrop_v12_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/copy.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/copy.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/copy.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/copy.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/internal.h b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/internal.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/internal.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/internal.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/pack.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/pack.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/pack.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/pack.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/print.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/print.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/print.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/print.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/unpack.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/unpack.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v12/unpack.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v12/unpack.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/bfrop_pmix20.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/bfrop_pmix20.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/bfrop_pmix20.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/bfrop_pmix20.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/bfrop_pmix20.h b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/bfrop_pmix20.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/bfrop_pmix20.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/bfrop_pmix20.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/bfrop_pmix20_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/bfrop_pmix20_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/bfrop_pmix20_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/bfrop_pmix20_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/copy.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/copy.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/copy.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/copy.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/internal.h b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/internal.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/internal.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/internal.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/pack.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/pack.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/pack.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/pack.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/print.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/print.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/print.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/print.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/unpack.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/unpack.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v20/unpack.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v20/unpack.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v21/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v21/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v21/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v21/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v21/bfrop_pmix21.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v21/bfrop_pmix21.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v21/bfrop_pmix21.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v21/bfrop_pmix21.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v21/bfrop_pmix21.h b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v21/bfrop_pmix21.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v21/bfrop_pmix21.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v21/bfrop_pmix21.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v21/bfrop_pmix21_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v21/bfrop_pmix21_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/bfrops/v21/bfrop_pmix21_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/bfrops/v21/bfrop_pmix21_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/gds_base_fns.c b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/gds_base_fns.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/gds_base_fns.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/gds_base_fns.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/gds_base_frame.c b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/gds_base_frame.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/gds_base_frame.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/gds_base_frame.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/gds_base_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/gds_base_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/base/gds_base_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/base/gds_base_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/ds12/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/ds12/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/ds12/gds_dstore.c b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/ds12/gds_dstore.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/ds12/gds_dstore.h b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/ds12/gds_dstore.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/ds12/gds_dstore_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/ds12/gds_dstore_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/gds.h b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/gds.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/gds.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/gds.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/hash/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/hash/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/hash/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/hash/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/hash/gds_hash.c b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/hash/gds_hash.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/hash/gds_hash.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/hash/gds_hash.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/hash/gds_hash.h b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/hash/gds_hash.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/hash/gds_hash.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/hash/gds_hash.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/gds/hash/gds_hash_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/hash/gds_hash_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/gds/hash/gds_hash_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/gds/hash/gds_hash_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/mca.h b/opal/mca/pmix/pmix3x/pmix/src/mca/mca.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/mca.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/mca.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/pdl_base_close.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/pdl_base_close.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/pdl_base_close.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/pdl_base_close.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/pdl_base_fns.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/pdl_base_fns.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/pdl_base_fns.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/pdl_base_fns.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/pdl_base_open.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/pdl_base_open.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/pdl_base_open.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/pdl_base_open.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/pdl_base_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/pdl_base_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/base/pdl_base_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/base/pdl_base_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdl.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdl.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdl.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdl.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_module.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_module.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_module.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/pdlopen/pdl_pdlopen_module.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/pdl_libltdl.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/pdl_libltdl.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/pdl_libltdl.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/pdl_libltdl.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/pdl_libltdl_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/pdl_libltdl_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/pdl_libltdl_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/pdl_libltdl_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/pdl_libltdl_module.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/pdl_libltdl_module.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pdl/plibltdl/pdl_libltdl_module.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pdl/plibltdl/pdl_libltdl_module.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/base/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/base/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/base/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/base/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/base/pif_base_components.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/base/pif_base_components.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/base/pif_base_components.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/base/pif_base_components.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv4/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv4/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv4/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv4/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv4/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv4/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv4/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv4/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv4/pif_bsdx.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv4/pif_bsdx.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv4/pif_bsdx.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv4/pif_bsdx.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv6/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv6/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv6/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv6/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv6/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv6/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv6/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv6/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv6/pif_bsdx_ipv6.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv6/pif_bsdx_ipv6.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/bsdx_ipv6/pif_bsdx_ipv6.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/bsdx_ipv6/pif_bsdx_ipv6.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/linux_ipv6/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/linux_ipv6/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/linux_ipv6/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/linux_ipv6/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/linux_ipv6/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/linux_ipv6/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/linux_ipv6/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/linux_ipv6/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/linux_ipv6/pif_linux_ipv6.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/linux_ipv6/pif_linux_ipv6.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/linux_ipv6/pif_linux_ipv6.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/linux_ipv6/pif_linux_ipv6.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/pif.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/pif.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/pif.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/pif.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/posix_ipv4/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/posix_ipv4/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/posix_ipv4/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/posix_ipv4/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/posix_ipv4/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/posix_ipv4/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/posix_ipv4/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/posix_ipv4/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/posix_ipv4/pif_posix.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/posix_ipv4/pif_posix.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/posix_ipv4/pif_posix.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/posix_ipv4/pif_posix.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/solaris_ipv6/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/solaris_ipv6/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/solaris_ipv6/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/solaris_ipv6/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/solaris_ipv6/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/solaris_ipv6/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/solaris_ipv6/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/solaris_ipv6/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pif/solaris_ipv6/pif_solaris_ipv6.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pif/solaris_ipv6/pif_solaris_ipv6.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pif/solaris_ipv6/pif_solaris_ipv6.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pif/solaris_ipv6/pif_solaris_ipv6.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/base/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/base/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/base/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/base/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_components.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_components.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_components.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_components.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_expand.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_expand.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_expand.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/base/pinstalldirs_base_expand.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/config/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/config/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/config/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/config/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/config/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/config/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/config/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/config/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h.in b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h.in similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h.in rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h.in diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/config/pmix_pinstalldirs_config.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/config/pmix_pinstalldirs_config.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/config/pmix_pinstalldirs_config.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/config/pmix_pinstalldirs_config.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/env/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/env/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/env/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/env/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/env/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/env/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/env/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/env/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/env/pmix_pinstalldirs_env.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/env/pmix_pinstalldirs_env.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/env/pmix_pinstalldirs_env.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/env/pmix_pinstalldirs_env.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/pinstalldirs.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/pinstalldirs.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pinstalldirs/pinstalldirs.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pinstalldirs/pinstalldirs.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/pnet_base_fns.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/pnet_base_fns.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/pnet_base_fns.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/pnet_base_fns.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/pnet_base_frame.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/pnet_base_frame.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/pnet_base_frame.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/pnet_base_frame.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/pnet_base_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/pnet_base_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/base/pnet_base_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/base/pnet_base_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/pnet_opa.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/pnet_opa.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/pnet_opa.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/pnet_opa.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/pnet_opa.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/pnet_opa.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/pnet_opa.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/pnet_opa.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/pnet_opa_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/pnet_opa_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/opa/pnet_opa_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/opa/pnet_opa_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pnet/pnet.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pnet/pnet.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pnet/pnet.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pnet/pnet.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/preg_base_frame.c b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/preg_base_frame.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/preg_base_frame.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/preg_base_frame.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/preg_base_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/preg_base_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/preg_base_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/preg_base_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/preg_base_stubs.c b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/preg_base_stubs.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/base/preg_base_stubs.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/base/preg_base_stubs.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/native/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/native/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/native/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/native/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/native/preg_native.c b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/native/preg_native.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/native/preg_native.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/native/preg_native.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/native/preg_native.h b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/native/preg_native.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/native/preg_native.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/native/preg_native.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/native/preg_native_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/native/preg_native_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/native/preg_native_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/native/preg_native_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/preg.h b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/preg.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/preg.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/preg.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/preg/preg_types.h b/opal/mca/pmix/pmix3x/pmix/src/mca/preg/preg_types.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/preg/preg_types.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/preg/preg_types.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/psec_base_fns.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/psec_base_fns.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/psec_base_fns.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/psec_base_fns.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/psec_base_frame.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/psec_base_frame.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/psec_base_frame.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/psec_base_frame.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/psec_base_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/psec_base_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/base/psec_base_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/base/psec_base_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/configure.m4 b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/configure.m4 similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/configure.m4 rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/configure.m4 diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/psec_munge.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/psec_munge.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/psec_munge.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/psec_munge.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/psec_munge.h b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/psec_munge.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/psec_munge.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/psec_munge.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/psec_munge_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/psec_munge_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/munge/psec_munge_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/munge/psec_munge_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/native/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/native/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/native/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/native/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/native/psec_native.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/native/psec_native.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/native/psec_native.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/native/psec_native.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/native/psec_native.h b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/native/psec_native.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/native/psec_native.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/native/psec_native.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/native/psec_native_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/native/psec_native_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/native/psec_native_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/native/psec_native_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/none/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/none/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/none/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/none/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/none/psec_none.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/none/psec_none.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/none/psec_none.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/none/psec_none.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/none/psec_none.h b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/none/psec_none.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/none/psec_none.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/none/psec_none.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/none/psec_none_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/none/psec_none_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/none/psec_none_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/none/psec_none_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psec/psec.h b/opal/mca/pmix/pmix3x/pmix/src/mca/psec/psec.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psec/psec.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/psec/psec.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/psensor_base_frame.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/psensor_base_frame.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/psensor_base_frame.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/psensor_base_frame.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/psensor_base_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/psensor_base_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/psensor_base_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/psensor_base_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/psensor_base_stubs.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/psensor_base_stubs.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/base/psensor_base_stubs.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/base/psensor_base_stubs.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/help-pmix-psensor-file.txt b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/help-pmix-psensor-file.txt similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/help-pmix-psensor-file.txt rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/help-pmix-psensor-file.txt diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/psensor_file.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/psensor_file.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/psensor_file.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/psensor_file.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/psensor_file.h b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/psensor_file.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/psensor_file.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/psensor_file.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/psensor_file_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/psensor_file_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/file/psensor_file_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/file/psensor_file_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/help-pmix-psensor-heartbeat.txt b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/help-pmix-psensor-heartbeat.txt similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/help-pmix-psensor-heartbeat.txt rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/help-pmix-psensor-heartbeat.txt diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.h b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/heartbeat/psensor_heartbeat_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/psensor/psensor.h b/opal/mca/pmix/pmix3x/pmix/src/mca/psensor/psensor.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/psensor/psensor.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/psensor/psensor.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/base/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/base/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/base/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/base/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/base/pshmem_base_frame.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/base/pshmem_base_frame.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/base/pshmem_base_frame.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/base/pshmem_base_frame.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/base/pshmem_base_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/base/pshmem_base_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/base/pshmem_base_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/base/pshmem_base_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/mmap/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/mmap/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/mmap/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/mmap/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/mmap/pshmem_mmap.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/mmap/pshmem_mmap.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/mmap/pshmem_mmap.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/mmap/pshmem_mmap.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/mmap/pshmem_mmap.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/mmap/pshmem_mmap.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/mmap/pshmem_mmap.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/mmap/pshmem_mmap.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/mmap/pshmem_mmap_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/mmap/pshmem_mmap_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/mmap/pshmem_mmap_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/mmap/pshmem_mmap_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/pshmem.h b/opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/pshmem.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/pshmem/pshmem.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/pshmem/pshmem.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/base.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/base.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/base.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_connect.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_connect.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_connect.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_connect.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_frame.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_frame.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_frame.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_frame.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_listener.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_listener.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_listener.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_listener.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_select.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_select.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_select.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_select.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_sendrecv.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_sendrecv.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_sendrecv.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_sendrecv.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_stubs.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_stubs.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/base/ptl_base_stubs.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_stubs.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/ptl.h b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/ptl.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/ptl.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/ptl.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/ptl_types.h b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/ptl_types.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/ptl_types.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/ptl_types.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/tcp/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/tcp/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/tcp/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/tcp/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/tcp/ptl_tcp.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/tcp/ptl_tcp.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/tcp/ptl_tcp.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/tcp/ptl_tcp.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/tcp/ptl_tcp.h b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/tcp/ptl_tcp.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/tcp/ptl_tcp.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/tcp/ptl_tcp.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/tcp/ptl_tcp_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/tcp/ptl_tcp_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/tcp/ptl_tcp_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/tcp/ptl_tcp_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/usock/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/usock/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/usock/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/usock/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/usock/ptl_usock.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/usock/ptl_usock.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/usock/ptl_usock.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/usock/ptl_usock.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/usock/ptl_usock.h b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/usock/ptl_usock.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/usock/ptl_usock.h rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/usock/ptl_usock.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/mca/ptl/usock/ptl_usock_component.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/usock/ptl_usock_component.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/mca/ptl/usock/ptl_usock_component.c rename to opal/mca/pmix/pmix3x/pmix/src/mca/ptl/usock/ptl_usock_component.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/runtime/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/runtime/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/runtime/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/runtime/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/runtime/help-pmix-runtime.txt b/opal/mca/pmix/pmix3x/pmix/src/runtime/help-pmix-runtime.txt similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/runtime/help-pmix-runtime.txt rename to opal/mca/pmix/pmix3x/pmix/src/runtime/help-pmix-runtime.txt diff --git a/opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_finalize.c b/opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_finalize.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_finalize.c rename to opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_finalize.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_init.c b/opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_init.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_init.c rename to opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_init.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_params.c b/opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_params.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_params.c rename to opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_params.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_progress_threads.c b/opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_progress_threads.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_progress_threads.c rename to opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_progress_threads.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_progress_threads.h b/opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_progress_threads.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_progress_threads.h rename to opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_progress_threads.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_rte.h b/opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_rte.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/runtime/pmix_rte.h rename to opal/mca/pmix/pmix3x/pmix/src/runtime/pmix_rte.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/server/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/server/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/server/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/server/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/server/help-pmix-server.txt b/opal/mca/pmix/pmix3x/pmix/src/server/help-pmix-server.txt similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/server/help-pmix-server.txt rename to opal/mca/pmix/pmix3x/pmix/src/server/help-pmix-server.txt diff --git a/opal/mca/pmix/pmix2x/pmix/src/server/pmix_server.c b/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server.c similarity index 94% rename from opal/mca/pmix/pmix2x/pmix/src/server/pmix_server.c rename to opal/mca/pmix/pmix3x/pmix/src/server/pmix_server.c index c7b4dc289b..4efc8a7816 100644 --- a/opal/mca/pmix/pmix2x/pmix/src/server/pmix_server.c +++ b/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server.c @@ -655,9 +655,9 @@ void pmix_server_execute_collective(int sd, short args, void *cbdata) } else if (PMIX_CONNECTNB_CMD == trk->type) { pmix_host_server.connect(trk->pcs, trk->npcs, trk->info, trk->ninfo, - trk->op_cbfunc, trk); + trk->cnct_cbfunc, trk); } else if (PMIX_DISCONNECTNB_CMD == trk->type) { - pmix_host_server.disconnect(trk->pcs, trk->npcs, + pmix_host_server.disconnect(trk->pname.nspace, trk->info, trk->ninfo, trk->op_cbfunc, trk); } else { @@ -1823,31 +1823,41 @@ static void _cnct(int sd, short args, void *cbdata) int i; pmix_server_caddy_t *cd; char **nspaces=NULL; - bool found; + bool found, xchg; pmix_proc_t proc; pmix_cb_t cb; pmix_kval_t *kptr; + pmix_nspace_t *nsptr = NULL; + size_t n; PMIX_ACQUIRE_OBJECT(scd); - if (PMIX_CONNECTNB_CMD == tracker->type) { - /* find the unique nspaces that are participating */ - PMIX_LIST_FOREACH(cd, &tracker->local_cbs, pmix_server_caddy_t) { - if (NULL == nspaces) { - pmix_argv_append_nosize(&nspaces, cd->peer->info->pname.nspace); - } else { - found = false; - for (i=0; NULL != nspaces[i]; i++) { - if (0 == strcmp(nspaces[i], cd->peer->info->pname.nspace)) { - found = true; - break; - } - } - if (!found) { - pmix_argv_append_nosize(&nspaces, cd->peer->info->pname.nspace); - } - } - } + /* see if this connect request was to return a new nspace/rank, or + * was just an exchange of info */ + xchg = false; + for (n=0; n < tracker->ninfo; n++) { + if (0 == strncmp(tracker->info[n].key, PMIX_CONNECT_XCHG_ONLY, PMIX_MAX_KEYLEN)) { + xchg = true; + break; + } + } + + /* find the unique nspaces that are participating */ + PMIX_LIST_FOREACH(cd, &tracker->local_cbs, pmix_server_caddy_t) { + if (NULL == nspaces) { + pmix_argv_append_nosize(&nspaces, cd->peer->info->pname.nspace); + } else { + found = false; + for (i=0; NULL != nspaces[i]; i++) { + if (0 == strcmp(nspaces[i], cd->peer->info->pname.nspace)) { + found = true; + break; + } + } + if (!found) { + pmix_argv_append_nosize(&nspaces, cd->peer->info->pname.nspace); + } + } } /* loop across all local procs in the tracker, sending them the reply */ @@ -1859,13 +1869,35 @@ static void _cnct(int sd, short args, void *cbdata) rc = PMIX_ERR_NOMEM; goto cleanup; } + /* start with the status */ PMIX_BFROPS_PACK(rc, cd->peer, reply, &scd->status, 1, PMIX_STATUS); if (PMIX_SUCCESS != rc) { PMIX_ERROR_LOG(rc); PMIX_RELEASE(reply); goto cleanup; } - if (PMIX_CONNECTNB_CMD == tracker->type) { + if (PMIX_SUCCESS == scd->status) { + if (!xchg) { + if (NULL == nsptr) { + /* we have to track this nspace */ + nsptr = PMIX_NEW(pmix_nspace_t); + nsptr->nspace = strdup(scd->pname.nspace); + nsptr->all_registered = true; + /* we already counted the number of local procs */ + nsptr->nlocalprocs = pmix_list_get_size(&tracker->local_cbs); + pmix_list_append(&pmix_server_globals.nspaces, &nsptr->super); + } + /* if success, then provide the new nspace/rank */ + (void)strncpy(proc.nspace, scd->pname.nspace, PMIX_MAX_NSLEN); + proc.rank = scd->pname.rank; + PMIX_BFROPS_PACK(rc, cd->peer, reply, &proc, 1, PMIX_PROC); + if (PMIX_SUCCESS != rc) { + PMIX_ERROR_LOG(rc); + PMIX_RELEASE(reply); + goto cleanup; + } + } + /* loop across all participating nspaces and include their * job-related info */ for (i=0; NULL != nspaces[i]; i++) { @@ -1952,13 +1984,87 @@ static void _cnct(int sd, short args, void *cbdata) PMIX_RELEASE(scd); } -static void cnct_cbfunc(pmix_status_t status, void *cbdata) +static void cnct_cbfunc(pmix_status_t status, + char nspace[], int rank, + void *cbdata) { pmix_server_trkr_t *tracker = (pmix_server_trkr_t*)cbdata; pmix_shift_caddy_t *scd; pmix_output_verbose(2, pmix_globals.debug_output, - "server:cnct_cbfunc called"); + "server:cnct_cbfunc called with nspace %s", + (NULL == nspace) ? "NULL" : nspace); + + if (NULL == tracker) { + /* nothing to do */ + return; + } + + /* need to thread-shift this callback as it accesses global data */ + scd = PMIX_NEW(pmix_shift_caddy_t); + if (NULL == scd) { + /* nothing we can do */ + return; + } + scd->status = status; + if (NULL != nspace) { + scd->pname.nspace = strdup(nspace); + } + scd->pname.rank = rank; + scd->tracker = tracker; + PMIX_THREADSHIFT(scd, _cnct); +} + +static void _discnct(int sd, short args, void *cbdata) +{ + pmix_shift_caddy_t *scd = (pmix_shift_caddy_t*)cbdata; + pmix_server_trkr_t *tracker = scd->tracker; + pmix_buffer_t *reply; + pmix_status_t rc; + pmix_server_caddy_t *cd; + + PMIX_ACQUIRE_OBJECT(scd); + + /* loop across all local procs in the tracker, sending them the reply */ + PMIX_LIST_FOREACH(cd, &tracker->local_cbs, pmix_server_caddy_t) { + /* setup the reply */ + reply = PMIX_NEW(pmix_buffer_t); + if (NULL == reply) { + PMIX_ERROR_LOG(PMIX_ERR_NOMEM); + rc = PMIX_ERR_NOMEM; + goto cleanup; + } + /* return the status */ + PMIX_BFROPS_PACK(rc, cd->peer, reply, &scd->status, 1, PMIX_STATUS); + if (PMIX_SUCCESS != rc) { + PMIX_ERROR_LOG(rc); + PMIX_RELEASE(reply); + goto cleanup; + } + pmix_output_verbose(2, pmix_globals.debug_output, + "server:cnct_cbfunc reply being sent to %s:%u", + cd->peer->info->pname.nspace, cd->peer->info->pname.rank); + PMIX_SERVER_QUEUE_REPLY(cd->peer, cd->hdr.tag, reply); + } + + cleanup: + /* cleanup the tracker -- the host RM is responsible for + * telling us when to remove the nspace from our data */ + pmix_list_remove_item(&pmix_server_globals.collectives, &tracker->super); + PMIX_RELEASE(tracker); + + /* we are done */ + PMIX_RELEASE(scd); +} + +static void discnct_cbfunc(pmix_status_t status, void *cbdata) +{ + pmix_server_trkr_t *tracker = (pmix_server_trkr_t*)cbdata; + pmix_shift_caddy_t *scd; + + pmix_output_verbose(2, pmix_globals.debug_output, + "server:discnct_cbfunc called on nspace %s", + (NULL == tracker) ? "NULL" : tracker->pname.nspace); if (NULL == tracker) { /* nothing to do */ @@ -1973,9 +2079,10 @@ static void cnct_cbfunc(pmix_status_t status, void *cbdata) } scd->status = status; scd->tracker = tracker; - PMIX_THREADSHIFT(scd, _cnct); + PMIX_THREADSHIFT(scd, _discnct); } + static void regevents_cbfunc(pmix_status_t status, void *cbdata) { pmix_status_t rc; @@ -2255,14 +2362,14 @@ static pmix_status_t server_switchyard(pmix_peer_t *peer, uint32_t tag, if (PMIX_CONNECTNB_CMD == cmd) { PMIX_GDS_CADDY(cd, peer, tag); - rc = pmix_server_connect(cd, buf, false, cnct_cbfunc); + rc = pmix_server_connect(cd, buf, cnct_cbfunc); PMIX_RELEASE(cd); return rc; } if (PMIX_DISCONNECTNB_CMD == cmd) { PMIX_GDS_CADDY(cd, peer, tag); - rc = pmix_server_connect(cd, buf, true, cnct_cbfunc); + rc = pmix_server_disconnect(cd, buf, discnct_cbfunc); PMIX_RELEASE(cd); return rc; } diff --git a/opal/mca/pmix/pmix2x/pmix/src/server/pmix_server_get.c b/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server_get.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/server/pmix_server_get.c rename to opal/mca/pmix/pmix3x/pmix/src/server/pmix_server_get.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/server/pmix_server_ops.c b/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server_ops.c similarity index 94% rename from opal/mca/pmix/pmix2x/pmix/src/server/pmix_server_ops.c rename to opal/mca/pmix/pmix3x/pmix/src/server/pmix_server_ops.c index beaed4e646..3d40fc3120 100644 --- a/opal/mca/pmix/pmix2x/pmix/src/server/pmix_server_ops.c +++ b/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server_ops.c @@ -1102,9 +1102,121 @@ pmix_status_t pmix_server_spawn(pmix_peer_t *peer, return rc; } +pmix_status_t pmix_server_disconnect(pmix_server_caddy_t *cd, + pmix_buffer_t *buf, + pmix_op_cbfunc_t cbfunc) +{ + int32_t cnt; + pmix_status_t rc; + pmix_info_t *info = NULL; + size_t ninfo; + pmix_server_trkr_t *trk; + char *nptr; + pmix_proc_t proc; + pmix_nspace_t *nsptr, *nspace; + + if (NULL == pmix_host_server.disconnect) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* unpack the nspace they want to be disconnected from */ + cnt = 1; + PMIX_BFROPS_UNPACK(rc, cd->peer, buf, &nptr, &cnt, PMIX_STRING); + if (PMIX_SUCCESS != rc) { + PMIX_ERROR_LOG(rc); + goto cleanup; + } + memset(proc.nspace, 0, PMIX_MAX_NSLEN+1); + (void)strncpy(proc.nspace, nptr, PMIX_MAX_NSLEN); + proc.rank = PMIX_RANK_WILDCARD; + free(nptr); + + /* unpack the number of provided info structs */ + cnt = 1; + PMIX_BFROPS_UNPACK(rc, cd->peer, buf, &ninfo, &cnt, PMIX_SIZE); + if (PMIX_SUCCESS != rc) { + return rc; + } + if (0 < ninfo) { + PMIX_INFO_CREATE(info, ninfo); + if (NULL == info) { + rc = PMIX_ERR_NOMEM; + goto cleanup; + } + /* unpack the info */ + cnt = ninfo; + PMIX_BFROPS_UNPACK(rc, cd->peer, buf, info, &cnt, PMIX_INFO); + if (PMIX_SUCCESS != rc) { + goto cleanup; + } + } + + /* we must already know about this nspace, so find its record */ + nspace = NULL; + PMIX_LIST_FOREACH(nsptr, &pmix_server_globals.nspaces, pmix_nspace_t) { + if (0 == strncmp(nsptr->nspace, proc.nspace, PMIX_MAX_NSLEN)) { + nspace = nsptr; + break; + } + } + if (NULL == nspace) { + PMIX_ERROR_LOG(PMIX_ERR_NOT_FOUND); + goto cleanup; + } + + /* find/create the local tracker for this operation */ + if (NULL == (trk = get_tracker(&proc, 1, PMIX_DISCONNECTNB_CMD))) { + /* we don't have this tracker yet, so get a new one */ + if (NULL == (trk = new_tracker(&proc, 1, PMIX_DISCONNECTNB_CMD))) { + /* only if a bozo error occurs */ + PMIX_ERROR_LOG(PMIX_ERROR); + /* DO NOT HANG */ + if (NULL != cbfunc) { + cbfunc(PMIX_ERROR, cd); + } + rc = PMIX_ERROR; + goto cleanup; + } + trk->nlocal = nspace->nlocalprocs; + trk->op_cbfunc = cbfunc; + } + (void)strncpy(trk->pname.nspace, proc.nspace, PMIX_MAX_NSLEN); + trk->pname.rank = PMIX_RANK_WILDCARD; + + /* if the info keys have not been provided yet, pass + * them along here */ + if (NULL == trk->info && NULL != info) { + trk->info = info; + trk->ninfo = ninfo; + info = NULL; + ninfo = 0; + } + + /* add this contributor to the tracker so they get + * notified when we are done */ + PMIX_RETAIN(cd); // prevent the caddy from being released when we return + pmix_list_append(&trk->local_cbs, &cd->super); + /* if all local contributions have been received, + * let the local host's server know that we are at the + * "fence" point - they will callback once the [dis]connect + * across all participants has been completed */ + if (trk->def_complete && + pmix_list_get_size(&trk->local_cbs) == trk->nlocal) { + rc = pmix_host_server.disconnect(trk->pname.nspace, trk->info, trk->ninfo, cbfunc, trk); + } else { + rc = PMIX_SUCCESS; + } + + cleanup: + if (NULL != info) { + PMIX_INFO_FREE(info, ninfo); + } + return rc; +} + pmix_status_t pmix_server_connect(pmix_server_caddy_t *cd, - pmix_buffer_t *buf, bool disconnect, - pmix_op_cbfunc_t cbfunc) + pmix_buffer_t *buf, + pmix_connect_cbfunc_t cbfunc) { int32_t cnt; pmix_status_t rc; @@ -1112,15 +1224,13 @@ pmix_status_t pmix_server_connect(pmix_server_caddy_t *cd, pmix_info_t *info = NULL; size_t nprocs, ninfo; pmix_server_trkr_t *trk; - pmix_cmd_t type = PMIX_CONNECTNB_CMD; pmix_output_verbose(2, pmix_globals.debug_output, "recvd CONNECT from peer %s:%d", cd->peer->info->pname.nspace, cd->peer->info->pname.rank); - if ((disconnect && NULL == pmix_host_server.disconnect) || - (!disconnect && NULL == pmix_host_server.connect)) { + if (NULL == pmix_host_server.connect) { return PMIX_ERR_NOT_SUPPORTED; } @@ -1176,23 +1286,21 @@ pmix_status_t pmix_server_connect(pmix_server_caddy_t *cd, } /* find/create the local tracker for this operation */ - if (disconnect) { - type = PMIX_DISCONNECTNB_CMD; - } - if (NULL == (trk = get_tracker(procs, nprocs, type))) { + if (NULL == (trk = get_tracker(procs, nprocs, PMIX_CONNECTNB_CMD))) { /* we don't have this tracker yet, so get a new one */ - if (NULL == (trk = new_tracker(procs, nprocs, type))) { + if (NULL == (trk = new_tracker(procs, nprocs, PMIX_CONNECTNB_CMD))) { /* only if a bozo error occurs */ PMIX_ERROR_LOG(PMIX_ERROR); /* DO NOT HANG */ if (NULL != cbfunc) { - cbfunc(PMIX_ERROR, cd); + cbfunc(PMIX_ERROR, NULL, PMIX_RANK_UNDEF, cd); } rc = PMIX_ERROR; goto cleanup; } - trk->op_cbfunc = cbfunc; + trk->cnct_cbfunc = cbfunc; } + /* if the info keys have not been provided yet, pass * them along here */ if (NULL == trk->info && NULL != info) { @@ -1212,11 +1320,7 @@ pmix_status_t pmix_server_connect(pmix_server_caddy_t *cd, * across all participants has been completed */ if (trk->def_complete && pmix_list_get_size(&trk->local_cbs) == trk->nlocal) { - if (disconnect) { - rc = pmix_host_server.disconnect(trk->pcs, trk->npcs, trk->info, trk->ninfo, cbfunc, trk); - } else { - rc = pmix_host_server.connect(trk->pcs, trk->npcs, trk->info, trk->ninfo, cbfunc, trk); - } + rc = pmix_host_server.connect(trk->pcs, trk->npcs, trk->info, trk->ninfo, cbfunc, trk); } else { rc = PMIX_SUCCESS; } @@ -2053,6 +2157,8 @@ pmix_status_t pmix_server_monitor(pmix_peer_t *peer, /***** INSTANCE SERVER LIBRARY CLASSES *****/ static void tcon(pmix_server_trkr_t *t) { + memset(t->pname.nspace, 0, PMIX_MAX_NSLEN+1); + t->pname.rank = PMIX_RANK_UNDEF; t->pcs = NULL; t->npcs = 0; PMIX_CONSTRUCT_LOCK(&t->lock); @@ -2066,6 +2172,7 @@ static void tcon(pmix_server_trkr_t *t) t->collect_type = PMIX_COLLECT_INVALID; t->modexcbfunc = NULL; t->op_cbfunc = NULL; + t->cnct_cbfunc = NULL; } static void tdes(pmix_server_trkr_t *t) { diff --git a/opal/mca/pmix/pmix2x/pmix/src/server/pmix_server_ops.h b/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server_ops.h similarity index 96% rename from opal/mca/pmix/pmix2x/pmix/src/server/pmix_server_ops.h rename to opal/mca/pmix/pmix3x/pmix/src/server/pmix_server_ops.h index 7a8c380bea..c3e1214fad 100644 --- a/opal/mca/pmix/pmix2x/pmix/src/server/pmix_server_ops.h +++ b/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server_ops.h @@ -175,8 +175,12 @@ pmix_status_t pmix_server_spawn(pmix_peer_t *peer, void *cbdata); pmix_status_t pmix_server_connect(pmix_server_caddy_t *cd, - pmix_buffer_t *buf, bool disconnect, - pmix_op_cbfunc_t cbfunc); + pmix_buffer_t *buf, + pmix_connect_cbfunc_t cbfunc); + +pmix_status_t pmix_server_disconnect(pmix_server_caddy_t *cd, + pmix_buffer_t *buf, + pmix_op_cbfunc_t cbfunc); pmix_status_t pmix_server_notify_error(pmix_status_t status, pmix_proc_t procs[], size_t nprocs, diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/threads/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/threads/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/mutex.c b/opal/mca/pmix/pmix3x/pmix/src/threads/mutex.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/mutex.c rename to opal/mca/pmix/pmix3x/pmix/src/threads/mutex.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/mutex.h b/opal/mca/pmix/pmix3x/pmix/src/threads/mutex.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/mutex.h rename to opal/mca/pmix/pmix3x/pmix/src/threads/mutex.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/mutex_unix.h b/opal/mca/pmix/pmix3x/pmix/src/threads/mutex_unix.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/mutex_unix.h rename to opal/mca/pmix/pmix3x/pmix/src/threads/mutex_unix.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/thread.c b/opal/mca/pmix/pmix3x/pmix/src/threads/thread.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/thread.c rename to opal/mca/pmix/pmix3x/pmix/src/threads/thread.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/thread_usage.h b/opal/mca/pmix/pmix3x/pmix/src/threads/thread_usage.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/thread_usage.h rename to opal/mca/pmix/pmix3x/pmix/src/threads/thread_usage.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/threads.h b/opal/mca/pmix/pmix3x/pmix/src/threads/threads.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/threads.h rename to opal/mca/pmix/pmix3x/pmix/src/threads/threads.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/tsd.h b/opal/mca/pmix/pmix3x/pmix/src/threads/tsd.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/tsd.h rename to opal/mca/pmix/pmix3x/pmix/src/threads/tsd.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/wait_sync.c b/opal/mca/pmix/pmix3x/pmix/src/threads/wait_sync.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/wait_sync.c rename to opal/mca/pmix/pmix3x/pmix/src/threads/wait_sync.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/threads/wait_sync.h b/opal/mca/pmix/pmix3x/pmix/src/threads/wait_sync.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/threads/wait_sync.h rename to opal/mca/pmix/pmix3x/pmix/src/threads/wait_sync.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/tool/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/tool/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/tool/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/tool/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/tool/pmix_tool.c b/opal/mca/pmix/pmix3x/pmix/src/tool/pmix_tool.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/tool/pmix_tool.c rename to opal/mca/pmix/pmix3x/pmix/src/tool/pmix_tool.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/Makefile.include b/opal/mca/pmix/pmix3x/pmix/src/util/Makefile.include similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/Makefile.include rename to opal/mca/pmix/pmix3x/pmix/src/util/Makefile.include diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/alfg.c b/opal/mca/pmix/pmix3x/pmix/src/util/alfg.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/alfg.c rename to opal/mca/pmix/pmix3x/pmix/src/util/alfg.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/alfg.h b/opal/mca/pmix/pmix3x/pmix/src/util/alfg.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/alfg.h rename to opal/mca/pmix/pmix3x/pmix/src/util/alfg.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/argv.c b/opal/mca/pmix/pmix3x/pmix/src/util/argv.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/argv.c rename to opal/mca/pmix/pmix3x/pmix/src/util/argv.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/argv.h b/opal/mca/pmix/pmix3x/pmix/src/util/argv.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/argv.h rename to opal/mca/pmix/pmix3x/pmix/src/util/argv.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/basename.c b/opal/mca/pmix/pmix3x/pmix/src/util/basename.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/basename.c rename to opal/mca/pmix/pmix3x/pmix/src/util/basename.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/basename.h b/opal/mca/pmix/pmix3x/pmix/src/util/basename.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/basename.h rename to opal/mca/pmix/pmix3x/pmix/src/util/basename.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/compress.c b/opal/mca/pmix/pmix3x/pmix/src/util/compress.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/compress.c rename to opal/mca/pmix/pmix3x/pmix/src/util/compress.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/compress.h b/opal/mca/pmix/pmix3x/pmix/src/util/compress.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/compress.h rename to opal/mca/pmix/pmix3x/pmix/src/util/compress.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/crc.c b/opal/mca/pmix/pmix3x/pmix/src/util/crc.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/crc.c rename to opal/mca/pmix/pmix3x/pmix/src/util/crc.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/crc.h b/opal/mca/pmix/pmix3x/pmix/src/util/crc.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/crc.h rename to opal/mca/pmix/pmix3x/pmix/src/util/crc.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/error.c b/opal/mca/pmix/pmix3x/pmix/src/util/error.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/error.c rename to opal/mca/pmix/pmix3x/pmix/src/util/error.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/error.h b/opal/mca/pmix/pmix3x/pmix/src/util/error.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/error.h rename to opal/mca/pmix/pmix3x/pmix/src/util/error.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/fd.c b/opal/mca/pmix/pmix3x/pmix/src/util/fd.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/fd.c rename to opal/mca/pmix/pmix3x/pmix/src/util/fd.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/fd.h b/opal/mca/pmix/pmix3x/pmix/src/util/fd.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/fd.h rename to opal/mca/pmix/pmix3x/pmix/src/util/fd.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/getid.c b/opal/mca/pmix/pmix3x/pmix/src/util/getid.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/getid.c rename to opal/mca/pmix/pmix3x/pmix/src/util/getid.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/getid.h b/opal/mca/pmix/pmix3x/pmix/src/util/getid.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/getid.h rename to opal/mca/pmix/pmix3x/pmix/src/util/getid.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/hash.c b/opal/mca/pmix/pmix3x/pmix/src/util/hash.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/hash.c rename to opal/mca/pmix/pmix3x/pmix/src/util/hash.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/hash.h b/opal/mca/pmix/pmix3x/pmix/src/util/hash.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/hash.h rename to opal/mca/pmix/pmix3x/pmix/src/util/hash.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/keyval/Makefile.am b/opal/mca/pmix/pmix3x/pmix/src/util/keyval/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/keyval/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/src/util/keyval/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/keyval/keyval_lex.h b/opal/mca/pmix/pmix3x/pmix/src/util/keyval/keyval_lex.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/keyval/keyval_lex.h rename to opal/mca/pmix/pmix3x/pmix/src/util/keyval/keyval_lex.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/keyval/keyval_lex.l b/opal/mca/pmix/pmix3x/pmix/src/util/keyval/keyval_lex.l similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/keyval/keyval_lex.l rename to opal/mca/pmix/pmix3x/pmix/src/util/keyval/keyval_lex.l diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/keyval_parse.c b/opal/mca/pmix/pmix3x/pmix/src/util/keyval_parse.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/keyval_parse.c rename to opal/mca/pmix/pmix3x/pmix/src/util/keyval_parse.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/keyval_parse.h b/opal/mca/pmix/pmix3x/pmix/src/util/keyval_parse.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/keyval_parse.h rename to opal/mca/pmix/pmix3x/pmix/src/util/keyval_parse.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/net.c b/opal/mca/pmix/pmix3x/pmix/src/util/net.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/net.c rename to opal/mca/pmix/pmix3x/pmix/src/util/net.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/net.h b/opal/mca/pmix/pmix3x/pmix/src/util/net.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/net.h rename to opal/mca/pmix/pmix3x/pmix/src/util/net.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/os_path.c b/opal/mca/pmix/pmix3x/pmix/src/util/os_path.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/os_path.c rename to opal/mca/pmix/pmix3x/pmix/src/util/os_path.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/os_path.h b/opal/mca/pmix/pmix3x/pmix/src/util/os_path.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/os_path.h rename to opal/mca/pmix/pmix3x/pmix/src/util/os_path.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/output.c b/opal/mca/pmix/pmix3x/pmix/src/util/output.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/output.c rename to opal/mca/pmix/pmix3x/pmix/src/util/output.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/output.h b/opal/mca/pmix/pmix3x/pmix/src/util/output.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/output.h rename to opal/mca/pmix/pmix3x/pmix/src/util/output.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/parse_options.c b/opal/mca/pmix/pmix3x/pmix/src/util/parse_options.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/parse_options.c rename to opal/mca/pmix/pmix3x/pmix/src/util/parse_options.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/parse_options.h b/opal/mca/pmix/pmix3x/pmix/src/util/parse_options.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/parse_options.h rename to opal/mca/pmix/pmix3x/pmix/src/util/parse_options.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/path.c b/opal/mca/pmix/pmix3x/pmix/src/util/path.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/path.c rename to opal/mca/pmix/pmix3x/pmix/src/util/path.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/path.h b/opal/mca/pmix/pmix3x/pmix/src/util/path.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/path.h rename to opal/mca/pmix/pmix3x/pmix/src/util/path.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/pif.c b/opal/mca/pmix/pmix3x/pmix/src/util/pif.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/pif.c rename to opal/mca/pmix/pmix3x/pmix/src/util/pif.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/pif.h b/opal/mca/pmix/pmix3x/pmix/src/util/pif.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/pif.h rename to opal/mca/pmix/pmix3x/pmix/src/util/pif.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/pmix_environ.c b/opal/mca/pmix/pmix3x/pmix/src/util/pmix_environ.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/pmix_environ.c rename to opal/mca/pmix/pmix3x/pmix/src/util/pmix_environ.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/pmix_environ.h b/opal/mca/pmix/pmix3x/pmix/src/util/pmix_environ.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/pmix_environ.h rename to opal/mca/pmix/pmix3x/pmix/src/util/pmix_environ.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/printf.c b/opal/mca/pmix/pmix3x/pmix/src/util/printf.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/printf.c rename to opal/mca/pmix/pmix3x/pmix/src/util/printf.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/printf.h b/opal/mca/pmix/pmix3x/pmix/src/util/printf.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/printf.h rename to opal/mca/pmix/pmix3x/pmix/src/util/printf.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/show_help.c b/opal/mca/pmix/pmix3x/pmix/src/util/show_help.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/show_help.c rename to opal/mca/pmix/pmix3x/pmix/src/util/show_help.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/show_help.h b/opal/mca/pmix/pmix3x/pmix/src/util/show_help.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/show_help.h rename to opal/mca/pmix/pmix3x/pmix/src/util/show_help.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/show_help_lex.h b/opal/mca/pmix/pmix3x/pmix/src/util/show_help_lex.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/show_help_lex.h rename to opal/mca/pmix/pmix3x/pmix/src/util/show_help_lex.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/show_help_lex.l b/opal/mca/pmix/pmix3x/pmix/src/util/show_help_lex.l similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/show_help_lex.l rename to opal/mca/pmix/pmix3x/pmix/src/util/show_help_lex.l diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/strnlen.h b/opal/mca/pmix/pmix3x/pmix/src/util/strnlen.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/strnlen.h rename to opal/mca/pmix/pmix3x/pmix/src/util/strnlen.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/timings.c b/opal/mca/pmix/pmix3x/pmix/src/util/timings.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/timings.c rename to opal/mca/pmix/pmix3x/pmix/src/util/timings.c diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/timings.h b/opal/mca/pmix/pmix3x/pmix/src/util/timings.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/timings.h rename to opal/mca/pmix/pmix3x/pmix/src/util/timings.h diff --git a/opal/mca/pmix/pmix2x/pmix/src/util/tsd.h b/opal/mca/pmix/pmix3x/pmix/src/util/tsd.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/src/util/tsd.h rename to opal/mca/pmix/pmix3x/pmix/src/util/tsd.h diff --git a/opal/mca/pmix/pmix2x/pmix/test/Makefile.am b/opal/mca/pmix/pmix3x/pmix/test/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/test/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/test/README b/opal/mca/pmix/pmix3x/pmix/test/README similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/README rename to opal/mca/pmix/pmix3x/pmix/test/README diff --git a/opal/mca/pmix/pmix2x/pmix/test/cli_stages.c b/opal/mca/pmix/pmix3x/pmix/test/cli_stages.c similarity index 99% rename from opal/mca/pmix/pmix2x/pmix/test/cli_stages.c rename to opal/mca/pmix/pmix3x/pmix/test/cli_stages.c index c69aecbf3e..cb92364d0e 100644 --- a/opal/mca/pmix/pmix2x/pmix/test/cli_stages.c +++ b/opal/mca/pmix/pmix3x/pmix/test/cli_stages.c @@ -274,4 +274,3 @@ void errhandler_reg_callbk (pmix_status_t status, TEST_VERBOSE(("ERRHANDLER REGISTRATION CALLBACK CALLED WITH STATUS %d, ref=%lu", status, (unsigned long)errhandler_ref)); } - diff --git a/opal/mca/pmix/pmix2x/pmix/test/cli_stages.h b/opal/mca/pmix/pmix3x/pmix/test/cli_stages.h similarity index 99% rename from opal/mca/pmix/pmix2x/pmix/test/cli_stages.h rename to opal/mca/pmix/pmix3x/pmix/test/cli_stages.h index 484b09c8be..7f449fd4ae 100644 --- a/opal/mca/pmix/pmix2x/pmix/test/cli_stages.h +++ b/opal/mca/pmix/pmix3x/pmix/test/cli_stages.h @@ -75,5 +75,3 @@ void op_callbk(pmix_status_t status, void errhandler_reg_callbk (pmix_status_t status, size_t errhandler_ref, void *cbdata); - - diff --git a/opal/mca/pmix/pmix2x/pmix/test/pmi2_client.c b/opal/mca/pmix/pmix3x/pmix/test/pmi2_client.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/pmi2_client.c rename to opal/mca/pmix/pmix3x/pmix/test/pmi2_client.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/pmi_client.c b/opal/mca/pmix/pmix3x/pmix/test/pmi_client.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/pmi_client.c rename to opal/mca/pmix/pmix3x/pmix/test/pmi_client.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/pmix_client.c b/opal/mca/pmix/pmix3x/pmix/test/pmix_client.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/pmix_client.c rename to opal/mca/pmix/pmix3x/pmix/test/pmix_client.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/pmix_client_otheruser.sh b/opal/mca/pmix/pmix3x/pmix/test/pmix_client_otheruser.sh similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/pmix_client_otheruser.sh rename to opal/mca/pmix/pmix3x/pmix/test/pmix_client_otheruser.sh diff --git a/opal/mca/pmix/pmix2x/pmix/test/pmix_regex.c b/opal/mca/pmix/pmix3x/pmix/test/pmix_regex.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/pmix_regex.c rename to opal/mca/pmix/pmix3x/pmix/test/pmix_regex.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/pmix_test.c b/opal/mca/pmix/pmix3x/pmix/test/pmix_test.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/pmix_test.c rename to opal/mca/pmix/pmix3x/pmix/test/pmix_test.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/server_callbacks.c b/opal/mca/pmix/pmix3x/pmix/test/server_callbacks.c similarity index 95% rename from opal/mca/pmix/pmix2x/pmix/test/server_callbacks.c rename to opal/mca/pmix/pmix3x/pmix/test/server_callbacks.c index 4525d13797..c5bc11152a 100644 --- a/opal/mca/pmix/pmix2x/pmix/test/server_callbacks.c +++ b/opal/mca/pmix/pmix3x/pmix/test/server_callbacks.c @@ -14,6 +14,7 @@ */ #include +#include #include "server_callbacks.h" #include "src/util/argv.h" @@ -305,19 +306,24 @@ pmix_status_t spawn_fn(const pmix_proc_t *proc, PMIx_server_register_nspace("foobar", napps, NULL, 0, release_cb, (void*)cb); return PMIX_SUCCESS; } +static int numconnect = 0; pmix_status_t connect_fn(const pmix_proc_t procs[], size_t nprocs, - const pmix_info_t info[], size_t ninfo, - pmix_op_cbfunc_t cbfunc, void *cbdata) + const pmix_info_t info[], size_t ninfo, + pmix_connect_cbfunc_t cbfunc, void *cbdata) { + char nspace[PMIX_MAX_NSLEN+1]; + + memset(nspace, 0, PMIX_MAX_NSLEN+1); + (void)snprintf(nspace, PMIX_MAX_NSLEN, "FOOBAR-%d", numconnect); if (NULL != cbfunc) { - /* return PMIX_EXISTS here just to ensure we get the correct status on the client */ - cbfunc(PMIX_EXISTS, cbdata); + cbfunc(PMIX_SUCCESS, nspace, 1, cbdata); } - return PMIX_SUCCESS; + numconnect++; + return PMIX_SUCCESS; } -pmix_status_t disconnect_fn(const pmix_proc_t procs[], size_t nprocs, +pmix_status_t disconnect_fn(const char nspace[], const pmix_info_t info[], size_t ninfo, pmix_op_cbfunc_t cbfunc, void *cbdata) { diff --git a/opal/mca/pmix/pmix2x/pmix/test/server_callbacks.h b/opal/mca/pmix/pmix3x/pmix/test/server_callbacks.h similarity index 93% rename from opal/mca/pmix/pmix2x/pmix/test/server_callbacks.h rename to opal/mca/pmix/pmix3x/pmix/test/server_callbacks.h index df0d5ca577..9248b5dfef 100644 --- a/opal/mca/pmix/pmix2x/pmix/test/server_callbacks.h +++ b/opal/mca/pmix/pmix3x/pmix/test/server_callbacks.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016 Intel, Inc. All rights reserved. + * Copyright (c) 2015-2017 Intel, Inc. All rights reserved. * Copyright (c) 2015 Mellanox Technologies, Inc. * All rights reserved. * $COPYRIGHT$ @@ -46,8 +46,8 @@ pmix_status_t spawn_fn(const pmix_proc_t *proc, pmix_spawn_cbfunc_t cbfunc, void *cbdata); pmix_status_t connect_fn(const pmix_proc_t procs[], size_t nprocs, const pmix_info_t info[], size_t ninfo, - pmix_op_cbfunc_t cbfunc, void *cbdata); -pmix_status_t disconnect_fn(const pmix_proc_t procs[], size_t nprocs, + pmix_connect_cbfunc_t cbfunc, void *cbdata); +pmix_status_t disconnect_fn(const char nspace[], const pmix_info_t info[], size_t ninfo, pmix_op_cbfunc_t cbfunc, void *cbdata); pmix_status_t regevents_fn(pmix_status_t *codes, size_t ncodes, diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/Makefile.am b/opal/mca/pmix/pmix3x/pmix/test/simple/Makefile.am similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/simple/Makefile.am rename to opal/mca/pmix/pmix3x/pmix/test/simple/Makefile.am diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/simpclient.c b/opal/mca/pmix/pmix3x/pmix/test/simple/simpclient.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/simple/simpclient.c rename to opal/mca/pmix/pmix3x/pmix/test/simple/simpclient.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/simpdie.c b/opal/mca/pmix/pmix3x/pmix/test/simple/simpdie.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/simple/simpdie.c rename to opal/mca/pmix/pmix3x/pmix/test/simple/simpdie.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/simpdmodex.c b/opal/mca/pmix/pmix3x/pmix/test/simple/simpdmodex.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/simple/simpdmodex.c rename to opal/mca/pmix/pmix3x/pmix/test/simple/simpdmodex.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/simpdyn.c b/opal/mca/pmix/pmix3x/pmix/test/simple/simpdyn.c similarity index 96% rename from opal/mca/pmix/pmix2x/pmix/test/simple/simpdyn.c rename to opal/mca/pmix/pmix3x/pmix/test/simple/simpdyn.c index 2dfbc57217..6d3ba10fb9 100644 --- a/opal/mca/pmix/pmix2x/pmix/test/simple/simpdyn.c +++ b/opal/mca/pmix/pmix3x/pmix/test/simple/simpdyn.c @@ -46,12 +46,13 @@ int main(int argc, char **argv) pmix_value_t *val = &value; pmix_proc_t proc; uint32_t nprocs; - char nsp2[PMIX_MAX_NSLEN+1]; + char nsp2[PMIX_MAX_NSLEN+1], nsp3[PMIX_MAX_NSLEN+1]; pmix_app_t *app; char hostname[PMIX_MAXHOSTNAMELEN]; pmix_proc_t *peers; size_t npeers, ntmp=0; char *nodelist; + pmix_rank_t newrank; gethostname(hostname, sizeof(hostname)); @@ -128,12 +129,13 @@ int main(int argc, char **argv) } /* just cycle the connect/disconnect functions */ - if (PMIX_SUCCESS != (rc = PMIx_Connect(&proc, 1, NULL, 0))) { + if (PMIX_SUCCESS != (rc = PMIx_Connect(&proc, 1, NULL, 0, nsp3, &newrank))) { pmix_output(0, "Client ns %s rank %d: PMIx_Connect failed: %d", myproc.nspace, myproc.rank, rc); goto done; } - pmix_output(0, "Client ns %s rank %d: PMIx_Connect succeeded", myproc.nspace, myproc.rank); - if (PMIX_SUCCESS != (rc = PMIx_Disconnect(&proc, 1, NULL, 0))) { + pmix_output(0, "Client ns %s rank %d: PMIx_Connect succeeded - %s:%d", + myproc.nspace, myproc.rank, nsp3, newrank); + if (PMIX_SUCCESS != (rc = PMIx_Disconnect(nsp3, NULL, 0))) { pmix_output(0, "Client ns %s rank %d: PMIx_Disonnect failed: %d", myproc.nspace, myproc.rank, rc); goto done; } diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/simpft.c b/opal/mca/pmix/pmix3x/pmix/test/simple/simpft.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/simple/simpft.c rename to opal/mca/pmix/pmix3x/pmix/test/simple/simpft.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/simplegacy.c b/opal/mca/pmix/pmix3x/pmix/test/simple/simplegacy.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/simple/simplegacy.c rename to opal/mca/pmix/pmix3x/pmix/test/simple/simplegacy.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/simppub.c b/opal/mca/pmix/pmix3x/pmix/test/simple/simppub.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/simple/simppub.c rename to opal/mca/pmix/pmix3x/pmix/test/simple/simppub.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/simptest.c b/opal/mca/pmix/pmix3x/pmix/test/simple/simptest.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/simple/simptest.c rename to opal/mca/pmix/pmix3x/pmix/test/simple/simptest.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/simple/simptool.c b/opal/mca/pmix/pmix3x/pmix/test/simple/simptool.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/simple/simptool.c rename to opal/mca/pmix/pmix3x/pmix/test/simple/simptool.c diff --git a/opal/mca/pmix/pmix3x/pmix/test/simple/test_pmix.c b/opal/mca/pmix/pmix3x/pmix/test/simple/test_pmix.c new file mode 100644 index 0000000000..6bfa3d793d --- /dev/null +++ b/opal/mca/pmix/pmix3x/pmix/test/simple/test_pmix.c @@ -0,0 +1,67 @@ + +#include +#include +#include + +int main(int argc, char **argv) +{ + pmix_proc_t myproc; + pmix_status_t rc; + + int rank; + rc = PMIx_Init(&myproc, NULL, 0); + assert(PMIX_SUCCESS == rc); + + { + pmix_value_t *value; + rc = PMIx_Get(&myproc, PMIX_RANK, NULL, 0, &value); + assert(PMIX_SUCCESS == rc); + printf("%d\n", value->type); + assert(value->type == PMIX_INT); + rank = value->data.uint32; + PMIX_VALUE_RELEASE(value); + } + + if (rank == 0 ) { + pmix_info_t *info; + PMIX_INFO_CREATE(info, 1); + snprintf(info[0].key, PMIX_MAX_KEYLEN, "magic-found"); + info[0].value.type = PMIX_STRING; + info[0].value.data.string = "yes"; + rc = PMIx_Publish(info, 1); + assert(PMIX_SUCCESS == rc); + } + + printf("I am rank %d\n", rank); + + { + bool flag; + pmix_info_t *info; + PMIX_INFO_CREATE(info, 1); + flag = true; + PMIX_INFO_LOAD(info, PMIX_COLLECT_DATA, &flag, PMIX_BOOL); + rc = PMIx_Fence(&myproc, 1, info, 1); + assert(PMIX_SUCCESS == rc); + PMIX_INFO_FREE(info, 1); + } + + if (rank == 1) { + int i; + pmix_pdata_t *pdata; + PMIX_PDATA_CREATE(pdata, 2); + snprintf(pdata[0].key, PMIX_MAX_KEYLEN, "magic-found"); + snprintf(pdata[1].key, PMIX_MAX_KEYLEN, "magic-not-found"); + rc = PMIx_Lookup(&pdata[0], 2, NULL, 0); + assert((PMIX_SUCCESS == rc) || (PMIX_ERR_NOT_FOUND == rc)); + for ( i = 0 ; i < 2 ; i++ ) + if (pdata[i].value.type == PMIX_STRING) + printf("Found[%d] %d %s\n", i, pdata[i].value.type, pdata[i].value.data.string); + else + printf("Found[%d] %d\n", i, pdata[i].value.type); + PMIX_PDATA_FREE(pdata, 1); + } + + rc = PMIx_Finalize(NULL, 0); + assert(PMIX_SUCCESS == rc); + +} diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_cd.c b/opal/mca/pmix/pmix3x/pmix/test/test_cd.c similarity index 57% rename from opal/mca/pmix/pmix2x/pmix/test/test_cd.c rename to opal/mca/pmix/pmix3x/pmix/test/test_cd.c index 65471dff70..45134ff17f 100644 --- a/opal/mca/pmix/pmix2x/pmix/test/test_cd.c +++ b/opal/mca/pmix/pmix3x/pmix/test/test_cd.c @@ -14,70 +14,74 @@ typedef struct { int in_progress; int status; + pmix_proc_t pname; } cd_cbdata; static void cd_cb(pmix_status_t status, void *cbdata) { cd_cbdata *cb = (cd_cbdata*)cbdata; - cb->in_progress = 0; cb->status = status; + cb->in_progress = 0; } -int test_cd_common(pmix_proc_t *procs, size_t nprocs, int blocking, int disconnect) +static void cnct_cb(pmix_status_t status, + char nspace[], int rank, + void *cbdata) { - int rc; - if (blocking) { - if (!disconnect) { - rc = PMIx_Connect(procs, nprocs, NULL, 0); - } else { - rc = PMIx_Disconnect(procs, nprocs, NULL, 0); - } - } else { - cd_cbdata cbdata; - cbdata.in_progress = 1; - if (!disconnect) { - rc = PMIx_Connect_nb(procs, nprocs, NULL, 0, cd_cb, (void*)&cbdata); - } else { - rc = PMIx_Disconnect_nb(procs, nprocs, NULL, 0, cd_cb, (void*)&cbdata); - } - if (PMIX_SUCCESS == rc) { - PMIX_WAIT_FOR_COMPLETION(cbdata.in_progress); - rc = cbdata.status; - } + cd_cbdata *cb = (cd_cbdata*)cbdata; + + if (NULL != nspace) { + (void)strncpy(cb->pname.nspace, nspace, PMIX_MAX_NSLEN); } - /* the host server callback currently returns PMIX_EXISTS status for checking purposes */ - if (PMIX_EXISTS == rc) { - rc = PMIX_SUCCESS; - } - return rc; + cb->pname.rank = rank; + cb->status = status; + cb->in_progress = 0; } int test_connect_disconnect(char *my_nspace, int my_rank) { int rc; pmix_proc_t proc; + char nspace[PMIX_MAX_NSLEN+1]; + pmix_rank_t newrank; + cd_cbdata cbdata; + (void)strncpy(proc.nspace, my_nspace, PMIX_MAX_NSLEN); proc.rank = PMIX_RANK_WILDCARD; - rc = test_cd_common(&proc, 1, 1, 0); + + rc = PMIx_Connect(&proc, 1, NULL, 0, nspace, &newrank); if (PMIX_SUCCESS != rc) { TEST_ERROR(("%s:%d: Connect blocking test failed.", my_nspace, my_rank)); return PMIX_ERROR; } - TEST_VERBOSE(("%s:%d: Connect blocking test succeded.", my_nspace, my_rank)); - rc = test_cd_common(&proc, 1, 1, 1); + TEST_VERBOSE(("%s:%d: Connect blocking test succeded to nspace %s.", my_nspace, my_rank, nspace)); + + rc = PMIx_Disconnect(nspace, NULL, 0); if (PMIX_SUCCESS != rc) { TEST_ERROR(("%s:%d: Disconnect blocking test failed.", my_nspace, my_rank)); return PMIX_ERROR; } TEST_VERBOSE(("%s:%d: Disconnect blocking test succeded.", my_nspace, my_rank)); - rc = test_cd_common(&proc, 1, 0, 0); + + cbdata.in_progress = 1; + rc = PMIx_Connect_nb(&proc, 1, NULL, 0, cnct_cb, &cbdata); + if (PMIX_SUCCESS == rc) { + PMIX_WAIT_FOR_COMPLETION(cbdata.in_progress); + rc = cbdata.status; + } if (PMIX_SUCCESS != rc) { TEST_ERROR(("%s:%d: Connect non-blocking test failed.", my_nspace, my_rank)); return PMIX_ERROR; } TEST_VERBOSE(("%s:%d: Connect non-blocking test succeded.", my_nspace, my_rank)); - rc = test_cd_common(&proc, 1, 0, 1); + + cbdata.in_progress = 1; + rc = PMIx_Disconnect_nb(nspace, NULL, 0, cd_cb, &cbdata); + if (PMIX_SUCCESS == rc) { + PMIX_WAIT_FOR_COMPLETION(cbdata.in_progress); + rc = cbdata.status; + } if (PMIX_SUCCESS != rc) { TEST_ERROR(("%s:%d: Disconnect non-blocking test failed.", my_nspace, my_rank)); return PMIX_ERROR; diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_cd.h b/opal/mca/pmix/pmix3x/pmix/test/test_cd.h similarity index 60% rename from opal/mca/pmix/pmix2x/pmix/test/test_cd.h rename to opal/mca/pmix/pmix3x/pmix/test/test_cd.h index d4e789102f..e321e02e58 100644 --- a/opal/mca/pmix/pmix2x/pmix/test/test_cd.h +++ b/opal/mca/pmix/pmix3x/pmix/test/test_cd.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Intel, Inc. All rights reserved. + * Copyright (c) 2015-2017 Intel, Inc. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -14,4 +14,3 @@ #include "test_common.h" int test_connect_disconnect(char *my_nspace, int my_rank); -int test_cd_common(pmix_proc_t *procs, size_t nprocs, int blocking, int disconnect); diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_common.c b/opal/mca/pmix/pmix3x/pmix/test/test_common.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_common.c rename to opal/mca/pmix/pmix3x/pmix/test/test_common.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_common.h b/opal/mca/pmix/pmix3x/pmix/test/test_common.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_common.h rename to opal/mca/pmix/pmix3x/pmix/test/test_common.h diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_error.c b/opal/mca/pmix/pmix3x/pmix/test/test_error.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_error.c rename to opal/mca/pmix/pmix3x/pmix/test/test_error.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_error.h b/opal/mca/pmix/pmix3x/pmix/test/test_error.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_error.h rename to opal/mca/pmix/pmix3x/pmix/test/test_error.h diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_fence.c b/opal/mca/pmix/pmix3x/pmix/test/test_fence.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_fence.c rename to opal/mca/pmix/pmix3x/pmix/test/test_fence.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_fence.h b/opal/mca/pmix/pmix3x/pmix/test/test_fence.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_fence.h rename to opal/mca/pmix/pmix3x/pmix/test/test_fence.h diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_internal.c b/opal/mca/pmix/pmix3x/pmix/test/test_internal.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_internal.c rename to opal/mca/pmix/pmix3x/pmix/test/test_internal.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_internal.h b/opal/mca/pmix/pmix3x/pmix/test/test_internal.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_internal.h rename to opal/mca/pmix/pmix3x/pmix/test/test_internal.h diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_publish.c b/opal/mca/pmix/pmix3x/pmix/test/test_publish.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_publish.c rename to opal/mca/pmix/pmix3x/pmix/test/test_publish.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_publish.h b/opal/mca/pmix/pmix3x/pmix/test/test_publish.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_publish.h rename to opal/mca/pmix/pmix3x/pmix/test/test_publish.h diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_replace.c b/opal/mca/pmix/pmix3x/pmix/test/test_replace.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_replace.c rename to opal/mca/pmix/pmix3x/pmix/test/test_replace.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_replace.h b/opal/mca/pmix/pmix3x/pmix/test/test_replace.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_replace.h rename to opal/mca/pmix/pmix3x/pmix/test/test_replace.h diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_resolve_peers.c b/opal/mca/pmix/pmix3x/pmix/test/test_resolve_peers.c similarity index 96% rename from opal/mca/pmix/pmix2x/pmix/test/test_resolve_peers.c rename to opal/mca/pmix/pmix3x/pmix/test/test_resolve_peers.c index aac2606747..76005b6797 100644 --- a/opal/mca/pmix/pmix2x/pmix/test/test_resolve_peers.c +++ b/opal/mca/pmix/pmix3x/pmix/test/test_resolve_peers.c @@ -61,6 +61,7 @@ int test_resolve_peers(char *my_nspace, int my_rank, test_params params) int ns_num; char nspace[PMIX_MAX_NSLEN+1]; pmix_proc_t procs[2]; + pmix_proc_t pname; /* first resolve peers from the own namespace. */ rc = resolve_nspace(my_nspace, params, my_nspace, my_rank); @@ -98,7 +99,7 @@ int test_resolve_peers(char *my_nspace, int my_rank, test_params params) procs[1].rank = PMIX_RANK_WILDCARD; /* make a connection between processes from own namespace and processes from this namespace. */ - rc = test_cd_common(procs, 2, 1, 0); + rc = PMIx_Connect(procs, 2, NULL, 0, pname.nspace, &pname.rank); if (PMIX_SUCCESS == rc) { TEST_VERBOSE(("%s:%d: Connect to %s succeeded %s.", my_nspace, my_rank, nspace)); } else { @@ -111,12 +112,12 @@ int test_resolve_peers(char *my_nspace, int my_rank, test_params params) if (PMIX_SUCCESS == rc) { TEST_VERBOSE(("%s:%d: Resolve peers succeeded for ns %s\n", my_nspace, my_rank, nspace)); } else { - test_cd_common(procs, 2, 1, 1); + PMIx_Disconnect(pname.nspace, NULL, 0); break; } /* disconnect from the processes of this namespace. */ - rc = test_cd_common(procs, 2, 1, 0); + rc = PMIx_Disconnect(pname.nspace, NULL, 0); if (PMIX_SUCCESS == rc) { TEST_VERBOSE(("%s:%d: Disconnect from %s succeeded %s.", my_nspace, my_rank, nspace)); } else { diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_resolve_peers.h b/opal/mca/pmix/pmix3x/pmix/test/test_resolve_peers.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_resolve_peers.h rename to opal/mca/pmix/pmix3x/pmix/test/test_resolve_peers.h diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_spawn.c b/opal/mca/pmix/pmix3x/pmix/test/test_spawn.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_spawn.c rename to opal/mca/pmix/pmix3x/pmix/test/test_spawn.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/test_spawn.h b/opal/mca/pmix/pmix3x/pmix/test/test_spawn.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/test_spawn.h rename to opal/mca/pmix/pmix3x/pmix/test/test_spawn.h diff --git a/opal/mca/pmix/pmix2x/pmix/test/utils.c b/opal/mca/pmix/pmix3x/pmix/test/utils.c similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/utils.c rename to opal/mca/pmix/pmix3x/pmix/test/utils.c diff --git a/opal/mca/pmix/pmix2x/pmix/test/utils.h b/opal/mca/pmix/pmix3x/pmix/test/utils.h similarity index 100% rename from opal/mca/pmix/pmix2x/pmix/test/utils.h rename to opal/mca/pmix/pmix3x/pmix/test/utils.h diff --git a/opal/mca/pmix/pmix2x/pmix2x.c b/opal/mca/pmix/pmix3x/pmix3x.c similarity index 83% rename from opal/mca/pmix/pmix2x/pmix2x.c rename to opal/mca/pmix/pmix3x/pmix3x.c index ac5866aafa..89eace2986 100644 --- a/opal/mca/pmix/pmix2x/pmix2x.c +++ b/opal/mca/pmix/pmix3x/pmix3x.c @@ -39,7 +39,7 @@ #include "opal/util/proc.h" #include "opal/util/show_help.h" -#include "pmix2x.h" +#include "pmix3x.h" #include "opal/mca/pmix/base/base.h" #include "opal/mca/pmix/pmix_types.h" @@ -51,8 +51,8 @@ /* These are functions used by both client and server to * access common functions in the embedded PMIx library */ -static const char *pmix2x_get_nspace(opal_jobid_t jobid); -static void pmix2x_register_jobid(opal_jobid_t jobid, const char *nspace); +static const char *pmix3x_get_nspace(opal_jobid_t jobid); +static void pmix3x_register_jobid(opal_jobid_t jobid, const char *nspace); static void register_handler(opal_list_t *event_codes, opal_list_t *info, opal_pmix_notification_fn_t evhandler, @@ -66,86 +66,86 @@ static int notify_event(int status, opal_pmix_data_range_t range, opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -static void pmix2x_query(opal_list_t *queries, +static void pmix3x_query(opal_list_t *queries, opal_pmix_info_cbfunc_t cbfunc, void *cbdata); -static void pmix2x_log(opal_list_t *info, +static void pmix3x_log(opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -const opal_pmix_base_module_t opal_pmix_pmix2x_module = { +const opal_pmix_base_module_t opal_pmix_pmix3x_module = { /* client APIs */ - .init = pmix2x_client_init, - .finalize = pmix2x_client_finalize, - .initialized = pmix2x_initialized, - .abort = pmix2x_abort, - .commit = pmix2x_commit, - .fence = pmix2x_fence, - .fence_nb = pmix2x_fencenb, - .put = pmix2x_put, - .get = pmix2x_get, - .get_nb = pmix2x_getnb, - .publish = pmix2x_publish, - .publish_nb = pmix2x_publishnb, - .lookup = pmix2x_lookup, - .lookup_nb = pmix2x_lookupnb, - .unpublish = pmix2x_unpublish, - .unpublish_nb = pmix2x_unpublishnb, - .spawn = pmix2x_spawn, - .spawn_nb = pmix2x_spawnnb, - .connect = pmix2x_connect, - .connect_nb = pmix2x_connectnb, - .disconnect = pmix2x_disconnect, - .disconnect_nb = pmix2x_disconnectnb, - .resolve_peers = pmix2x_resolve_peers, - .resolve_nodes = pmix2x_resolve_nodes, - .query = pmix2x_query, - .log = pmix2x_log, - .allocate = pmix2x_allocate, - .job_control = pmix2x_job_control, + .init = pmix3x_client_init, + .finalize = pmix3x_client_finalize, + .initialized = pmix3x_initialized, + .abort = pmix3x_abort, + .commit = pmix3x_commit, + .fence = pmix3x_fence, + .fence_nb = pmix3x_fencenb, + .put = pmix3x_put, + .get = pmix3x_get, + .get_nb = pmix3x_getnb, + .publish = pmix3x_publish, + .publish_nb = pmix3x_publishnb, + .lookup = pmix3x_lookup, + .lookup_nb = pmix3x_lookupnb, + .unpublish = pmix3x_unpublish, + .unpublish_nb = pmix3x_unpublishnb, + .spawn = pmix3x_spawn, + .spawn_nb = pmix3x_spawnnb, + .connect = pmix3x_connect, + .connect_nb = pmix3x_connectnb, + .disconnect = pmix3x_disconnect, + .disconnect_nb = pmix3x_disconnectnb, + .resolve_peers = pmix3x_resolve_peers, + .resolve_nodes = pmix3x_resolve_nodes, + .query = pmix3x_query, + .log = pmix3x_log, + .allocate = pmix3x_allocate, + .job_control = pmix3x_job_control, /* server APIs */ - .server_init = pmix2x_server_init, - .server_finalize = pmix2x_server_finalize, - .generate_regex = pmix2x_server_gen_regex, - .generate_ppn = pmix2x_server_gen_ppn, - .server_register_nspace = pmix2x_server_register_nspace, - .server_deregister_nspace = pmix2x_server_deregister_nspace, - .server_register_client = pmix2x_server_register_client, - .server_deregister_client = pmix2x_server_deregister_client, - .server_setup_fork = pmix2x_server_setup_fork, - .server_dmodex_request = pmix2x_server_dmodex, - .server_notify_event = pmix2x_server_notify_event, + .server_init = pmix3x_server_init, + .server_finalize = pmix3x_server_finalize, + .generate_regex = pmix3x_server_gen_regex, + .generate_ppn = pmix3x_server_gen_ppn, + .server_register_nspace = pmix3x_server_register_nspace, + .server_deregister_nspace = pmix3x_server_deregister_nspace, + .server_register_client = pmix3x_server_register_client, + .server_deregister_client = pmix3x_server_deregister_client, + .server_setup_fork = pmix3x_server_setup_fork, + .server_dmodex_request = pmix3x_server_dmodex, + .server_notify_event = pmix3x_server_notify_event, /* tool APIs */ - .tool_init = pmix2x_tool_init, - .tool_finalize = pmix2x_tool_fini, + .tool_init = pmix3x_tool_init, + .tool_finalize = pmix3x_tool_fini, /* utility APIs */ .get_version = PMIx_Get_version, .register_evhandler = register_handler, .deregister_evhandler = deregister_handler, .notify_event = notify_event, - .store_local = pmix2x_store_local, - .get_nspace = pmix2x_get_nspace, - .register_jobid = pmix2x_register_jobid + .store_local = pmix3x_store_local, + .get_nspace = pmix3x_get_nspace, + .register_jobid = pmix3x_register_jobid }; static void opcbfunc(pmix_status_t status, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; OPAL_ACQUIRE_OBJECT(op); if (NULL != op->opcbfunc) { - op->opcbfunc(pmix2x_convert_rc(status), op->cbdata); + op->opcbfunc(pmix3x_convert_rc(status), op->cbdata); } OBJ_RELEASE(op); } -static const char *pmix2x_get_nspace(opal_jobid_t jobid) +static const char *pmix3x_get_nspace(opal_jobid_t jobid) { - opal_pmix2x_jobid_trkr_t *jptr; + opal_pmix3x_jobid_trkr_t *jptr; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); - OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix2x_component.jobids, opal_pmix2x_jobid_trkr_t) { + OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { if (jptr->jobid == jobid) { OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return jptr->nspace; @@ -155,29 +155,29 @@ static const char *pmix2x_get_nspace(opal_jobid_t jobid) return NULL; } -static void pmix2x_register_jobid(opal_jobid_t jobid, const char *nspace) +static void pmix3x_register_jobid(opal_jobid_t jobid, const char *nspace) { - opal_pmix2x_jobid_trkr_t *jptr; + opal_pmix3x_jobid_trkr_t *jptr; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); /* if we don't already have it, add this to our jobid tracker */ - OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix2x_component.jobids, opal_pmix2x_jobid_trkr_t) { + OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { if (jptr->jobid == jobid) { OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return; } } - jptr = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + jptr = OBJ_NEW(opal_pmix3x_jobid_trkr_t); (void)strncpy(jptr->nspace, nspace, PMIX_MAX_NSLEN); jptr->jobid = jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &jptr->super); + opal_list_append(&mca_pmix_pmix3x_component.jobids, &jptr->super); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); } static void event_hdlr_complete(pmix_status_t status, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; OBJ_RELEASE(op); } @@ -186,15 +186,15 @@ static void return_local_event_hdlr(int status, opal_list_t *results, opal_pmix_op_cbfunc_t cbfunc, void *thiscbdata, void *notification_cbdata) { - pmix2x_threadshift_t *cd = (pmix2x_threadshift_t*)notification_cbdata; - pmix2x_opcaddy_t *op; + pmix3x_threadshift_t *cd = (pmix3x_threadshift_t*)notification_cbdata; + pmix3x_opcaddy_t *op; opal_value_t *kv; pmix_status_t pstatus; size_t n; OPAL_ACQUIRE_OBJECT(cd); if (NULL != cd->pmixcbfunc) { - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(pmix3x_opcaddy_t); if (NULL != results && 0 < (op->ninfo = opal_list_get_size(results))) { /* convert the list of results to an array of info */ @@ -202,12 +202,12 @@ static void return_local_event_hdlr(int status, opal_list_t *results, n=0; OPAL_LIST_FOREACH(kv, cd->info, opal_value_t) { (void)strncpy(op->info[n].key, kv->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&op->info[n].value, kv); + pmix3x_value_load(&op->info[n].value, kv); ++n; } } /* convert the status */ - pstatus = pmix2x_convert_opalrc(status); + pstatus = pmix3x_convert_opalrc(status); /* call the library's callback function */ cd->pmixcbfunc(pstatus, op->info, op->ninfo, event_hdlr_complete, op, cd->cbdata); } @@ -230,18 +230,18 @@ static void return_local_event_hdlr(int status, opal_list_t *results, * by mpirun), directly from a RM (when direct launched), or * from another process (via the local daemon). * The call will occur in the PMIx event base */ -void pmix2x_event_hdlr(size_t evhdlr_registration_id, +void pmix3x_event_hdlr(size_t evhdlr_registration_id, pmix_status_t status, const pmix_proc_t *source, pmix_info_t info[], size_t ninfo, pmix_info_t results[], size_t nresults, pmix_event_notification_cbfunc_fn_t cbfunc, void *cbdata) { - pmix2x_threadshift_t *cd; + pmix3x_threadshift_t *cd; int rc; opal_value_t *iptr; size_t n; - opal_pmix2x_event_t *event; + opal_pmix3x_event_t *event; opal_output_verbose(2, opal_pmix_base_framework.framework_output, "%s RECEIVED NOTIFICATION OF STATUS %d ON HDLR %lu", @@ -250,13 +250,13 @@ void pmix2x_event_hdlr(size_t evhdlr_registration_id, OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); - cd = OBJ_NEW(pmix2x_threadshift_t); + cd = OBJ_NEW(pmix3x_threadshift_t); cd->id = evhdlr_registration_id; cd->pmixcbfunc = cbfunc; cd->cbdata = cbdata; /* convert the incoming status */ - cd->status = pmix2x_convert_rc(status); + cd->status = pmix3x_convert_rc(status); opal_output_verbose(2, opal_pmix_base_framework.framework_output, "%s CONVERTED STATUS %d TO STATUS %d", OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), status, cd->status); @@ -270,7 +270,7 @@ void pmix2x_event_hdlr(size_t evhdlr_registration_id, OPAL_ERROR_LOG(rc); cd->pname.jobid = OPAL_NAME_INVALID->jobid; } - cd->pname.vpid = pmix2x_convert_rank(source->rank); + cd->pname.vpid = pmix3x_convert_rank(source->rank); } /* convert the array of info */ @@ -279,7 +279,7 @@ void pmix2x_event_hdlr(size_t evhdlr_registration_id, for (n=0; n < ninfo; n++) { iptr = OBJ_NEW(opal_value_t); iptr->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(iptr, &info[n].value))) { + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(iptr, &info[n].value))) { OPAL_ERROR_LOG(rc); OBJ_RELEASE(iptr); continue; @@ -293,7 +293,7 @@ void pmix2x_event_hdlr(size_t evhdlr_registration_id, for (n=0; n < nresults; n++) { iptr = OBJ_NEW(opal_value_t); iptr->key = strdup(results[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(iptr, &results[n].value))) { + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(iptr, &results[n].value))) { OPAL_ERROR_LOG(rc); OBJ_RELEASE(iptr); continue; @@ -303,7 +303,7 @@ void pmix2x_event_hdlr(size_t evhdlr_registration_id, } /* cycle thru the registrations */ - OPAL_LIST_FOREACH(event, &mca_pmix_pmix2x_component.events, opal_pmix2x_event_t) { + OPAL_LIST_FOREACH(event, &mca_pmix_pmix3x_component.events, opal_pmix3x_event_t) { if (evhdlr_registration_id == event->index) { /* found it - invoke the handler, pointing its * callback function to our callback function */ @@ -333,7 +333,7 @@ void pmix2x_event_hdlr(size_t evhdlr_registration_id, return; } -opal_vpid_t pmix2x_convert_rank(pmix_rank_t rank) +opal_vpid_t pmix3x_convert_rank(pmix_rank_t rank) { switch(rank) { case PMIX_RANK_UNDEF: @@ -345,7 +345,7 @@ opal_vpid_t pmix2x_convert_rank(pmix_rank_t rank) } } -pmix_rank_t pmix2x_convert_opalrank(opal_vpid_t vpid) +pmix_rank_t pmix3x_convert_opalrank(opal_vpid_t vpid) { switch(vpid) { case OPAL_VPID_WILDCARD: @@ -357,7 +357,7 @@ pmix_rank_t pmix2x_convert_opalrank(opal_vpid_t vpid) } } -pmix_status_t pmix2x_convert_opalrc(int rc) +pmix_status_t pmix3x_convert_opalrc(int rc) { switch (rc) { case OPAL_ERR_DEBUGGER_RELEASE: @@ -441,7 +441,7 @@ pmix_status_t pmix2x_convert_opalrc(int rc) } } -int pmix2x_convert_rc(pmix_status_t rc) +int pmix3x_convert_rc(pmix_status_t rc) { switch (rc) { case PMIX_ERR_DEBUGGER_RELEASE: @@ -535,7 +535,7 @@ int pmix2x_convert_rc(pmix_status_t rc) } } -opal_pmix_scope_t pmix2x_convert_scope(pmix_scope_t scope) +opal_pmix_scope_t pmix3x_convert_scope(pmix_scope_t scope) { switch(scope) { case PMIX_SCOPE_UNDEF: @@ -551,7 +551,7 @@ opal_pmix_scope_t pmix2x_convert_scope(pmix_scope_t scope) } } -pmix_scope_t pmix2x_convert_opalscope(opal_pmix_scope_t scope) { +pmix_scope_t pmix3x_convert_opalscope(opal_pmix_scope_t scope) { switch(scope) { case OPAL_PMIX_LOCAL: return PMIX_LOCAL; @@ -564,7 +564,7 @@ pmix_scope_t pmix2x_convert_opalscope(opal_pmix_scope_t scope) { } } -pmix_data_range_t pmix2x_convert_opalrange(opal_pmix_data_range_t range) { +pmix_data_range_t pmix3x_convert_opalrange(opal_pmix_data_range_t range) { switch(range) { case OPAL_PMIX_RANGE_UNDEF: return PMIX_RANGE_UNDEF; @@ -583,7 +583,7 @@ pmix_data_range_t pmix2x_convert_opalrange(opal_pmix_data_range_t range) { } } -opal_pmix_data_range_t pmix2x_convert_range(pmix_data_range_t range) { +opal_pmix_data_range_t pmix3x_convert_range(pmix_data_range_t range) { switch(range) { case PMIX_RANGE_UNDEF: return OPAL_PMIX_RANGE_UNDEF; @@ -602,7 +602,7 @@ opal_pmix_data_range_t pmix2x_convert_range(pmix_data_range_t range) { } } -opal_pmix_persistence_t pmix2x_convert_persist(pmix_persistence_t persist) +opal_pmix_persistence_t pmix3x_convert_persist(pmix_persistence_t persist) { switch(persist) { case PMIX_PERSIST_INDEF: @@ -620,7 +620,7 @@ opal_pmix_persistence_t pmix2x_convert_persist(pmix_persistence_t persist) } } -pmix_persistence_t pmix2x_convert_opalpersist(opal_pmix_persistence_t persist) +pmix_persistence_t pmix3x_convert_opalpersist(opal_pmix_persistence_t persist) { switch(persist) { case OPAL_PMIX_PERSIST_INDEF: @@ -638,13 +638,13 @@ pmix_persistence_t pmix2x_convert_opalpersist(opal_pmix_persistence_t persist) } } -char* pmix2x_convert_jobid(opal_jobid_t jobid) +char* pmix3x_convert_jobid(opal_jobid_t jobid) { - opal_pmix2x_jobid_trkr_t *jptr; + opal_pmix3x_jobid_trkr_t *jptr; /* look thru our list of jobids and find the * corresponding nspace */ - OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix2x_component.jobids, opal_pmix2x_jobid_trkr_t) { + OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { if (jptr->jobid == jobid) { return jptr->nspace; } @@ -655,10 +655,10 @@ char* pmix2x_convert_jobid(opal_jobid_t jobid) /**** RHC: NEED TO ADD SUPPORT FOR NEW PMIX DATA TYPES, INCLUDING **** CONVERSION OF PROC STATES ****/ -void pmix2x_value_load(pmix_value_t *v, +void pmix3x_value_load(pmix_value_t *v, opal_value_t *kv) { - opal_pmix2x_jobid_trkr_t *job; + opal_pmix3x_jobid_trkr_t *job; bool found; opal_list_t *list; opal_value_t *val; @@ -751,11 +751,11 @@ void pmix2x_value_load(pmix_value_t *v, break; case OPAL_STATUS: v->type = PMIX_STATUS; - v->data.status = pmix2x_convert_opalrc(kv->data.status); + v->data.status = pmix3x_convert_opalrc(kv->data.status); break; case OPAL_VPID: v->type = PMIX_PROC_RANK; - v->data.rank = pmix2x_convert_opalrank(kv->data.name.vpid); + v->data.rank = pmix3x_convert_opalrank(kv->data.name.vpid); break; case OPAL_NAME: v->type = PMIX_PROC; @@ -763,7 +763,7 @@ void pmix2x_value_load(pmix_value_t *v, PMIX_PROC_CREATE(v->data.proc, 1); /* see if this job is in our list of known nspaces */ found = false; - OPAL_LIST_FOREACH(job, &mca_pmix_pmix2x_component.jobids, opal_pmix2x_jobid_trkr_t) { + OPAL_LIST_FOREACH(job, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { if (job->jobid == kv->data.name.jobid) { (void)strncpy(v->data.proc->nspace, job->nspace, PMIX_MAX_NSLEN); found = true; @@ -773,7 +773,7 @@ void pmix2x_value_load(pmix_value_t *v, if (!found) { (void)opal_snprintf_jobid(v->data.proc->nspace, PMIX_MAX_NSLEN, kv->data.name.jobid); } - v->data.proc->rank = pmix2x_convert_opalrank(kv->data.name.vpid); + v->data.proc->rank = pmix3x_convert_opalrank(kv->data.name.vpid); break; case OPAL_BYTE_OBJECT: v->type = PMIX_BYTE_OBJECT; @@ -788,15 +788,15 @@ void pmix2x_value_load(pmix_value_t *v, break; case OPAL_PERSIST: v->type = PMIX_PERSIST; - v->data.persist = pmix2x_convert_opalpersist((opal_pmix_persistence_t)kv->data.uint8); + v->data.persist = pmix3x_convert_opalpersist((opal_pmix_persistence_t)kv->data.uint8); break; case OPAL_SCOPE: v->type = PMIX_SCOPE; - v->data.scope = pmix2x_convert_opalscope((opal_pmix_scope_t)kv->data.uint8); + v->data.scope = pmix3x_convert_opalscope((opal_pmix_scope_t)kv->data.uint8); break; case OPAL_DATA_RANGE: v->type = PMIX_DATA_RANGE; - v->data.range = pmix2x_convert_opalrange((opal_pmix_data_range_t)kv->data.uint8); + v->data.range = pmix3x_convert_opalrange((opal_pmix_data_range_t)kv->data.uint8); break; case OPAL_PROC_STATE: v->type = PMIX_PROC_STATE; @@ -819,7 +819,7 @@ void pmix2x_value_load(pmix_value_t *v, n=0; OPAL_LIST_FOREACH(val, list, opal_value_t) { (void)strncpy(info[n].key, val->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&info[n].value, val); + pmix3x_value_load(&info[n].value, val); ++n; } } else { @@ -832,12 +832,12 @@ void pmix2x_value_load(pmix_value_t *v, } } -int pmix2x_value_unload(opal_value_t *kv, +int pmix3x_value_unload(opal_value_t *kv, const pmix_value_t *v) { int rc=OPAL_SUCCESS; bool found; - opal_pmix2x_jobid_trkr_t *job; + opal_pmix3x_jobid_trkr_t *job; opal_list_t *lt; opal_value_t *ival; size_t n; @@ -926,17 +926,17 @@ int pmix2x_value_unload(opal_value_t *kv, break; case PMIX_STATUS: kv->type = OPAL_STATUS; - kv->data.status = pmix2x_convert_rc(v->data.status); + kv->data.status = pmix3x_convert_rc(v->data.status); break; case PMIX_PROC_RANK: kv->type = OPAL_VPID; - kv->data.name.vpid = pmix2x_convert_rank(v->data.rank); + kv->data.name.vpid = pmix3x_convert_rank(v->data.rank); break; case PMIX_PROC: kv->type = OPAL_NAME; /* see if this job is in our list of known nspaces */ found = false; - OPAL_LIST_FOREACH(job, &mca_pmix_pmix2x_component.jobids, opal_pmix2x_jobid_trkr_t) { + OPAL_LIST_FOREACH(job, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { if (0 == strncmp(job->nspace, v->data.proc->nspace, PMIX_MAX_NSLEN)) { kv->data.name.jobid = job->jobid; found = true; @@ -945,10 +945,10 @@ int pmix2x_value_unload(opal_value_t *kv, } if (!found) { if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&kv->data.name.jobid, v->data.proc->nspace))) { - return pmix2x_convert_opalrc(rc); + return pmix3x_convert_opalrc(rc); } } - kv->data.name.vpid = pmix2x_convert_rank(v->data.proc->rank); + kv->data.name.vpid = pmix3x_convert_rank(v->data.proc->rank); break; case PMIX_BYTE_OBJECT: kv->type = OPAL_BYTE_OBJECT; @@ -963,15 +963,15 @@ int pmix2x_value_unload(opal_value_t *kv, break; case PMIX_PERSIST: kv->type = OPAL_PERSIST; - kv->data.uint8 = pmix2x_convert_persist(v->data.persist); + kv->data.uint8 = pmix3x_convert_persist(v->data.persist); break; case PMIX_SCOPE: kv->type = OPAL_SCOPE; - kv->data.uint8 = pmix2x_convert_scope(v->data.scope); + kv->data.uint8 = pmix3x_convert_scope(v->data.scope); break; case PMIX_DATA_RANGE: kv->type = OPAL_DATA_RANGE; - kv->data.uint8 = pmix2x_convert_range(v->data.range); + kv->data.uint8 = pmix3x_convert_range(v->data.range); break; case PMIX_PROC_STATE: kv->type = OPAL_PROC_STATE; @@ -998,7 +998,7 @@ int pmix2x_value_unload(opal_value_t *kv, if (PMIX_INFO == v->data.darray->type) { pmix_info_t *iptr = (pmix_info_t*)v->data.darray->array; ival->key = strdup(iptr[n].key); - rc = pmix2x_value_unload(ival, &iptr[n].value); + rc = pmix3x_value_unload(ival, &iptr[n].value); if (OPAL_SUCCESS != rc) { OPAL_LIST_RELEASE(lt); kv->type = OPAL_UNDEF; @@ -1020,7 +1020,7 @@ static void errreg_cbfunc (pmix_status_t status, size_t errhandler_ref, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; OPAL_ACQUIRE_OBJECT(op); op->event->index = errhandler_ref; @@ -1028,7 +1028,7 @@ static void errreg_cbfunc (pmix_status_t status, "PMIX2x errreg_cbfunc - error handler registered status=%d, reference=%lu", status, (unsigned long)errhandler_ref); if (NULL != op->evregcbfunc) { - op->evregcbfunc(pmix2x_convert_rc(status), errhandler_ref, op->cbdata); + op->evregcbfunc(pmix3x_convert_rc(status), errhandler_ref, op->cbdata); } OBJ_RELEASE(op); } @@ -1039,7 +1039,7 @@ static void register_handler(opal_list_t *event_codes, opal_pmix_evhandler_reg_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; size_t n; opal_value_t *kv; @@ -1052,7 +1052,7 @@ static void register_handler(opal_list_t *event_codes, return; } - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(pmix3x_opcaddy_t); op->evregcbfunc = cbfunc; op->cbdata = cbdata; @@ -1062,7 +1062,7 @@ static void register_handler(opal_list_t *event_codes, op->pcodes = (pmix_status_t*)malloc(op->ncodes * sizeof(pmix_status_t)); n=0; OPAL_LIST_FOREACH(kv, event_codes, opal_value_t) { - op->pcodes[n] = pmix2x_convert_opalrc(kv->data.integer); + op->pcodes[n] = pmix3x_convert_opalrc(kv->data.integer); ++n; } } @@ -1073,20 +1073,20 @@ static void register_handler(opal_list_t *event_codes, n=0; OPAL_LIST_FOREACH(kv, info, opal_value_t) { (void)strncpy(op->info[n].key, kv->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&op->info[n].value, kv); + pmix3x_value_load(&op->info[n].value, kv); ++n; } } /* register the event */ - op->event = OBJ_NEW(opal_pmix2x_event_t); + op->event = OBJ_NEW(opal_pmix3x_event_t); op->event->handler = evhandler; - opal_list_append(&mca_pmix_pmix2x_component.events, &op->event->super); + opal_list_append(&mca_pmix_pmix3x_component.events, &op->event->super); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); PMIx_Register_event_handler(op->pcodes, op->ncodes, op->info, op->ninfo, - pmix2x_event_hdlr, errreg_cbfunc, op); + pmix3x_event_hdlr, errreg_cbfunc, op); return; } @@ -1094,8 +1094,8 @@ static void deregister_handler(size_t evhandler, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opcaddy_t *op; - opal_pmix2x_event_t *event; + pmix3x_opcaddy_t *op; + opal_pmix3x_event_t *event; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); if (0 >= opal_pmix_base.initialized) { @@ -1107,9 +1107,9 @@ static void deregister_handler(size_t evhandler, } /* look for this event */ - OPAL_LIST_FOREACH(event, &mca_pmix_pmix2x_component.events, opal_pmix2x_event_t) { + OPAL_LIST_FOREACH(event, &mca_pmix_pmix3x_component.events, opal_pmix3x_event_t) { if (evhandler == event->index) { - opal_list_remove_item(&mca_pmix_pmix2x_component.events, &event->super); + opal_list_remove_item(&mca_pmix_pmix3x_component.events, &event->super); OBJ_RELEASE(event); break; } @@ -1117,7 +1117,7 @@ static void deregister_handler(size_t evhandler, OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(pmix3x_opcaddy_t); op->opcbfunc = cbfunc; op->cbdata = cbdata; @@ -1128,9 +1128,9 @@ static void deregister_handler(size_t evhandler, static void notify_complete(pmix_status_t status, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; if (NULL != op->opcbfunc) { - op->opcbfunc(pmix2x_convert_rc(status), op->cbdata); + op->opcbfunc(pmix3x_convert_rc(status), op->cbdata); } OBJ_RELEASE(op); } @@ -1141,7 +1141,7 @@ static int notify_event(int status, opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opcaddy_t *op; + pmix3x_opcaddy_t *op; opal_value_t *kv; pmix_proc_t p, *pptr; pmix_status_t pstatus; @@ -1155,30 +1155,30 @@ static int notify_event(int status, return OPAL_ERR_NOT_INITIALIZED; } - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(pmix3x_opcaddy_t); op->opcbfunc = cbfunc; op->cbdata = cbdata; /* convert the status */ - pstatus = pmix2x_convert_opalrc(status); + pstatus = pmix3x_convert_opalrc(status); /* convert the source */ if (NULL == source) { pptr = NULL; } else { - if (NULL == (nsptr = pmix2x_convert_jobid(source->jobid))) { + if (NULL == (nsptr = pmix3x_convert_jobid(source->jobid))) { OBJ_RELEASE(op); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return OPAL_ERR_NOT_FOUND; } (void)strncpy(p.nspace, nsptr, PMIX_MAX_NSLEN); - p.rank = pmix2x_convert_opalrank(source->vpid); + p.rank = pmix3x_convert_opalrank(source->vpid); pptr = &p; } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* convert the range */ - prange = pmix2x_convert_opalrange(range); + prange = pmix3x_convert_opalrange(range); /* convert the list of info */ if (NULL != info && 0 < (op->ninfo = opal_list_get_size(info))) { @@ -1190,9 +1190,9 @@ static int notify_event(int status, * provided, and it will be an int coming down to us */ if (0 == strcmp(kv->key, OPAL_PMIX_JOB_TERM_STATUS)) { op->info[n].value.type = PMIX_STATUS; - op->info[n].value.data.status = pmix2x_convert_opalrc(kv->data.integer); + op->info[n].value.data.status = pmix3x_convert_opalrc(kv->data.integer); } else { - pmix2x_value_load(&op->info[n].value, kv); + pmix3x_value_load(&op->info[n].value, kv); } ++n; } @@ -1201,7 +1201,7 @@ static int notify_event(int status, /* ask the library to notify our clients */ pstatus = PMIx_Notify_event(pstatus, pptr, prange, op->info, op->ninfo, notify_complete, op); - return pmix2x_convert_rc(pstatus); + return pmix3x_convert_rc(pstatus); } static void relcbfunc(void *cbdata) @@ -1218,7 +1218,7 @@ static void infocbfunc(pmix_status_t status, pmix_release_cbfunc_t release_fn, void *release_cbdata) { - pmix2x_opcaddy_t *cd = (pmix2x_opcaddy_t*)cbdata; + pmix3x_opcaddy_t *cd = (pmix3x_opcaddy_t*)cbdata; int rc = OPAL_SUCCESS; opal_list_t *results = NULL; opal_value_t *iptr; @@ -1233,7 +1233,7 @@ static void infocbfunc(pmix_status_t status, iptr = OBJ_NEW(opal_value_t); opal_list_append(results, &iptr->super); iptr->key = strdup(info[n].key); - if (OPAL_SUCCESS != (rc = pmix2x_value_unload(iptr, &info[n].value))) { + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(iptr, &info[n].value))) { OPAL_LIST_RELEASE(results); results = NULL; break; @@ -1252,13 +1252,13 @@ static void infocbfunc(pmix_status_t status, OBJ_RELEASE(cd); } -static void pmix2x_query(opal_list_t *queries, +static void pmix3x_query(opal_list_t *queries, opal_pmix_info_cbfunc_t cbfunc, void *cbdata) { int rc; opal_value_t *ival; size_t n, nqueries, nq; - pmix2x_opcaddy_t *cd; + pmix3x_opcaddy_t *cd; pmix_status_t prc; opal_pmix_query_t *q; @@ -1273,7 +1273,7 @@ static void pmix2x_query(opal_list_t *queries, OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* create the caddy */ - cd = OBJ_NEW(pmix2x_opcaddy_t); + cd = OBJ_NEW(pmix3x_opcaddy_t); /* bozo check */ if (NULL == queries || 0 == (nqueries = opal_list_get_size(queries))) { @@ -1297,7 +1297,7 @@ static void pmix2x_query(opal_list_t *queries, nq = 0; OPAL_LIST_FOREACH(ival, &q->qualifiers, opal_value_t) { (void)strncpy(cd->queries[n].qualifiers[nq].key, ival->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&cd->queries[n].qualifiers[nq].value, ival); + pmix3x_value_load(&cd->queries[n].qualifiers[nq].value, ival); ++nq; } } @@ -1308,7 +1308,7 @@ static void pmix2x_query(opal_list_t *queries, if (PMIX_SUCCESS != (prc = PMIx_Query_info_nb(cd->queries, cd->nqueries, infocbfunc, cd))) { /* do not hang! */ - rc = pmix2x_convert_rc(prc); + rc = pmix3x_convert_rc(prc); goto CLEANUP; } @@ -1322,13 +1322,13 @@ static void pmix2x_query(opal_list_t *queries, return; } -static void pmix2x_log(opal_list_t *info, +static void pmix3x_log(opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { int rc; opal_value_t *ival; size_t n, ninfo; - pmix2x_opcaddy_t *cd; + pmix3x_opcaddy_t *cd; pmix_status_t prc; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); @@ -1342,7 +1342,7 @@ static void pmix2x_log(opal_list_t *info, OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* create the caddy */ - cd = OBJ_NEW(pmix2x_opcaddy_t); + cd = OBJ_NEW(pmix3x_opcaddy_t); /* bozo check */ if (NULL == info || 0 == (ninfo = opal_list_get_size(info))) { @@ -1360,7 +1360,7 @@ static void pmix2x_log(opal_list_t *info, n=0; OPAL_LIST_FOREACH(ival, info, opal_value_t) { (void)strncpy(cd->info[n].key, ival->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&cd->info[n].value, ival); + pmix3x_value_load(&cd->info[n].value, ival); ++n; } @@ -1368,7 +1368,7 @@ static void pmix2x_log(opal_list_t *info, if (PMIX_SUCCESS != (prc = PMIx_Log_nb(cd->info, cd->ninfo, NULL, 0, opcbfunc, cd))) { /* do not hang! */ - rc = pmix2x_convert_rc(prc); + rc = pmix3x_convert_rc(prc); goto CLEANUP; } @@ -1381,7 +1381,7 @@ static void pmix2x_log(opal_list_t *info, OBJ_RELEASE(cd); } -opal_pmix_alloc_directive_t pmix2x_convert_allocdir(pmix_alloc_directive_t dir) +opal_pmix_alloc_directive_t pmix3x_convert_allocdir(pmix_alloc_directive_t dir) { switch (dir) { case PMIX_ALLOC_NEW: @@ -1398,25 +1398,25 @@ opal_pmix_alloc_directive_t pmix2x_convert_allocdir(pmix_alloc_directive_t dir) } /**** INSTANTIATE INTERNAL CLASSES ****/ -OBJ_CLASS_INSTANCE(opal_pmix2x_jobid_trkr_t, +OBJ_CLASS_INSTANCE(opal_pmix3x_jobid_trkr_t, opal_list_item_t, NULL, NULL); -static void evcon(opal_pmix2x_event_t *p) +static void evcon(opal_pmix3x_event_t *p) { OPAL_PMIX_CONSTRUCT_LOCK(&p->lock); p->handler = NULL; p->cbdata = NULL; } -static void evdes(opal_pmix2x_event_t *p) +static void evdes(opal_pmix3x_event_t *p) { OPAL_PMIX_DESTRUCT_LOCK(&p->lock); } -OBJ_CLASS_INSTANCE(opal_pmix2x_event_t, +OBJ_CLASS_INSTANCE(opal_pmix3x_event_t, opal_list_item_t, evcon, evdes); -static void opcon(pmix2x_opcaddy_t *p) +static void opcon(pmix3x_opcaddy_t *p) { memset(&p->p, 0, sizeof(pmix_proc_t)); p->nspace = NULL; @@ -1446,7 +1446,7 @@ static void opcon(pmix2x_opcaddy_t *p) p->qcbfunc = NULL; p->cbdata = NULL; } -static void opdes(pmix2x_opcaddy_t *p) +static void opdes(pmix3x_opcaddy_t *p) { OPAL_PMIX_DESTRUCT_LOCK(&p->lock); if (NULL != p->nspace) { @@ -1474,11 +1474,11 @@ static void opdes(pmix2x_opcaddy_t *p) PMIX_QUERY_FREE(p->queries, p->nqueries); } } -OBJ_CLASS_INSTANCE(pmix2x_opcaddy_t, +OBJ_CLASS_INSTANCE(pmix3x_opcaddy_t, opal_object_t, opcon, opdes); -static void ocadcon(pmix2x_opalcaddy_t *p) +static void ocadcon(pmix3x_opalcaddy_t *p) { OBJ_CONSTRUCT(&p->procs, opal_list_t); OBJ_CONSTRUCT(&p->info, opal_list_t); @@ -1492,19 +1492,20 @@ static void ocadcon(pmix2x_opalcaddy_t *p) p->odmdxfunc = NULL; p->infocbfunc = NULL; p->toolcbfunc = NULL; + p->cnctcbfunc = NULL; p->ocbdata = NULL; } -static void ocaddes(pmix2x_opalcaddy_t *p) +static void ocaddes(pmix3x_opalcaddy_t *p) { OPAL_LIST_DESTRUCT(&p->procs); OPAL_LIST_DESTRUCT(&p->info); OPAL_LIST_DESTRUCT(&p->apps); } -OBJ_CLASS_INSTANCE(pmix2x_opalcaddy_t, +OBJ_CLASS_INSTANCE(pmix3x_opalcaddy_t, opal_object_t, ocadcon, ocaddes); -static void tscon(pmix2x_threadshift_t *p) +static void tscon(pmix3x_threadshift_t *p) { OPAL_PMIX_CONSTRUCT_LOCK(&p->lock); p->msg = NULL; @@ -1519,7 +1520,7 @@ static void tscon(pmix2x_threadshift_t *p) p->opcbfunc = NULL; p->cbdata = NULL; } -static void tsdes(pmix2x_threadshift_t *p) +static void tsdes(pmix3x_threadshift_t *p) { OPAL_PMIX_DESTRUCT_LOCK(&p->lock); if (NULL != p->strings) { @@ -1527,22 +1528,22 @@ static void tsdes(pmix2x_threadshift_t *p) } OPAL_LIST_DESTRUCT(&p->results); } -OBJ_CLASS_INSTANCE(pmix2x_threadshift_t, +OBJ_CLASS_INSTANCE(pmix3x_threadshift_t, opal_object_t, tscon, tsdes); -static void dmcon(opal_pmix2x_dmx_trkr_t *p) +static void dmcon(opal_pmix3x_dmx_trkr_t *p) { p->nspace = NULL; p->cbfunc = NULL; p->cbdata = NULL; } -static void dmdes(opal_pmix2x_dmx_trkr_t *p) +static void dmdes(opal_pmix3x_dmx_trkr_t *p) { if (NULL != p->nspace) { free(p->nspace); } } -OBJ_CLASS_INSTANCE(opal_pmix2x_dmx_trkr_t, +OBJ_CLASS_INSTANCE(opal_pmix3x_dmx_trkr_t, opal_list_item_t, dmcon, dmdes); diff --git a/opal/mca/pmix/pmix2x/pmix2x.h b/opal/mca/pmix/pmix3x/pmix3x.h similarity index 70% rename from opal/mca/pmix/pmix2x/pmix2x.h rename to opal/mca/pmix/pmix3x/pmix3x.h index 40280be238..80d9915926 100644 --- a/opal/mca/pmix/pmix2x/pmix2x.h +++ b/opal/mca/pmix/pmix3x/pmix3x.h @@ -53,19 +53,19 @@ typedef struct { opal_list_t cache; opal_list_t dmdx; bool silence_warning; -} mca_pmix_pmix2x_component_t; +} mca_pmix_pmix3x_component_t; -OPAL_DECLSPEC extern mca_pmix_pmix2x_component_t mca_pmix_pmix2x_component; +OPAL_DECLSPEC extern mca_pmix_pmix3x_component_t mca_pmix_pmix3x_component; -OPAL_DECLSPEC extern const opal_pmix_base_module_t opal_pmix_pmix2x_module; +OPAL_DECLSPEC extern const opal_pmix_base_module_t opal_pmix_pmix3x_module; /**** INTERNAL OBJECTS ****/ typedef struct { opal_list_item_t super; opal_jobid_t jobid; char nspace[PMIX_MAX_NSLEN + 1]; -} opal_pmix2x_jobid_trkr_t; -OBJ_CLASS_DECLARATION(opal_pmix2x_jobid_trkr_t); +} opal_pmix3x_jobid_trkr_t; +OBJ_CLASS_DECLARATION(opal_pmix3x_jobid_trkr_t); typedef struct { opal_list_item_t super; @@ -73,16 +73,16 @@ typedef struct { size_t index; opal_pmix_notification_fn_t handler; void *cbdata; -} opal_pmix2x_event_t; -OBJ_CLASS_DECLARATION(opal_pmix2x_event_t); +} opal_pmix3x_event_t; +OBJ_CLASS_DECLARATION(opal_pmix3x_event_t); typedef struct { opal_list_item_t super; char *nspace; pmix_modex_cbfunc_t cbfunc; void *cbdata; -} opal_pmix2x_dmx_trkr_t; -OBJ_CLASS_DECLARATION(opal_pmix2x_dmx_trkr_t); +} opal_pmix3x_dmx_trkr_t; +OBJ_CLASS_DECLARATION(opal_pmix3x_dmx_trkr_t); typedef struct { opal_object_t super; @@ -106,7 +106,7 @@ typedef struct { size_t ncodes; pmix_query_t *queries; size_t nqueries; - opal_pmix2x_event_t *event; + opal_pmix3x_event_t *event; opal_pmix_op_cbfunc_t opcbfunc; opal_pmix_modex_cbfunc_t mdxcbfunc; opal_pmix_value_cbfunc_t valcbfunc; @@ -115,8 +115,8 @@ typedef struct { opal_pmix_evhandler_reg_cbfunc_t evregcbfunc; opal_pmix_info_cbfunc_t qcbfunc; void *cbdata; -} pmix2x_opcaddy_t; -OBJ_CLASS_DECLARATION(pmix2x_opcaddy_t); +} pmix3x_opcaddy_t; +OBJ_CLASS_DECLARATION(pmix3x_opcaddy_t); typedef struct { opal_object_t super; @@ -130,11 +130,12 @@ typedef struct { pmix_spawn_cbfunc_t spwncbfunc; pmix_info_cbfunc_t infocbfunc; pmix_tool_connection_cbfunc_t toolcbfunc; + pmix_connect_cbfunc_t cnctcbfunc; void *cbdata; opal_pmix_release_cbfunc_t odmdxfunc; void *ocbdata; -} pmix2x_opalcaddy_t; -OBJ_CLASS_DECLARATION(pmix2x_opalcaddy_t); +} pmix3x_opalcaddy_t; +OBJ_CLASS_DECLARATION(pmix3x_opalcaddy_t); typedef struct { opal_object_t super; @@ -161,13 +162,13 @@ typedef struct { opal_pmix_value_cbfunc_t valcbfunc; opal_pmix_lookup_cbfunc_t lkcbfunc; void *cbdata; -} pmix2x_threadshift_t; -OBJ_CLASS_DECLARATION(pmix2x_threadshift_t); +} pmix3x_threadshift_t; +OBJ_CLASS_DECLARATION(pmix3x_threadshift_t); #define OPAL_PMIX_OP_THREADSHIFT(e, fn, cb, cd) \ do { \ - pmix2x_threadshift_t *_cd; \ - _cd = OBJ_NEW(pmix2x_threadshift_t); \ + pmix3x_threadshift_t *_cd; \ + _cd = OBJ_NEW(pmix3x_threadshift_t); \ _cd->handler = (e); \ _cd->opcbfunc = (cb); \ _cd->cbdata = (cd); \ @@ -179,8 +180,8 @@ OBJ_CLASS_DECLARATION(pmix2x_threadshift_t); #define OPAL_PMIX_THREADSHIFT(e, i, eh, fn, cb, cd) \ do { \ - pmix2x_threadshift_t *_cd; \ - _cd = OBJ_NEW(pmix2x_threadshift_t); \ + pmix3x_threadshift_t *_cd; \ + _cd = OBJ_NEW(pmix3x_threadshift_t); \ _cd->event_codes = (e); \ _cd->info = (i); \ _cd->evhandler = (eh); \ @@ -194,8 +195,8 @@ OBJ_CLASS_DECLARATION(pmix2x_threadshift_t); #define OPAL_PMIX_NOTIFY_THREADSHIFT(s, sr, r, i, fn, cb, cd) \ do { \ - pmix2x_threadshift_t *_cd; \ - _cd = OBJ_NEW(pmix2x_threadshift_t); \ + pmix3x_threadshift_t *_cd; \ + _cd = OBJ_NEW(pmix3x_threadshift_t); \ _cd->status = (s); \ _cd->source = (sr); \ _cd->range = (r); \ @@ -217,123 +218,123 @@ OBJ_CLASS_DECLARATION(pmix2x_threadshift_t); } while(0) /**** CLIENT FUNCTIONS ****/ -OPAL_MODULE_DECLSPEC int pmix2x_client_init(opal_list_t *ilist); -OPAL_MODULE_DECLSPEC int pmix2x_client_finalize(void); -OPAL_MODULE_DECLSPEC int pmix2x_initialized(void); -OPAL_MODULE_DECLSPEC int pmix2x_abort(int flag, const char *msg, +OPAL_MODULE_DECLSPEC int pmix3x_client_init(opal_list_t *ilist); +OPAL_MODULE_DECLSPEC int pmix3x_client_finalize(void); +OPAL_MODULE_DECLSPEC int pmix3x_initialized(void); +OPAL_MODULE_DECLSPEC int pmix3x_abort(int flag, const char *msg, opal_list_t *procs); -OPAL_MODULE_DECLSPEC int pmix2x_commit(void); -OPAL_MODULE_DECLSPEC int pmix2x_fence(opal_list_t *procs, int collect_data); -OPAL_MODULE_DECLSPEC int pmix2x_fencenb(opal_list_t *procs, int collect_data, +OPAL_MODULE_DECLSPEC int pmix3x_commit(void); +OPAL_MODULE_DECLSPEC int pmix3x_fence(opal_list_t *procs, int collect_data); +OPAL_MODULE_DECLSPEC int pmix3x_fencenb(opal_list_t *procs, int collect_data, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_put(opal_pmix_scope_t scope, +OPAL_MODULE_DECLSPEC int pmix3x_put(opal_pmix_scope_t scope, opal_value_t *val); -OPAL_MODULE_DECLSPEC int pmix2x_get(const opal_process_name_t *proc, const char *key, +OPAL_MODULE_DECLSPEC int pmix3x_get(const opal_process_name_t *proc, const char *key, opal_list_t *info, opal_value_t **val); -OPAL_MODULE_DECLSPEC int pmix2x_getnb(const opal_process_name_t *proc, const char *key, +OPAL_MODULE_DECLSPEC int pmix3x_getnb(const opal_process_name_t *proc, const char *key, opal_list_t *info, opal_pmix_value_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_publish(opal_list_t *info); -OPAL_MODULE_DECLSPEC int pmix2x_publishnb(opal_list_t *info, +OPAL_MODULE_DECLSPEC int pmix3x_publish(opal_list_t *info); +OPAL_MODULE_DECLSPEC int pmix3x_publishnb(opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_lookup(opal_list_t *data, opal_list_t *info); -OPAL_MODULE_DECLSPEC int pmix2x_lookupnb(char **keys, opal_list_t *info, +OPAL_MODULE_DECLSPEC int pmix3x_lookup(opal_list_t *data, opal_list_t *info); +OPAL_MODULE_DECLSPEC int pmix3x_lookupnb(char **keys, opal_list_t *info, opal_pmix_lookup_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_unpublish(char **keys, opal_list_t *info); -OPAL_MODULE_DECLSPEC int pmix2x_unpublishnb(char **keys, opal_list_t *info, +OPAL_MODULE_DECLSPEC int pmix3x_unpublish(char **keys, opal_list_t *info); +OPAL_MODULE_DECLSPEC int pmix3x_unpublishnb(char **keys, opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid); -OPAL_MODULE_DECLSPEC int pmix2x_spawnnb(opal_list_t *job_info, opal_list_t *apps, +OPAL_MODULE_DECLSPEC int pmix3x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid); +OPAL_MODULE_DECLSPEC int pmix3x_spawnnb(opal_list_t *job_info, opal_list_t *apps, opal_pmix_spawn_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_connect(opal_list_t *procs); -OPAL_MODULE_DECLSPEC int pmix2x_connectnb(opal_list_t *procs, +OPAL_MODULE_DECLSPEC int pmix3x_connect(opal_list_t *procs); +OPAL_MODULE_DECLSPEC int pmix3x_connectnb(opal_list_t *procs, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_disconnect(opal_list_t *procs); -OPAL_MODULE_DECLSPEC int pmix2x_disconnectnb(opal_list_t *procs, +OPAL_MODULE_DECLSPEC int pmix3x_disconnect(opal_list_t *procs); +OPAL_MODULE_DECLSPEC int pmix3x_disconnectnb(opal_list_t *procs, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_resolve_peers(const char *nodename, opal_jobid_t jobid, +OPAL_MODULE_DECLSPEC int pmix3x_resolve_peers(const char *nodename, opal_jobid_t jobid, opal_list_t *procs); -OPAL_MODULE_DECLSPEC int pmix2x_resolve_nodes(opal_jobid_t jobid, char **nodelist); -OPAL_MODULE_DECLSPEC int pmix2x_allocate(opal_pmix_alloc_directive_t directive, +OPAL_MODULE_DECLSPEC int pmix3x_resolve_nodes(opal_jobid_t jobid, char **nodelist); +OPAL_MODULE_DECLSPEC int pmix3x_allocate(opal_pmix_alloc_directive_t directive, opal_list_t *info, opal_pmix_info_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_job_control(opal_list_t *targets, +OPAL_MODULE_DECLSPEC int pmix3x_job_control(opal_list_t *targets, opal_list_t *directives, opal_pmix_info_cbfunc_t cbfunc, void *cbdata); /**** TOOL FUNCTIONS ****/ -OPAL_MODULE_DECLSPEC int pmix2x_tool_init(opal_list_t *info); -OPAL_MODULE_DECLSPEC int pmix2x_tool_fini(void); +OPAL_MODULE_DECLSPEC int pmix3x_tool_init(opal_list_t *info); +OPAL_MODULE_DECLSPEC int pmix3x_tool_fini(void); /**** COMMON FUNCTIONS ****/ -OPAL_MODULE_DECLSPEC int pmix2x_store_local(const opal_process_name_t *proc, +OPAL_MODULE_DECLSPEC int pmix3x_store_local(const opal_process_name_t *proc, opal_value_t *val); /**** SERVER SOUTHBOUND FUNCTIONS ****/ -OPAL_MODULE_DECLSPEC int pmix2x_server_init(opal_pmix_server_module_t *module, +OPAL_MODULE_DECLSPEC int pmix3x_server_init(opal_pmix_server_module_t *module, opal_list_t *info); -OPAL_MODULE_DECLSPEC int pmix2x_server_finalize(void); -OPAL_MODULE_DECLSPEC int pmix2x_server_gen_regex(const char *input, char **regex); -OPAL_MODULE_DECLSPEC int pmix2x_server_gen_ppn(const char *input, char **ppn); -OPAL_MODULE_DECLSPEC int pmix2x_server_register_nspace(opal_jobid_t jobid, +OPAL_MODULE_DECLSPEC int pmix3x_server_finalize(void); +OPAL_MODULE_DECLSPEC int pmix3x_server_gen_regex(const char *input, char **regex); +OPAL_MODULE_DECLSPEC int pmix3x_server_gen_ppn(const char *input, char **ppn); +OPAL_MODULE_DECLSPEC int pmix3x_server_register_nspace(opal_jobid_t jobid, int nlocalprocs, opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC void pmix2x_server_deregister_nspace(opal_jobid_t jobid, +OPAL_MODULE_DECLSPEC void pmix3x_server_deregister_nspace(opal_jobid_t jobid, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_server_register_client(const opal_process_name_t *proc, +OPAL_MODULE_DECLSPEC int pmix3x_server_register_client(const opal_process_name_t *proc, uid_t uid, gid_t gid, void *server_object, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC void pmix2x_server_deregister_client(const opal_process_name_t *proc, +OPAL_MODULE_DECLSPEC void pmix3x_server_deregister_client(const opal_process_name_t *proc, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_server_setup_fork(const opal_process_name_t *proc, char ***env); -OPAL_MODULE_DECLSPEC int pmix2x_server_dmodex(const opal_process_name_t *proc, +OPAL_MODULE_DECLSPEC int pmix3x_server_setup_fork(const opal_process_name_t *proc, char ***env); +OPAL_MODULE_DECLSPEC int pmix3x_server_dmodex(const opal_process_name_t *proc, opal_pmix_modex_cbfunc_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC int pmix2x_server_notify_event(int status, +OPAL_MODULE_DECLSPEC int pmix3x_server_notify_event(int status, const opal_process_name_t *source, opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); /**** COMPONENT UTILITY FUNCTIONS ****/ -OPAL_MODULE_DECLSPEC int opal_pmix_pmix2x_check_evars(void); +OPAL_MODULE_DECLSPEC int opal_pmix_pmix3x_check_evars(void); -OPAL_MODULE_DECLSPEC void pmix2x_event_hdlr(size_t evhdlr_registration_id, +OPAL_MODULE_DECLSPEC void pmix3x_event_hdlr(size_t evhdlr_registration_id, pmix_status_t status, const pmix_proc_t *source, pmix_info_t info[], size_t ninfo, pmix_info_t results[], size_t nresults, pmix_event_notification_cbfunc_fn_t cbfunc, void *cbdata); -OPAL_MODULE_DECLSPEC pmix_status_t pmix2x_convert_opalrc(int rc); -OPAL_MODULE_DECLSPEC int pmix2x_convert_rc(pmix_status_t rc); +OPAL_MODULE_DECLSPEC pmix_status_t pmix3x_convert_opalrc(int rc); +OPAL_MODULE_DECLSPEC int pmix3x_convert_rc(pmix_status_t rc); -OPAL_MODULE_DECLSPEC opal_vpid_t pmix2x_convert_rank(pmix_rank_t rank); -OPAL_MODULE_DECLSPEC pmix_rank_t pmix2x_convert_opalrank(opal_vpid_t vpid); +OPAL_MODULE_DECLSPEC opal_vpid_t pmix3x_convert_rank(pmix_rank_t rank); +OPAL_MODULE_DECLSPEC pmix_rank_t pmix3x_convert_opalrank(opal_vpid_t vpid); -OPAL_MODULE_DECLSPEC opal_pmix_scope_t pmix2x_convert_scope(pmix_scope_t scope); -OPAL_MODULE_DECLSPEC pmix_scope_t pmix2x_convert_opalscope(opal_pmix_scope_t scope); +OPAL_MODULE_DECLSPEC opal_pmix_scope_t pmix3x_convert_scope(pmix_scope_t scope); +OPAL_MODULE_DECLSPEC pmix_scope_t pmix3x_convert_opalscope(opal_pmix_scope_t scope); -OPAL_MODULE_DECLSPEC pmix_data_range_t pmix2x_convert_opalrange(opal_pmix_data_range_t range); -OPAL_MODULE_DECLSPEC opal_pmix_data_range_t pmix2x_convert_range(pmix_data_range_t range); +OPAL_MODULE_DECLSPEC pmix_data_range_t pmix3x_convert_opalrange(opal_pmix_data_range_t range); +OPAL_MODULE_DECLSPEC opal_pmix_data_range_t pmix3x_convert_range(pmix_data_range_t range); -OPAL_MODULE_DECLSPEC opal_pmix_persistence_t pmix2x_convert_persist(pmix_persistence_t scope); -OPAL_MODULE_DECLSPEC pmix_persistence_t pmix2x_convert_opalpersist(opal_pmix_persistence_t scope); +OPAL_MODULE_DECLSPEC opal_pmix_persistence_t pmix3x_convert_persist(pmix_persistence_t scope); +OPAL_MODULE_DECLSPEC pmix_persistence_t pmix3x_convert_opalpersist(opal_pmix_persistence_t scope); -OPAL_MODULE_DECLSPEC void pmix2x_value_load(pmix_value_t *v, +OPAL_MODULE_DECLSPEC void pmix3x_value_load(pmix_value_t *v, opal_value_t *kv); -OPAL_MODULE_DECLSPEC int pmix2x_value_unload(opal_value_t *kv, +OPAL_MODULE_DECLSPEC int pmix3x_value_unload(opal_value_t *kv, const pmix_value_t *v); -OPAL_MODULE_DECLSPEC opal_pmix_alloc_directive_t pmix2x_convert_allocdir(pmix_alloc_directive_t dir); +OPAL_MODULE_DECLSPEC opal_pmix_alloc_directive_t pmix3x_convert_allocdir(pmix_alloc_directive_t dir); -OPAL_MODULE_DECLSPEC char* pmix2x_convert_jobid(opal_jobid_t jobid); +OPAL_MODULE_DECLSPEC char* pmix3x_convert_jobid(opal_jobid_t jobid); END_C_DECLS diff --git a/opal/mca/pmix/pmix3x/pmix3x_client.c b/opal/mca/pmix/pmix3x/pmix3x_client.c new file mode 100644 index 0000000000..0a39da031f --- /dev/null +++ b/opal/mca/pmix/pmix3x/pmix3x_client.c @@ -0,0 +1,1648 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ +/* + * Copyright (c) 2014-2017 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2017 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * Copyright (c) 2014-2017 Mellanox Technologies, Inc. + * All rights reserved. + * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. + * Copyright (c) 2016 Los Alamos National Security, LLC. All rights + * reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "opal_config.h" +#include "opal/constants.h" +#include "opal/types.h" + +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#include "opal/hash_string.h" +#include "opal/threads/threads.h" +#include "opal/util/argv.h" +#include "opal/util/opal_environ.h" +#include "opal/util/proc.h" +#include "opal/util/show_help.h" + +#include "opal/mca/pmix/base/base.h" +#include "pmix3x.h" +#include "pmix.h" +#include "pmix_tool.h" + +static pmix_proc_t my_proc; +static char *dbgvalue=NULL; + +static void errreg_cbfunc (pmix_status_t status, + size_t errhandler_ref, + void *cbdata) +{ + opal_pmix3x_event_t *event = (opal_pmix3x_event_t*)cbdata; + + OPAL_ACQUIRE_OBJECT(event); + + event->index = errhandler_ref; + opal_output_verbose(5, opal_pmix_base_framework.framework_output, + "PMIX client errreg_cbfunc - error handler registered status=%d, reference=%lu", + status, (unsigned long)errhandler_ref); + OPAL_POST_OBJECT(event); + OPAL_PMIX_WAKEUP_THREAD(&event->lock); +} + +int pmix3x_client_init(opal_list_t *ilist) +{ + opal_process_name_t pname; + pmix_status_t rc; + int dbg; + opal_pmix3x_jobid_trkr_t *job; + opal_pmix3x_event_t *event; + pmix_info_t *pinfo; + size_t ninfo, n; + opal_value_t *ival; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_client init"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + + if (0 == opal_pmix_base.initialized) { + if (0 < (dbg = opal_output_get_verbosity(opal_pmix_base_framework.framework_output))) { + asprintf(&dbgvalue, "PMIX_DEBUG=%d", dbg); + putenv(dbgvalue); + } + /* check the evars for a mismatch */ + if (OPAL_SUCCESS != (dbg = opal_pmix_pmix3x_check_evars())) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return dbg; + } + } + + /* convert the incoming list to info structs */ + if (NULL != ilist && 0 < (ninfo = opal_list_get_size(ilist))) { + PMIX_INFO_CREATE(pinfo, ninfo); + n=0; + OPAL_LIST_FOREACH(ival, ilist, opal_value_t) { + (void)strncpy(pinfo[n].key, ival->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&pinfo[n].value, ival); + ++n; + } + } else { + pinfo = NULL; + ninfo = 0; + } + + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + rc = PMIx_Init(&my_proc, pinfo, ninfo); + if (NULL != pinfo) { + PMIX_INFO_FREE(pinfo, ninfo); + } + if (PMIX_SUCCESS != rc) { + dbg = pmix3x_convert_rc(rc); + OPAL_ERROR_LOG(dbg); + return dbg; + } + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + + ++opal_pmix_base.initialized; + if (1 < opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_SUCCESS; + } + + /* store our jobid and rank */ + if (NULL != getenv(OPAL_MCA_PREFIX"orte_launch")) { + /* if we were launched by the OMPI RTE, then + * the jobid is in a special format - so get it */ + mca_pmix_pmix3x_component.native_launch = true; + opal_convert_string_to_jobid(&pname.jobid, my_proc.nspace); + } else { + /* we were launched by someone else, so make the + * jobid just be the hash of the nspace */ + OPAL_HASH_JOBID(my_proc.nspace, pname.jobid); + } + /* insert this into our list of jobids - it will be the + * first, and so we'll check it first */ + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); + (void)strncpy(job->nspace, my_proc.nspace, PMIX_MAX_NSLEN); + job->jobid = pname.jobid; + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); + + pname.vpid = pmix3x_convert_rank(my_proc.rank); + opal_proc_set_name(&pname); + + /* release the thread in case the event handler fires when + * registered */ + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* register the default event handler */ + event = OBJ_NEW(opal_pmix3x_event_t); + opal_list_append(&mca_pmix_pmix3x_component.events, &event->super); + PMIX_INFO_CREATE(pinfo, 1); + PMIX_INFO_LOAD(&pinfo[0], PMIX_EVENT_HDLR_NAME, "OPAL-PMIX-2X-DEFAULT", PMIX_STRING); + PMIx_Register_event_handler(NULL, 0, NULL, 0, pmix3x_event_hdlr, errreg_cbfunc, event); + OPAL_PMIX_WAIT_THREAD(&event->lock); + PMIX_INFO_FREE(pinfo, 1); + + return OPAL_SUCCESS; + +} + +static void dereg_cbfunc(pmix_status_t st, void *cbdata) +{ + opal_pmix3x_event_t *ev = (opal_pmix3x_event_t*)cbdata; + OPAL_PMIX_WAKEUP_THREAD(&ev->lock); +} + +int pmix3x_client_finalize(void) +{ + pmix_status_t rc; + opal_pmix3x_event_t *event, *ev2; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_client finalize"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + --opal_pmix_base.initialized; + + if (0 == opal_pmix_base.initialized) { + /* deregister all event handlers */ + OPAL_LIST_FOREACH_SAFE(event, ev2, &mca_pmix_pmix3x_component.events, opal_pmix3x_event_t) { + OPAL_PMIX_DESTRUCT_LOCK(&event->lock); + OPAL_PMIX_CONSTRUCT_LOCK(&event->lock); + PMIx_Deregister_event_handler(event->index, dereg_cbfunc, (void*)event); + OPAL_PMIX_WAIT_THREAD(&event->lock); + opal_list_remove_item(&mca_pmix_pmix3x_component.events, &event->super); + OBJ_RELEASE(event); + } + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + rc = PMIx_Finalize(NULL, 0); + + return pmix3x_convert_rc(rc); +} + +int pmix3x_tool_init(opal_list_t *info) +{ + pmix_info_t *pinfo; + size_t ninfo, n; + opal_pmix3x_jobid_trkr_t *job; + opal_value_t *val; + pmix_status_t rc; + int ret; + opal_process_name_t pname = {OPAL_JOBID_INVALID, OPAL_VPID_INVALID}; + opal_pmix3x_event_t *event; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_tool init"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + + /* convert the incoming list to info structs */ + if (NULL != info && 0 < (ninfo = opal_list_get_size(info))) { + PMIX_INFO_CREATE(pinfo, ninfo); + n=0; + OPAL_LIST_FOREACH(val, info, opal_value_t) { + (void)strncpy(pinfo[n].key, val->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&pinfo[n].value, val); + ++n; + /* check to see if our name is being given from above */ + if (0 == strcmp(val->key, OPAL_PMIX_TOOL_NSPACE)) { + opal_convert_string_to_jobid(&pname.jobid, val->data.string); + (void)strncpy(my_proc.nspace, val->data.string, PMIX_MAX_NSLEN); + } else if (0 == strcmp(val->key, OPAL_PMIX_TOOL_RANK)) { + pname.vpid = val->data.name.vpid; + my_proc.rank = pname.vpid; + } + } + } else { + pinfo = NULL; + ninfo = 0; + } + /* we are going to get our name from the server, or we were given it by the tool, + * so mark as native launch so we don't convert back/forth */ + mca_pmix_pmix3x_component.native_launch = true; + + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + rc = PMIx_tool_init(&my_proc, pinfo, ninfo); + if (NULL != pinfo) { + PMIX_INFO_FREE(pinfo, ninfo); + } + if (PMIX_SUCCESS != rc) { + ret = pmix3x_convert_rc(rc); + OPAL_ERROR_LOG(ret); + return ret; + } + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + + ++opal_pmix_base.initialized; + if (1 < opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_SUCCESS; + } + + /* store our jobid and rank */ + opal_convert_string_to_jobid(&pname.jobid, my_proc.nspace); + pname.vpid = pmix3x_convert_rank(my_proc.rank); + + /* insert this into our list of jobids - it will be the + * first, and so we'll check it first */ + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); + (void)strncpy(job->nspace, my_proc.nspace, PMIX_MAX_NSLEN); + job->jobid = pname.jobid; + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); + + opal_proc_set_name(&pname); + + /* release the thread in case the event handler fires when + * registered */ + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* register the default event handler */ + event = OBJ_NEW(opal_pmix3x_event_t); + opal_list_append(&mca_pmix_pmix3x_component.events, &event->super); + PMIX_INFO_CREATE(pinfo, 1); + PMIX_INFO_LOAD(&pinfo[0], PMIX_EVENT_HDLR_NAME, "OPAL-PMIX-2X-DEFAULT", PMIX_STRING); + PMIx_Register_event_handler(NULL, 0, NULL, 0, pmix3x_event_hdlr, errreg_cbfunc, event); + OPAL_PMIX_WAIT_THREAD(&event->lock); + PMIX_INFO_FREE(pinfo, 1); + + return OPAL_SUCCESS; +} + +int pmix3x_tool_fini(void) +{ + pmix_status_t rc; + opal_pmix3x_event_t *event, *ev2; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_tool finalize"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + --opal_pmix_base.initialized; + + if (0 == opal_pmix_base.initialized) { + /* deregister all event handlers */ + OPAL_LIST_FOREACH_SAFE(event, ev2, &mca_pmix_pmix3x_component.events, opal_pmix3x_event_t) { + OPAL_PMIX_DESTRUCT_LOCK(&event->lock); + OPAL_PMIX_CONSTRUCT_LOCK(&event->lock); + PMIx_Deregister_event_handler(event->index, dereg_cbfunc, (void*)event); + OPAL_PMIX_WAIT_THREAD(&event->lock); + opal_list_remove_item(&mca_pmix_pmix3x_component.events, &event->super); + OBJ_RELEASE(event); + } + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + rc = PMIx_tool_finalize(); + + return pmix3x_convert_rc(rc); +} + + +int pmix3x_initialized(void) +{ + int init; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_client initialized"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + init = opal_pmix_base.initialized; + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + return init; +} + +int pmix3x_abort(int flag, const char *msg, + opal_list_t *procs) +{ + pmix_status_t rc; + pmix_proc_t *parray=NULL; + size_t n, cnt=0; + opal_namelist_t *ptr; + char *nsptr; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_client abort"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* convert the list of procs to an array + * of pmix_proc_t */ + if (NULL != procs && 0 < (cnt = opal_list_get_size(procs))) { + PMIX_PROC_CREATE(parray, cnt); + n=0; + OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { + if (NULL == (nsptr = pmix3x_convert_jobid(ptr->name.jobid))) { + PMIX_PROC_FREE(parray, cnt); + return OPAL_ERR_NOT_FOUND; + } + (void)strncpy(parray[n].nspace, nsptr, PMIX_MAX_NSLEN); + parray[n].rank = pmix3x_convert_opalrank(ptr->name.vpid); + ++n; + } + } + + /* call the library abort - this is a blocking call */ + rc = PMIx_Abort(flag, msg, parray, cnt); + + /* release the array */ + PMIX_PROC_FREE(parray, cnt); + + return pmix3x_convert_rc(rc); +} + +int pmix3x_store_local(const opal_process_name_t *proc, opal_value_t *val) +{ + pmix_value_t kv; + pmix_status_t rc; + pmix_proc_t p; + char *nsptr; + opal_pmix3x_jobid_trkr_t *job; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (NULL != proc) { + if (NULL == (nsptr = pmix3x_convert_jobid(proc->jobid))) { + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); + (void)opal_snprintf_jobid(job->nspace, PMIX_MAX_NSLEN, proc->jobid); + job->jobid = proc->jobid; + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + nsptr = job->nspace; + } + (void)strncpy(p.nspace, nsptr, PMIX_MAX_NSLEN); + p.rank = pmix3x_convert_opalrank(proc->vpid); + } else { + /* use our name */ + (void)strncpy(p.nspace, my_proc.nspace, PMIX_MAX_NSLEN); + p.rank = pmix3x_convert_opalrank(OPAL_PROC_MY_NAME.vpid); + } + + PMIX_VALUE_CONSTRUCT(&kv); + pmix3x_value_load(&kv, val); + + /* call the library - this is a blocking call */ + rc = PMIx_Store_internal(&p, val->key, &kv); + PMIX_VALUE_DESTRUCT(&kv); + + return pmix3x_convert_rc(rc); +} + +int pmix3x_commit(void) +{ + pmix_status_t rc; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + rc = PMIx_Commit(); + return pmix3x_convert_rc(rc); +} + +static void opcbfunc(pmix_status_t status, void *cbdata) +{ + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; + + OPAL_ACQUIRE_OBJECT(op); + if (NULL != op->opcbfunc) { + op->opcbfunc(pmix3x_convert_rc(status), op->cbdata); + } + OBJ_RELEASE(op); +} + +int pmix3x_fence(opal_list_t *procs, int collect_data) +{ + pmix_status_t rc; + opal_namelist_t *ptr; + char *nsptr; + size_t cnt = 0, n; + pmix_proc_t *parray = NULL; + pmix_info_t info, *iptr; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_client fence"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + /* convert the list of procs to an array + * of pmix_proc_t */ + if (NULL != procs && 0 < (cnt = opal_list_get_size(procs))) { + PMIX_PROC_CREATE(parray, cnt); + n=0; + OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { + if (NULL == (nsptr = pmix3x_convert_jobid(ptr->name.jobid))) { + PMIX_PROC_FREE(parray, cnt); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + (void)strncpy(parray[n].nspace, nsptr, PMIX_MAX_NSLEN); + parray[n].rank = pmix3x_convert_opalrank(ptr->name.vpid); + ++n; + } + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (collect_data) { + PMIX_INFO_CONSTRUCT(&info); + (void)strncpy(info.key, PMIX_COLLECT_DATA, PMIX_MAX_KEYLEN); + info.value.type = PMIX_BOOL; + info.value.data.flag = true; + iptr = &info; + n = 1; + } else { + iptr = NULL; + n = 0; + } + + rc = PMIx_Fence(parray, cnt, iptr, n); + if (collect_data) { + PMIX_INFO_DESTRUCT(&info); + } + if (NULL != parray) { + PMIX_PROC_FREE(parray, cnt); + } + + return pmix3x_convert_rc(rc); +} + +int pmix3x_fencenb(opal_list_t *procs, int collect_data, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + pmix_status_t rc; + pmix_proc_t *parray=NULL; + size_t n, cnt=0; + opal_namelist_t *ptr; + pmix3x_opcaddy_t *op; + char *nsptr; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_client fencenb"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + /* convert the list of procs to an array + * of pmix_proc_t */ + if (NULL != procs && 0 < (cnt = opal_list_get_size(procs))) { + PMIX_PROC_CREATE(parray, cnt); + n=0; + OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { + if (NULL == (nsptr = pmix3x_convert_jobid(ptr->name.jobid))) { + PMIX_PROC_FREE(parray, cnt); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + (void)strncpy(parray[n].nspace, nsptr, PMIX_MAX_NSLEN); + parray[n].rank = pmix3x_convert_opalrank(ptr->name.vpid); + ++n; + } + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* create the caddy */ + op = OBJ_NEW(pmix3x_opcaddy_t); + op->opcbfunc = cbfunc; + op->cbdata = cbdata; + op->procs = parray; + op->nprocs = cnt; + + if (collect_data) { + op->ninfo = 1; + PMIX_INFO_CREATE(op->info, op->ninfo); + PMIX_INFO_LOAD(&op->info[0], PMIX_COLLECT_DATA, NULL, PMIX_BOOL); + } + + /* call the library function */ + rc = PMIx_Fence_nb(op->procs, op->nprocs, op->info, op->ninfo, opcbfunc, op); + return pmix3x_convert_rc(rc); +} + +int pmix3x_put(opal_pmix_scope_t opal_scope, + opal_value_t *val) +{ + pmix_value_t kv; + pmix_scope_t pmix_scope = pmix3x_convert_opalscope(opal_scope); + pmix_status_t rc; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_client put"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + PMIX_VALUE_CONSTRUCT(&kv); + pmix3x_value_load(&kv, val); + + rc = PMIx_Put(pmix_scope, val->key, &kv); + PMIX_VALUE_DESTRUCT(&kv); + return pmix3x_convert_rc(rc); +} + +int pmix3x_get(const opal_process_name_t *proc, const char *key, + opal_list_t *info, opal_value_t **val) +{ + pmix_status_t rc; + pmix_proc_t p; + char *nsptr; + pmix_info_t *pinfo = NULL; + size_t sz = 0, n; + opal_value_t *ival; + pmix_value_t *pval = NULL; + int ret; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "%s pmix3x:client get on proc %s key %s", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + (NULL == proc) ? "NULL" : OPAL_NAME_PRINT(*proc), key); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + if (NULL == proc) { + /* if they are asking for our jobid, then return it */ + if (0 == strcmp(key, OPAL_PMIX_JOBID)) { + (*val) = OBJ_NEW(opal_value_t); + (*val)->type = OPAL_UINT32; + (*val)->data.uint32 = OPAL_PROC_MY_NAME.jobid; + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_SUCCESS; + } + /* if they are asking for our rank, return it */ + if (0 == strcmp(key, OPAL_PMIX_RANK)) { + (*val) = OBJ_NEW(opal_value_t); + (*val)->type = OPAL_INT; + (*val)->data.integer = pmix3x_convert_rank(my_proc.rank); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_SUCCESS; + } + } + *val = NULL; + + if (NULL == proc) { + (void)strncpy(p.nspace, my_proc.nspace, PMIX_MAX_NSLEN); + p.rank = pmix3x_convert_rank(PMIX_RANK_WILDCARD); + } else { + if (NULL == (nsptr = pmix3x_convert_jobid(proc->jobid))) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + (void)strncpy(p.nspace, nsptr, PMIX_MAX_NSLEN); + p.rank = pmix3x_convert_opalrank(proc->vpid); + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (NULL != info && 0 < (sz = opal_list_get_size(info))) { + PMIX_INFO_CREATE(pinfo, sz); + n=0; + OPAL_LIST_FOREACH(ival, info, opal_value_t) { + (void)strncpy(pinfo[n].key, ival->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&pinfo[n].value, ival); + ++n; + } + } + + rc = PMIx_Get(&p, key, pinfo, sz, &pval); + if (PMIX_SUCCESS == rc) { + ival = OBJ_NEW(opal_value_t); + if (OPAL_SUCCESS != (ret = pmix3x_value_unload(ival, pval))) { + rc = pmix3x_convert_opalrc(ret); + } else { + *val = ival; + } + PMIX_VALUE_FREE(pval, 1); + } + PMIX_INFO_FREE(pinfo, sz); + + return pmix3x_convert_rc(rc); +} + +static void val_cbfunc(pmix_status_t status, + pmix_value_t *kv, void *cbdata) +{ + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; + int rc; + opal_value_t val, *v=NULL; + + OPAL_ACQUIRE_OBJECT(op); + OBJ_CONSTRUCT(&val, opal_value_t); + rc = pmix3x_convert_opalrc(status); + if (PMIX_SUCCESS == status && NULL != kv) { + rc = pmix3x_value_unload(&val, kv); + v = &val; + } + + if (NULL != op->valcbfunc) { + op->valcbfunc(rc, v, op->cbdata); + } + OBJ_DESTRUCT(&val); + OBJ_RELEASE(op); +} + +int pmix3x_getnb(const opal_process_name_t *proc, const char *key, + opal_list_t *info, + opal_pmix_value_cbfunc_t cbfunc, void *cbdata) +{ + pmix3x_opcaddy_t *op; + opal_value_t *val; + pmix_status_t rc; + char *nsptr; + size_t n; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "%s PMIx_client get_nb on proc %s key %s", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + (NULL == proc) ? "NULL" : OPAL_NAME_PRINT(*proc), key); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + if (NULL == proc) { + /* if they are asking for our jobid, then return it */ + if (0 == strcmp(key, OPAL_PMIX_JOBID)) { + if (NULL != cbfunc) { + val = OBJ_NEW(opal_value_t); + val->type = OPAL_UINT32; + val->data.uint32 = OPAL_PROC_MY_NAME.jobid; + cbfunc(OPAL_SUCCESS, val, cbdata); + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_SUCCESS; + } + /* if they are asking for our rank, return it */ + if (0 == strcmp(key, OPAL_PMIX_RANK)) { + if (NULL != cbfunc) { + val = OBJ_NEW(opal_value_t); + val->type = OPAL_INT; + val->data.integer = pmix3x_convert_rank(my_proc.rank); + cbfunc(OPAL_SUCCESS, val, cbdata); + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_SUCCESS; + } + } + + /* create the caddy */ + op = OBJ_NEW(pmix3x_opcaddy_t); + op->valcbfunc = cbfunc; + op->cbdata = cbdata; + + if (NULL == proc) { + (void)strncpy(op->p.nspace, my_proc.nspace, PMIX_MAX_NSLEN); + op->p.rank = pmix3x_convert_rank(PMIX_RANK_WILDCARD); + } else { + if (NULL == (nsptr = pmix3x_convert_jobid(proc->jobid))) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + (void)strncpy(op->p.nspace, nsptr, PMIX_MAX_NSLEN); + op->p.rank = pmix3x_convert_opalrank(proc->vpid); + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (NULL != info && 0 < (op->sz = opal_list_get_size(info))) { + PMIX_INFO_CREATE(op->info, op->sz); + n=0; + OPAL_LIST_FOREACH(val, info, opal_value_t) { + (void)strncpy(op->info[n].key, val->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&op->info[n].value, val); + ++n; + } + } + + /* call the library function */ + rc = PMIx_Get_nb(&op->p, key, op->info, op->sz, val_cbfunc, op); + if (PMIX_SUCCESS != rc) { + OBJ_RELEASE(op); + } + + return pmix3x_convert_rc(rc); +} + +int pmix3x_publish(opal_list_t *info) +{ + pmix_info_t *pinfo; + pmix_status_t ret; + opal_value_t *iptr; + size_t sz, n; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_client publish"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (NULL == info) { + return OPAL_ERR_BAD_PARAM; + } + + sz = opal_list_get_size(info); + if (0 < sz) { + PMIX_INFO_CREATE(pinfo, sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { + (void)strncpy(pinfo[n].key, iptr->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&pinfo[n].value, iptr); + ++n; + } + } else { + pinfo = NULL; + } + + ret = PMIx_Publish(pinfo, sz); + if (0 < sz) { + PMIX_INFO_FREE(pinfo, sz); + } + + return pmix3x_convert_rc(ret); +} + +int pmix3x_publishnb(opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + pmix_status_t ret; + opal_value_t *iptr; + size_t n; + pmix3x_opcaddy_t *op; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "PMIx_client publish_nb"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (NULL == info) { + return OPAL_ERR_BAD_PARAM; + } + + /* create the caddy */ + op = OBJ_NEW(pmix3x_opcaddy_t); + op->opcbfunc = cbfunc; + op->cbdata = cbdata; + + op->sz = opal_list_get_size(info); + if (0 < op->sz) { + PMIX_INFO_CREATE(op->info, op->sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { + (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&op->info[n].value, iptr); + ++n; + } + } + + ret = PMIx_Publish_nb(op->info, op->sz, opcbfunc, op); + + return pmix3x_convert_rc(ret); +} + +int pmix3x_lookup(opal_list_t *data, opal_list_t *info) +{ + opal_pmix_pdata_t *d; + pmix_pdata_t *pdata; + pmix_info_t *pinfo = NULL; + pmix_status_t rc; + size_t cnt, n, sz = 0; + opal_value_t *iptr; + opal_pmix3x_jobid_trkr_t *jptr, *job; + int ret; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "pmix3x:client lookup"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (NULL == data || 0 == (cnt = opal_list_get_size(data))) { + return OPAL_ERR_BAD_PARAM; + } + PMIX_PDATA_CREATE(pdata, cnt); + n = 0; + OPAL_LIST_FOREACH(d, data, opal_pmix_pdata_t) { + (void)strncpy(pdata[n].key, d->value.key, PMIX_MAX_KEYLEN); + ++n; + } + + if (NULL != info && 0 < (sz = opal_list_get_size(info))) { + PMIX_INFO_CREATE(pinfo, sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { + (void)strncpy(pinfo[n].key, iptr->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&pinfo[n].value, iptr); + ++n; + } + } + + rc = PMIx_Lookup(pdata, cnt, pinfo, sz); + if (PMIX_SUCCESS == rc) { + /* load the answers back into the list */ + n=0; + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + OPAL_LIST_FOREACH(d, data, opal_pmix_pdata_t) { + if (mca_pmix_pmix3x_component.native_launch) { + /* if we were launched by the OMPI RTE, then + * the jobid is in a special format - so get it */ + opal_convert_string_to_jobid(&d->proc.jobid, pdata[n].proc.nspace); + } else { + /* we were launched by someone else, so make the + * jobid just be the hash of the nspace */ + OPAL_HASH_JOBID(pdata[n].proc.nspace, d->proc.jobid); + } + /* if we don't already have it, add this to our jobid tracker */ + job = NULL; + OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { + if (jptr->jobid == d->proc.jobid) { + job = jptr; + break; + } + } + if (NULL == job) { + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); + (void)strncpy(job->nspace, pdata[n].proc.nspace, PMIX_MAX_NSLEN); + job->jobid = d->proc.jobid; + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); + } + d->proc.vpid = pmix3x_convert_rank(pdata[n].proc.rank); + if (OPAL_SUCCESS != (ret = pmix3x_value_unload(&d->value, &pdata[n].value))) { + OPAL_ERROR_LOG(ret); + } + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + } + PMIX_PDATA_FREE(pdata, cnt); + if (NULL != pinfo) { + PMIX_INFO_FREE(pinfo, sz); + } + return pmix3x_convert_rc(rc); +} + +static void lk_cbfunc(pmix_status_t status, + pmix_pdata_t data[], size_t ndata, + void *cbdata) +{ + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; + opal_pmix_pdata_t *d; + opal_list_t results, *r = NULL; + int rc; + size_t n; + opal_pmix3x_jobid_trkr_t *job, *jptr; + + OPAL_ACQUIRE_OBJECT(op); + + if (NULL == op->lkcbfunc) { + OBJ_RELEASE(op); + return; + } + + rc = pmix3x_convert_rc(op->status); + if (OPAL_SUCCESS == rc) { + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + OBJ_CONSTRUCT(&results, opal_list_t); + for (n=0; n < ndata; n++) { + d = OBJ_NEW(opal_pmix_pdata_t); + opal_list_append(&results, &d->super); + if (mca_pmix_pmix3x_component.native_launch) { + /* if we were launched by the OMPI RTE, then + * the jobid is in a special format - so get it */ + opal_convert_string_to_jobid(&d->proc.jobid, data[n].proc.nspace); + } else { + /* we were launched by someone else, so make the + * jobid just be the hash of the nspace */ + OPAL_HASH_JOBID(data[n].proc.nspace, d->proc.jobid); + } + /* if we don't already have it, add this to our jobid tracker */ + job = NULL; + OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { + if (jptr->jobid == d->proc.jobid) { + job = jptr; + break; + } + } + if (NULL == job) { + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); + (void)strncpy(job->nspace, data[n].proc.nspace, PMIX_MAX_NSLEN); + job->jobid = d->proc.jobid; + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); + } + d->proc.vpid = pmix3x_convert_rank(data[n].proc.rank); + d->value.key = strdup(data[n].key); + rc = pmix3x_value_unload(&d->value, &data[n].value); + if (OPAL_SUCCESS != rc) { + rc = OPAL_ERR_BAD_PARAM; + OPAL_ERROR_LOG(rc); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + goto release; + } + } + r = &results; + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + } + + release: + /* execute the callback */ + op->lkcbfunc(rc, r, op->cbdata); + + if (NULL != r) { + OPAL_LIST_DESTRUCT(&results); + } + OBJ_RELEASE(op); +} + +int pmix3x_lookupnb(char **keys, opal_list_t *info, + opal_pmix_lookup_cbfunc_t cbfunc, void *cbdata) +{ + pmix_status_t ret; + pmix3x_opcaddy_t *op; + opal_value_t *iptr; + size_t n; + + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "pmix3x:client lookup_nb"); + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* create the caddy */ + op = OBJ_NEW(pmix3x_opcaddy_t); + op->lkcbfunc = cbfunc; + op->cbdata = cbdata; + + if (NULL != info && 0 < (op->sz = opal_list_get_size(info))) { + PMIX_INFO_CREATE(op->info, op->sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { + (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&op->info[n].value, iptr); + ++n; + } + } + ret = PMIx_Lookup_nb(keys, op->info, op->sz, lk_cbfunc, op); + + return pmix3x_convert_rc(ret); +} + +int pmix3x_unpublish(char **keys, opal_list_t *info) +{ + pmix_status_t ret; + size_t ninfo, n; + pmix_info_t *pinfo; + opal_value_t *iptr; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (NULL != info && 0 < (ninfo = opal_list_get_size(info))) { + PMIX_INFO_CREATE(pinfo, ninfo); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { + (void)strncpy(pinfo[n].key, iptr->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&pinfo[n].value, iptr); + ++n; + } + } else { + pinfo = NULL; + ninfo = 0; + } + + ret = PMIx_Unpublish(keys, pinfo, ninfo); + PMIX_INFO_FREE(pinfo, ninfo); + + return pmix3x_convert_rc(ret); +} + +int pmix3x_unpublishnb(char **keys, opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + pmix_status_t ret; + pmix3x_opcaddy_t *op; + opal_value_t *iptr; + size_t n; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* create the caddy */ + op = OBJ_NEW(pmix3x_opcaddy_t); + op->opcbfunc = cbfunc; + op->cbdata = cbdata; + + if (NULL != info && 0 < (op->sz = opal_list_get_size(info))) { + PMIX_INFO_CREATE(op->info, op->sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { + (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&op->info[n].value, iptr); + ++n; + } + } + + ret = PMIx_Unpublish_nb(keys, op->info, op->sz, opcbfunc, op); + + return pmix3x_convert_rc(ret); +} + +int pmix3x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) +{ + pmix_status_t rc; + pmix_info_t *info = NULL; + pmix_app_t *papps; + size_t ninfo = 0, napps, n, m; + opal_value_t *ival; + opal_pmix_app_t *app; + char nspace[PMIX_MAX_NSLEN+1]; + opal_pmix3x_jobid_trkr_t *job; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + *jobid = OPAL_JOBID_INVALID; + + if (NULL != job_info && 0 < (ninfo = opal_list_get_size(job_info))) { + PMIX_INFO_CREATE(info, ninfo); + n=0; + OPAL_LIST_FOREACH(ival, job_info, opal_value_t) { + (void)strncpy(info[n].key, ival->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&info[n].value, ival); + ++n; + } + } + + napps = opal_list_get_size(apps); + PMIX_APP_CREATE(papps, napps); + n=0; + OPAL_LIST_FOREACH(app, apps, opal_pmix_app_t) { + papps[n].cmd = strdup(app->cmd); + if (NULL != app->argv) { + papps[n].argv = opal_argv_copy(app->argv); + } + if (NULL != app->env) { + papps[n].env = opal_argv_copy(app->env); + } + if (NULL != app->cwd) { + papps[n].cwd = strdup(app->cwd); + } + papps[n].maxprocs = app->maxprocs; + if (0 < (papps[n].ninfo = opal_list_get_size(&app->info))) { + PMIX_INFO_CREATE(papps[n].info, papps[n].ninfo); + m=0; + OPAL_LIST_FOREACH(ival, &app->info, opal_value_t) { + (void)strncpy(papps[n].info[m].key, ival->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&papps[n].info[m].value, ival); + ++m; + } + } + ++n; + } + + rc = PMIx_Spawn(info, ninfo, papps, napps, nspace); + if (PMIX_SUCCESS == rc) { + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (mca_pmix_pmix3x_component.native_launch) { + /* if we were launched by the OMPI RTE, then + * the jobid is in a special format - so get it */ + opal_convert_string_to_jobid(jobid, nspace); + } else { + /* we were launched by someone else, so make the + * jobid just be the hash of the nspace */ + OPAL_HASH_JOBID(nspace, *jobid); + } + /* add this to our jobid tracker */ + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); + (void)strncpy(job->nspace, nspace, PMIX_MAX_NSLEN); + job->jobid = *jobid; + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + } + return rc; +} + +static void spcbfunc(pmix_status_t status, + char *nspace, void *cbdata) +{ + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; + opal_pmix3x_jobid_trkr_t *job; + opal_jobid_t jobid = OPAL_JOBID_INVALID; + int rc; + + OPAL_ACQUIRE_OBJECT(op); + + rc = pmix3x_convert_rc(status); + if (PMIX_SUCCESS == status) { + /* this is in the PMIx local thread - need to protect + * the framework-level data */ + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (mca_pmix_pmix3x_component.native_launch) { + /* if we were launched by the OMPI RTE, then + * the jobid is in a special format - so get it */ + opal_convert_string_to_jobid(&jobid, nspace); + } else { + /* we were launched by someone else, so make the + * jobid just be the hash of the nspace */ + OPAL_HASH_JOBID(nspace, jobid); + } + /* add this to our jobid tracker */ + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); + (void)strncpy(job->nspace, nspace, PMIX_MAX_NSLEN); + job->jobid = jobid; + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + } + + op->spcbfunc(rc, jobid, op->cbdata); + OBJ_RELEASE(op); +} + +int pmix3x_spawnnb(opal_list_t *job_info, opal_list_t *apps, + opal_pmix_spawn_cbfunc_t cbfunc, void *cbdata) +{ + pmix_status_t ret; + pmix3x_opcaddy_t *op; + size_t n, m; + opal_value_t *info; + opal_pmix_app_t *app; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* create the caddy */ + op = OBJ_NEW(pmix3x_opcaddy_t); + op->spcbfunc = cbfunc; + op->cbdata = cbdata; + + if (NULL != job_info && 0 < (op->ninfo = opal_list_get_size(job_info))) { + PMIX_INFO_CREATE(op->info, op->ninfo); + n=0; + OPAL_LIST_FOREACH(info, job_info, opal_value_t) { + (void)strncpy(op->info[n].key, info->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&op->info[n].value, info); + ++n; + } + } + + op->sz = opal_list_get_size(apps); + PMIX_APP_CREATE(op->apps, op->sz); + n=0; + OPAL_LIST_FOREACH(app, apps, opal_pmix_app_t) { + op->apps[n].cmd = strdup(app->cmd); + if (NULL != app->argv) { + op->apps[n].argv = opal_argv_copy(app->argv); + } + if (NULL != app->env) { + op->apps[n].env = opal_argv_copy(app->env); + } + op->apps[n].maxprocs = app->maxprocs; + if (0 < (op->apps[n].ninfo = opal_list_get_size(&app->info))) { + PMIX_INFO_CREATE(op->apps[n].info, op->apps[n].ninfo); + m=0; + OPAL_LIST_FOREACH(info, &app->info, opal_value_t) { + (void)strncpy(op->apps[n].info[m].key, info->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&op->apps[n].info[m].value, info); + ++m; + } + } + ++n; + } + + ret = PMIx_Spawn_nb(op->info, op->ninfo, op->apps, op->sz, spcbfunc, op); + + return pmix3x_convert_rc(ret); +} + +int pmix3x_connect(opal_list_t *procs) +{ + pmix_proc_t *p; + size_t nprocs; + opal_namelist_t *ptr; + pmix_status_t ret; + char *nsptr; + size_t n; + char nspace[PMIX_MAX_NSLEN+1]; + pmix_rank_t rank; + pmix_info_t *info; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "pmix3x:client connect"); + + /* protect against bozo error */ + if (NULL == procs || 0 == (nprocs = opal_list_get_size(procs))) { + return OPAL_ERR_BAD_PARAM; + } + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + /* convert the list of procs to an array + * of pmix_proc_t */ + PMIX_PROC_CREATE(p, nprocs); + n=0; + OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { + if (NULL == (nsptr = pmix3x_convert_jobid(ptr->name.jobid))) { + PMIX_PROC_FREE(p, nprocs); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + (void)strncpy(p[n].nspace, nsptr, PMIX_MAX_NSLEN); + p[n].rank = pmix3x_convert_opalrank(ptr->name.vpid); + ++n; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + /* tell PMIx that we don't want a return of an nspace */ + PMIX_INFO_CREATE(info, 1); + PMIX_INFO_LOAD(&info[0], PMIX_CONNECT_XCHG_ONLY, NULL, PMIX_BOOL); + + ret = PMIx_Connect(p, nprocs, info, 1, nspace, &rank); + PMIX_PROC_FREE(p, nprocs); + PMIX_INFO_FREE(info, 1); + + return pmix3x_convert_rc(ret); +} + +static void cnctcbfunc(pmix_status_t status, + char nspace[], int rank, + void *cbdata) +{ + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; + if (NULL != op->opcbfunc) { + op->opcbfunc(status, op->cbdata); + } + OBJ_RELEASE(op); +} + +int pmix3x_connectnb(opal_list_t *procs, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata) +{ + pmix3x_opcaddy_t *op; + opal_namelist_t *ptr; + pmix_status_t ret; + char *nsptr; + size_t n; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "pmix3x:client connect NB"); + + /* protect against bozo error */ + if (NULL == procs || 0 == opal_list_get_size(procs)) { + return OPAL_ERR_BAD_PARAM; + } + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + /* create the caddy */ + op = OBJ_NEW(pmix3x_opcaddy_t); + op->opcbfunc = cbfunc; + op->cbdata = cbdata; + op->nprocs = opal_list_get_size(procs); + + /* convert the list of procs to an array + * of pmix_proc_t */ + PMIX_PROC_CREATE(op->procs, op->nprocs); + n=0; + OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { + if (NULL == (nsptr = pmix3x_convert_jobid(ptr->name.jobid))) { + OBJ_RELEASE(op); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + (void)strncpy(op->procs[n].nspace, nsptr, PMIX_MAX_NSLEN); + op->procs[n].rank = pmix3x_convert_opalrank(ptr->name.vpid); + ++n; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + ret = PMIx_Connect_nb(op->procs, op->nprocs, NULL, 0, cnctcbfunc, op); + if (PMIX_SUCCESS != ret) { + OBJ_RELEASE(op); + } + return pmix3x_convert_rc(ret); +} + +int pmix3x_disconnect(opal_list_t *procs) +{ + size_t nprocs; + opal_namelist_t *ptr; + pmix_status_t ret; + char *nsptr; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "pmix3x:client disconnect"); + + /* protect against bozo error */ + if (NULL == procs || 0 == (nprocs = opal_list_get_size(procs))) { + return OPAL_ERR_BAD_PARAM; + } + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { + if (NULL == (nsptr = pmix3x_convert_jobid(ptr->name.jobid))) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + ret = PMIx_Disconnect(nsptr, NULL, 0); + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + + return pmix3x_convert_rc(ret); +} + +int pmix3x_disconnectnb(opal_list_t *procs, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata) +{ + opal_namelist_t *ptr; + pmix_status_t ret; + char *nsptr; + + opal_output_verbose(1, opal_pmix_base_framework.framework_output, + "pmix3x:client disconnect NB"); + + /* protect against bozo error */ + if (NULL == procs || 0 == opal_list_get_size(procs)) { + return OPAL_ERR_BAD_PARAM; + } + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + OPAL_LIST_FOREACH(ptr, procs, opal_namelist_t) { + if (NULL == (nsptr = pmix3x_convert_jobid(ptr->name.jobid))) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + ret = PMIx_Disconnect(nsptr, NULL, 0); + if (PMIX_SUCCESS != ret) { + OPAL_ERROR_LOG(pmix3x_convert_rc(ret)); + } + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (NULL != cbfunc) { + cbfunc(pmix3x_convert_rc(ret), cbdata); + } + return pmix3x_convert_rc(ret); +} + +int pmix3x_resolve_peers(const char *nodename, + opal_jobid_t jobid, + opal_list_t *procs) +{ + pmix_status_t ret; + char *nspace; + pmix_proc_t *array=NULL; + size_t nprocs, n; + opal_namelist_t *nm; + opal_pmix3x_jobid_trkr_t *job; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + if (OPAL_JOBID_WILDCARD != jobid) { + if (NULL == (nspace = pmix3x_convert_jobid(jobid))) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + } else { + nspace = NULL; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + ret = PMIx_Resolve_peers(nodename, nspace, &array, &nprocs); + + if (NULL != array && 0 < nprocs) { + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + for (n=0; n < nprocs; n++) { + nm = OBJ_NEW(opal_namelist_t); + opal_list_append(procs, &nm->super); + if (mca_pmix_pmix3x_component.native_launch) { + /* if we were launched by the OMPI RTE, then + * the jobid is in a special format - so get it */ + opal_convert_string_to_jobid(&nm->name.jobid, array[n].nspace); + } else { + /* we were launched by someone else, so make the + * jobid just be the hash of the nspace */ + OPAL_HASH_JOBID(array[n].nspace, nm->name.jobid); + } + /* if we don't already have it, add this to our jobid tracker */ + if (NULL == pmix3x_convert_jobid(nm->name.jobid)) { + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); + (void)strncpy(job->nspace, array[n].nspace, PMIX_MAX_NSLEN); + job->jobid = nm->name.jobid; + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); + } + nm->name.vpid = pmix3x_convert_rank(array[n].rank); + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + } + PMIX_PROC_FREE(array, nprocs); + return pmix3x_convert_rc(ret); +} + +int pmix3x_resolve_nodes(opal_jobid_t jobid, char **nodelist) +{ + pmix_status_t ret; + char *nsptr; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + if (NULL == (nsptr = pmix3x_convert_jobid(jobid))) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + ret = PMIx_Resolve_nodes(nsptr, nodelist); + + return pmix3x_convert_rc(ret); +} + +static void relcbfunc(void *cbdata) +{ + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; + OBJ_RELEASE(op); +} + +static void infocbfunc(pmix_status_t status, + pmix_info_t *info, size_t ninfo, + void *cbdata, + pmix_release_cbfunc_t release_fn, + void *release_cbdata) +{ + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; + int rc; + + if (NULL != release_fn) { + release_fn(release_cbdata); + } + rc = pmix3x_convert_rc(status); + if (NULL != op->qcbfunc) { + op->qcbfunc(rc, NULL, op->cbdata, relcbfunc, op); + } else { + OBJ_RELEASE(op); + } +} + +int pmix3x_allocate(opal_pmix_alloc_directive_t directive, + opal_list_t *info, + opal_pmix_info_cbfunc_t cbfunc, void *cbdata) +{ + return OPAL_ERR_NOT_SUPPORTED; +} + +int pmix3x_job_control(opal_list_t *targets, + opal_list_t *directives, + opal_pmix_info_cbfunc_t cbfunc, void *cbdata) +{ + pmix3x_opcaddy_t *op; + size_t n; + opal_namelist_t *ptr; + opal_value_t *iptr; + pmix_status_t rc; + char *nsptr; + + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + if (0 >= opal_pmix_base.initialized) { + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_INITIALIZED; + } + + /* create the caddy */ + op = OBJ_NEW(pmix3x_opcaddy_t); + op->qcbfunc = cbfunc; + op->cbdata = cbdata; + if (NULL != targets) { + op->nprocs = opal_list_get_size(targets); + + /* convert the list of procs to an array + * of pmix_proc_t */ + PMIX_PROC_CREATE(op->procs, op->nprocs); + n=0; + OPAL_LIST_FOREACH(ptr, targets, opal_namelist_t) { + if (NULL == (nsptr = pmix3x_convert_jobid(ptr->name.jobid))) { + OBJ_RELEASE(op); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return OPAL_ERR_NOT_FOUND; + } + (void)strncpy(op->procs[n].nspace, nsptr, PMIX_MAX_NSLEN); + op->procs[n].rank = pmix3x_convert_opalrank(ptr->name.vpid); + ++n; + } + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + + if (NULL != directives && 0 < (op->ninfo = opal_list_get_size(directives))) { + PMIX_INFO_CREATE(op->info, op->ninfo); + n=0; + OPAL_LIST_FOREACH(iptr, directives, opal_value_t) { + (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&op->info[n].value, iptr); + ++n; + } + } + + rc = PMIx_Job_control_nb(op->procs,op->nprocs, op->info, op->ninfo, infocbfunc, op); + if (PMIX_SUCCESS != rc) { + OBJ_RELEASE(op); + } + return pmix3x_convert_rc(rc); +} diff --git a/opal/mca/pmix/pmix2x/pmix2x_component.c b/opal/mca/pmix/pmix3x/pmix3x_component.c similarity index 78% rename from opal/mca/pmix/pmix2x/pmix2x_component.c rename to opal/mca/pmix/pmix3x/pmix3x_component.c index 03246c1180..88831788fe 100644 --- a/opal/mca/pmix/pmix2x/pmix2x_component.c +++ b/opal/mca/pmix/pmix3x/pmix3x_component.c @@ -22,13 +22,13 @@ #include "opal/class/opal_list.h" #include "opal/util/proc.h" #include "opal/mca/pmix/pmix.h" -#include "pmix2x.h" +#include "pmix3x.h" /* * Public string showing the pmix external component version number */ -const char *opal_pmix_pmix2x_component_version_string = - "OPAL pmix2x MCA component version " OPAL_VERSION; +const char *opal_pmix_pmix3x_component_version_string = + "OPAL pmix3x MCA component version " OPAL_VERSION; /* * Local function @@ -44,7 +44,7 @@ static int external_component_query(mca_base_module_t **module, int *priority); * and pointers to our public functions in it */ -mca_pmix_pmix2x_component_t mca_pmix_pmix2x_component = { +mca_pmix_pmix3x_component_t mca_pmix_pmix3x_component = { { /* First, the mca_component_t struct containing meta information about the component itself */ @@ -57,7 +57,7 @@ mca_pmix_pmix2x_component_t mca_pmix_pmix2x_component = { /* Component name and version */ - .mca_component_name = "pmix2x", + .mca_component_name = "pmix3x", MCA_BASE_MAKE_VERSION(component, OPAL_MAJOR_VERSION, OPAL_MINOR_VERSION, OPAL_RELEASE_VERSION), @@ -79,34 +79,34 @@ mca_pmix_pmix2x_component_t mca_pmix_pmix2x_component = { static int external_register(void) { - mca_base_component_t *component = &mca_pmix_pmix2x_component.super.base_version; + mca_base_component_t *component = &mca_pmix_pmix3x_component.super.base_version; - mca_pmix_pmix2x_component.silence_warning = false; + mca_pmix_pmix3x_component.silence_warning = false; (void) mca_base_component_var_register (component, "silence_warning", "Silence warning about PMIX_INSTALL_PREFIX", MCA_BASE_VAR_TYPE_BOOL, NULL, 0, 0, OPAL_INFO_LVL_4, MCA_BASE_VAR_SCOPE_READONLY, - &mca_pmix_pmix2x_component.silence_warning); + &mca_pmix_pmix3x_component.silence_warning); return OPAL_SUCCESS; } static int external_open(void) { - mca_pmix_pmix2x_component.evindex = 0; - OBJ_CONSTRUCT(&mca_pmix_pmix2x_component.jobids, opal_list_t); - OBJ_CONSTRUCT(&mca_pmix_pmix2x_component.events, opal_list_t); - OBJ_CONSTRUCT(&mca_pmix_pmix2x_component.dmdx, opal_list_t); + mca_pmix_pmix3x_component.evindex = 0; + OBJ_CONSTRUCT(&mca_pmix_pmix3x_component.jobids, opal_list_t); + OBJ_CONSTRUCT(&mca_pmix_pmix3x_component.events, opal_list_t); + OBJ_CONSTRUCT(&mca_pmix_pmix3x_component.dmdx, opal_list_t); return OPAL_SUCCESS; } static int external_close(void) { - OPAL_LIST_DESTRUCT(&mca_pmix_pmix2x_component.jobids); - OPAL_LIST_DESTRUCT(&mca_pmix_pmix2x_component.events); - OPAL_LIST_DESTRUCT(&mca_pmix_pmix2x_component.dmdx); + OPAL_LIST_DESTRUCT(&mca_pmix_pmix3x_component.jobids); + OPAL_LIST_DESTRUCT(&mca_pmix_pmix3x_component.events); + OPAL_LIST_DESTRUCT(&mca_pmix_pmix3x_component.dmdx); return OPAL_SUCCESS; } @@ -124,6 +124,6 @@ static int external_component_query(mca_base_module_t **module, int *priority) /* we could be a server, so we still need to be considered */ *priority = 5; } - *module = (mca_base_module_t *)&opal_pmix_pmix2x_module; + *module = (mca_base_module_t *)&opal_pmix_pmix3x_module; return OPAL_SUCCESS; } diff --git a/opal/mca/pmix/pmix2x/pmix2x_local.c b/opal/mca/pmix/pmix3x/pmix3x_local.c similarity index 97% rename from opal/mca/pmix/pmix2x/pmix2x_local.c rename to opal/mca/pmix/pmix3x/pmix3x_local.c index e279f8f112..b8933a6c52 100644 --- a/opal/mca/pmix/pmix2x/pmix2x_local.c +++ b/opal/mca/pmix/pmix3x/pmix3x_local.c @@ -39,7 +39,7 @@ #include "opal/util/proc.h" #include "opal/util/show_help.h" -#include "pmix2x.h" +#include "pmix3x.h" #include "opal/mca/pmix/base/base.h" #include "opal/mca/pmix/pmix_types.h" @@ -92,7 +92,7 @@ static struct known_value known_values[] = { }; -int opal_pmix_pmix2x_check_evars(void) +int opal_pmix_pmix3x_check_evars(void) { opal_list_t values; int nvals, i; @@ -149,7 +149,7 @@ int opal_pmix_pmix2x_check_evars(void) } } } - opal_show_help("help-pmix-pmix2x.txt", "evars", true, tmp); + opal_show_help("help-pmix-pmix3x.txt", "evars", true, tmp); free(tmp); return OPAL_ERR_SILENT; } diff --git a/opal/mca/pmix/pmix3x/pmix3x_server_north.c b/opal/mca/pmix/pmix3x/pmix3x_server_north.c new file mode 100644 index 0000000000..f508385297 --- /dev/null +++ b/opal/mca/pmix/pmix3x/pmix3x_server_north.c @@ -0,0 +1,1272 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ +/* + * Copyright (c) 2014-2017 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2017 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * Copyright (c) 2014-2015 Mellanox Technologies, Inc. + * All rights reserved. + * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "opal_config.h" +#include "opal/constants.h" +#include "opal/types.h" + +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#include "opal/dss/dss.h" +#include "opal/mca/event/event.h" +#include "opal/mca/hwloc/base/base.h" +#include "opal/runtime/opal.h" +#include "opal/runtime/opal_progress_threads.h" +#include "opal/threads/threads.h" +#include "opal/util/argv.h" +#include "opal/util/error.h" +#include "opal/util/output.h" +#include "opal/util/proc.h" +#include "opal/util/show_help.h" +#include "opal/mca/pmix/base/base.h" +#include "pmix3x.h" + +#include "pmix.h" +#include "pmix_server.h" + +/**** N.O.R.T.H.B.O.U.N.D I.N.T.E.R.F.A.C.E.S ****/ + +/* These are the interfaces used by the embedded PMIx server + * to call up into ORTE for service requests */ + +static pmix_status_t server_client_connected_fn(const pmix_proc_t *proc, void* server_object, + pmix_op_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_client_finalized_fn(const pmix_proc_t *proc, void* server_object, + pmix_op_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_abort_fn(const pmix_proc_t *proc, void *server_object, + int status, const char msg[], + pmix_proc_t procs[], size_t nprocs, + pmix_op_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, + const pmix_info_t info[], size_t ninfo, + char *data, size_t ndata, + pmix_modex_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *proc, + const pmix_info_t info[], size_t ninfo, + pmix_modex_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_publish_fn(const pmix_proc_t *proc, + const pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_lookup_fn(const pmix_proc_t *proc, char **keys, + const pmix_info_t info[], size_t ninfo, + pmix_lookup_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_unpublish_fn(const pmix_proc_t *proc, char **keys, + const pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_spawn_fn(const pmix_proc_t *proc, + const pmix_info_t job_info[], size_t ninfo, + const pmix_app_t apps[], size_t napps, + pmix_spawn_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_connect_fn(const pmix_proc_t procs[], size_t nprocs, + const pmix_info_t info[], size_t ninfo, + pmix_connect_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_disconnect_fn(const char nspace[], + const pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_register_events(pmix_status_t *codes, size_t ncodes, + const pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_deregister_events(pmix_status_t *codes, size_t ncodes, + pmix_op_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_notify_event(pmix_status_t code, + const pmix_proc_t *source, + pmix_data_range_t range, + pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata); +static pmix_status_t server_query(pmix_proc_t *proct, + pmix_query_t *queryies, size_t nqueries, + pmix_info_cbfunc_t cbfunc, + void *cbdata); +static void server_tool_connection(pmix_info_t *info, size_t ninfo, + pmix_tool_connection_cbfunc_t cbfunc, + void *cbdata); +static void server_log(const pmix_proc_t *client, + const pmix_info_t data[], size_t ndata, + const pmix_info_t directives[], size_t ndirs, + pmix_op_cbfunc_t cbfunc, void *cbdata); + +static pmix_status_t server_allocate(const pmix_proc_t *client, + pmix_alloc_directive_t directive, + const pmix_info_t data[], size_t ndata, + pmix_info_cbfunc_t cbfunc, void *cbdata); + +static pmix_status_t server_job_control(const pmix_proc_t *requestor, + const pmix_proc_t targets[], size_t ntargets, + const pmix_info_t directives[], size_t ndirs, + pmix_info_cbfunc_t cbfunc, void *cbdata); + +pmix_server_module_t mymodule = { + .client_connected = server_client_connected_fn, + .client_finalized = server_client_finalized_fn, + .abort = server_abort_fn, + .fence_nb = server_fencenb_fn, + .direct_modex = server_dmodex_req_fn, + .publish = server_publish_fn, + .lookup = server_lookup_fn, + .unpublish = server_unpublish_fn, + .spawn = server_spawn_fn, + .connect = server_connect_fn, + .disconnect = server_disconnect_fn, + .register_events = server_register_events, + .deregister_events = server_deregister_events, + .notify_event = server_notify_event, + .query = server_query, + .tool_connected = server_tool_connection, + .log = server_log, + .allocate = server_allocate, + .job_control = server_job_control + /* we do not support monitoring, but use the + * PMIx internal monitoring capability */ +}; + +opal_pmix_server_module_t *host_module = NULL; + + +static void opal_opcbfunc(int status, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy = (pmix3x_opalcaddy_t*)cbdata; + + OPAL_ACQUIRE_OBJECT(opalcaddy); + if (NULL != opalcaddy->opcbfunc) { + opalcaddy->opcbfunc(pmix3x_convert_opalrc(status), opalcaddy->cbdata); + } + OBJ_RELEASE(opalcaddy); +} + +static pmix_status_t server_client_connected_fn(const pmix_proc_t *p, void *server_object, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + opal_process_name_t proc; + pmix3x_opalcaddy_t *opalcaddy; + + if (NULL == host_module || NULL == host_module->client_connected) { + return PMIX_SUCCESS; + } + + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->opcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the nspace/rank to an opal_process_name_t */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { + return pmix3x_convert_opalrc(rc); + } + proc.vpid = pmix3x_convert_rank(p->rank); + + /* pass it up */ + rc = host_module->client_connected(&proc, server_object, + opal_opcbfunc, opalcaddy); + return pmix3x_convert_opalrc(rc); +} + +static pmix_status_t server_client_finalized_fn(const pmix_proc_t *p, void* server_object, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t proc; + + if (NULL == host_module || NULL == host_module->client_finalized) { + return PMIX_SUCCESS; + } + + /* convert the nspace/rank to an opal_process_name_t */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { + return pmix3x_convert_opalrc(rc); + } + proc.vpid = pmix3x_convert_rank(p->rank); + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->opcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* pass it up */ + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s CLIENT %s FINALIZED", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + OPAL_NAME_PRINT(proc)); + rc = host_module->client_finalized(&proc, server_object, opal_opcbfunc, opalcaddy); + if (OPAL_SUCCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + return pmix3x_convert_opalrc(rc); +} + +static pmix_status_t server_abort_fn(const pmix_proc_t *p, void *server_object, + int status, const char msg[], + pmix_proc_t procs[], size_t nprocs, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + size_t n; + opal_namelist_t *nm; + opal_process_name_t proc; + int rc; + pmix3x_opalcaddy_t *opalcaddy; + + if (NULL == host_module || NULL == host_module->abort) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* convert the nspace/rank to an opal_process_name_t */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { + return pmix3x_convert_opalrc(rc); + } + proc.vpid = pmix3x_convert_rank(p->rank); + + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s CLIENT %s CALLED ABORT", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + OPAL_NAME_PRINT(proc)); + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->opcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the array of pmix_proc_t to the list of procs */ + for (n=0; n < nprocs; n++) { + nm = OBJ_NEW(opal_namelist_t); + opal_list_append(&opalcaddy->procs, &nm->super); + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, procs[n].nspace))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + nm->name.vpid = pmix3x_convert_rank(procs[n].rank); + } + + /* pass it up */ + rc = host_module->abort(&proc, server_object, status, msg, + &opalcaddy->procs, opal_opcbfunc, opalcaddy); + if (OPAL_SUCCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + return pmix3x_convert_opalrc(rc); +} + +static void _data_release(void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy = (pmix3x_opalcaddy_t*)cbdata; + + if (NULL != opalcaddy->odmdxfunc) { + opalcaddy->odmdxfunc(opalcaddy->ocbdata); + } + OBJ_RELEASE(opalcaddy); +} + +static void opmdx_response(int status, const char *data, size_t sz, void *cbdata, + opal_pmix_release_cbfunc_t relcbfunc, void *relcbdata) +{ + pmix_status_t rc; + pmix3x_opalcaddy_t *opalcaddy = (pmix3x_opalcaddy_t*)cbdata; + opal_pmix3x_dmx_trkr_t *dmdx; + + rc = pmix3x_convert_rc(status); + if (NULL != opalcaddy->mdxcbfunc) { + opalcaddy->odmdxfunc = relcbfunc; + opalcaddy->ocbdata = relcbdata; + opalcaddy->mdxcbfunc(rc, data, sz, opalcaddy->cbdata, + _data_release, opalcaddy); + /* if we were collecting all data, then check for any pending + * dmodx requests that we cached and notify them that the + * data has arrived */ + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + while (NULL != (dmdx = (opal_pmix3x_dmx_trkr_t*)opal_list_remove_first(&mca_pmix_pmix3x_component.dmdx))) { + dmdx->cbfunc(PMIX_SUCCESS, NULL, 0, dmdx->cbdata, NULL, NULL); + OBJ_RELEASE(dmdx); + } + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + } else { + OBJ_RELEASE(opalcaddy); + } +} + +static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, + const pmix_info_t info[], size_t ninfo, + char *data, size_t ndata, + pmix_modex_cbfunc_t cbfunc, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy; + size_t n; + opal_namelist_t *nm; + opal_value_t *iptr; + int rc; + + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s FENCE CALLED", OPAL_NAME_PRINT(OPAL_PROC_MY_NAME)); + + if (NULL == host_module || NULL == host_module->fence_nb) { + return PMIX_ERR_NOT_SUPPORTED; + } + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->mdxcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the array of pmix_proc_t to the list of procs */ + for (n=0; n < nprocs; n++) { + nm = OBJ_NEW(opal_namelist_t); + opal_list_append(&opalcaddy->procs, &nm->super); + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, procs[n].nspace))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + nm->name.vpid = pmix3x_convert_rank(procs[n].rank); + } + + /* convert the array of pmix_info_t to the list of info */ + for (n=0; n < ninfo; n++) { + iptr = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &iptr->super); + iptr->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(iptr, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass it up */ + rc = host_module->fence_nb(&opalcaddy->procs, &opalcaddy->info, + data, ndata, opmdx_response, opalcaddy); + if (OPAL_SUCCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + return pmix3x_convert_opalrc(rc); +} + +static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, + const pmix_info_t info[], size_t ninfo, + pmix_modex_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t proc; + opal_value_t *iptr; + size_t n; + opal_pmix3x_dmx_trkr_t *dmdx; + + if (NULL == host_module || NULL == host_module->direct_modex) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* convert the nspace/rank to an opal_process_name_t */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { + return pmix3x_convert_opalrc(rc); + } + proc.vpid = pmix3x_convert_rank(p->rank); + + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s CLIENT %s CALLED DMODX", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + OPAL_NAME_PRINT(proc)); + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->mdxcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* this function should only get called if we are in an async modex. + * If we are also collecting data, then the fence_nb will eventually + * complete and return all the required data down to the pmix + * server beneath us. Thus, we only need to track the dmodex_req + * and ensure that the release gets called once the data has + * arrived - this will trigger the pmix server to tell the + * client that the data is available */ + if (opal_pmix_base_async_modex && opal_pmix_collect_all_data) { + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + dmdx = OBJ_NEW(opal_pmix3x_dmx_trkr_t); + dmdx->cbfunc = cbfunc; + dmdx->cbdata = cbdata; + opal_list_append(&mca_pmix_pmix3x_component.dmdx, &dmdx->super); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + return PMIX_SUCCESS; + } + + /* convert the array of pmix_info_t to the list of info */ + for (n=0; n < ninfo; n++) { + iptr = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &iptr->super); + iptr->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(iptr, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass it up */ + rc = host_module->direct_modex(&proc, &opalcaddy->info, opmdx_response, opalcaddy); + if (OPAL_SUCCESS != rc && OPAL_ERR_IN_PROCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + if (OPAL_ERR_IN_PROCESS == rc) { + rc = OPAL_SUCCESS; + } + return pmix3x_convert_opalrc(rc); +} + +static pmix_status_t server_publish_fn(const pmix_proc_t *p, + const pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + size_t n; + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t proc; + opal_value_t *oinfo; + + if (NULL == host_module || NULL == host_module->publish) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* convert the nspace/rank to an opal_process_name_t */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { + return pmix3x_convert_opalrc(rc); + } + proc.vpid = pmix3x_convert_rank(p->rank); + + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s CLIENT %s CALLED PUBLISH", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + OPAL_NAME_PRINT(proc)); + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->opcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the info array */ + for (n=0; n < ninfo; n++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &oinfo->super); + oinfo->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass it up */ + rc = host_module->publish(&proc, &opalcaddy->info, opal_opcbfunc, opalcaddy); + if (OPAL_SUCCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + + return pmix3x_convert_opalrc(rc); +} + +static void opal_lkupcbfunc(int status, + opal_list_t *data, + void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy = (pmix3x_opalcaddy_t*)cbdata; + pmix_status_t rc; + pmix_pdata_t *d=NULL; + size_t nd=0, n; + opal_pmix_pdata_t *p; + + if (NULL != opalcaddy->lkupcbfunc) { + rc = pmix3x_convert_opalrc(status); + /* convert any returned data */ + if (NULL != data) { + nd = opal_list_get_size(data); + PMIX_PDATA_CREATE(d, nd); + n=0; + OPAL_LIST_FOREACH(p, data, opal_pmix_pdata_t) { + /* convert the jobid */ + (void)opal_snprintf_jobid(d[n].proc.nspace, PMIX_MAX_NSLEN, p->proc.jobid); + d[n].proc.rank = pmix3x_convert_opalrank(p->proc.vpid); + (void)strncpy(d[n].key, p->value.key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&d[n].value, &p->value); + } + } + opalcaddy->lkupcbfunc(rc, d, nd, opalcaddy->cbdata); + PMIX_PDATA_FREE(d, nd); + } + OBJ_RELEASE(opalcaddy); +} + +static pmix_status_t server_lookup_fn(const pmix_proc_t *p, char **keys, + const pmix_info_t info[], size_t ninfo, + pmix_lookup_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t proc; + opal_value_t *iptr; + size_t n; + + if (NULL == host_module || NULL == host_module->lookup) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* convert the nspace/rank to an opal_process_name_t */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { + return pmix3x_convert_opalrc(rc); + } + proc.vpid = pmix3x_convert_rank(p->rank); + + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s CLIENT %s CALLED LOOKUP", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + OPAL_NAME_PRINT(proc)); + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->lkupcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the array of pmix_info_t to the list of info */ + for (n=0; n < ninfo; n++) { + iptr = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &iptr->super); + iptr->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(iptr, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass it up */ + rc = host_module->lookup(&proc, keys, &opalcaddy->info, opal_lkupcbfunc, opalcaddy); + if (OPAL_SUCCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + + return pmix3x_convert_opalrc(rc); +} + + +static pmix_status_t server_unpublish_fn(const pmix_proc_t *p, char **keys, + const pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t proc; + opal_value_t *iptr; + size_t n; + + if (NULL == host_module || NULL == host_module->unpublish) { + return PMIX_SUCCESS; + } + + /* convert the nspace/rank to an opal_process_name_t */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { + return pmix3x_convert_opalrc(rc); + } + proc.vpid = pmix3x_convert_rank(p->rank); + + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s CLIENT %s CALLED UNPUBLISH", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + OPAL_NAME_PRINT(proc)); + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->opcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the array of pmix_info_t to the list of info */ + for (n=0; n < ninfo; n++) { + iptr = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &iptr->super); + iptr->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(iptr, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass it up */ + rc = host_module->unpublish(&proc, keys, &opalcaddy->info, opal_opcbfunc, opalcaddy); + if (OPAL_SUCCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + + return pmix3x_convert_opalrc(rc); +} + +static void opal_spncbfunc(int status, opal_jobid_t jobid, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy = (pmix3x_opalcaddy_t*)cbdata; + pmix_status_t rc; + char nspace[PMIX_MAX_NSLEN]; + + if (NULL != opalcaddy->spwncbfunc) { + rc = pmix3x_convert_opalrc(status); + /* convert the jobid */ + (void)opal_snprintf_jobid(nspace, PMIX_MAX_NSLEN, jobid); + opalcaddy->spwncbfunc(rc, nspace, opalcaddy->cbdata); + } + OBJ_RELEASE(opalcaddy); +} + +static pmix_status_t server_spawn_fn(const pmix_proc_t *p, + const pmix_info_t job_info[], size_t ninfo, + const pmix_app_t apps[], size_t napps, + pmix_spawn_cbfunc_t cbfunc, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t proc; + opal_pmix_app_t *app; + opal_value_t *oinfo; + size_t k, n; + int rc; + + if (NULL == host_module || NULL == host_module->spawn) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* convert the nspace/rank to an opal_process_name_t */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { + return pmix3x_convert_opalrc(rc); + } + proc.vpid = pmix3x_convert_rank(p->rank); + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->spwncbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the job info */ + for (k=0; k < ninfo; k++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &oinfo->super); + oinfo->key = strdup(job_info[k].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &job_info[k].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* convert the apps */ + for (n=0; n < napps; n++) { + app = OBJ_NEW(opal_pmix_app_t); + opal_list_append(&opalcaddy->apps, &app->super); + if (NULL != apps[n].cmd) { + app->cmd = strdup(apps[n].cmd); + } + if (NULL != apps[n].argv) { + app->argv = opal_argv_copy(apps[n].argv); + } + if (NULL != apps[n].env) { + app->env = opal_argv_copy(apps[n].env); + } + if (NULL != apps[n].cwd) { + app->cwd = strdup(apps[n].cwd); + } + app->maxprocs = apps[n].maxprocs; + for (k=0; k < apps[n].ninfo; k++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&app->info, &oinfo->super); + oinfo->key = strdup(apps[n].info[k].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &apps[n].info[k].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + } + + /* pass it up */ + rc = host_module->spawn(&proc, &opalcaddy->info, &opalcaddy->apps, opal_spncbfunc, opalcaddy); + if (OPAL_SUCCESS != rc) { + OPAL_ERROR_LOG(rc); + OBJ_RELEASE(opalcaddy); + } + + return pmix3x_convert_opalrc(rc); +} + + +static void cnopcbfunc(int status, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy = (pmix3x_opalcaddy_t*)cbdata; + + if (NULL != opalcaddy->cnctcbfunc) { + opalcaddy->cnctcbfunc(pmix3x_convert_opalrc(status), + "1234", 0, opalcaddy->cbdata); + } + OBJ_RELEASE(opalcaddy); +} + +static pmix_status_t server_connect_fn(const pmix_proc_t procs[], size_t nprocs, + const pmix_info_t info[], size_t ninfo, + pmix_connect_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + pmix3x_opalcaddy_t *opalcaddy; + opal_namelist_t *nm; + size_t n; + opal_value_t *oinfo; + + if (NULL == host_module || NULL == host_module->connect) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->cnctcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the array of pmix_proc_t to the list of procs */ + for (n=0; n < nprocs; n++) { + nm = OBJ_NEW(opal_namelist_t); + opal_list_append(&opalcaddy->procs, &nm->super); + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, procs[n].nspace))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + nm->name.vpid = pmix3x_convert_rank(procs[n].rank); + } + + /* convert the info */ + for (n=0; n < ninfo; n++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &oinfo->super); + oinfo->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass it up */ + rc = host_module->connect(&opalcaddy->procs, &opalcaddy->info, cnopcbfunc, opalcaddy); + if (OPAL_SUCCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + + return pmix3x_convert_opalrc(rc); +} + + +static pmix_status_t server_disconnect_fn(const char nspace[], + const pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + int rc; + pmix3x_opalcaddy_t *opalcaddy; + opal_namelist_t *nm; + size_t n; + opal_value_t *oinfo; + + if (NULL == host_module || NULL == host_module->disconnect) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->opcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the nspace */ + nm = OBJ_NEW(opal_namelist_t); + opal_list_append(&opalcaddy->procs, &nm->super); + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, nspace))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + nm->name.vpid = OPAL_VPID_WILDCARD; + + /* convert the info */ + for (n=0; n < ninfo; n++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &oinfo->super); + oinfo->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass it up */ + rc = host_module->disconnect(&opalcaddy->procs, &opalcaddy->info, opal_opcbfunc, opalcaddy); + if (OPAL_SUCCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + + return pmix3x_convert_opalrc(rc); +} + +static pmix_status_t server_register_events(pmix_status_t *codes, size_t ncodes, + const pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy; + size_t n; + opal_value_t *oinfo; + int rc; + + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s REGISTER EVENTS", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME)); + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->opcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the info */ + for (n=0; n < ninfo; n++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &oinfo->super); + oinfo->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass it up */ + rc = host_module->register_events(&opalcaddy->info, opal_opcbfunc, opalcaddy); + if (OPAL_SUCCESS != rc) { + OBJ_RELEASE(opalcaddy); + } + + return pmix3x_convert_opalrc(rc); +} + +static pmix_status_t server_deregister_events(pmix_status_t *codes, size_t ncodes, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s DEREGISTER EVENTS", OPAL_NAME_PRINT(OPAL_PROC_MY_NAME)); + + return PMIX_ERR_NOT_SUPPORTED; +} + +static pmix_status_t server_notify_event(pmix_status_t code, + const pmix_proc_t *source, + pmix_data_range_t range, + pmix_info_t info[], size_t ninfo, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t src; + size_t n; + opal_value_t *oinfo; + int rc, status; + + if (NULL == host_module || NULL == host_module->notify_event) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->opcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the code */ + status = pmix3x_convert_rc(code); + + /* convert the source */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&src.jobid, source->nspace))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + src.vpid = pmix3x_convert_rank(source->rank); + + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s CLIENT %s CALLED NOTIFY", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + OPAL_NAME_PRINT(src)); + + /* ignore the range for now */ + + /* convert the info */ + for (n=0; n < ninfo; n++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &oinfo->super); + oinfo->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* send it upstairs */ + if (OPAL_SUCCESS != (rc = host_module->notify_event(status, &src, &opalcaddy->info, + opal_opcbfunc, opalcaddy))) { + OBJ_RELEASE(opalcaddy); + } + return pmix3x_convert_opalrc(rc); +} + +static void _info_rel(void *cbdata) +{ + pmix3x_opcaddy_t *pcaddy = (pmix3x_opcaddy_t*)cbdata; + + OBJ_RELEASE(pcaddy); +} +static void info_cbfunc(int status, + opal_list_t *info, + void *cbdata, + opal_pmix_release_cbfunc_t release_fn, + void *release_cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy = (pmix3x_opalcaddy_t*)cbdata; + pmix3x_opcaddy_t *pcaddy; + opal_value_t *kv; + size_t n; + + pcaddy = OBJ_NEW(pmix3x_opcaddy_t); + + /* convert the status */ + pcaddy->status = pmix3x_convert_opalrc(status); + + /* convert the list to a pmix_info_t array */ + if (NULL != info && 0 < (pcaddy->ninfo = opal_list_get_size(info))) { + PMIX_INFO_CREATE(pcaddy->info, pcaddy->ninfo); + n = 0; + OPAL_LIST_FOREACH(kv, info, opal_value_t) { + (void)strncpy(pcaddy->info[n].key, kv->key, PMIX_MAX_KEYLEN); + pmix3x_value_load(&pcaddy->info[n].value, kv); + } + } + /* we are done with the incoming data */ + if (NULL != release_fn) { + release_fn(release_cbdata); + } + + /* provide the answer downward */ + if (NULL != opalcaddy->infocbfunc) { + opalcaddy->infocbfunc(pcaddy->status, pcaddy->info, pcaddy->ninfo, + opalcaddy->cbdata, _info_rel, pcaddy); + } + OBJ_RELEASE(opalcaddy); +} + +static pmix_status_t server_query(pmix_proc_t *proct, + pmix_query_t *queries, size_t nqueries, + pmix_info_cbfunc_t cbfunc, + void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t requestor; + int rc; + size_t n, m; + opal_pmix_query_t *q; + opal_value_t *oinfo; + + if (NULL == host_module || NULL == host_module->query) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->infocbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the requestor */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&requestor.jobid, proct->nspace))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + requestor.vpid = pmix3x_convert_rank(proct->rank); + + opal_output_verbose(3, opal_pmix_base_framework.framework_output, + "%s CLIENT %s CALLED QUERY", + OPAL_NAME_PRINT(OPAL_PROC_MY_NAME), + OPAL_NAME_PRINT(requestor)); + + /* convert the queries */ + for (n=0; n < nqueries; n++) { + q = OBJ_NEW(opal_pmix_query_t); + /* we "borrow" the info field of the caddy as we and the + * server function both agree on what will be there */ + opal_list_append(&opalcaddy->info, &q->super); + q->keys = opal_argv_copy(queries[n].keys); + for (m=0; m < queries[n].nqual; m++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&q->qualifiers, &oinfo->super); + oinfo->key = strdup(queries[n].qualifiers[m].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &queries[n].qualifiers[m].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + } + + /* pass the call upwards */ + if (OPAL_SUCCESS != (rc = host_module->query(&requestor, + &opalcaddy->info, + info_cbfunc, opalcaddy))) { + OBJ_RELEASE(opalcaddy); + } + + return pmix3x_convert_opalrc(rc); +} + +static void toolcbfunc(int status, + opal_process_name_t proc, + void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy = (pmix3x_opalcaddy_t*)cbdata; + pmix_status_t rc; + pmix_proc_t p; + opal_pmix3x_jobid_trkr_t *job; + + /* convert the status */ + rc = pmix3x_convert_opalrc(status); + + memset(&p, 0, sizeof(pmix_proc_t)); + if (OPAL_SUCCESS == status) { + /* convert the process name */ + (void)opal_snprintf_jobid(p.nspace, PMIX_MAX_NSLEN, proc.jobid); + p.rank = pmix3x_convert_opalrank(proc.vpid); + /* store this job in our list of known nspaces */ + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); + (void)strncpy(job->nspace, p.nspace, PMIX_MAX_NSLEN); + job->jobid = proc.jobid; + OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); + OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); + } + + /* pass it down */ + if (NULL != opalcaddy->toolcbfunc) { + opalcaddy->toolcbfunc(rc, &p, opalcaddy->cbdata); + } + OBJ_RELEASE(opalcaddy); +} + +static void server_tool_connection(pmix_info_t *info, size_t ninfo, + pmix_tool_connection_cbfunc_t cbfunc, + void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy; + size_t n; + opal_value_t *oinfo; + int rc; + pmix_status_t err; + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->toolcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the info */ + for (n=0; n < ninfo; n++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &oinfo->super); + oinfo->key = strdup(info[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &info[n].value))) { + OBJ_RELEASE(opalcaddy); + err = pmix3x_convert_opalrc(rc); + if (NULL != cbfunc) { + cbfunc(err, NULL, cbdata); + } + } + } + + /* pass it up */ + host_module->tool_connected(&opalcaddy->info, toolcbfunc, opalcaddy); +} + +static void server_log(const pmix_proc_t *proct, + const pmix_info_t data[], size_t ndata, + const pmix_info_t directives[], size_t ndirs, + pmix_op_cbfunc_t cbfunc, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t requestor; + int rc; + size_t n; + opal_value_t *oinfo; + pmix_status_t ret; + + if (NULL == host_module || NULL == host_module->log) { + if (NULL != cbfunc) { + cbfunc(PMIX_ERR_NOT_SUPPORTED, cbdata); + } + return; + } + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->opcbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the requestor */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&requestor.jobid, proct->nspace))) { + OBJ_RELEASE(opalcaddy); + ret = pmix3x_convert_opalrc(rc); + if (NULL != cbfunc) { + cbfunc(ret, cbdata); + } + return; + } + requestor.vpid = pmix3x_convert_rank(proct->rank); + + /* convert the data */ + for (n=0; n < ndata; n++) { + oinfo = OBJ_NEW(opal_value_t); + oinfo->key = strdup(data[n].key); + /* we "borrow" the info field of the caddy as we and the + * server function both agree on what will be there */ + opal_list_append(&opalcaddy->info, &oinfo->super); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &data[n].value))) { + OBJ_RELEASE(opalcaddy); + ret = pmix3x_convert_opalrc(rc); + if (NULL != cbfunc) { + cbfunc(ret, cbdata); + } + return; + } + } + + /* convert the directives */ + for (n=0; n < ndirs; n++) { + oinfo = OBJ_NEW(opal_value_t); + /* we "borrow" the apps field of the caddy as we and the + * server function both agree on what will be there */ + opal_list_append(&opalcaddy->apps, &oinfo->super); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &directives[n].value))) { + OBJ_RELEASE(opalcaddy); + ret = pmix3x_convert_opalrc(rc); + if (NULL != cbfunc) { + cbfunc(ret, cbdata); + } + return; + } + } + + /* pass the call upwards */ + host_module->log(&requestor, + &opalcaddy->info, + &opalcaddy->apps, + opal_opcbfunc, opalcaddy); +} + +static pmix_status_t server_allocate(const pmix_proc_t *proct, + pmix_alloc_directive_t directive, + const pmix_info_t data[], size_t ndata, + pmix_info_cbfunc_t cbfunc, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t requestor; + int rc; + size_t n; + opal_value_t *oinfo; + opal_pmix_alloc_directive_t odir; + + if (NULL == host_module || NULL == host_module->allocate) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->infocbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the requestor */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&requestor.jobid, proct->nspace))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + requestor.vpid = pmix3x_convert_rank(proct->rank); + + /* convert the directive */ + odir = pmix3x_convert_allocdir(directive); + + /* convert the data */ + for (n=0; n < ndata; n++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &oinfo->super); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &data[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass the call upwards */ + if (OPAL_SUCCESS != (rc = host_module->allocate(&requestor, odir, + &opalcaddy->info, + info_cbfunc, opalcaddy))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + + return PMIX_SUCCESS; + +} + +static pmix_status_t server_job_control(const pmix_proc_t *proct, + const pmix_proc_t targets[], size_t ntargets, + const pmix_info_t directives[], size_t ndirs, + pmix_info_cbfunc_t cbfunc, void *cbdata) +{ + pmix3x_opalcaddy_t *opalcaddy; + opal_process_name_t requestor; + int rc; + size_t n; + opal_value_t *oinfo; + opal_namelist_t *nm; + + if (NULL == host_module || NULL == host_module->job_control) { + return PMIX_ERR_NOT_SUPPORTED; + } + + /* setup the caddy */ + opalcaddy = OBJ_NEW(pmix3x_opalcaddy_t); + opalcaddy->infocbfunc = cbfunc; + opalcaddy->cbdata = cbdata; + + /* convert the requestor */ + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&requestor.jobid, proct->nspace))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + requestor.vpid = pmix3x_convert_rank(proct->rank); + + /* convert the targets */ + for (n=0; n < ntargets; n++) { + nm = OBJ_NEW(opal_namelist_t); + opal_list_append(&opalcaddy->procs, &nm->super); + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, targets[n].nspace))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + nm->name.vpid = pmix3x_convert_rank(targets[n].rank); + } + + /* convert the directives */ + for (n=0; n < ndirs; n++) { + oinfo = OBJ_NEW(opal_value_t); + opal_list_append(&opalcaddy->info, &oinfo->super); + oinfo->key = strdup(directives[n].key); + if (OPAL_SUCCESS != (rc = pmix3x_value_unload(oinfo, &directives[n].value))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + } + + /* pass the call upwards */ + if (OPAL_SUCCESS != (rc = host_module->job_control(&requestor, + &opalcaddy->procs, + &opalcaddy->info, + info_cbfunc, opalcaddy))) { + OBJ_RELEASE(opalcaddy); + return pmix3x_convert_opalrc(rc); + } + + return PMIX_SUCCESS; +} diff --git a/opal/mca/pmix/pmix2x/pmix2x_server_south.c b/opal/mca/pmix/pmix3x/pmix3x_server_south.c similarity index 83% rename from opal/mca/pmix/pmix2x/pmix2x_server_south.c rename to opal/mca/pmix/pmix3x/pmix3x_server_south.c index 7917d60180..33cf3a802c 100644 --- a/opal/mca/pmix/pmix2x/pmix2x_server_south.c +++ b/opal/mca/pmix/pmix3x/pmix3x_server_south.c @@ -40,7 +40,7 @@ #include "opal/util/proc.h" #include "opal/util/show_help.h" #include "opal/mca/pmix/base/base.h" -#include "pmix2x.h" +#include "pmix3x.h" #include "pmix.h" #include "pmix_server.h" @@ -58,7 +58,7 @@ static void errreg_cbfunc (pmix_status_t status, size_t errhandler_ref, void *cbdata) { - opal_pmix2x_event_t *ev = (opal_pmix2x_event_t*)cbdata; + opal_pmix3x_event_t *ev = (opal_pmix3x_event_t*)cbdata; OPAL_ACQUIRE_OBJECT(ev); ev->index = errhandler_ref; @@ -71,12 +71,12 @@ static void errreg_cbfunc (pmix_status_t status, static void opcbfunc(pmix_status_t status, void *cbdata) { - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; OPAL_ACQUIRE_OBJECT(op); if (NULL != op->opcbfunc) { - op->opcbfunc(pmix2x_convert_rc(status), op->cbdata); + op->opcbfunc(pmix3x_convert_rc(status), op->cbdata); } OBJ_RELEASE(op); } @@ -89,7 +89,7 @@ static void lkcbfunc(pmix_status_t status, void *cbdata) OPAL_PMIX_WAKEUP_THREAD(lk); } -int pmix2x_server_init(opal_pmix_server_module_t *module, +int pmix3x_server_init(opal_pmix_server_module_t *module, opal_list_t *info) { pmix_status_t rc; @@ -97,8 +97,8 @@ int pmix2x_server_init(opal_pmix_server_module_t *module, opal_value_t *kv; pmix_info_t *pinfo; size_t sz, n; - opal_pmix2x_event_t *event; - opal_pmix2x_jobid_trkr_t *job; + opal_pmix3x_event_t *event; + opal_pmix3x_jobid_trkr_t *job; opal_pmix_lock_t lk; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); @@ -109,7 +109,7 @@ int pmix2x_server_init(opal_pmix_server_module_t *module, putenv(dbgvalue); } /* check the evars for a mismatch */ - if (OPAL_SUCCESS != (dbg = opal_pmix_pmix2x_check_evars())) { + if (OPAL_SUCCESS != (dbg = opal_pmix_pmix3x_check_evars())) { OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); return dbg; } @@ -123,17 +123,17 @@ int pmix2x_server_init(opal_pmix_server_module_t *module, if (NULL != info) { OPAL_LIST_FOREACH(kv, info, opal_value_t) { (void)strncpy(pinfo[n].key, kv->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&pinfo[n].value, kv); + pmix3x_value_load(&pinfo[n].value, kv); ++n; } } /* insert ourselves into our list of jobids - it will be the * first, and so we'll check it first */ - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); (void)opal_snprintf_jobid(job->nspace, PMIX_MAX_NSLEN, OPAL_PROC_MY_NAME.jobid); job->jobid = OPAL_PROC_MY_NAME.jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* add our nspace and rank to the array going down to the PMIx server */ @@ -141,7 +141,7 @@ int pmix2x_server_init(opal_pmix_server_module_t *module, PMIX_INFO_LOAD(&pinfo[sz-1], PMIX_SERVER_RANK, &OPAL_PROC_MY_NAME.vpid, PMIX_PROC_RANK); if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule, pinfo, sz))) { PMIX_INFO_FREE(pinfo, sz); - return pmix2x_convert_rc(rc); + return pmix3x_convert_rc(rc); } PMIX_INFO_FREE(pinfo, sz); @@ -149,11 +149,11 @@ int pmix2x_server_init(opal_pmix_server_module_t *module, host_module = module; /* register the default event handler */ - event = OBJ_NEW(opal_pmix2x_event_t); - opal_list_append(&mca_pmix_pmix2x_component.events, &event->super); + event = OBJ_NEW(opal_pmix3x_event_t); + opal_list_append(&mca_pmix_pmix3x_component.events, &event->super); PMIX_INFO_CREATE(pinfo, 1); PMIX_INFO_LOAD(&pinfo[0], PMIX_EVENT_HDLR_NAME, "OPAL-PMIX-2X-SERVER-DEFAULT", PMIX_STRING); - PMIx_Register_event_handler(NULL, 0, pinfo, 1, pmix2x_event_hdlr, errreg_cbfunc, (void*)event); + PMIx_Register_event_handler(NULL, 0, pinfo, 1, pmix3x_event_hdlr, errreg_cbfunc, (void*)event); OPAL_PMIX_WAIT_THREAD(&event->lock); PMIX_INFO_FREE(pinfo, 1); @@ -172,36 +172,36 @@ int pmix2x_server_init(opal_pmix_server_module_t *module, static void dereg_cbfunc(pmix_status_t st, void *cbdata) { - opal_pmix2x_event_t *ev = (opal_pmix2x_event_t*)cbdata; + opal_pmix3x_event_t *ev = (opal_pmix3x_event_t*)cbdata; OPAL_PMIX_WAKEUP_THREAD(&ev->lock); } -int pmix2x_server_finalize(void) +int pmix3x_server_finalize(void) { pmix_status_t rc; - opal_pmix2x_event_t *event, *ev2; + opal_pmix3x_event_t *event, *ev2; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); --opal_pmix_base.initialized; if (0 < opal_pmix_base.initialized) { /* deregister all event handlers */ - OPAL_LIST_FOREACH_SAFE(event, ev2, &mca_pmix_pmix2x_component.events, opal_pmix2x_event_t) { + OPAL_LIST_FOREACH_SAFE(event, ev2, &mca_pmix_pmix3x_component.events, opal_pmix3x_event_t) { OPAL_PMIX_DESTRUCT_LOCK(&event->lock); OPAL_PMIX_CONSTRUCT_LOCK(&event->lock); PMIx_Deregister_event_handler(event->index, dereg_cbfunc, (void*)event); OPAL_PMIX_WAIT_THREAD(&event->lock); - opal_list_remove_item(&mca_pmix_pmix2x_component.events, &event->super); + opal_list_remove_item(&mca_pmix_pmix3x_component.events, &event->super); OBJ_RELEASE(event); } } OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); rc = PMIx_server_finalize(); - return pmix2x_convert_rc(rc); + return pmix3x_convert_rc(rc); } -int pmix2x_server_gen_regex(const char *input, char **regex) +int pmix3x_server_gen_regex(const char *input, char **regex) { pmix_status_t rc; @@ -213,11 +213,11 @@ int pmix2x_server_gen_regex(const char *input, char **regex) OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); rc = PMIx_generate_regex(input, regex); - return pmix2x_convert_rc(rc); + return pmix3x_convert_rc(rc); } -int pmix2x_server_gen_ppn(const char *input, char **ppn) +int pmix3x_server_gen_ppn(const char *input, char **ppn) { pmix_status_t rc; @@ -229,10 +229,10 @@ int pmix2x_server_gen_ppn(const char *input, char **ppn) OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); rc = PMIx_generate_ppn(input, ppn); - return pmix2x_convert_rc(rc); + return pmix3x_convert_rc(rc); } -int pmix2x_server_register_nspace(opal_jobid_t jobid, +int pmix3x_server_register_nspace(opal_jobid_t jobid, int nlocalprocs, opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, @@ -244,7 +244,7 @@ int pmix2x_server_register_nspace(opal_jobid_t jobid, char nspace[PMIX_MAX_NSLEN]; pmix_status_t rc; opal_list_t *pmapinfo; - opal_pmix2x_jobid_trkr_t *job; + opal_pmix3x_jobid_trkr_t *job; opal_pmix_lock_t lock; int ret; @@ -258,10 +258,10 @@ int pmix2x_server_register_nspace(opal_jobid_t jobid, (void)opal_snprintf_jobid(nspace, PMIX_MAX_NSLEN, jobid); /* store this job in our list of known nspaces */ - job = OBJ_NEW(opal_pmix2x_jobid_trkr_t); + job = OBJ_NEW(opal_pmix3x_jobid_trkr_t); (void)strncpy(job->nspace, nspace, PMIX_MAX_NSLEN); job->jobid = jobid; - opal_list_append(&mca_pmix_pmix2x_component.jobids, &job->super); + opal_list_append(&mca_pmix_pmix3x_component.jobids, &job->super); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* convert the list to an array of pmix_info_t */ @@ -285,13 +285,13 @@ int pmix2x_server_register_nspace(opal_jobid_t jobid, m = 0; OPAL_LIST_FOREACH(k2, pmapinfo, opal_value_t) { (void)strncpy(pmap[m].key, k2->key, PMIX_MAX_KEYLEN); - pmix2x_value_load(&pmap[m].value, k2); + pmix3x_value_load(&pmap[m].value, k2); ++m; } } OPAL_LIST_RELEASE(pmapinfo); } else { - pmix2x_value_load(&pinfo[n].value, kv); + pmix3x_value_load(&pinfo[n].value, kv); } ++n; } @@ -312,7 +312,7 @@ int pmix2x_server_register_nspace(opal_jobid_t jobid, PMIX_INFO_FREE(pinfo, sz); } - ret = pmix2x_convert_rc(rc); + ret = pmix3x_convert_rc(rc); /* release the caller */ if (NULL != cbfunc) { @@ -321,11 +321,11 @@ int pmix2x_server_register_nspace(opal_jobid_t jobid, return ret; } -void pmix2x_server_deregister_nspace(opal_jobid_t jobid, +void pmix3x_server_deregister_nspace(opal_jobid_t jobid, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { - opal_pmix2x_jobid_trkr_t *jptr; + opal_pmix3x_jobid_trkr_t *jptr; opal_pmix_lock_t lock; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); @@ -339,7 +339,7 @@ void pmix2x_server_deregister_nspace(opal_jobid_t jobid, } /* if we don't already have it, we can ignore this */ - OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix2x_component.jobids, opal_pmix2x_jobid_trkr_t) { + OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { if (jptr->jobid == jobid) { /* found it - tell the server to deregister */ OPAL_PMIX_CONSTRUCT_LOCK(&lock); @@ -349,7 +349,7 @@ void pmix2x_server_deregister_nspace(opal_jobid_t jobid, OPAL_PMIX_DESTRUCT_LOCK(&lock); /* now get rid of it from our list */ OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); - opal_list_remove_item(&mca_pmix_pmix2x_component.jobids, &jptr->super); + opal_list_remove_item(&mca_pmix_pmix3x_component.jobids, &jptr->super); OBJ_RELEASE(jptr); break; } @@ -362,7 +362,7 @@ void pmix2x_server_deregister_nspace(opal_jobid_t jobid, } } -int pmix2x_server_register_client(const opal_process_name_t *proc, +int pmix3x_server_register_client(const opal_process_name_t *proc, uid_t uid, gid_t gid, void *server_object, opal_pmix_op_cbfunc_t cbfunc, @@ -381,7 +381,7 @@ int pmix2x_server_register_client(const opal_process_name_t *proc, /* convert the jobid */ (void)opal_snprintf_jobid(p.nspace, PMIX_MAX_NSLEN, proc->jobid); - p.rank = pmix2x_convert_opalrank(proc->vpid); + p.rank = pmix3x_convert_opalrank(proc->vpid); OPAL_PMIX_CONSTRUCT_LOCK(&lock); rc = PMIx_server_register_client(&p, uid, gid, server_object, @@ -390,16 +390,16 @@ int pmix2x_server_register_client(const opal_process_name_t *proc, OPAL_PMIX_WAIT_THREAD(&lock); } OPAL_PMIX_DESTRUCT_LOCK(&lock); - return pmix2x_convert_rc(rc); + return pmix3x_convert_rc(rc); } /* tell the local PMIx server to cleanup this client as it is * done executing */ -void pmix2x_server_deregister_client(const opal_process_name_t *proc, +void pmix3x_server_deregister_client(const opal_process_name_t *proc, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { - opal_pmix2x_jobid_trkr_t *jptr; + opal_pmix3x_jobid_trkr_t *jptr; pmix_proc_t p; opal_pmix_lock_t lock; @@ -413,11 +413,11 @@ void pmix2x_server_deregister_client(const opal_process_name_t *proc, } /* if we don't already have it, we can ignore this */ - OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix2x_component.jobids, opal_pmix2x_jobid_trkr_t) { + OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { if (jptr->jobid == proc->jobid) { /* found it - tell the server to deregister */ (void)strncpy(p.nspace, jptr->nspace, PMIX_MAX_NSLEN); - p.rank = pmix2x_convert_opalrank(proc->vpid); + p.rank = pmix3x_convert_opalrank(proc->vpid); OPAL_PMIX_CONSTRUCT_LOCK(&lock); OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); PMIx_server_deregister_client(&p, lkcbfunc, (void*)&lock); @@ -434,7 +434,7 @@ void pmix2x_server_deregister_client(const opal_process_name_t *proc, } /* have the local PMIx server setup the environment for this client */ -int pmix2x_server_setup_fork(const opal_process_name_t *proc, char ***env) +int pmix3x_server_setup_fork(const opal_process_name_t *proc, char ***env) { pmix_status_t rc; pmix_proc_t p; @@ -448,10 +448,10 @@ int pmix2x_server_setup_fork(const opal_process_name_t *proc, char ***env) /* convert the jobid */ (void)opal_snprintf_jobid(p.nspace, PMIX_MAX_NSLEN, proc->jobid); - p.rank = pmix2x_convert_opalrank(proc->vpid); + p.rank = pmix3x_convert_opalrank(proc->vpid); rc = PMIx_server_setup_fork(&p, env); - return pmix2x_convert_rc(rc); + return pmix3x_convert_rc(rc); } /* this is the call back up from the embedded PMIx server that @@ -460,9 +460,9 @@ int pmix2x_server_setup_fork(const opal_process_name_t *proc, char ***env) static void dmdx_response(pmix_status_t status, char *data, size_t sz, void *cbdata) { int rc; - pmix2x_opcaddy_t *op = (pmix2x_opcaddy_t*)cbdata; + pmix3x_opcaddy_t *op = (pmix3x_opcaddy_t*)cbdata; - rc = pmix2x_convert_rc(status); + rc = pmix3x_convert_rc(status); if (NULL != op->mdxcbfunc) { op->mdxcbfunc(rc, data, sz, op->cbdata, NULL, NULL); } @@ -470,10 +470,10 @@ static void dmdx_response(pmix_status_t status, char *data, size_t sz, void *cbd } /* request modex data for a local proc from the PMIx server */ -int pmix2x_server_dmodex(const opal_process_name_t *proc, +int pmix3x_server_dmodex(const opal_process_name_t *proc, opal_pmix_modex_cbfunc_t cbfunc, void *cbdata) { - pmix2x_opcaddy_t *op; + pmix3x_opcaddy_t *op; pmix_status_t rc; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); @@ -484,24 +484,24 @@ int pmix2x_server_dmodex(const opal_process_name_t *proc, OPAL_PMIX_RELEASE_THREAD(&opal_pmix_base.lock); /* setup the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(pmix3x_opcaddy_t); op->mdxcbfunc = cbfunc; op->cbdata = cbdata; /* convert the jobid */ (void)opal_snprintf_jobid(op->p.nspace, PMIX_MAX_NSLEN, proc->jobid); - op->p.rank = pmix2x_convert_opalrank(proc->vpid); + op->p.rank = pmix3x_convert_opalrank(proc->vpid); /* find the internally-cached data for this proc */ rc = PMIx_server_dmodex_request(&op->p, dmdx_response, op); if (PMIX_SUCCESS != rc) { OBJ_RELEASE(op); } - return pmix2x_convert_rc(rc); + return pmix3x_convert_rc(rc); } /* tell the PMIx server to notify its local clients of an event */ -int pmix2x_server_notify_event(int status, +int pmix3x_server_notify_event(int status, const opal_process_name_t *source, opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) @@ -510,7 +510,7 @@ int pmix2x_server_notify_event(int status, pmix_info_t *pinfo; size_t sz, n; pmix_status_t rc; - pmix2x_opcaddy_t *op; + pmix3x_opcaddy_t *op; OPAL_PMIX_ACQUIRE_THREAD(&opal_pmix_base.lock); if (0 >= opal_pmix_base.initialized) { @@ -527,9 +527,9 @@ int pmix2x_server_notify_event(int status, (void)strncpy(pinfo[n].key, kv->key, PMIX_MAX_KEYLEN); if (0 == strcmp(kv->key, OPAL_PMIX_JOB_TERM_STATUS)) { pinfo[n].value.type = PMIX_STATUS; - pinfo[n].value.data.status = pmix2x_convert_opalrc(kv->data.integer); + pinfo[n].value.data.status = pmix3x_convert_opalrc(kv->data.integer); } else { - pmix2x_value_load(&pinfo[n].value, kv); + pmix3x_value_load(&pinfo[n].value, kv); } ++n; } @@ -538,7 +538,7 @@ int pmix2x_server_notify_event(int status, pinfo = NULL; } /* setup the caddy */ - op = OBJ_NEW(pmix2x_opcaddy_t); + op = OBJ_NEW(pmix3x_opcaddy_t); op->info = pinfo; op->sz = sz; op->opcbfunc = cbfunc; @@ -546,14 +546,14 @@ int pmix2x_server_notify_event(int status, /* convert the jobid */ if (NULL == source) { (void)opal_snprintf_jobid(op->p.nspace, PMIX_MAX_NSLEN, OPAL_JOBID_INVALID); - op->p.rank = pmix2x_convert_opalrank(OPAL_VPID_INVALID); + op->p.rank = pmix3x_convert_opalrank(OPAL_VPID_INVALID); } else { (void)opal_snprintf_jobid(op->p.nspace, PMIX_MAX_NSLEN, source->jobid); - op->p.rank = pmix2x_convert_opalrank(source->vpid); + op->p.rank = pmix3x_convert_opalrank(source->vpid); } - rc = pmix2x_convert_opalrc(status); + rc = pmix3x_convert_opalrc(status); /* the range must be nonlocal so the server will pass * the event down to its local clients */ rc = PMIx_Notify_event(rc, &op->p, PMIX_RANGE_SESSION, @@ -561,5 +561,5 @@ int pmix2x_server_notify_event(int status, if (PMIX_SUCCESS != rc) { OBJ_RELEASE(op); } - return pmix2x_convert_rc(rc); + return pmix3x_convert_rc(rc); } diff --git a/orte/mca/grpcomm/base/grpcomm_base_stubs.c b/orte/mca/grpcomm/base/grpcomm_base_stubs.c index b787a50291..cc805185e2 100644 --- a/orte/mca/grpcomm/base/grpcomm_base_stubs.c +++ b/orte/mca/grpcomm/base/grpcomm_base_stubs.c @@ -178,6 +178,11 @@ static void allgather_stub(int fd, short args, void *cbdata) return; } coll = orte_grpcomm_base_get_tracker(cd->sig, true); + if (NULL == coll) { + OBJ_RELEASE(cd->sig); + OBJ_RELEASE(cd); + return; + } OBJ_RELEASE(cd->sig); coll->cbfunc = cd->cbfunc; coll->cbdata = cd->cbdata; diff --git a/orte/test/mpi/intercomm_create.c b/orte/test/mpi/intercomm_create.c index df9c5be650..b572f7842c 100644 --- a/orte/test/mpi/intercomm_create.c +++ b/orte/test/mpi/intercomm_create.c @@ -65,7 +65,6 @@ main(int argc, char *argv[]) } /* All done */ - MPI_Finalize(); return 0; } @@ -171,4 +170,3 @@ do_target(char* argv[], MPI_Comm parent) MPI_Comm_disconnect(&parent); } -