Checkpoint
This commit was SVN r5814.
Этот коммит содержится в:
родитель
131d49152f
Коммит
93eb0d4b40
@ -32,7 +32,6 @@ static int orte_rds_resfile_parse_site(char *site, FILE *fp);
|
||||
|
||||
static int orte_rds_resfile_parse_resource(orte_rds_cell_desc_t *cell, FILE *fp);
|
||||
|
||||
|
||||
static int orte_rds_resfile_parse_resource(orte_rds_cell_desc_t *cell, FILE *fp)
|
||||
{
|
||||
char *line;
|
||||
@ -191,6 +190,12 @@ int orte_rds_resfile_query(void)
|
||||
|
||||
OMPI_LOCK(&mca_rds_resfile_component.lock);
|
||||
|
||||
if (orte_rds_resfile_queried) {
|
||||
OMPI_UNLOCK(&mca_rds_resfile_component.lock);
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
orte_rds_resfile_queried = true;
|
||||
|
||||
/* get the resource filename */
|
||||
fileid = mca_base_param_register_string("rds", "resfile", "name", NULL, NULL);
|
||||
mca_base_param_lookup_string(fileid, &resfile);
|
||||
|
@ -73,6 +73,7 @@ typedef struct orte_rds_resfile_component_t orte_rds_resfile_component_t;
|
||||
OMPI_COMP_EXPORT extern orte_rds_resfile_component_t mca_rds_resfile_component;
|
||||
OMPI_COMP_EXPORT extern orte_rds_base_module_t orte_rds_resfile_module;
|
||||
|
||||
extern bool orte_rds_resfile_queried;
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
}
|
||||
|
@ -66,6 +66,11 @@ orte_rds_base_module_t orte_rds_resfile_module = {
|
||||
orte_rds_resfile_finalize
|
||||
};
|
||||
|
||||
/*
|
||||
* Instantiate component variables
|
||||
*/
|
||||
bool orte_rds_resfile_queried;
|
||||
|
||||
/**
|
||||
* Convience functions to lookup MCA parameter values.
|
||||
*/
|
||||
@ -99,6 +104,7 @@ static int orte_rds_resfile_open(void)
|
||||
OBJ_CONSTRUCT(&mca_rds_resfile_component.lock, ompi_mutex_t);
|
||||
mca_rds_resfile_component.debug = orte_rds_resfile_param_register_int("debug",1);
|
||||
mca_rds_resfile_component.filename = orte_rds_resfile_param_register_string("file", NULL);
|
||||
orte_rds_resfile_queried = false;
|
||||
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ int orte_init_stage1(void)
|
||||
free(orte_universe_info.name);
|
||||
orte_universe_info.name = NULL;
|
||||
pid = getpid();
|
||||
if (0 > asprintf(&orte_universe_info.name, "%s-%d", universe, pid)) {
|
||||
if (0 > asprintf(&orte_universe_info.name, "%s-%d", universe, (int)pid)) {
|
||||
ompi_output(0, "orte_init: failed to create unique universe name");
|
||||
return ret;
|
||||
}
|
||||
|
@ -44,6 +44,7 @@
|
||||
#include "threads/condition.h"
|
||||
#include "runtime/orte_wait.h"
|
||||
#include "util/argv.h"
|
||||
#include "util/ompi_environ.h"
|
||||
#include "util/output.h"
|
||||
#include "util/path.h"
|
||||
#include "util/univ_info.h"
|
||||
@ -79,6 +80,10 @@ typedef struct {
|
||||
*/
|
||||
static ompi_mutex_t orte_setup_hnp_mutex;
|
||||
static ompi_condition_t orte_setup_hnp_condition;
|
||||
/* Local return code */
|
||||
static int orte_setup_hnp_rc;
|
||||
/* Local uri storage */
|
||||
static char *orte_setup_hnp_orted_uri;
|
||||
|
||||
static orte_setup_hnp_cb_data_t orte_setup_hnp_cbdata = {NULL, NULL, NULL, 0};
|
||||
|
||||
@ -421,6 +426,7 @@ MOVEON:
|
||||
}
|
||||
|
||||
/* fork a child to exec the rsh/ssh session */
|
||||
orte_setup_hnp_rc = ORTE_SUCCESS;
|
||||
pid = fork();
|
||||
if (pid < 0) {
|
||||
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
|
||||
@ -446,9 +452,46 @@ MOVEON:
|
||||
OMPI_THREAD_LOCK(&orte_setup_hnp_mutex);
|
||||
ompi_condition_timedwait(&orte_setup_hnp_condition, &orte_setup_hnp_mutex, &ts);
|
||||
OMPI_THREAD_UNLOCK(&orte_setup_hnp_mutex);
|
||||
|
||||
if (ORTE_SUCCESS == orte_setup_hnp_rc) {
|
||||
/* need to restart the local system so it can connect to the remote daemon.
|
||||
* we only want to clear the run-time itself - we cannot close the OPAL
|
||||
* utilities, though, or we will lose all of our MCA parameters
|
||||
*/
|
||||
orte_system_finalize();
|
||||
/*
|
||||
* now set the relevant MCA parameters to point us at the remote daemon...
|
||||
*/
|
||||
if (ORTE_SUCCESS != (rc = ompi_setenv("OMPI_MCA_gpr_replica_uri",
|
||||
orte_setup_hnp_orted_uri, true, &environ))) {
|
||||
fprintf(stderr, "orte_setup_hnp: could not set gpr_replica_uri in environ\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (ORTE_SUCCESS != (rc = ompi_setenv("OMPI_MCA_ns_replica_uri",
|
||||
orte_setup_hnp_orted_uri, true, &environ))) {
|
||||
fprintf(stderr, "orte_setup_hnp: could not set ns_replica_uri in environ\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
ompi_unsetenv("OMPI_MCA_seed", &environ);
|
||||
|
||||
/*
|
||||
* ...re-init ourselves...
|
||||
*/
|
||||
if (ORTE_SUCCESS != (rc = orte_system_init())) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
/*
|
||||
* ...and we are now ready to go!
|
||||
*/
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
return orte_setup_hnp_rc;
|
||||
}
|
||||
|
||||
CLEANUP:
|
||||
return rc;
|
||||
|
||||
@ -463,15 +506,19 @@ static void orte_setup_hnp_recv(int status, orte_process_name_t* sender,
|
||||
orte_buffer_t* buffer, orte_rml_tag_t tag,
|
||||
void* cbdata)
|
||||
{
|
||||
char *orted_uri;
|
||||
size_t n=1;
|
||||
int rc;
|
||||
|
||||
OMPI_THREAD_LOCK(&orte_setup_hnp_mutex);
|
||||
if (ORTE_SUCCESS != (rc = orte_dps.unpack(buffer, &orted_uri, &n, ORTE_STRING))) {
|
||||
if (ORTE_SUCCESS != (rc = orte_dps.unpack(buffer, &orte_setup_hnp_orted_uri, &n, ORTE_STRING))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
orte_setup_hnp_rc = rc;
|
||||
ompi_condition_signal(&orte_setup_hnp_condition);
|
||||
OMPI_THREAD_UNLOCK(&orte_setup_hnp_mutex);
|
||||
return;
|
||||
}
|
||||
ompi_output(0, "orteprobe: received uri %s", orted_uri);
|
||||
ompi_output(0, "orteprobe: received uri %s", orte_setup_hnp_orted_uri);
|
||||
orte_setup_hnp_rc = ORTE_SUCCESS;
|
||||
ompi_condition_signal(&orte_setup_hnp_condition);
|
||||
OMPI_THREAD_UNLOCK(&orte_setup_hnp_mutex);
|
||||
}
|
||||
|
@ -25,7 +25,8 @@ check_PROGRAMS = \
|
||||
orte_os_create_dirpath \
|
||||
orte_session_dir \
|
||||
ompi_argv \
|
||||
ompi_basename
|
||||
ompi_basename \
|
||||
orte_universe_setup_file_io
|
||||
|
||||
TESTS = \
|
||||
$(check_PROGRAMS)
|
||||
@ -79,3 +80,9 @@ orte_session_dir_LDADD = \
|
||||
$(top_builddir)/test/support/libsupport.a
|
||||
orte_session_dir_DEPENDENCIES = $(orte_session_dir_LDADD)
|
||||
|
||||
orte_universe_setup_file_io_SOURCES = orte_universe_setup_file_io.c
|
||||
orte_universe_setup_file_io_LDADD = \
|
||||
$(top_builddir)/src/libmpi.la \
|
||||
$(top_builddir)/test/support/libsupport.a
|
||||
orte_universe_setup_file_io_DEPENDENCIES = $(orte_universe_setup_file_io_LDADD)
|
||||
|
||||
|
111
test/util/orte_universe_setup_file_io.c
Обычный файл
111
test/util/orte_universe_setup_file_io.c
Обычный файл
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* 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 <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#include "util/univ_info.h"
|
||||
#include "util/universe_setup_file_io.h"
|
||||
#include "support.h"
|
||||
|
||||
static bool test1(void); /* verify it returns info */
|
||||
static bool test2(void); /* test second time through */
|
||||
|
||||
orte_universe_t orte_universe_info;
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
test_init("universe_setup_file_io");
|
||||
|
||||
/* initialize the univ_info structure */
|
||||
orte_universe_info.name = strdup("default-universe");
|
||||
orte_universe_info.host = strdup("test-host.domain.org");
|
||||
orte_universe_info.uid = strdup("this-is-me");
|
||||
orte_universe_info.persistence = true;
|
||||
orte_universe_info.scope = strdup("private");
|
||||
orte_universe_info.console = false;
|
||||
orte_universe_info.seed_uri = strdup("0.0.0;tcp://128.165.148.81:52424");
|
||||
orte_universe_info.console_connected = false;
|
||||
orte_universe_info.scriptfile = NULL;
|
||||
|
||||
if (test1()) {
|
||||
test_success();
|
||||
}
|
||||
else {
|
||||
test_failure("universe_setup_file_io write failed");
|
||||
}
|
||||
|
||||
if (test2()) {
|
||||
test_success();
|
||||
}
|
||||
else {
|
||||
test_failure("universe_setup_file_io read failed");
|
||||
}
|
||||
|
||||
test_finalize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static bool test1(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
/* Test write */
|
||||
|
||||
if (ORTE_SUCCESS != (rc = orte_write_universe_setup_file("test-file", &orte_universe_info))) {
|
||||
fprintf(stderr, "universe_setup_file_io: failed write with code %d\n", rc);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static bool test2(void)
|
||||
{
|
||||
int rc;
|
||||
orte_universe_t univ;
|
||||
|
||||
/* Test read */
|
||||
|
||||
if (ORTE_SUCCESS != (rc = orte_read_universe_setup_file("test-file", &univ))) {
|
||||
fprintf(stderr, "universe_setup_file_io: failed read with code %d\n", rc);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (0 != strcmp(orte_universe_info.name, univ.name) ||
|
||||
0 != strcmp(orte_universe_info.host, univ.host) ||
|
||||
0 != strcmp(orte_universe_info.uid, univ.uid) ||
|
||||
orte_universe_info.persistence != univ.persistence ||
|
||||
0 != strcmp(orte_universe_info.scope, univ.scope) ||
|
||||
orte_universe_info.console != univ.console ||
|
||||
0 != strcmp(orte_universe_info.seed_uri, univ.seed_uri) ||
|
||||
orte_universe_info.console_connected != univ.console_connected ||
|
||||
orte_universe_info.scriptfile != univ.scriptfile) {
|
||||
fprintf(stderr, "universe_setup_file_io: read mismatch\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
Загрузка…
Ссылка в новой задаче
Block a user