1
1

This commit cleans up the AMCA parameter implementation a bit.

* Remove the 'opal_mca_base_param_use_amca_sets' global variable
* Harness the fact that you can (read should) call the cmd_line functions
  before initializing opal_init_util(). This pushes the MCA/GMCA/AMCA
  command line options into the environment before OPAL inits and starts
  to use these values. By putting the cmd_line parse before opal_init_util
  in orterun and orted we only parse the *MCA parameter files once, and 
  correctly (alleviating the need to 'recache' the files on init.)
* Small bits of cleanup.

This commit was SVN r15219.
Этот коммит содержится в:
Josh Hursey 2007-06-27 01:03:31 +00:00
родитель dada472c13
Коммит f88aa6c273
5 изменённых файлов: 81 добавлений и 160 удалений

Просмотреть файл

@ -47,16 +47,6 @@
#include "opal/constants.h"
#include "opal/util/output.h"
/*
* A boolean to temporarily skip over the Aggregate MCA Paramater Set
* reading.
* We need to do this as a global variable since all other entry
* functions to the _param_ funcitons make sure that the init function
* has been called. By calling init the system will pick up the
* wrong files
*/
bool opal_mca_base_param_use_amca_sets = true;
/*
* Public variables
*
@ -74,7 +64,7 @@ static const char *mca_prefix = "OMPI_MCA_";
static char *home = NULL;
static char *cwd = NULL;
static bool initialized = false;
static char * force_agg_path = NULL;
/*
* local functions
@ -203,8 +193,25 @@ int mca_base_param_recache_files(bool rel_path_search)
id = mca_base_param_reg_string_name("mca", "base_param_file_path",
"Aggregate MCA parameter Search path",
false, false, agg_default_path, &new_agg_path);
if( opal_mca_base_param_use_amca_sets && NULL != new_agg_files ) {
id = mca_base_param_reg_string_name("mca", "base_param_file_path_force",
"Forced Aggregate MCA parameter Search path",
false, false, NULL, &force_agg_path);
if( NULL != force_agg_path ) {
char *tmp_str = NULL;
if( NULL == new_agg_path ) {
new_agg_path = strdup(force_agg_path);
}
else {
tmp_str = strdup(new_agg_path);
free(new_agg_path);
asprintf(&new_agg_path, "%s%c%s", force_agg_path, OPAL_ENV_SEP, tmp_str);
free(tmp_str);
}
}
if( NULL != new_agg_files ) {
char *tmp_str = NULL;
/*
@ -867,6 +874,11 @@ int mca_base_param_finalize(void)
cwd = NULL;
}
if( NULL != force_agg_path ) {
free(force_agg_path);
force_agg_path = NULL;
}
initialized = false;
}
@ -911,7 +923,14 @@ static int fixup_files(char **file_list, char * path, bool rel_path_search) {
* - ow warn/error
*/
else if (!rel_path_search && NULL != strchr(files[i], OPAL_PATH_SEP[0]) ) {
if( NULL == (tmp_file = opal_path_access(files[i], cwd, mode) ) ) {
if( NULL != force_agg_path ) {
tmp_file = opal_path_access(files[i], force_agg_path, mode);
}
else {
tmp_file = opal_path_access(files[i], cwd, mode);
}
if( NULL == tmp_file ) {
opal_show_help("help-mca-param.txt", "missing-param-file",
true, getpid(), files[i], cwd);
exit_status = OPAL_ERROR;

Просмотреть файл

@ -120,13 +120,6 @@ typedef struct mca_base_param_info_t mca_base_param_info_t;
extern "C" {
#endif
/*
* Whether or not to temporarily skip over the Aggregate MCA Paramater Set
* reading. This is useful when we know the MCA parameters it will use
* are incorrect which occurs with some support tools.
*/
OPAL_DECLSPEC extern bool opal_mca_base_param_use_amca_sets;
/**
* Make a real object for the info
*/

Просмотреть файл

@ -20,6 +20,10 @@
#include "orte_config.h"
#include "orte/orte_constants.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "opal/util/argv.h"
#include "opal/util/opal_environ.h"
#include "opal/mca/base/mca_base_param.h"
@ -90,6 +94,7 @@ int orte_pls_base_orted_append_basic_args(int *argc, char ***argv,
int loc_id;
char * amca_param_path = NULL;
char * amca_param_prefix = NULL;
char * tmp_force = NULL;
/* check for debug flags */
orte_pls_base_mca_argv(argc, argv);
@ -173,14 +178,21 @@ int orte_pls_base_orted_append_basic_args(int *argc, char ***argv,
opal_argv_append(argc, argv, amca_param_path);
}
/* Add the ORTED hint 'path' param */
loc_id = mca_base_param_find("mca", NULL, "base_param_file_path_orted");
mca_base_param_lookup_string(loc_id, &amca_param_path);
if( NULL != amca_param_path ) {
opal_argv_append(argc, argv, "-mca");
opal_argv_append(argc, argv, "mca_base_param_file_path_orted");
opal_argv_append(argc, argv, amca_param_path);
/* Add the 'path' param */
loc_id = mca_base_param_find("mca", NULL, "base_param_file_path_force");
mca_base_param_lookup_string(loc_id, &tmp_force);
if( NULL == tmp_force ) {
/* Get the current working directory */
tmp_force = (char *) malloc(sizeof(char) * OMPI_PATH_MAX);
if( NULL == (tmp_force = getcwd(tmp_force, OMPI_PATH_MAX) )) {
tmp_force = strdup("");
}
}
opal_argv_append(argc, argv, "-mca");
opal_argv_append(argc, argv, "mca_base_param_file_path_force");
opal_argv_append(argc, argv, tmp_force);
free(tmp_force);
if( NULL != amca_param_path ) {
free(amca_param_path);

Просмотреть файл

@ -189,32 +189,13 @@ int main(int argc, char *argv[])
char log_file[PATH_MAX];
char *jobidstring;
int i;
char * orted_amca_param_path = NULL;
/* initialize the globals */
memset(&orted_globals, 0, sizeof(orted_globals_t));
/* Need to set this so that the orted does not throw a warning message
* about missing AMCA param files that are located in the relative or
* absolute paths (e.g., not in the package directory).
*/
opal_mca_base_param_use_amca_sets = false;
/* Ensure that enough of OPAL is setup for us to be able to run */
if (OPAL_SUCCESS != opal_init_util()) {
fprintf(stderr, "OPAL failed to initialize -- orted aborting\n");
exit(1);
}
/* save the environment for use when launching application processes */
orted_globals.saved_environ = opal_argv_copy(environ);
/* setup mca param system
* Do not parse the Aggregate Parameter Sets in this pass.
* we will get to them in a moment
*/
mca_base_param_init();
/* setup to check common command line options that just report and die */
cmd_line = OBJ_NEW(opal_cmd_line_t);
opal_cmd_line_create(cmd_line, orte_cmd_line_opts);
@ -235,58 +216,10 @@ int main(int argc, char *argv[])
*/
mca_base_cmd_line_process_args(cmd_line, &environ, &environ);
/*
* orterun may have given us an additional path to use when looking for
* Aggregate MCA parameter sets. Look it up, and prepend it to the
* search list.
*/
mca_base_param_reg_string_name("mca", "base_param_file_path_orted",
"[INTERNAL] Current working directory from MPIRUN to help in finding Aggregate MCA parameters",
true, false,
NULL,
&orted_amca_param_path);
if( NULL != orted_amca_param_path ) {
int loc_id;
char * amca_param_path = NULL;
char * tmp_str = NULL;
/* Lookup the current Aggregate MCA Parameter set path */
loc_id = mca_base_param_find("mca", NULL, "base_param_file_path");
mca_base_param_lookup_string(loc_id, &amca_param_path);
asprintf(&tmp_str, "%s%c%s", orted_amca_param_path, OPAL_ENV_SEP, amca_param_path);
mca_base_param_set_string(loc_id, tmp_str);
loc_id = mca_base_param_find("mca", NULL, "base_param_file_path");
mca_base_param_lookup_string(loc_id, &amca_param_path);
if( NULL != amca_param_path) {
free(amca_param_path);
amca_param_path = NULL;
}
if( NULL != orted_amca_param_path) {
free(orted_amca_param_path);
orted_amca_param_path = NULL;
}
if( NULL != tmp_str) {
free(tmp_str);
tmp_str = NULL;
}
/*
* Need to recache the files since the user might have given us
* Aggregate MCA parameters that need to be reinitalized.
*/
/* GMS not sure what this does or where it went? */
opal_mca_base_param_use_amca_sets = true;
mca_base_param_recache_files(true);
}
else {
opal_mca_base_param_use_amca_sets = true;
mca_base_param_recache_files(false);
/* Ensure that enough of OPAL is setup for us to be able to run */
if (OPAL_SUCCESS != opal_init_util()) {
fprintf(stderr, "OPAL failed to initialize -- orted aborting\n");
exit(1);
}
/* check for help request */

Просмотреть файл

@ -321,7 +321,7 @@ static void signal_forward_callback(int fd, short event, void *arg);
static int create_app(int argc, char* argv[], orte_app_context_t **app,
bool *made_app, char ***app_env);
static int init_globals(void);
static int parse_globals(int argc, char* argv[]);
static int parse_globals(int argc, char* argv[], opal_cmd_line_t *cmd_line);
static int parse_locals(int argc, char* argv[]);
static int parse_appfile(char *filename, char ***env);
static void job_state_callback(orte_jobid_t jobid, orte_proc_state_t state);
@ -337,57 +337,34 @@ int orterun(int argc, char *argv[])
opal_list_t attributes;
opal_list_item_t *item;
uint8_t flow;
char * cwd = NULL;
/* Setup MCA params
* Do not parse the Aggregate Parameter Sets in this pass.
* we will get to them in a moment
*/
opal_mca_base_param_use_amca_sets = true;
/* Need to initialize OPAL so that install_dirs are filled in */
opal_init_util();
/* Setup MCA params */
mca_base_param_init();
orte_register_params(false);
opal_cmd_line_t cmd_line;
/* find our basename (the name of the executable) so that we can
use it in pretty-print error messages */
orterun_basename = opal_basename(argv[0]);
/* Check for some "global" command line params */
parse_globals(argc, argv);
/* If we're still here, parse each app */
parse_locals(argc, argv);
/*
* Get the current working directory
*/
cwd = (char *) malloc(sizeof(char) * MAXPATHLEN);
if( NULL == (cwd = getcwd(cwd, MAXPATHLEN) )) {
cwd = strdup("");
/* Setup and parse the command line */
init_globals();
opal_cmd_line_create(&cmd_line, cmd_line_init);
mca_base_cmd_line_setup(&cmd_line);
if (ORTE_SUCCESS != (ret = opal_cmd_line_parse(&cmd_line, true,
argc, argv)) ) {
return ret;
}
/*
* Need to recache the files since the user might have given us
* Aggregate MCA parameters that need to be reinitalized.
* In addition we need to let the orted know about the current working
* directory so that it has another place to look for any Aggregate MCA
* parameter set files
*/
mca_base_param_reg_string_name("mca", "base_param_file_path_orted",
"[INTERNAL] Current working directory from MPIRUN to help in finding Aggregate MCA parameters",
true, false,
cwd,
&cwd);
opal_mca_base_param_use_amca_sets = true;
mca_base_param_recache_files(false);
/* Need to initialize OPAL so that install_dirs are filled in */
opal_init_util();
/* Setup MCA params */
orte_register_params(false);
/* Check for some "global" command line params */
parse_globals(argc, argv, &cmd_line);
OBJ_DESTRUCT(&cmd_line);
/* If we're still here, parse each app */
parse_locals(argc, argv);
/* Convert the list of apps to an array of orte_app_context_t
pointers */
@ -1048,20 +1025,9 @@ static int init_globals(void)
}
static int parse_globals(int argc, char* argv[])
static int parse_globals(int argc, char* argv[], opal_cmd_line_t *cmd_line)
{
opal_cmd_line_t cmd_line;
int id, ret;
/* Setup and parse the command line */
init_globals();
opal_cmd_line_create(&cmd_line, cmd_line_init);
mca_base_cmd_line_setup(&cmd_line);
if (ORTE_SUCCESS != (ret = opal_cmd_line_parse(&cmd_line, true,
argc, argv)) ) {
return ret;
}
int id;
/* print version if requested. Do this before check for help so
that --version --help works as one might expect. */
@ -1081,7 +1047,6 @@ static int parse_globals(int argc, char* argv[])
}
/* Check for help request */
if (1 == argc || orterun_globals.help) {
char *args = NULL;
char *project_name = NULL;
@ -1090,7 +1055,7 @@ static int parse_globals(int argc, char* argv[])
} else {
project_name = "OpenRTE";
}
args = opal_cmd_line_get_usage_msg(&cmd_line);
args = opal_cmd_line_get_usage_msg(cmd_line);
opal_show_help("help-orterun.txt", "orterun:usage", false,
orterun_basename, project_name, OPAL_VERSION,
orterun_basename, args,
@ -1139,7 +1104,6 @@ static int parse_globals(int argc, char* argv[])
wait_for_job_completion = false;
}
OBJ_DESTRUCT(&cmd_line);
return ORTE_SUCCESS;
}