[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