diff --git a/orte/Makefile.am b/orte/Makefile.am index bbdcea9093..0e0ea22c86 100644 --- a/orte/Makefile.am +++ b/orte/Makefile.am @@ -46,6 +46,7 @@ liborte_la_LIBADD = \ mca/rmgr/base/libmca_orte_rmgr_base.la $(MCA_rmgr_STATIC_LTLIBS) \ mca/rml/base/libmca_rml_base.la $(MCA_rml_STATIC_LTLIBS) \ mca/schema/base/libmca_schema_base.la $(MCA_schema_STATIC_LTLIBS) \ + mca/sds/base/libmca_sds_base.la $(MCA_sds_STATIC_LTLIBS) \ mca/soh/base/libmca_soh_base.la $(MCA_soh_STATIC_LTLIBS) \ runtime/libruntime.la \ util/liborteutil.la diff --git a/orte/dynamic-mca/Makefile.am b/orte/dynamic-mca/Makefile.am index a8246c3c84..56e8b7fbb3 100644 --- a/orte/dynamic-mca/Makefile.am +++ b/orte/dynamic-mca/Makefile.am @@ -29,4 +29,5 @@ SUBDIRS = \ rmgr \ rml \ schema \ + sds \ soh diff --git a/orte/dynamic-mca/sds/Makefile.am b/orte/dynamic-mca/sds/Makefile.am new file mode 100644 index 0000000000..79d533e378 --- /dev/null +++ b/orte/dynamic-mca/sds/Makefile.am @@ -0,0 +1,26 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +include $(top_srcdir)/config/Makefile.options + +SUBDIRS = $(MCA_sds_DSO_SUBDIRS) +DISTCLEANFILES = $(SUBDIRS) + +# Every directory under here is a sym link to something in the main +# src/mca tree. Hence, we don't want to distribute anything under +# here. + +DIST_SUBDIRS = diff --git a/orte/mca/Makefile.am b/orte/mca/Makefile.am index a8246c3c84..56e8b7fbb3 100644 --- a/orte/mca/Makefile.am +++ b/orte/mca/Makefile.am @@ -29,4 +29,5 @@ SUBDIRS = \ rmgr \ rml \ schema \ + sds \ soh diff --git a/orte/mca/ns/base/Makefile.am b/orte/mca/ns/base/Makefile.am index 4ffc8836e9..d2b2ede6f9 100644 --- a/orte/mca/ns/base/Makefile.am +++ b/orte/mca/ns/base/Makefile.am @@ -25,7 +25,6 @@ AM_CPPFLAGS = -I$(top_builddir)/src # Source code files headers = \ - ns_base_nds.h \ base.h # Library @@ -35,10 +34,7 @@ libmca_ns_base_la_SOURCES = \ ns_base_close.c \ ns_base_select.c \ ns_base_open.c \ - ns_base_nds.c \ - ns_base_nds_bproc.c \ - ns_base_nds_env.c \ - ns_base_nds_pipe.c \ + ns_base_nds.c \ ns_base_local_fns.c \ data_type_support/ns_data_type_packing_fns.c \ data_type_support/ns_data_type_unpacking_fns.c diff --git a/orte/mca/ns/base/base.h b/orte/mca/ns/base/base.h index 0f6510fc1d..f3e1320bcb 100644 --- a/orte/mca/ns/base/base.h +++ b/orte/mca/ns/base/base.h @@ -147,8 +147,6 @@ OMPI_DECLSPEC int orte_ns_base_define_data_type_not_available( OMPI_DECLSPEC int orte_ns_base_create_my_name_not_available(void); /* Base functions used everywhere */ -OMPI_DECLSPEC int orte_ns_base_set_my_name(void); - OMPI_DECLSPEC int orte_ns_base_get_peers(orte_process_name_t **procs, size_t *num_procs, size_t *self); diff --git a/orte/mca/ns/base/ns_base_nds.c b/orte/mca/ns/base/ns_base_nds.c index acb0706f1b..1336bd8a57 100644 --- a/orte/mca/ns/base/ns_base_nds.c +++ b/orte/mca/ns/base/ns_base_nds.c @@ -19,91 +19,13 @@ #include "orte_config.h" #include "include/orte_constants.h" -#include "mca/ns/base/ns_base_nds.h" #include "util/proc_info.h" #include "mca/base/mca_base_param.h" #include "mca/errmgr/errmgr.h" #include "mca/ns/base/base.h" -#include "mca/ns/base/ns_base_nds.h" #include "opal/util/output.h" -static orte_ns_nds_t orte_ns_nds[] = { -{ "env", orte_ns_nds_env_get }, -{ "pipe", orte_ns_nds_pipe_get }, -{ "bproc", orte_ns_nds_bproc_get }, -{ NULL, NULL } -}; - - -int orte_ns_base_set_my_name(void) -{ - int rc, id, flag; - char *mode; - orte_vpid_t vpid; - - /* check to see if name has already been set - if so, THIS IS AN ERROR */ - if (NULL != orte_process_info.my_name) { - opal_output(0, "my name was set to [%d,%d,%d]", ORTE_NAME_ARGS(orte_process_info.my_name)); - ORTE_ERROR_LOG(ORTE_ERR_FATAL); - return ORTE_ERR_FATAL; - } - - /* first check if we are seed or singleton that couldn't - * join an existing universe - if so, name is mandated, and we need - * to set the singleton flag so that our job infrastructure gets built - */ - if (orte_process_info.seed || NULL == orte_process_info.ns_replica) { - id = mca_base_param_register_int("orte", "base", "infrastructure", NULL, (int)false); - mca_base_param_lookup_int(id, &flag); - if (!flag) { - orte_process_info.singleton = true; - } - return orte_ns_base_create_process_name( - &(orte_process_info.my_name), 0, 0, 0); - } - - /* okay, not seed/singleton attempt another approach */ - id = mca_base_param_register_string("ns", "nds", NULL, NULL, NULL); - mca_base_param_lookup_string(id, &mode); - - if (NULL != mode) { /* mode identified */ - orte_ns_nds_t* nds = orte_ns_nds; - while(NULL != nds->mode) { - if (0 == strcmp(mode, nds->mode)) { - return nds->discover(); - } - nds++; - } - } - - /* if the name wasn't passed to us, and we are not the seed, then - * we must be a singleton. We need to get a name assigned by the seed - * daemon, so we call the name service to do that, and then set the - * singleton flag. - */ - if (ORTE_SUCCESS != (rc = orte_ns.create_my_name())) { - ORTE_ERROR_LOG(rc); - return rc; - } - - if (ORTE_SUCCESS != (rc = orte_ns.get_vpid(&vpid, orte_process_info.my_name))) { - ORTE_ERROR_LOG(rc); - return rc; - } - - orte_process_info.num_procs = 1; - orte_process_info.vpid_start = vpid; - /* only set the singleton flag is we are NOT infrastructure */ - id = mca_base_param_register_int("orte", "base", "infrastructure", NULL, (int)false); - mca_base_param_lookup_int(id, &flag); - if (!flag) { - orte_process_info.singleton = true; - } - - return ORTE_SUCCESS; -} - int orte_ns_base_get_peers(orte_process_name_t **procs, size_t *num_procs, size_t *self) { diff --git a/orte/mca/ns/base/ns_base_nds.h b/orte/mca/ns/base/ns_base_nds.h deleted file mode 100644 index 78cfdc0ec2..0000000000 --- a/orte/mca/ns/base/ns_base_nds.h +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- C -*- - * - * Copyright (c) 2004-2005 The Trustees of Indiana University. - * All rights reserved. - * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. - * All rights reserved. - * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, - * University of Stuttgart. All rights reserved. - * Copyright (c) 2004-2005 The Regents of the University of California. - * All rights reserved. - * $COPYRIGHT$ - * - * Additional copyrights may follow - * - * $HEADER$ - */ -/** - * @file - * - * Name Discovery - * - * Since each launcher/environment can be different, the NDS provides a mechanism - * by which writers of PLS launchers can provide the necessary corresponding logic - * for process name discovery. Accordingly, each PLS MUST: - * - * - set the environmental parameter OMPI_MCA_ns_nds to indicate the - * name discovery facility used by the launcher. - * - * - have a corresponding entry in the orte_ns_base_nds table (defined in - * src/ns/base/ns_base_nds.c) that identifies the mode and its associated - * function for obtaining the process name. This information is stored in an array - * of orte_ns_base_nds_t structures - each of which contains the string name of the - * mode (that must correspond exactly with the value of the environmental - * parameter OMPI_MCA_ns_nds as set by the launcher) and a function pointer - * to the necessary name discovery function. - * - * WARNING: Be sure to increment the orte_plsnds_max value so that the name discovery - * subsystem will correctly search the entire array. - * - */ - -#ifndef ORTE_NS_BASE_NDS_H_ -#define ORTE_NS_BASE_NDS_H_ - -#include "orte_config.h" -#include "include/orte_types.h" -#include "include/orte_constants.h" -#include "mca/ns/ns_types.h" - -#if defined(c_plusplus) || defined(__cplusplus) -extern "C" { -#endif - -/* - * Define the nds function pointer - */ -typedef int (*orte_ns_nds_fn_t)(void); - -/* - * Define the nds structure - */ -typedef struct { - char *mode; - orte_ns_nds_fn_t discover; -} orte_ns_nds_t; - - -/* - * Name discovery mechanisms - */ - -int orte_ns_nds_env_get(void); -int orte_ns_nds_env_put(const orte_process_name_t* proc, - orte_vpid_t vpid_start, size_t num_procs, - char ***environ); - -int orte_ns_nds_pipe_get(void); -int orte_ns_nds_pipe_put(const orte_process_name_t* proc, orte_vpid_t vpid_start, size_t num_procs, int fd); - -int orte_ns_nds_bproc_get(void); -int orte_ns_nds_bproc_put(orte_cellid_t cell, orte_jobid_t job, - orte_vpid_t vpid_start, orte_vpid_t global_vpid_start, - int num_procs, char ***env); -#if defined(c_plusplus) || defined(__cplusplus) -} -#endif -#endif /* ORTE_PLSNDS_H */ diff --git a/orte/mca/ns/base/ns_base_open.c b/orte/mca/ns/base/ns_base_open.c index 5603d11b8e..b5aac5a7ae 100644 --- a/orte/mca/ns/base/ns_base_open.c +++ b/orte/mca/ns/base/ns_base_open.c @@ -76,7 +76,6 @@ OMPI_DECLSPEC mca_ns_base_module_t orte_ns = { orte_ns_base_derive_vpid, orte_ns_base_assign_rml_tag_not_available, orte_ns_base_define_data_type_not_available, - orte_ns_base_set_my_name, orte_ns_base_get_peers }; bool mca_ns_base_selected = false; diff --git a/orte/mca/ns/ns.h b/orte/mca/ns/ns.h index f3b66de59f..857e1a23cd 100644 --- a/orte/mca/ns/ns.h +++ b/orte/mca/ns/ns.h @@ -573,19 +573,6 @@ typedef int (*orte_ns_base_module_define_data_type_fn_t)( const char *name, orte_data_type_t *type); - -/* - * Discover my name - * Upon startup, each process must discover its official ORTE process name. There are - * several ways this name could be passed to the process. This typicall involves an - * environmental parameter of some appropriate name, possibly followed by some - * computation of the vpid based on process rank. This function checks the different - * environmental parameters to find the one that has been set with the appropriate - * value, determines (based on that) the name of this process, and then sets that - * value in the orte_system_info global structure. - */ -typedef int (*orte_ns_base_module_set_my_name_fn_t)(void); - /* * Get my peers * @@ -628,7 +615,6 @@ struct mca_ns_base_module_1_0_0_t { orte_ns_base_module_derive_vpid_fn_t derive_vpid; orte_ns_base_module_assign_rml_tag_fn_t assign_rml_tag; orte_ns_base_module_define_data_type_fn_t define_data_type; - orte_ns_base_module_set_my_name_fn_t set_my_name; orte_ns_base_module_get_peers_fn_t get_peers; }; diff --git a/orte/mca/ns/proxy/src/ns_proxy_component.c b/orte/mca/ns/proxy/src/ns_proxy_component.c index 7fea6fefc7..ead68ce16d 100644 --- a/orte/mca/ns/proxy/src/ns_proxy_component.c +++ b/orte/mca/ns/proxy/src/ns_proxy_component.c @@ -93,7 +93,6 @@ static mca_ns_base_module_t orte_ns_proxy = { orte_ns_base_derive_vpid, orte_ns_proxy_assign_rml_tag, orte_ns_proxy_define_data_type, - orte_ns_base_set_my_name, orte_ns_base_get_peers }; diff --git a/orte/mca/ns/replica/src/ns_replica_component.c b/orte/mca/ns/replica/src/ns_replica_component.c index 20bf041c8f..7639dc9bb2 100644 --- a/orte/mca/ns/replica/src/ns_replica_component.c +++ b/orte/mca/ns/replica/src/ns_replica_component.c @@ -96,7 +96,6 @@ static mca_ns_base_module_t orte_ns_replica = { orte_ns_base_derive_vpid, orte_ns_replica_assign_rml_tag, orte_ns_replica_define_data_type, - orte_ns_base_set_my_name, orte_ns_base_get_peers }; diff --git a/orte/mca/pls/bproc/pls_bproc.c b/orte/mca/pls/bproc/pls_bproc.c index c81b041031..d987859fed 100644 --- a/orte/mca/pls/bproc/pls_bproc.c +++ b/orte/mca/pls/bproc/pls_bproc.c @@ -35,7 +35,7 @@ #include "orte/mca/errmgr/errmgr.h" #include "orte/mca/iof/iof.h" #include "orte/mca/ns/base/base.h" -#include "orte/mca/ns/base/ns_base_nds.h" +#include "orte/mca/sds/base/base.h" #include "orte/mca/oob/base/base.h" #include "orte/mca/ras/base/base.h" #include "orte/mca/rmgr/base/base.h" diff --git a/orte/mca/pls/bproc_seed/pls_bproc_seed.c b/orte/mca/pls/bproc_seed/pls_bproc_seed.c index e45cbeb197..ba3054b255 100644 --- a/orte/mca/pls/bproc_seed/pls_bproc_seed.c +++ b/orte/mca/pls/bproc_seed/pls_bproc_seed.c @@ -32,7 +32,7 @@ #include "runtime/orte_wait.h" #include "runtime/runtime.h" #include "mca/ns/base/base.h" -#include "mca/ns/base/ns_base_nds.h" +#include "mca/sds/base/base.h" #include "mca/pls/base/base.h" #include "mca/base/mca_base_param.h" #include "mca/iof/iof.h" diff --git a/orte/mca/pls/fork/pls_fork_module.c b/orte/mca/pls/fork/pls_fork_module.c index 147fccc734..d831aff070 100644 --- a/orte/mca/pls/fork/pls_fork_module.c +++ b/orte/mca/pls/fork/pls_fork_module.c @@ -47,7 +47,7 @@ #include "mca/iof/base/iof_base_setup.h" #include "mca/base/mca_base_param.h" #include "mca/ns/ns.h" -#include "mca/ns/base/ns_base_nds.h" +#include "orte/mca/sds/base/base.h" #include "mca/pls/pls.h" #include "mca/pls/base/base.h" #include "mca/rml/rml.h" diff --git a/orte/mca/sds/Makefile.am b/orte/mca/sds/Makefile.am new file mode 100644 index 0000000000..dd9a722af4 --- /dev/null +++ b/orte/mca/sds/Makefile.am @@ -0,0 +1,33 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +include $(top_srcdir)/config/Makefile.options + +SUBDIRS = base $(MCA_sds_STATIC_SUBDIRS) +DIST_SUBDIRS = base $(MCA_sds_ALL_SUBDIRS) + +# Source code files + +headers = sds.h + +# Conditionally install the header files + +if WANT_INSTALL_HEADERS +ortedir = $(includedir)/openmpi/orte/mca/sds +orte_HEADERS = $(headers) +else +ortedir = $(includedir) +endif diff --git a/orte/mca/sds/base/Makefile.am b/orte/mca/sds/base/Makefile.am new file mode 100644 index 0000000000..f4a43a6d66 --- /dev/null +++ b/orte/mca/sds/base/Makefile.am @@ -0,0 +1,44 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +include $(top_srcdir)/config/Makefile.options + +noinst_LTLIBRARIES = libmca_sds_base.la + +# Source code files +headers = \ + base.h + +libmca_sds_base_la_SOURCES = \ + $(headers) \ + sds_base_close.c \ + sds_base_open.c \ + sds_base_select.c \ + sds_base_interface.c \ + sds_base_universe.c \ + sds_base_put.c + +# Conditionally install the header files + +if WANT_INSTALL_HEADERS +ortedir = $(includedir)/openmpi/orte/mca/sds/base +orte_HEADERS = $(headers) +else +ortedir = $(includedir) +endif + +distclean-local: + rm -f static-components.h diff --git a/orte/mca/sds/base/base.h b/orte/mca/sds/base/base.h new file mode 100644 index 0000000000..b6a7f58998 --- /dev/null +++ b/orte/mca/sds/base/base.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ +/** @file: + */ + +#ifndef MCA_SDS_BASE_H +#define MCA_SDS_BASE_H + +#include "orte_config.h" + +#include "opal/mca/mca.h" +#include "orte/mca/sds/sds.h" +#include "orte/mca/ns/ns_types.h" + +#if defined(c_plusplus) || defined(__cplusplus) +extern "C" { +#endif + + /* + * Global functions for MCA overall collective open and close + */ + + /** + * Open the sds framework + */ + OMPI_DECLSPEC int orte_sds_base_open(void); + + /** + * Select a sds module + */ + OMPI_DECLSPEC int orte_sds_base_select(void); + + /** + * Setup universe contact information + */ + OMPI_DECLSPEC int orte_sds_base_contact_universe(void); + + /** + * Setup self and peer naming + */ + OMPI_DECLSPEC int orte_sds_base_set_name(void); + + /** + * Close the sds framework + */ + OMPI_DECLSPEC int orte_sds_base_close(void); + + /* + * Internal helper functions used by components + */ + OMPI_DECLSPEC int orte_sds_base_basic_contact_universe(void); + OMPI_DECLSPEC int orte_sds_base_seed_set_name(void); + + /* + * Put functions + */ + OMPI_DECLSPEC int orte_ns_nds_env_put(const orte_process_name_t* proc, + orte_vpid_t vpid_start, + size_t num_procs, + char ***environ); + OMPI_DECLSPEC int orte_ns_nds_pipe_put(const orte_process_name_t* proc, + orte_vpid_t vpid_start, + size_t num_procs, + int fd); + OMPI_DECLSPEC int orte_ns_nds_bproc_put(orte_cellid_t cell, + orte_jobid_t job, + orte_vpid_t vpid_start, + orte_vpid_t global_vpid_start, + int num_procs, char ***env); + +#if defined(c_plusplus) || defined(__cplusplus) +} +#endif +#endif diff --git a/orte/mca/sds/base/sds_base_close.c b/orte/mca/sds/base/sds_base_close.c new file mode 100644 index 0000000000..cd1f1b17b7 --- /dev/null +++ b/orte/mca/sds/base/sds_base_close.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "ompi_config.h" + +#include + +#include "include/orte_constants.h" +#include "mca/mca.h" +#include "mca/base/base.h" +#include "mca/sds/base/base.h" +#include "opal/util/output.h" + +extern opal_list_t orte_sds_base_components_available; +extern orte_sds_base_module_t *orte_sds_base_module; + +int +orte_sds_base_close(void) +{ + /* finalize running component */ + orte_sds_base_module->finalize(); + + /* shutdown any remaining opened components */ + if (! opal_list_is_empty(&orte_sds_base_components_available)) { + mca_base_components_close(0, + &orte_sds_base_components_available, NULL); + } + OBJ_DESTRUCT(&orte_sds_base_components_available); + return OMPI_SUCCESS; +} + diff --git a/orte/mca/sds/base/sds_base_interface.c b/orte/mca/sds/base/sds_base_interface.c new file mode 100644 index 0000000000..65011ec43f --- /dev/null +++ b/orte/mca/sds/base/sds_base_interface.c @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "orte_config.h" + +#include "include/orte_constants.h" +#include "opal/util/output.h" +#include "mca/sds/base/base.h" +#include "util/proc_info.h" + +extern orte_sds_base_module_t *orte_sds_base_module; + +int +orte_sds_base_contact_universe(void) +{ + return orte_sds_base_module->contact_universe(); +} + + +int +orte_sds_base_set_name(void) +{ + /* if we got "promoted" to the seed between selection and + set_name, it's probably the seed component isn't the one + running. Go behind the selected component's back and do the + seed set name, since that's what we really want to have + happen */ + if (orte_process_info.seed) { + return orte_sds_base_seed_set_name(); + } else { + return orte_sds_base_module->set_name(); + } +} diff --git a/orte/mca/sds/base/sds_base_open.c b/orte/mca/sds/base/sds_base_open.c new file mode 100644 index 0000000000..69e4bb1ba2 --- /dev/null +++ b/orte/mca/sds/base/sds_base_open.c @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + + +#include "orte_config.h" +#include "include/orte_constants.h" +#include "opal/util/output.h" +#include "mca/mca.h" +#include "mca/base/base.h" +#include "mca/sds/base/base.h" + + +/* + * The following file was created by configure. It contains extern + * statements and the definition of an array of pointers to each + * module's public mca_base_module_t struct. + */ + +#include "orte/mca/sds/base/static-components.h" + +opal_list_t orte_sds_base_components_available; +orte_sds_base_module_t *orte_sds_base_module = NULL; + +int +orte_sds_base_open(void) +{ + OBJ_CONSTRUCT(&orte_sds_base_components_available, opal_list_t); + + /* Open up all available components */ + if (ORTE_SUCCESS != + mca_base_components_open("sds", 0, mca_sds_base_static_components, + &orte_sds_base_components_available, + true)) { + return ORTE_ERROR; + } + + return ORTE_SUCCESS; +} diff --git a/orte/mca/sds/base/sds_base_put.c b/orte/mca/sds/base/sds_base_put.c new file mode 100644 index 0000000000..05d5b8092a --- /dev/null +++ b/orte/mca/sds/base/sds_base_put.c @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "orte_config.h" + +#include "opal/util/opal_environ.h" +#include "opal/util/output.h" +#include "opal/mca/base/mca_base_param.h" +#include "orte/include/orte_constants.h" +#include "orte/mca/sds/base/base.h" +#include "orte/mca/ns/base/base.h" +#include "orte/mca/ns/ns.h" +#include "orte/mca/errmgr/base/base.h" + +int orte_ns_nds_env_put(const orte_process_name_t* name, + orte_vpid_t vpid_start, size_t num_procs, + char ***env) +{ + char* param; + char* cellid; + char* jobid; + char* vpid; + char* value; + int rc; + + if(ORTE_SUCCESS != (rc = orte_ns.get_cellid_string(&cellid, name))) { + ORTE_ERROR_LOG(rc); + return rc; + } + if(ORTE_SUCCESS != (rc = orte_ns.get_jobid_string(&jobid, name))) { + ORTE_ERROR_LOG(rc); + return rc; + } + if(ORTE_SUCCESS != (rc = orte_ns.get_vpid_string(&vpid, name))) { + ORTE_ERROR_LOG(rc); + return rc; + } + + /* set the mode to env */ + if(NULL == (param = mca_base_param_environ_variable("ns","nds",NULL))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, "env", true, env); + free(param); + + /* not a seed */ + if(NULL == (param = mca_base_param_environ_variable("seed",NULL,NULL))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_unsetenv(param, env); + free(param); + + /* since we want to pass the name as separate components, make sure + * that the "name" environmental variable is cleared! + */ + if(NULL == (param = mca_base_param_environ_variable("ns","nds","name"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_unsetenv(param, env); + free(param); + + /* setup the name */ + if(NULL == (param = mca_base_param_environ_variable("ns","nds","cellid"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, cellid, true, env); + free(param); + free(cellid); + + if(NULL == (param = mca_base_param_environ_variable("ns","nds","jobid"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, jobid, true, env); + free(param); + free(jobid); + + if(NULL == (param = mca_base_param_environ_variable("ns","nds","vpid"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, vpid, true, env); + free(param); + free(vpid); + + asprintf(&value, "%lu", (unsigned long) vpid_start); + if(NULL == (param = mca_base_param_environ_variable("ns","nds","vpid_start"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, value, true, env); + free(param); + free(value); + + asprintf(&value, "%lu", (unsigned long) num_procs); + if(NULL == (param = mca_base_param_environ_variable("ns","nds","num_procs"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, value, true, env); + free(param); + free(value); + return ORTE_SUCCESS; +} + + +int orte_ns_nds_bproc_put(orte_cellid_t cell, orte_jobid_t job, + orte_vpid_t vpid_start, orte_vpid_t global_vpid_start, + int num_procs, char ***env) { + char* param; + char* cellid; + char* jobid; + char* value; + int rc; + + if(ORTE_SUCCESS != (rc = orte_ns.convert_cellid_to_string(&cellid, cell))) { + ORTE_ERROR_LOG(rc); + return rc; + } + if(ORTE_SUCCESS != (rc = orte_ns.convert_jobid_to_string(&jobid, job))) { + ORTE_ERROR_LOG(rc); + return rc; + } + + /* set the mode to bproc */ + if(NULL == (param = mca_base_param_environ_variable("ns","nds",NULL))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, "bproc", true, env); + free(param); + + /* not a seed */ + if(NULL == (param = mca_base_param_environ_variable("seed",NULL,NULL))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_unsetenv(param, env); + free(param); + + /* since we want to pass the name as separate components, make sure + * that the "name" environmental variable is cleared! + */ + if(NULL == (param = mca_base_param_environ_variable("ns","nds","name"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_unsetenv(param, env); + free(param); + + /* setup the name */ + if(NULL == (param = mca_base_param_environ_variable("ns","nds","cellid"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, cellid, true, env); + free(param); + free(cellid); + + if(NULL == (param = mca_base_param_environ_variable("ns","nds","jobid"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, jobid, true, env); + free(param); + free(jobid); + + rc = orte_ns.convert_vpid_to_string(&value, vpid_start); + if (ORTE_SUCCESS != rc) { + ORTE_ERROR_LOG(rc); + return(rc); + } + if(NULL == (param = mca_base_param_environ_variable("ns","nds","vpid_start"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, value, true, env); + free(param); + free(value); + + rc = orte_ns.convert_vpid_to_string(&value, global_vpid_start); + if (ORTE_SUCCESS != rc) { + ORTE_ERROR_LOG(rc); + return(rc); + } + if(NULL == (param = mca_base_param_environ_variable("ns","nds","global_vpid_start"))) { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, value, true, env); + free(param); + free(value); + + asprintf(&value, "%d", num_procs); + if(NULL == (param = mca_base_param_environ_variable("ns","nds","num_procs"))) + { + ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); + return ORTE_ERR_OUT_OF_RESOURCE; + } + opal_setenv(param, value, true, env); + free(param); + free(value); + + /* we have to set this environmental variable so bproc will give us our rank + * after the launch */ + + putenv("BPROC_RANK=XXXXXXX"); + opal_setenv("BPROC_RANK", "XXXXXXX", true, env); + + return ORTE_SUCCESS; +} + diff --git a/orte/mca/sds/base/sds_base_select.c b/orte/mca/sds/base/sds_base_select.c new file mode 100644 index 0000000000..ffea31b2e6 --- /dev/null +++ b/orte/mca/sds/base/sds_base_select.c @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "orte_config.h" + +#include "include/orte_constants.h" +#include "opal/class/opal_list.h" +#include "opal/util/output.h" +#include "mca/mca.h" +#include "mca/base/base.h" +#include "mca/sds/base/base.h" + +extern opal_list_t orte_sds_base_components_available; +extern orte_sds_base_module_t *orte_sds_base_module; + +int +orte_sds_base_select(void) +{ + opal_list_item_t *item; + mca_base_component_list_item_t *cli; + int selected_priority = -1; + orte_sds_base_component_t *selected_component = NULL; + orte_sds_base_module_t *selected_module = NULL; + + /* Traverse the list of opened modules; call their init functions. */ + for(item = opal_list_get_first(&orte_sds_base_components_available); + item != opal_list_get_end(&orte_sds_base_components_available); + item = opal_list_get_next(item)) { + orte_sds_base_component_t* component; + + cli = (mca_base_component_list_item_t *) item; + component = (orte_sds_base_component_t *) cli->cli_component; + + opal_output_verbose(10, 0, + "orte_sds_base_select: initializing %s component %s", + component->sds_version.mca_type_name, + component->sds_version.mca_component_name); + + if (NULL == component->sds_init) { + opal_output_verbose(10, 0, + "orte_sds_base_select: no init function; ignoring component"); + } else { + int priority; + orte_sds_base_module_t* module = component->sds_init(&priority); + + /* If the component didn't initialize, remove it from the opened + list and remove it from the component repository */ + if (NULL == module) { + opal_output_verbose(10, 0, + "orte_sds_base_select: init returned failure"); + continue; + } + + if(priority > selected_priority) { + selected_priority = priority; + selected_component = component; + selected_module = module; + } + } + } + + /* unload all components that were not selected */ + item = opal_list_get_first(&orte_sds_base_components_available); + while(item != opal_list_get_end(&orte_sds_base_components_available)) { + opal_list_item_t* next = opal_list_get_next(item); + orte_sds_base_component_t* component; + cli = (mca_base_component_list_item_t *) item; + component = (orte_sds_base_component_t *) cli->cli_component; + if(component != selected_component) { + opal_output_verbose(10, 0, + "orte_sds_base_select: module %s unloaded", + component->sds_version.mca_component_name); + mca_base_component_repository_release((mca_base_component_t *) component); + opal_list_remove_item(&orte_sds_base_components_available, item); + OBJ_RELEASE(item); + } + item = next; + } + + /* setup reference to selected module */ + if(NULL != selected_module) { + orte_sds_base_module = selected_module; + } + return OMPI_SUCCESS; +} diff --git a/orte/mca/sds/base/sds_base_universe.c b/orte/mca/sds/base/sds_base_universe.c new file mode 100644 index 0000000000..ca7bacf27d --- /dev/null +++ b/orte/mca/sds/base/sds_base_universe.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "orte_config.h" + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#include "opal/mca/base/mca_base_param.h" +#include "opal/util/output.h" +#include "orte/include/orte_constants.h" +#include "orte/mca/sds/base/base.h" +#include "orte/util/proc_info.h" +#include "orte/runtime/runtime.h" +#include "orte/mca/errmgr/base/base.h" +#include "orte/mca/ns/ns.h" +#include "orte/mca/ns/base/base.h" + +int +orte_sds_base_basic_contact_universe(void) +{ + int ret, rc, exit_if_not_exist; + orte_universe_t univ; + char *universe; + pid_t pid; + + /* if we were NOT given registry and name service replicas (i.e., we + * weren't told a universe contact point), check for some + * existing universe to join */ + if (NULL == orte_process_info.ns_replica_uri || NULL == orte_process_info.gpr_replica_uri) { + if (ORTE_SUCCESS == (ret = orte_universe_exists(&univ))) { + /* copy universe info into our universe structure */ + orte_universe_info.name = univ.name; + orte_universe_info.host = univ.host; + orte_universe_info.uid = univ.uid; + orte_universe_info.persistence = univ.persistence; + orte_universe_info.scope = univ.scope; + orte_universe_info.console = univ.console; + orte_universe_info.seed_uri = univ.seed_uri; + orte_universe_info.console_connected = univ.console_connected; + orte_universe_info.scriptfile = univ.scriptfile; + /* define the replica contact points */ + orte_process_info.ns_replica_uri = strdup(univ.seed_uri); + orte_process_info.gpr_replica_uri = strdup(univ.seed_uri); + } else { + /* if an existing universe is not detected, check the + * relevant MCA parameter to see if the caller wants + * us to abort in this situation + */ + if (0 > (rc = mca_base_param_register_int("orte", "univ", "exist", NULL, 0))) { + ORTE_ERROR_LOG(rc); + return rc; + } + if (ORTE_SUCCESS != (rc = mca_base_param_lookup_int(rc, &exit_if_not_exist))) { + ORTE_ERROR_LOG(rc); + return rc; + } + if (exit_if_not_exist) { + /* cleanup the subsystems that were already opened */ + orte_system_finalize(); + return ORTE_ERR_UNREACH; + } + if (ORTE_ERR_NOT_FOUND != ret) { + /* if it exists but no contact could be established, + * define unique name based on current one. + * and start new universe with me as seed + */ + universe = strdup(orte_universe_info.name); + free(orte_universe_info.name); + orte_universe_info.name = NULL; + pid = getpid(); + if (0 > asprintf(&orte_universe_info.name, "%s-%d", universe, (int)pid)) { + opal_output(0, "orte_init: failed to create unique universe name"); + return ret; + } + opal_output(0, "Could not join a running, existing universe"); + opal_output(0, "Establishing a new one named: %s", + orte_universe_info.name); + + } + orte_process_info.seed = true; + /* since we are seed, ensure that all replica info is NULL'd */ + if (NULL != orte_process_info.ns_replica_uri) { + free(orte_process_info.ns_replica_uri); + orte_process_info.ns_replica_uri = NULL; + } + if (NULL != orte_process_info.ns_replica) { + free(orte_process_info.ns_replica); + orte_process_info.ns_replica = NULL; + } + + if (NULL != orte_process_info.gpr_replica_uri) { + free(orte_process_info.gpr_replica_uri); + orte_process_info.gpr_replica_uri = NULL; + } + if (NULL != orte_process_info.gpr_replica) { + free(orte_process_info.gpr_replica); + orte_process_info.gpr_replica = NULL; + } + } + } + + return ORTE_SUCCESS; +} + + +int +orte_sds_base_seed_set_name(void) +{ + int id, flag; + + /* if we're a seed and we're not infrastructure, we're also a + singleton. So set the singleton flag in that case */ + id = mca_base_param_register_int("orte", "base", "infrastructure", + NULL, (int)false); + mca_base_param_lookup_int(id, &flag); + if (!flag) { + orte_process_info.singleton = true; + } + return orte_ns_base_create_process_name( + &(orte_process_info.my_name), 0, 0, 0); +} diff --git a/orte/mca/sds/bproc/Makefile.am b/orte/mca/sds/bproc/Makefile.am new file mode 100644 index 0000000000..6aefec15cd --- /dev/null +++ b/orte/mca/sds/bproc/Makefile.am @@ -0,0 +1,49 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# Use the top-level Makefile.options + +include $(top_ompi_srcdir)/config/Makefile.options + +AM_CPPFLAGS = $(sds_bproc_CPPFLAGS) + +sources = \ + sds_bproc.h \ + sds_bproc_component.c \ + sds_bproc_module.c + +# Make the output library in this directory, and name it either +# mca__.la (for DSO builds) or libmca__.la +# (for static builds). + +if OMPI_BUILD_sds_bproc_DSO +component_noinst = +component_install = mca_sds_bproc.la +else +component_noinst = libmca_sds_bproc.la +component_install = +endif + +mcacomponentdir = $(libdir)/openmpi +mcacomponent_LTLIBRARIES = $(component_install) +mca_sds_bproc_la_SOURCES = $(sources) +mca_sds_bproc_la_LDFLAGS = -module -avoid-version $(sds_bproc_LDFLAGS) +mca_sds_bproc_la_LIBADD = $(sds_bproc_LIBS) + +noinst_LTLIBRARIES = $(component_noinst) +libmca_sds_bproc_la_SOURCES =$(sources) +libmca_sds_bproc_la_LDFLAGS = -module -avoid-version $(sds_bproc_LDFLAGS) +libmca_sds_bproc_la_LIBADD = $(sds_bproc_LIBS) diff --git a/orte/mca/sds/bproc/configure.m4 b/orte/mca/sds/bproc/configure.m4 new file mode 100644 index 0000000000..d7b9951677 --- /dev/null +++ b/orte/mca/sds/bproc/configure.m4 @@ -0,0 +1,38 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# MCA_sds_bproc_CONFIG([action-if-found], [action-if-not-found]) +# ----------------------------------------------------------- +AC_DEFUN([MCA_sds_bproc_CONFIG],[ + # only accept newer non-Scyld bproc + OMPI_CHECK_BPROC([sds_bproc], [sds_bproc_good=1], + [sds_bproc_good=0], [sds_bproc_good=0]) + # if check worked, set wrapper flags if so. + # Evaluate succeed / fail + AS_IF([test "$sds_bproc_good" = "1"], + [sds_bproc_WRAPPER_EXTRA_LDFLAGS="$sds_bproc_LDFLAGS" + sds_bproc_WRAPPER_EXTRA_LIBS="$sds_bproc_LIBS" + $1], + [$2]) + AS_IF([test "$sds_bproc_good" = "0" && test ! -z "$with_bproc" -a "$with_bproc" != "no"], + [AC_MSG_ERROR([Scyld bproc is not supported by the launching system yet])]) + + # set build flags to use in makefile + AC_SUBST([sds_bproc_CPPFLAGS]) + AC_SUBST([sds_bproc_LDFLAGS]) + AC_SUBST([sds_bproc_LIBS]) +])dnl diff --git a/orte/mca/sds/bproc/configure.params b/orte/mca/sds/bproc/configure.params new file mode 100644 index 0000000000..21d0571fb2 --- /dev/null +++ b/orte/mca/sds/bproc/configure.params @@ -0,0 +1,19 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +PARAM_INIT_FILE=sds_bproc_component.c +PARAM_CONFIG_FILES="Makefile" diff --git a/orte/mca/sds/bproc/sds_bproc.h b/orte/mca/sds/bproc/sds_bproc.h new file mode 100644 index 0000000000..488b44a9b4 --- /dev/null +++ b/orte/mca/sds/bproc/sds_bproc.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef ORTE_SDS_BPROC_H +#define ORTE_SDS_BPROC_H + +#if defined(c_plusplus) || defined(__cplusplus) +extern "C" { +#endif + + /* + * Module open / close + */ + int orte_sds_bproc_component_open(void); + int orte_sds_bproc_component_close(void); + orte_sds_base_module_t* orte_sds_bproc_component_init(int *priority); + + /* + * Startup / Shutdown + */ + int orte_sds_bproc_finalize(void); + + /* + * Module functions + */ + int orte_sds_bproc_set_name(void); + + +#if defined(c_plusplus) || defined(__cplusplus) +} +#endif + +#endif /* ORTE_SDS_BPROC_H */ diff --git a/orte/mca/sds/bproc/sds_bproc_component.c b/orte/mca/sds/bproc/sds_bproc_component.c new file mode 100644 index 0000000000..98bbc6e17f --- /dev/null +++ b/orte/mca/sds/bproc/sds_bproc_component.c @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * 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 "orte_config.h" + +#include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/bproc/sds_bproc.h" +#include "mca/base/mca_base_param.h" + +extern orte_sds_base_module_t sds_bproc_module; + +/* + * Instantiate the public struct with all of our public information + * and pointers to our public functions in it + */ +orte_sds_base_component_t mca_sds_bproc_component = { + /* First, the mca_component_t struct containing meta information + about the component itself */ + { + /* Indicate that we are a sds v1.0.0 component (which also + implies a specific MCA version) */ + ORTE_SDS_BASE_VERSION_1_0_0, + + /* Component name and version */ + "bproc", + ORTE_MAJOR_VERSION, + ORTE_MINOR_VERSION, + ORTE_RELEASE_VERSION, + + /* Component open and close functions */ + orte_sds_bproc_component_open, + orte_sds_bproc_component_close + }, + + /* Next the MCA v1.0.0 component meta data */ + { + /* Whether the component is checkpointable or not */ + true + }, + + /* Initialization / querying functions */ + orte_sds_bproc_component_init +}; + + +int +orte_sds_bproc_component_open(void) +{ + return ORTE_SUCCESS; +} + + +orte_sds_base_module_t * +orte_sds_bproc_component_init(int *priority) +{ + int id; + char *mode; + + /* okay, not seed/singleton attempt another approach */ + id = mca_base_param_register_string("ns", "nds", NULL, NULL, NULL); + mca_base_param_lookup_string(id, &mode); + + if (NULL == mode || 0 != strcmp("bproc", mode)) { return NULL; } + + *priority = 20; + return &sds_bproc_module; +} + + +int +orte_sds_bproc_component_close(void) +{ + return ORTE_SUCCESS; +} + diff --git a/orte/mca/ns/base/ns_base_nds_bproc.c b/orte/mca/sds/bproc/sds_bproc_module.c similarity index 54% rename from orte/mca/ns/base/ns_base_nds_bproc.c rename to orte/mca/sds/bproc/sds_bproc_module.c index 32122b4b8e..e22a8949a7 100644 --- a/orte/mca/ns/base/ns_base_nds_bproc.c +++ b/orte/mca/sds/bproc/sds_bproc_module.c @@ -12,23 +12,30 @@ * Additional copyrights may follow * * $HEADER$ - */ -/** @file: + * */ #include "orte_config.h" + #include "include/orte_constants.h" -#include "util/proc_info.h" -#include "opal/util/opal_environ.h" -#include "opal/util/output.h" #include "mca/base/mca_base_param.h" +#include "mca/sds/sds.h" +#include "mca/sds/base/base.h" +#include "mca/sds/bproc/sds_bproc.h" #include "mca/ns/ns.h" -#include "mca/errmgr/errmgr.h" #include "mca/ns/base/base.h" -#include "mca/ns/base/ns_base_nds.h" +#include "mca/errmgr/base/base.h" + +orte_sds_base_module_t sds_bproc_module = { + orte_sds_base_basic_contact_universe, + orte_sds_bproc_set_name, + orte_sds_bproc_finalize, +}; -int orte_ns_nds_bproc_get(void) { +int +orte_sds_bproc_set_name(void) +{ int rc; int id; int vpid_start; @@ -133,109 +140,8 @@ int orte_ns_nds_bproc_get(void) { } -int orte_ns_nds_bproc_put(orte_cellid_t cell, orte_jobid_t job, - orte_vpid_t vpid_start, orte_vpid_t global_vpid_start, - int num_procs, char ***env) { - char* param; - char* cellid; - char* jobid; - char* value; - int rc; - - if(ORTE_SUCCESS != (rc = orte_ns.convert_cellid_to_string(&cellid, cell))) { - ORTE_ERROR_LOG(rc); - return rc; - } - if(ORTE_SUCCESS != (rc = orte_ns.convert_jobid_to_string(&jobid, job))) { - ORTE_ERROR_LOG(rc); - return rc; - } - - /* set the mode to bproc */ - if(NULL == (param = mca_base_param_environ_variable("ns","nds",NULL))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, "bproc", true, env); - free(param); - - /* not a seed */ - if(NULL == (param = mca_base_param_environ_variable("seed",NULL,NULL))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_unsetenv(param, env); - free(param); - - /* since we want to pass the name as separate components, make sure - * that the "name" environmental variable is cleared! - */ - if(NULL == (param = mca_base_param_environ_variable("ns","nds","name"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_unsetenv(param, env); - free(param); - - /* setup the name */ - if(NULL == (param = mca_base_param_environ_variable("ns","nds","cellid"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, cellid, true, env); - free(param); - free(cellid); - - if(NULL == (param = mca_base_param_environ_variable("ns","nds","jobid"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, jobid, true, env); - free(param); - free(jobid); - - rc = orte_ns.convert_vpid_to_string(&value, vpid_start); - if (ORTE_SUCCESS != rc) { - ORTE_ERROR_LOG(rc); - return(rc); - } - if(NULL == (param = mca_base_param_environ_variable("ns","nds","vpid_start"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, value, true, env); - free(param); - free(value); - - rc = orte_ns.convert_vpid_to_string(&value, global_vpid_start); - if (ORTE_SUCCESS != rc) { - ORTE_ERROR_LOG(rc); - return(rc); - } - if(NULL == (param = mca_base_param_environ_variable("ns","nds","global_vpid_start"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, value, true, env); - free(param); - free(value); - - asprintf(&value, "%d", num_procs); - if(NULL == (param = mca_base_param_environ_variable("ns","nds","num_procs"))) - { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, value, true, env); - free(param); - free(value); - - /* we have to set this environmental variable so bproc will give us our rank - * after the launch */ - - putenv("BPROC_RANK=XXXXXXX"); - opal_setenv("BPROC_RANK", "XXXXXXX", true, env); - +int +orte_sds_bproc_finalize(void) +{ return ORTE_SUCCESS; } - diff --git a/orte/mca/sds/cnos/Makefile.am b/orte/mca/sds/cnos/Makefile.am new file mode 100644 index 0000000000..714202ac50 --- /dev/null +++ b/orte/mca/sds/cnos/Makefile.am @@ -0,0 +1,45 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# Use the top-level Makefile.options + +include $(top_ompi_srcdir)/config/Makefile.options + +sources = \ + sds_cnos.h \ + sds_cnos_component.c \ + sds_cnos_module.c + +# Make the output library in this directory, and name it either +# mca__.la (for DSO builds) or libmca__.la +# (for static builds). + +if OMPI_BUILD_sds_cnos_DSO +component_noinst = +component_install = mca_sds_cnos.la +else +component_noinst = libmca_sds_cnos.la +component_install = +endif + +mcacomponentdir = $(libdir)/openmpi +mcacomponent_LTLIBRARIES = $(component_install) +mca_sds_cnos_la_SOURCES = $(sources) +mca_sds_cnos_la_LDFLAGS = -module -avoid-version + +noinst_LTLIBRARIES = $(component_noinst) +libmca_sds_cnos_la_SOURCES =$(sources) +libmca_sds_cnos_la_LDFLAGS = -module -avoid-version diff --git a/orte/mca/sds/cnos/configure.m4 b/orte/mca/sds/cnos/configure.m4 new file mode 100644 index 0000000000..2f2a652376 --- /dev/null +++ b/orte/mca/sds/cnos/configure.m4 @@ -0,0 +1,23 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# MCA_sds_cnos_CONFIG([action-if-found], [action-if-not-found]) +# ----------------------------------------------------------- +AC_DEFUN([MCA_sds_cnos_CONFIG],[ + # check for cnos functions + AC_CHECK_FUNC([cnos_get_rank], [$1], [$2]) +])dnl diff --git a/orte/mca/sds/cnos/configure.params b/orte/mca/sds/cnos/configure.params new file mode 100644 index 0000000000..4a1b7b857d --- /dev/null +++ b/orte/mca/sds/cnos/configure.params @@ -0,0 +1,19 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +PARAM_INIT_FILE=sds_cnos_component.c +PARAM_CONFIG_FILES="Makefile" diff --git a/orte/mca/sds/cnos/sds_cnos.h b/orte/mca/sds/cnos/sds_cnos.h new file mode 100644 index 0000000000..e427831c73 --- /dev/null +++ b/orte/mca/sds/cnos/sds_cnos.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef ORTE_SDS_CNOS_H +#define ORTE_SDS_CNOS_H + +#if defined(c_plusplus) || defined(__cplusplus) +extern "C" { +#endif + + /* + * Module open / close + */ + int orte_sds_cnos_component_open(void); + int orte_sds_cnos_component_close(void); + orte_sds_base_module_t* orte_sds_cnos_component_init(int *priority); + + /* + * Startup / Shutdown + */ + int orte_sds_cnos_finalize(void); + + /* + * Module functions + */ + int orte_sds_cnos_set_name(void); + int orte_sds_cnos_contact_universe(void); + + +#if defined(c_plusplus) || defined(__cplusplus) +} +#endif + +#endif /* ORTE_SDS_CNOS_H */ diff --git a/orte/mca/sds/cnos/sds_cnos_component.c b/orte/mca/sds/cnos/sds_cnos_component.c new file mode 100644 index 0000000000..d38754a4db --- /dev/null +++ b/orte/mca/sds/cnos/sds_cnos_component.c @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * 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 "orte_config.h" + +#include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/cnos/sds_cnos.h" +#include "mca/base/mca_base_param.h" + +extern orte_sds_base_module_t sds_cnos_module; + +/* + * Instantiate the public struct with all of our public information + * and pointers to our public functions in it + */ +orte_sds_base_component_t mca_sds_cnos_component = { + /* First, the mca_component_t struct containing meta information + about the component itself */ + { + /* Indicate that we are a sds v1.0.0 component (which also + implies a specific MCA version) */ + ORTE_SDS_BASE_VERSION_1_0_0, + + /* Component name and version */ + "cnos", + ORTE_MAJOR_VERSION, + ORTE_MINOR_VERSION, + ORTE_RELEASE_VERSION, + + /* Component open and close functions */ + orte_sds_cnos_component_open, + orte_sds_cnos_component_close + }, + + /* Next the MCA v1.0.0 component meta data */ + { + /* Whether the component is checkpointable or not */ + true + }, + + /* Initialization / querying functions */ + orte_sds_cnos_component_init +}; + + +int +orte_sds_cnos_component_open(void) +{ + return ORTE_SUCCESS; +} + + +orte_sds_base_module_t * +orte_sds_cnos_component_init(int *priority) +{ + int id; + char *mode; + + /* okay, not seed/singleton attempt another approach */ + id = mca_base_param_register_string("ns", "nds", NULL, NULL, NULL); + mca_base_param_lookup_string(id, &mode); + + /* if mode isn't NULL, then we have an ORTE starter. Don't use + this component */ + if (NULL != mode) return NULL; + + *priority = 60; + return sds_cnos_module; +} + + +int +orte_sds_cnos_component_close(void) +{ + return ORTE_SUCCESS; +} + diff --git a/orte/mca/sds/cnos/sds_cnos_module.c b/orte/mca/sds/cnos/sds_cnos_module.c new file mode 100644 index 0000000000..ccc9a26feb --- /dev/null +++ b/orte/mca/sds/cnos/sds_cnos_module.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + * + */ + +#include "orte_config.h" + +#include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/base/base.h" +#include "mca/sds/cnos/sds_cnos.h" + +orte_sds_base_module_t sds_cnos_module = { + orte_sds_base_contact_universe, + orte_sds_cnos_set_name, + orte_sds_cnos_finalize, +}; + +int +orte_sds_cnos_contact_universe(void) +{ + return ORTE_ERR_NOT_IMPLEMENTED; +} + +int +orte_sds_cnos_set_name(void) +{ + return ORTE_ERR_NOT_IMPLEMENTED; +} + + +int +orte_sds_cnos_finalize(void) +{ + return ORTE_ERR_NOT_IMPLEMENTED; +} diff --git a/orte/mca/sds/env/Makefile.am b/orte/mca/sds/env/Makefile.am new file mode 100644 index 0000000000..f13de1c707 --- /dev/null +++ b/orte/mca/sds/env/Makefile.am @@ -0,0 +1,45 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# Use the top-level Makefile.options + +include $(top_ompi_srcdir)/config/Makefile.options + +sources = \ + sds_env.h \ + sds_env_component.c \ + sds_env_module.c + +# Make the output library in this directory, and name it either +# mca__.la (for DSO builds) or libmca__.la +# (for static builds). + +if OMPI_BUILD_sds_env_DSO +component_noinst = +component_install = mca_sds_env.la +else +component_noinst = libmca_sds_env.la +component_install = +endif + +mcacomponentdir = $(libdir)/openmpi +mcacomponent_LTLIBRARIES = $(component_install) +mca_sds_env_la_SOURCES = $(sources) +mca_sds_env_la_LDFLAGS = -module -avoid-version + +noinst_LTLIBRARIES = $(component_noinst) +libmca_sds_env_la_SOURCES =$(sources) +libmca_sds_env_la_LDFLAGS = -module -avoid-version diff --git a/orte/mca/sds/env/configure.params b/orte/mca/sds/env/configure.params new file mode 100644 index 0000000000..1ecd4db2dd --- /dev/null +++ b/orte/mca/sds/env/configure.params @@ -0,0 +1,19 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +PARAM_INIT_FILE=sds_env_component.c +PARAM_CONFIG_FILES="Makefile" diff --git a/orte/mca/sds/env/sds_env.h b/orte/mca/sds/env/sds_env.h new file mode 100644 index 0000000000..7f66ed611b --- /dev/null +++ b/orte/mca/sds/env/sds_env.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef ORTE_SDS_ENV_H +#define ORTE_SDS_ENV_H + +#if defined(c_plusplus) || defined(__cplusplus) +extern "C" { +#endif + + /* + * Module open / close + */ + int orte_sds_env_component_open(void); + int orte_sds_env_component_close(void); + orte_sds_base_module_t* orte_sds_env_component_init(int *priority); + + /* + * Startup / Shutdown + */ + int orte_sds_env_finalize(void); + + /* + * Module functions + */ + int orte_sds_env_set_name(void); + + +#if defined(c_plusplus) || defined(__cplusplus) +} +#endif + +#endif /* ORTE_SDS_ENV_H */ diff --git a/orte/mca/sds/env/sds_env_component.c b/orte/mca/sds/env/sds_env_component.c new file mode 100644 index 0000000000..59748b15a4 --- /dev/null +++ b/orte/mca/sds/env/sds_env_component.c @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * 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 "orte_config.h" + +#include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/env/sds_env.h" +#include "mca/base/mca_base_param.h" + +extern orte_sds_base_module_t sds_env_module; + +/* + * Instantiate the public struct with all of our public information + * and pointers to our public functions in it + */ +orte_sds_base_component_t mca_sds_env_component = { + { + /* Indicate that we are a sds v1.0.0 component (which also + implies a specific MCA version) */ + ORTE_SDS_BASE_VERSION_1_0_0, + + /* Component name and version */ + "env", + ORTE_MAJOR_VERSION, + ORTE_MINOR_VERSION, + ORTE_RELEASE_VERSION, + + /* Component open and close functions */ + orte_sds_env_component_open, + orte_sds_env_component_close + }, + + /* Next the MCA v1.0.0 component meta data */ + { + /* Whether the component is checkpointable or not */ + true + }, + + /* Initialization / querying functions */ + orte_sds_env_component_init +}; + + +int +orte_sds_env_component_open(void) +{ + return ORTE_SUCCESS; +} + + +orte_sds_base_module_t * +orte_sds_env_component_init(int *priority) +{ + int id; + char *mode; + + /* okay, not seed/singleton attempt another approach */ + id = mca_base_param_register_string("ns", "nds", NULL, NULL, NULL); + mca_base_param_lookup_string(id, &mode); + + if (NULL == mode || 0 != strcmp("env", mode)) { return NULL; } + + *priority = 20; + return &sds_env_module; +} + + +int +orte_sds_env_component_close(void) +{ + return ORTE_SUCCESS; +} + diff --git a/orte/mca/ns/base/ns_base_nds_env.c b/orte/mca/sds/env/sds_env_module.c similarity index 55% rename from orte/mca/ns/base/ns_base_nds_env.c rename to orte/mca/sds/env/sds_env_module.c index eb620c649b..1833be05f8 100644 --- a/orte/mca/ns/base/ns_base_nds_env.c +++ b/orte/mca/sds/env/sds_env_module.c @@ -12,22 +12,32 @@ * Additional copyrights may follow * * $HEADER$ - */ -/** @file: + * */ #include "orte_config.h" + #include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/base/base.h" +#include "mca/sds/env/sds_env.h" #include "util/proc_info.h" #include "opal/util/opal_environ.h" #include "mca/base/mca_base_param.h" #include "mca/ns/ns.h" #include "mca/errmgr/errmgr.h" #include "mca/ns/base/base.h" -#include "mca/ns/base/ns_base_nds.h" -int orte_ns_nds_env_get(void) +orte_sds_base_module_t sds_env_module = { + orte_sds_base_basic_contact_universe, + orte_sds_env_set_name, + orte_sds_env_finalize, +}; + + +int +orte_sds_env_set_name(void) { int rc; int id; @@ -36,6 +46,7 @@ int orte_ns_nds_env_get(void) char* name_string = NULL; id = mca_base_param_register_string("ns", "nds", "name", NULL, NULL); mca_base_param_lookup_string(id, &name_string); + if(name_string != NULL) { if (ORTE_SUCCESS != (rc = orte_ns_base_convert_string_to_process_name( &(orte_process_info.my_name), @@ -118,99 +129,8 @@ int orte_ns_nds_env_get(void) } -int orte_ns_nds_env_put(const orte_process_name_t* name, - orte_vpid_t vpid_start, size_t num_procs, - char ***env) +int +orte_sds_env_finalize(void) { - char* param; - char* cellid; - char* jobid; - char* vpid; - char* value; - int rc; - - if(ORTE_SUCCESS != (rc = orte_ns.get_cellid_string(&cellid, name))) { - ORTE_ERROR_LOG(rc); - return rc; - } - if(ORTE_SUCCESS != (rc = orte_ns.get_jobid_string(&jobid, name))) { - ORTE_ERROR_LOG(rc); - return rc; - } - if(ORTE_SUCCESS != (rc = orte_ns.get_vpid_string(&vpid, name))) { - ORTE_ERROR_LOG(rc); - return rc; - } - - /* set the mode to env */ - if(NULL == (param = mca_base_param_environ_variable("ns","nds",NULL))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, "env", true, env); - free(param); - - /* not a seed */ - if(NULL == (param = mca_base_param_environ_variable("seed",NULL,NULL))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_unsetenv(param, env); - free(param); - - /* since we want to pass the name as separate components, make sure - * that the "name" environmental variable is cleared! - */ - if(NULL == (param = mca_base_param_environ_variable("ns","nds","name"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_unsetenv(param, env); - free(param); - - /* setup the name */ - if(NULL == (param = mca_base_param_environ_variable("ns","nds","cellid"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, cellid, true, env); - free(param); - free(cellid); - - if(NULL == (param = mca_base_param_environ_variable("ns","nds","jobid"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, jobid, true, env); - free(param); - free(jobid); - - if(NULL == (param = mca_base_param_environ_variable("ns","nds","vpid"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, vpid, true, env); - free(param); - free(vpid); - - asprintf(&value, "%lu", (unsigned long) vpid_start); - if(NULL == (param = mca_base_param_environ_variable("ns","nds","vpid_start"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, value, true, env); - free(param); - free(value); - - asprintf(&value, "%lu", (unsigned long) num_procs); - if(NULL == (param = mca_base_param_environ_variable("ns","nds","num_procs"))) { - ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); - return ORTE_ERR_OUT_OF_RESOURCE; - } - opal_setenv(param, value, true, env); - free(param); - free(value); return ORTE_SUCCESS; } - - diff --git a/orte/mca/sds/pipe/Makefile.am b/orte/mca/sds/pipe/Makefile.am new file mode 100644 index 0000000000..c559f727a0 --- /dev/null +++ b/orte/mca/sds/pipe/Makefile.am @@ -0,0 +1,45 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# Use the top-level Makefile.options + +include $(top_ompi_srcdir)/config/Makefile.options + +sources = \ + sds_pipe.h \ + sds_pipe_component.c \ + sds_pipe_module.c + +# Make the output library in this directory, and name it either +# mca__.la (for DSO builds) or libmca__.la +# (for static builds). + +if OMPI_BUILD_sds_pipe_DSO +component_noinst = +component_install = mca_sds_pipe.la +else +component_noinst = libmca_sds_pipe.la +component_install = +endif + +mcacomponentdir = $(libdir)/openmpi +mcacomponent_LTLIBRARIES = $(component_install) +mca_sds_pipe_la_SOURCES = $(sources) +mca_sds_pipe_la_LDFLAGS = -module -avoid-version + +noinst_LTLIBRARIES = $(component_noinst) +libmca_sds_pipe_la_SOURCES =$(sources) +libmca_sds_pipe_la_LDFLAGS = -module -avoid-version diff --git a/orte/mca/sds/pipe/configure.m4 b/orte/mca/sds/pipe/configure.m4 new file mode 100644 index 0000000000..9b468aeb41 --- /dev/null +++ b/orte/mca/sds/pipe/configure.m4 @@ -0,0 +1,23 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# MCA_sds_pipe_CONFIG([action-if-found], [action-if-not-found]) +# ----------------------------------------------------------- +AC_DEFUN([MCA_sds_pipe_CONFIG],[ + # check for pipe + AC_CHECK_FUNC([pipe], [$1], [$2]) +])dnl diff --git a/orte/mca/sds/pipe/configure.params b/orte/mca/sds/pipe/configure.params new file mode 100644 index 0000000000..8b6b368efe --- /dev/null +++ b/orte/mca/sds/pipe/configure.params @@ -0,0 +1,19 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +PARAM_INIT_FILE=sds_pipe_component.c +PARAM_CONFIG_FILES="Makefile" diff --git a/orte/mca/sds/pipe/sds_pipe.h b/orte/mca/sds/pipe/sds_pipe.h new file mode 100644 index 0000000000..3da27ae40a --- /dev/null +++ b/orte/mca/sds/pipe/sds_pipe.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef ORTE_SDS_PIPE_H +#define ORTE_SDS_PIPE_H + +#if defined(c_plusplus) || defined(__cplusplus) +extern "C" { +#endif + + /* + * Module open / close + */ + int orte_sds_pipe_component_open(void); + int orte_sds_pipe_component_close(void); + orte_sds_base_module_t* orte_sds_pipe_component_init(int *priority); + + /* + * Startup / Shutdown + */ + int orte_sds_pipe_finalize(void); + + /* + * Module functions + */ + int orte_sds_pipe_set_name(void); + + +#if defined(c_plusplus) || defined(__cplusplus) +} +#endif + +#endif /* ORTE_SDS_PIPE_H */ diff --git a/orte/mca/sds/pipe/sds_pipe_component.c b/orte/mca/sds/pipe/sds_pipe_component.c new file mode 100644 index 0000000000..e42f42e808 --- /dev/null +++ b/orte/mca/sds/pipe/sds_pipe_component.c @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * 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 "orte_config.h" + +#include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/pipe/sds_pipe.h" +#include "mca/base/mca_base_param.h" + +extern orte_sds_base_module_t sds_pipe_module; + +/* + * Instantiate the public struct with all of our public information + * and pointers to our public functions in it + */ +orte_sds_base_component_t mca_sds_pipe_component = { + /* First, the mca_component_t struct containing meta information + about the component itself */ + { + /* Indicate that we are a sds v1.0.0 component (which also + implies a specific MCA version) */ + ORTE_SDS_BASE_VERSION_1_0_0, + + /* Component name and version */ + "pipe", + ORTE_MAJOR_VERSION, + ORTE_MINOR_VERSION, + ORTE_RELEASE_VERSION, + + /* Component open and close functions */ + orte_sds_pipe_component_open, + orte_sds_pipe_component_close + }, + + /* Next the MCA v1.0.0 component meta data */ + { + /* Whether the component is checkpointable or not */ + true + }, + + /* Initialization / querying functions */ + orte_sds_pipe_component_init +}; + + +int +orte_sds_pipe_component_open(void) +{ + return ORTE_SUCCESS; +} + + +orte_sds_base_module_t * +orte_sds_pipe_component_init(int *priority) +{ + int id; + char *mode; + + /* okay, not seed/singleton attempt another approach */ + id = mca_base_param_register_string("ns", "nds", NULL, NULL, NULL); + mca_base_param_lookup_string(id, &mode); + + if (NULL == mode || 0 != strcmp("pipe", mode)) { return NULL; } + + *priority = 20; + return &sds_pipe_module; +} + + +int +orte_sds_pipe_component_close(void) +{ + return ORTE_SUCCESS; +} + diff --git a/orte/mca/ns/base/ns_base_nds_pipe.c b/orte/mca/sds/pipe/sds_pipe_module.c similarity index 73% rename from orte/mca/ns/base/ns_base_nds_pipe.c rename to orte/mca/sds/pipe/sds_pipe_module.c index 4b4453618b..93387384e1 100644 --- a/orte/mca/ns/base/ns_base_nds_pipe.c +++ b/orte/mca/sds/pipe/sds_pipe_module.c @@ -12,11 +12,11 @@ * Additional copyrights may follow * * $HEADER$ - */ -/** @file: + * */ #include "orte_config.h" + #ifdef HAVE_UNISTD_H #include #endif @@ -27,15 +27,24 @@ #include "util/proc_info.h" #include "opal/util/output.h" #include "mca/base/mca_base_param.h" -#include "mca/ns/ns.h" #include "mca/errmgr/errmgr.h" +#include "mca/ns/ns.h" #include "mca/ns/base/base.h" -#include "mca/ns/base/ns_base_nds.h" +#include "mca/sds/sds.h" +#include "mca/sds/base/base.h" +#include "mca/sds/pipe/sds_pipe.h" + +orte_sds_base_module_t sds_pipe_module = { + orte_sds_base_basic_contact_universe, + orte_sds_pipe_set_name, + orte_sds_pipe_finalize, +}; -int orte_ns_nds_pipe_get(void) +int +orte_sds_pipe_set_name(void) { - int rc, fd, id; + int rc, fd, id; orte_process_name_t name; size_t num_procs; @@ -73,28 +82,8 @@ int orte_ns_nds_pipe_get(void) } -int orte_ns_nds_pipe_put(const orte_process_name_t* name, orte_vpid_t vpid_start, size_t num_procs, int fd) +int +orte_sds_pipe_finalize(void) { - int rc; - - rc = write(fd,name,sizeof(orte_process_name_t)); - if(rc != sizeof(orte_process_name_t)) { - ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM); - return ORTE_ERR_NOT_FOUND; - } - - rc = write(fd,&vpid_start, sizeof(vpid_start)); - if(rc != sizeof(vpid_start)) { - ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM); - return ORTE_ERR_NOT_FOUND; - } - - rc = write(fd,&num_procs, sizeof(num_procs)); - if(rc != sizeof(num_procs)) { - ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM); - return ORTE_ERR_NOT_FOUND; - } - return ORTE_SUCCESS; } - diff --git a/orte/mca/sds/sds.h b/orte/mca/sds/sds.h new file mode 100644 index 0000000000..4b73120871 --- /dev/null +++ b/orte/mca/sds/sds.h @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ +/** @file: + * + * The Open MPI Start-up Discovery Service + * + */ + +#ifndef ORTE_SDS_H +#define ORTE_SDS_H + +#include "opal/mca/mca.h" + +/* + * Module and component structures + */ +struct orte_sds_base_module_1_0_0_t; +typedef struct orte_sds_base_module_1_0_0_t orte_sds_base_module_1_0_0_t; +typedef orte_sds_base_module_1_0_0_t orte_sds_base_module_t; + +struct orte_sds_base_component_1_0_0_t; +typedef struct orte_sds_base_component_1_0_0_t orte_sds_base_component_1_0_0_t; +typedef orte_sds_base_component_1_0_0_t orte_sds_base_component_t; + +/** + * Selection function + * + * Priority list: + * + * - 0 singleton process (not seed) + * - 20 process has name provided by starter + * - 40 seed process + * - 60 process has name provided by starter and needs to + * override seed. This should be used with care, and + * is mainly intended for environments where orte is + * not the starter (such as cnos) + */ +typedef orte_sds_base_module_t* +(*orte_sds_base_component_init_fn_t)(int *priority); + +/* + * Module functions + */ + +/** + * Contact universe and set contact information + * + * Attempt to contact the universe to get replica contact information. + */ +typedef int (*orte_sds_base_contact_universe_fn_t)(void); + +/** + * Set Name and Job information for current process + * + * Set name and job information for current process. This information + * includes: + * + * - orte_process_info.my_name + * - orte_process_info.vpid_start + * - orte_process_info.num_procs + * + * From this, the ns is able to develop a map of all processes started + * in the curent job. + * + * Upon startup, each process must discover its official ORTE process + * name. There are several ways this name could be passed to the + * process. This typicall involves an environmental parameter of some + * appropriate name, possibly followed by some computation of the vpid + * based on process rank. This function checks the different + * environmental parameters to find the one that has been set with the + * appropriate value, determines (based on that) the name of this + * process, and then sets that value in the orte_system_info global + * structure. + */ +typedef int (*orte_sds_base_set_name_fn_t)(void); + +typedef int (*orte_sds_base_module_finalize_fn_t)(void); + + +/* + * the standard module data structure + */ +struct orte_sds_base_module_1_0_0_t { + orte_sds_base_contact_universe_fn_t contact_universe; + orte_sds_base_set_name_fn_t set_name; + orte_sds_base_module_finalize_fn_t finalize; +}; + + +/* + * the standard component data structure + */ +struct orte_sds_base_component_1_0_0_t { + mca_base_component_t sds_version; + mca_base_component_data_1_0_0_t sds_data; + orte_sds_base_component_init_fn_t sds_init; +}; + +/* + * Macro for use in components that are of type ns v1.0.0 + */ +#define ORTE_SDS_BASE_VERSION_1_0_0 \ + /* sds v1.0 is chained to MCA v1.0 */ \ + MCA_BASE_VERSION_1_0_0, \ + /* sds v1.0 */ \ + "sds", 1, 0, 0 + +#endif diff --git a/orte/mca/sds/seed/Makefile.am b/orte/mca/sds/seed/Makefile.am new file mode 100644 index 0000000000..8e396309c9 --- /dev/null +++ b/orte/mca/sds/seed/Makefile.am @@ -0,0 +1,45 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# Use the top-level Makefile.options + +include $(top_ompi_srcdir)/config/Makefile.options + +sources = \ + sds_seed.h \ + sds_seed_component.c \ + sds_seed_module.c + +# Make the output library in this directory, and name it either +# mca__.la (for DSO builds) or libmca__.la +# (for static builds). + +if OMPI_BUILD_sds_seed_DSO +component_noinst = +component_install = mca_sds_seed.la +else +component_noinst = libmca_sds_seed.la +component_install = +endif + +mcacomponentdir = $(libdir)/openmpi +mcacomponent_LTLIBRARIES = $(component_install) +mca_sds_seed_la_SOURCES = $(sources) +mca_sds_seed_la_LDFLAGS = -module -avoid-version + +noinst_LTLIBRARIES = $(component_noinst) +libmca_sds_seed_la_SOURCES =$(sources) +libmca_sds_seed_la_LDFLAGS = -module -avoid-version diff --git a/orte/mca/sds/seed/configure.params b/orte/mca/sds/seed/configure.params new file mode 100644 index 0000000000..09aa6b12e8 --- /dev/null +++ b/orte/mca/sds/seed/configure.params @@ -0,0 +1,19 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +PARAM_INIT_FILE=sds_seed_component.c +PARAM_CONFIG_FILES="Makefile" diff --git a/orte/mca/sds/seed/sds_seed.h b/orte/mca/sds/seed/sds_seed.h new file mode 100644 index 0000000000..6f1f7d7989 --- /dev/null +++ b/orte/mca/sds/seed/sds_seed.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef ORTE_SDS_SEED_H +#define ORTE_SDS_SEED_H + +#if defined(c_plusplus) || defined(__cplusplus) +extern "C" { +#endif + + /* + * Module open / close + */ + int orte_sds_seed_component_open(void); + int orte_sds_seed_component_close(void); + orte_sds_base_module_t* orte_sds_seed_component_init(int *priority); + + /* + * Startup / Shutdown + */ + int orte_sds_seed_finalize(void); + + /* + * Module functions + */ + int orte_sds_seed_set_name(void); + + +#if defined(c_plusplus) || defined(__cplusplus) +} +#endif + +#endif /* ORTE_SDS_SEED_H */ diff --git a/orte/mca/sds/seed/sds_seed_component.c b/orte/mca/sds/seed/sds_seed_component.c new file mode 100644 index 0000000000..d8158b93d6 --- /dev/null +++ b/orte/mca/sds/seed/sds_seed_component.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * 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 "orte_config.h" + +#include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/seed/sds_seed.h" +#include "mca/base/mca_base_param.h" +#include "util/proc_info.h" + +extern orte_sds_base_module_t sds_seed_module; + +/* + * Instantiate the public struct with all of our public information + * and pointers to our public functions in it + */ +orte_sds_base_component_t mca_sds_seed_component = { + /* First, the mca_component_t struct containing meta information + about the component itself */ + { + /* Indicate that we are a sds v1.0.0 component (which also + implies a specific MCA version) */ + ORTE_SDS_BASE_VERSION_1_0_0, + + /* Component name and version */ + "seed", + ORTE_MAJOR_VERSION, + ORTE_MINOR_VERSION, + ORTE_RELEASE_VERSION, + + /* Component open and close functions */ + orte_sds_seed_component_open, + orte_sds_seed_component_close + }, + + /* Next the MCA v1.0.0 component meta data */ + { + /* Whether the component is checkpointable or not */ + true + }, + + /* Initialization / querying functions */ + orte_sds_seed_component_init +}; + + +int +orte_sds_seed_component_open(void) +{ + return ORTE_SUCCESS; +} + + +orte_sds_base_module_t * +orte_sds_seed_component_init(int *priority) +{ + if (orte_process_info.seed == false) return NULL; + + *priority = 40; + return &sds_seed_module; +} + + +int +orte_sds_seed_component_close(void) +{ + return ORTE_SUCCESS; +} + diff --git a/orte/mca/sds/seed/sds_seed_module.c b/orte/mca/sds/seed/sds_seed_module.c new file mode 100644 index 0000000000..0ed1c9883b --- /dev/null +++ b/orte/mca/sds/seed/sds_seed_module.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + * + */ + +#include "orte_config.h" + +#include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/base/base.h" +#include "mca/sds/seed/sds_seed.h" + +orte_sds_base_module_t sds_seed_module = { + orte_sds_base_basic_contact_universe, + orte_sds_base_seed_set_name, + orte_sds_seed_finalize, +}; + + +/* seed_set_name is part of base because it's possible that the + base_set_name will decide that the process has been "promoted" to + seed after the selection occured. Therefore, need a reasonable way + to do the seed setname without actually having the seed + component. */ + + +int +orte_sds_seed_finalize(void) +{ + return ORTE_SUCCESS; +} diff --git a/orte/mca/sds/singleton/Makefile.am b/orte/mca/sds/singleton/Makefile.am new file mode 100644 index 0000000000..96bf04b420 --- /dev/null +++ b/orte/mca/sds/singleton/Makefile.am @@ -0,0 +1,45 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# Use the top-level Makefile.options + +include $(top_ompi_srcdir)/config/Makefile.options + +sources = \ + sds_singleton.h \ + sds_singleton_component.c \ + sds_singleton_module.c + +# Make the output library in this directory, and name it either +# mca__.la (for DSO builds) or libmca__.la +# (for static builds). + +if OMPI_BUILD_sds_singleton_DSO +component_noinst = +component_install = mca_sds_singleton.la +else +component_noinst = libmca_sds_singleton.la +component_install = +endif + +mcacomponentdir = $(libdir)/openmpi +mcacomponent_LTLIBRARIES = $(component_install) +mca_sds_singleton_la_SOURCES = $(sources) +mca_sds_singleton_la_LDFLAGS = -module -avoid-version + +noinst_LTLIBRARIES = $(component_noinst) +libmca_sds_singleton_la_SOURCES =$(sources) +libmca_sds_singleton_la_LDFLAGS = -module -avoid-version diff --git a/orte/mca/sds/singleton/configure.params b/orte/mca/sds/singleton/configure.params new file mode 100644 index 0000000000..f7a7476062 --- /dev/null +++ b/orte/mca/sds/singleton/configure.params @@ -0,0 +1,19 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +PARAM_INIT_FILE=sds_singleton_component.c +PARAM_CONFIG_FILES="Makefile" diff --git a/orte/mca/sds/singleton/sds_singleton.h b/orte/mca/sds/singleton/sds_singleton.h new file mode 100644 index 0000000000..00a9f1b75b --- /dev/null +++ b/orte/mca/sds/singleton/sds_singleton.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef ORTE_SDS_SINGLETON_H +#define ORTE_SDS_SINGLETON_H + +#if defined(c_plusplus) || defined(__cplusplus) +extern "C" { +#endif + + /* + * Module open / close + */ + int orte_sds_singleton_component_open(void); + int orte_sds_singleton_component_close(void); + orte_sds_base_module_t* orte_sds_singleton_component_init(int *priority); + + /* + * Startup / Shutdown + */ + int orte_sds_singleton_finalize(void); + + /* + * Module functions + */ + int orte_sds_singleton_set_name(void); + + +#if defined(c_plusplus) || defined(__cplusplus) +} +#endif + +#endif /* ORTE_SDS_SINGLETON_H */ diff --git a/orte/mca/sds/singleton/sds_singleton_component.c b/orte/mca/sds/singleton/sds_singleton_component.c new file mode 100644 index 0000000000..bf4a63b03a --- /dev/null +++ b/orte/mca/sds/singleton/sds_singleton_component.c @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * 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 "orte_config.h" + +#include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/singleton/sds_singleton.h" +#include "mca/base/mca_base_param.h" + +extern orte_sds_base_module_t sds_singleton_module; + +/* + * Instantiate the public struct with all of our public information + * and pointers to our public functions in it + */ +orte_sds_base_component_t mca_sds_singleton_component = { + /* First, the mca_component_t struct containing meta information + about the component itself */ + { + /* Indicate that we are a sds v1.0.0 component (which also + implies a specific MCA version) */ + ORTE_SDS_BASE_VERSION_1_0_0, + + /* Component name and version */ + "singleton", + ORTE_MAJOR_VERSION, + ORTE_MINOR_VERSION, + ORTE_RELEASE_VERSION, + + /* Component open and close functions */ + orte_sds_singleton_component_open, + orte_sds_singleton_component_close + }, + + /* Next the MCA v1.0.0 component meta data */ + { + /* Whether the component is checkpointable or not */ + true + }, + + /* Initialization / querying functions */ + orte_sds_singleton_component_init +}; + + +int +orte_sds_singleton_component_open(void) +{ + return ORTE_SUCCESS; +} + + +orte_sds_base_module_t * +orte_sds_singleton_component_init(int *priority) +{ + *priority = 0; + return &sds_singleton_module; +} + + +int +orte_sds_singleton_component_close(void) +{ + return ORTE_SUCCESS; +} + diff --git a/orte/mca/sds/singleton/sds_singleton_module.c b/orte/mca/sds/singleton/sds_singleton_module.c new file mode 100644 index 0000000000..e5bb273904 --- /dev/null +++ b/orte/mca/sds/singleton/sds_singleton_module.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + * + */ + +#include "orte_config.h" + +#include "include/orte_constants.h" +#include "mca/sds/sds.h" +#include "mca/sds/base/base.h" +#include "mca/sds/singleton/sds_singleton.h" +#include "util/proc_info.h" +#include "mca/base/mca_base_param.h" +#include "mca/errmgr/errmgr.h" +#include "mca/ns/base/base.h" +#include "opal/util/output.h" + + +orte_sds_base_module_t sds_singleton_module = { + orte_sds_base_basic_contact_universe, + orte_sds_singleton_set_name, + orte_sds_singleton_finalize, +}; + + +int +orte_sds_singleton_set_name(void) +{ + int rc, id, flag; + orte_vpid_t vpid; + + if (ORTE_SUCCESS != (rc = orte_ns.create_my_name())) { + ORTE_ERROR_LOG(rc); + return rc; + } + + if (ORTE_SUCCESS != (rc = orte_ns.get_vpid(&vpid, orte_process_info.my_name))) { + ORTE_ERROR_LOG(rc); + return rc; + } + + orte_process_info.num_procs = 1; + orte_process_info.vpid_start = vpid; + /* only set the singleton flag is we are NOT infrastructure */ + id = mca_base_param_register_int("orte", "base", "infrastructure", + NULL, (int)false); + mca_base_param_lookup_int(id, &flag); + if (!flag) { + orte_process_info.singleton = true; + } + + return ORTE_SUCCESS; +} + + +int +orte_sds_singleton_finalize(void) +{ + return OMPI_ERR_NOT_IMPLEMENTED; +} diff --git a/orte/runtime/orte_init_stage1.c b/orte/runtime/orte_init_stage1.c index f3f4a161c2..c5b85473af 100644 --- a/orte/runtime/orte_init_stage1.c +++ b/orte/runtime/orte_init_stage1.c @@ -36,6 +36,7 @@ #include "mca/errmgr/base/base.h" #include "mca/iof/base/base.h" #include "mca/ns/base/base.h" +#include "mca/sds/base/base.h" #include "mca/gpr/base/base.h" #include "mca/rmgr/base/base.h" #include "mca/rmaps/base/base.h" @@ -56,13 +57,10 @@ int orte_init_stage1(void) { - int ret, rc, exit_if_not_exist; - char *universe; + int ret, rc; char *jobid_str = NULL; char *procid_str = NULL; char *contact_path = NULL; - pid_t pid; - orte_universe_t univ; orte_jobid_t my_jobid; orte_cellid_t my_cellid; orte_gpr_value_t value, *values; @@ -165,98 +163,27 @@ int orte_init_stage1(void) /* * Initialize schema utilities */ - if (ORTE_SUCCESS != (ret = orte_schema_base_open())) { ORTE_ERROR_LOG(ret); return ret; } - /* if we were NOT given registry and name service replicas (i.e., we - * weren't told a universe contact point), check for some - * existing universe to join */ - if (NULL == orte_process_info.ns_replica_uri || NULL == orte_process_info.gpr_replica_uri) { - if (ORTE_SUCCESS == (ret = orte_universe_exists(&univ))) { - /* copy universe info into our universe structure */ - orte_universe_info.name = univ.name; - orte_universe_info.host = univ.host; - orte_universe_info.uid = univ.uid; - orte_universe_info.persistence = univ.persistence; - orte_universe_info.scope = univ.scope; - orte_universe_info.console = univ.console; - orte_universe_info.seed_uri = univ.seed_uri; - orte_universe_info.console_connected = univ.console_connected; - orte_universe_info.scriptfile = univ.scriptfile; - /* define the replica contact points */ - orte_process_info.ns_replica_uri = strdup(univ.seed_uri); - orte_process_info.gpr_replica_uri = strdup(univ.seed_uri); - } else { - /* if an existing universe is not detected, check the - * relevant MCA parameter to see if the caller wants - * us to abort in this situation - */ - if (0 > (rc = mca_base_param_register_int("orte", "univ", "exist", NULL, 0))) { - ORTE_ERROR_LOG(rc); - return rc; - } - if (ORTE_SUCCESS != (rc = mca_base_param_lookup_int(rc, &exit_if_not_exist))) { - ORTE_ERROR_LOG(rc); - return rc; - } - if (exit_if_not_exist) { - /* cleanup the subsystems that were already opened */ - orte_wait_finalize(); - orte_ns_base_close(); - orte_gpr_base_close(); - orte_schema_base_close(); - orte_rml_base_close(); - orte_dps_close(); - orte_errmgr_base_close(); - opal_progress_finalize(); - opal_event_fini(); - orte_sys_info_finalize(); - orte_proc_info_finalize(); - orte_univ_info_finalize(); - opal_finalize(); - return ORTE_ERR_UNREACH; - } - if (ORTE_ERR_NOT_FOUND != ret) { - /* if it exists but no contact could be established, - * define unique name based on current one. - * and start new universe with me as seed - */ - universe = strdup(orte_universe_info.name); - free(orte_universe_info.name); - orte_universe_info.name = NULL; - pid = getpid(); - if (0 > asprintf(&orte_universe_info.name, "%s-%d", universe, (int)pid)) { - opal_output(0, "orte_init: failed to create unique universe name"); - return ret; - } - opal_output(0, "Could not join a running, existing universe"); - opal_output(0, "Establishing a new one named: %s", - orte_universe_info.name); - - } - orte_process_info.seed = true; - /* since we are seed, ensure that all replica info is NULL'd */ - if (NULL != orte_process_info.ns_replica_uri) { - free(orte_process_info.ns_replica_uri); - orte_process_info.ns_replica_uri = NULL; - } - if (NULL != orte_process_info.ns_replica) { - free(orte_process_info.ns_replica); - orte_process_info.ns_replica = NULL; - } - - if (NULL != orte_process_info.gpr_replica_uri) { - free(orte_process_info.gpr_replica_uri); - orte_process_info.gpr_replica_uri = NULL; - } - if (NULL != orte_process_info.gpr_replica) { - free(orte_process_info.gpr_replica); - orte_process_info.gpr_replica = NULL; - } - } + /* + * Initialize and select sds + */ + if (ORTE_SUCCESS != (ret = orte_sds_base_open())) { + ORTE_ERROR_LOG(ret); + return ret; + } + if (ORTE_SUCCESS != (ret = orte_sds_base_select())) { + ORTE_ERROR_LOG(ret); + return ret; + } + + /* Try to connect to the universe */ + if (ORTE_SUCCESS != (ret = orte_sds_base_contact_universe())) { + ORTE_ERROR_LOG(ret); + return ret; } /* @@ -283,12 +210,15 @@ int orte_init_stage1(void) orte_rml.set_uri(orte_process_info.gpr_replica_uri); } - /***** SET MY NAME *****/ - if (ORTE_SUCCESS != (ret = orte_ns.set_my_name())) { + /* set my name and the names of the procs I was started with */ + if (ORTE_SUCCESS != (ret = orte_sds_base_set_name())) { ORTE_ERROR_LOG(ret); return ret; } + /* all done with sds - clean up and call it a day */ + orte_sds_base_close(); + /* if I'm the seed, set the seed uri to be me! */ if (orte_process_info.seed) { orte_universe_info.seed_uri = orte_rml.get_uri();