[mpich2-commits] r4020 - in mpich2/trunk/src/pm/hydra: include launcher/mpiexec launcher/utils pm/central utils/args utils/env
balaji at mcs.anl.gov
balaji at mcs.anl.gov
Thu Mar 12 01:53:24 CDT 2009
Author: balaji
Date: 2009-03-12 01:53:24 -0500 (Thu, 12 Mar 2009)
New Revision: 4020
Modified:
mpich2/trunk/src/pm/hydra/include/hydra_utils.h
mpich2/trunk/src/pm/hydra/launcher/mpiexec/utils.c
mpich2/trunk/src/pm/hydra/launcher/utils/lchu.c
mpich2/trunk/src/pm/hydra/pm/central/central_launch.c
mpich2/trunk/src/pm/hydra/pm/central/proxy.c
mpich2/trunk/src/pm/hydra/pm/central/proxy_utils.c
mpich2/trunk/src/pm/hydra/utils/args/args.c
mpich2/trunk/src/pm/hydra/utils/env/env.c
Log:
Several fixes to the environment passing routines.
Modified: mpich2/trunk/src/pm/hydra/include/hydra_utils.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra_utils.h 2009-03-12 05:28:34 UTC (rev 4019)
+++ mpich2/trunk/src/pm/hydra/include/hydra_utils.h 2009-03-12 06:53:24 UTC (rev 4020)
@@ -19,7 +19,8 @@
HYD_Status HYDU_Env_free_list(HYD_Env_t * env);
HYD_Env_t *HYDU_Env_found_in_list(HYD_Env_t * env_list, HYD_Env_t env);
HYD_Status HYDU_Env_add_to_list(HYD_Env_t ** env_list, HYD_Env_t env);
-HYD_Status HYDU_Env_putenv(HYD_Env_t env);
+HYD_Status HYDU_Env_assign_form(HYD_Env_t env, char **env_str);
+void HYDU_Env_putenv(char *env_str);
/* Launch utilities */
@@ -59,7 +60,7 @@
struct HYD_Partition_list *next;
};
-HYD_Status HYDU_Append_env(HYD_Env_t * env_list, char **client_arg, int id);
+HYD_Status HYDU_Append_env(HYD_Env_t * env_list, char **client_arg);
HYD_Status HYDU_Append_exec(char **exec, char **client_arg);
HYD_Status HYDU_Append_wdir(char **client_arg, char *wdir);
HYD_Status HYDU_Allocate_Partition(struct HYD_Partition_list **partition);
Modified: mpich2/trunk/src/pm/hydra/launcher/mpiexec/utils.c
===================================================================
--- mpich2/trunk/src/pm/hydra/launcher/mpiexec/utils.c 2009-03-12 05:28:34 UTC (rev 4019)
+++ mpich2/trunk/src/pm/hydra/launcher/mpiexec/utils.c 2009-03-12 06:53:24 UTC (rev 4020)
@@ -214,23 +214,20 @@
else if (!strcmp(*argv, "-genvlist")) {
handle.prop = HYD_ENV_PROP_LIST;
CHECK_NEXT_ARG_VALID(status);
+ env_name = strtok(*argv, ",");
do {
- env_name = strtok(*argv, ",");
- if (env_name == NULL)
- break;
-
status = HYDU_Env_create(&env, env_name, NULL);
if (status != HYD_SUCCESS) {
HYDU_Error_printf("unable to create env struct\n");
goto fn_fail;
}
- status = HYDU_Env_add_to_list(&handle.prop_env, *env);
+ status = HYDU_Env_add_to_list(&handle.user_env, *env);
if (status != HYD_SUCCESS) {
HYDU_Error_printf("unable to add env to list\n");
goto fn_fail;
}
- } while (env_name);
+ } while (env_name = strtok(NULL, ","));
}
continue;
}
@@ -434,6 +431,13 @@
if (proc_params->exec_proc_count == 0)
proc_params->exec_proc_count = 1;
+ if (handle.prop == HYD_ENV_PROP_UNSET && proc_params->prop == HYD_ENV_PROP_UNSET) {
+ /* By default we pass no environment as a lot of users
+ * have crazy environments which make passing them as
+ * strings a nightmare. */
+ proc_params->prop = HYD_ENV_PROP_NONE;
+ }
+
proc_params = proc_params->next;
}
Modified: mpich2/trunk/src/pm/hydra/launcher/utils/lchu.c
===================================================================
--- mpich2/trunk/src/pm/hydra/launcher/utils/lchu.c 2009-03-12 05:28:34 UTC (rev 4019)
+++ mpich2/trunk/src/pm/hydra/launcher/utils/lchu.c 2009-03-12 06:53:24 UTC (rev 4020)
@@ -146,7 +146,7 @@
HYD_Status HYD_LCHU_Create_env_list(void)
{
struct HYD_Proc_params *proc_params;
- HYD_Env_t *env;
+ HYD_Env_t *env, *run;
HYD_Status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
@@ -161,6 +161,18 @@
}
}
}
+ else if (handle.prop == HYD_ENV_PROP_LIST) {
+ for (env = handle.user_env; env; env = env->next) {
+ run = HYDU_Env_found_in_list(handle.global_env, *env);
+ if (run) {
+ status = HYDU_Env_add_to_list(&handle.prop_env, *run);
+ if (status != HYD_SUCCESS) {
+ HYDU_Error_printf("unable to add env to list\n");
+ goto fn_fail;
+ }
+ }
+ }
+ }
proc_params = handle.proc_params;
while (proc_params) {
@@ -174,6 +186,18 @@
}
}
}
+ else if (proc_params->prop == HYD_ENV_PROP_LIST) {
+ for (env = proc_params->user_env; env; env = env->next) {
+ run = HYDU_Env_found_in_list(handle.global_env, *env);
+ if (run) {
+ status = HYDU_Env_add_to_list(&proc_params->prop_env, *run);
+ if (status != HYD_SUCCESS) {
+ HYDU_Error_printf("unable to add env to list\n");
+ goto fn_fail;
+ }
+ }
+ }
+ }
proc_params = proc_params->next;
}
Modified: mpich2/trunk/src/pm/hydra/pm/central/central_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/central_launch.c 2009-03-12 05:28:34 UTC (rev 4019)
+++ mpich2/trunk/src/pm/hydra/pm/central/central_launch.c 2009-03-12 06:53:24 UTC (rev 4020)
@@ -109,18 +109,6 @@
HYDU_Env_free(env);
HYDU_FREE(port_str);
- status = HYDU_Env_create(&env, "PMI_ID", NULL);
- if (status != HYD_SUCCESS) {
- HYDU_Error_printf("unable to create env\n");
- goto fn_fail;
- }
- status = HYDU_Env_add_to_list(&handle.system_env, *env);
- if (status != HYD_SUCCESS) {
- HYDU_Error_printf("unable to add env to list\n");
- goto fn_fail;
- }
- HYDU_Env_free(env);
-
/* Create a process group for the MPI processes in this
* comm_world */
status = HYD_PMCU_Create_pg();
@@ -140,8 +128,6 @@
/* Pass the entire environment here; the proxy will cherry
* pick from this. */
- HYDU_Append_env(handle.system_env, partition->args, process_id);
- HYDU_Append_env(proc_params->prop_env, partition->args, process_id);
HYDU_Append_wdir(partition->args, handle.wdir);
for (arg = 0; partition->args[arg]; arg++);
@@ -190,9 +176,12 @@
partition->args[arg++] = MPIU_Strdup(str);
HYDU_FREE(str);
+ partition->args[arg++] = MPIU_Strdup("--environment");
i = 0;
for (env = handle.system_env; env; env = env->next)
i++;
+ for (env = handle.prop_env; env; env = env->next)
+ i++;
for (env = proc_params->prop_env; env; env = env->next)
i++;
status = HYDU_String_int_to_str(i, &str);
@@ -201,14 +190,14 @@
("String utils returned error while converting int to string\n");
goto fn_fail;
}
- partition->args[arg++] = MPIU_Strdup("--environment");
partition->args[arg++] = MPIU_Strdup(str);
- for (env = handle.system_env; env; env = env->next)
- partition->args[arg++] = MPIU_Strdup(env->env_name);
- for (env = proc_params->prop_env; env; env = env->next)
- partition->args[arg++] = MPIU_Strdup(env->env_name);
- HYDU_FREE(str);
+ partition->args[arg++] = NULL;
+ HYDU_Append_env(handle.system_env, partition->args);
+ HYDU_Append_env(handle.prop_env, partition->args);
+ HYDU_Append_env(proc_params->prop_env, partition->args);
+
+ for (arg = 0; partition->args[arg]; arg++);
partition->args[arg] = NULL;
HYDU_Append_exec(proc_params->exec, partition->args);
Modified: mpich2/trunk/src/pm/hydra/pm/central/proxy.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/proxy.c 2009-03-12 05:28:34 UTC (rev 4019)
+++ mpich2/trunk/src/pm/hydra/pm/central/proxy.c 2009-03-12 06:53:24 UTC (rev 4020)
@@ -17,8 +17,8 @@
int i, j, arg, sockets_open;
int stdin_fd, timeout;
char *str, *timeout_str;
- HYD_Env_t *env, pmi;
char *client_args[HYD_EXEC_ARGS];
+ char *tmp[HYDU_NUM_JOIN_STR];
HYD_Status status = HYD_SUCCESS;
status = HYD_Proxy_get_params(argc, argv);
@@ -70,33 +70,23 @@
/* Spawn the processes */
for (i = 0; i < HYD_Proxy_params.proc_count; i++) {
- pmi.env_name = MPIU_Strdup("PMI_ID");
-
+ j = 0;
+ tmp[j++] = MPIU_Strdup("PMI_ID=");
status = HYDU_String_int_to_str(HYD_Proxy_params.pmi_id + i, &str);
if (status != HYD_SUCCESS) {
- HYDU_Error_printf("String utils returned error while converting int to string\n");
+ HYDU_Error_printf("string utils returned error while converting int to string\n");
goto fn_fail;
}
-
- pmi.env_value = MPIU_Strdup(str);
- pmi.next = NULL;
-
- /* Update the PMI_ID value with this one */
- status = HYDU_Env_add_to_list(&HYD_Proxy_params.env_list, pmi);
+ tmp[j++] = MPIU_Strdup(str);
+ HYDU_FREE(str);
+ tmp[j++] = NULL;
+ status = HYDU_String_alloc_and_join(tmp, &str);
if (status != HYD_SUCCESS) {
- HYDU_Error_printf("unable to add env to list\n");
+ HYDU_Error_printf("string utils returned error while joining strings\n");
goto fn_fail;
}
+ HYDU_Env_putenv(str);
- /* Set the environment with the current values */
- for (env = HYD_Proxy_params.env_list; env; env = env->next) {
- status = HYDU_Env_putenv(*env);
- if (status != HYD_SUCCESS) {
- HYDU_Error_printf("unable to putenv\n");
- goto fn_fail;
- }
- }
-
for (j = 0, arg = 0; HYD_Proxy_params.args[j]; j++)
client_args[arg++] = MPIU_Strdup(HYD_Proxy_params.args[j]);
client_args[arg++] = NULL;
Modified: mpich2/trunk/src/pm/hydra/pm/central/proxy_utils.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/central/proxy_utils.c 2009-03-12 05:28:34 UTC (rev 4019)
+++ mpich2/trunk/src/pm/hydra/pm/central/proxy_utils.c 2009-03-12 06:53:24 UTC (rev 4020)
@@ -80,22 +80,7 @@
count = atoi(*argv);
for (i = 0; i < count; i++) {
argv++;
-
- /* First find the environment variable */
- env.env_name = MPIU_Strdup(*argv);
- found = HYDU_Env_found_in_list(HYD_Proxy_params.global_env, env);
- if (!found) {
- HYDU_Error_printf("Unable to find requested env: %s\n", env.env_name);
- status = HYD_INTERNAL_ERROR;
- goto fn_fail;
- }
-
- /* Now add it to the env_list */
- status = HYDU_Env_add_to_list(&HYD_Proxy_params.env_list, *found);
- if (status != HYD_SUCCESS) {
- HYDU_Error_printf("Unable to add env to list\n");
- goto fn_fail;
- }
+ HYDU_Env_putenv(*argv);
}
continue;
}
Modified: mpich2/trunk/src/pm/hydra/utils/args/args.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/args/args.c 2009-03-12 05:28:34 UTC (rev 4019)
+++ mpich2/trunk/src/pm/hydra/utils/args/args.c 2009-03-12 06:53:24 UTC (rev 4020)
@@ -6,7 +6,7 @@
#include "hydra_utils.h"
-HYD_Status HYDU_Append_env(HYD_Env_t * env_list, char **client_arg, int id)
+HYD_Status HYDU_Append_env(HYD_Env_t * env_list, char **client_arg)
{
int i, j;
HYD_Env_t *env;
@@ -36,12 +36,6 @@
for (j = 0; tmp[j]; j++)
HYDU_FREE(tmp[j]);
- client_arg[i++] = MPIU_Strdup(";");
-
- client_arg[i++] = MPIU_Strdup("export");
- client_arg[i++] = MPIU_Strdup(env->env_name);
- client_arg[i++] = MPIU_Strdup(";");
-
env = env->next;
}
client_arg[i++] = NULL;
Modified: mpich2/trunk/src/pm/hydra/utils/env/env.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/env/env.c 2009-03-12 05:28:34 UTC (rev 4019)
+++ mpich2/trunk/src/pm/hydra/utils/env/env.c 2009-03-12 06:53:24 UTC (rev 4020)
@@ -239,10 +239,10 @@
}
-HYD_Status HYDU_Env_putenv(HYD_Env_t env)
+HYD_Status HYDU_Env_assign_form(HYD_Env_t env, char **env_str)
{
int i;
- char *tmp[HYDU_NUM_JOIN_STR], *env_str;
+ char *tmp[HYDU_NUM_JOIN_STR];
HYD_Status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
@@ -253,14 +253,12 @@
tmp[i++] = env.env_value ? MPIU_Strdup(env.env_value) : MPIU_Strdup("");
tmp[i++] = NULL;
- status = HYDU_String_alloc_and_join(tmp, &env_str);
+ status = HYDU_String_alloc_and_join(tmp, env_str);
if (status != HYD_SUCCESS) {
HYDU_Error_printf("String utils returned error while joining strings\n");
goto fn_fail;
}
- MPIU_PutEnv(env_str);
-
fn_exit:
HYDU_FUNC_EXIT();
return status;
@@ -268,3 +266,14 @@
fn_fail:
goto fn_exit;
}
+
+
+void HYDU_Env_putenv(char *env_str)
+{
+ HYDU_FUNC_ENTER();
+
+ MPIU_PutEnv(env_str);
+
+ HYDU_FUNC_EXIT();
+ return;
+}
More information about the mpich2-commits
mailing list