[mpich2-commits] r7709 - in mpich2/trunk/src/pm/hydra: include pm/pmiserv tools/bootstrap/external tools/bootstrap/include tools/bootstrap/persist tools/bootstrap/src utils/launch

balaji at mcs.anl.gov balaji at mcs.anl.gov
Thu Jan 13 05:09:42 CST 2011


Author: balaji
Date: 2011-01-13 05:09:42 -0600 (Thu, 13 Jan 2011)
New Revision: 7709

Modified:
   mpich2/trunk/src/pm/hydra/include/hydra.h
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmip_cb.c
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v1.c
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v2.c
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_utils.c
   mpich2/trunk/src/pm/hydra/tools/bootstrap/external/external.h
   mpich2/trunk/src/pm/hydra/tools/bootstrap/external/external_launch.c
   mpich2/trunk/src/pm/hydra/tools/bootstrap/external/ll.h
   mpich2/trunk/src/pm/hydra/tools/bootstrap/external/ll_launch.c
   mpich2/trunk/src/pm/hydra/tools/bootstrap/external/slurm.h
   mpich2/trunk/src/pm/hydra/tools/bootstrap/external/slurm_launch.c
   mpich2/trunk/src/pm/hydra/tools/bootstrap/include/bsci.h.in
   mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_client.h
   mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_launch.c
   mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_server.c
   mpich2/trunk/src/pm/hydra/tools/bootstrap/src/bsci_launch.c
   mpich2/trunk/src/pm/hydra/utils/launch/launch.c
Log:
Redo handling of paths with spaces in them. We don't attempt quoting
at all. We just change to the base directory and run the executable.

Modified: mpich2/trunk/src/pm/hydra/include/hydra.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra.h	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/include/hydra.h	2011-01-13 11:09:42 UTC (rev 7709)
@@ -464,8 +464,8 @@
 
 /* launch */
 struct HYDT_bind_cpuset_t;
-HYD_status HYDU_create_process(char **client_arg, struct HYD_env *env_list,
-                               int *in, int *out, int *err, int *pid,
+HYD_status HYDU_create_process(const char *base_path, char **client_arg,
+                               struct HYD_env *env_list, int *in, int *out, int *err, int *pid,
                                struct HYDT_bind_cpuset_t cpuset);
 
 /* others */

Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmip_cb.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmip_cb.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmip_cb.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -671,7 +671,7 @@
             client_args[arg++] = NULL;
 
             HYDT_bind_pid_to_cpuset(process_id, &cpuset);
-            status = HYDU_create_process(client_args, force_env,
+            status = HYDU_create_process(NULL, client_args, force_env,
                                          HYD_pmcd_pmip.downstream.pmi_rank[process_id] ? NULL :
                                          &HYD_pmcd_pmip.downstream.in,
                                          &HYD_pmcd_pmip.downstream.out[process_id],

Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -157,7 +157,8 @@
                        HYD_server_info.user_global.bindlib);
     HYDU_ERR_POP(status, "unable to initializing binding library");
 
-    status = HYDT_bsci_launch_procs(proxy_args, node_list, control_fd);
+    status = HYDT_bsci_launch_procs(HYD_server_info.base_path, proxy_args, node_list,
+                                    control_fd);
     HYDU_ERR_POP(status, "launcher cannot launch processes\n");
 
     for (i = 0, proxy = HYD_server_info.pg_list.proxy_list; proxy; proxy = proxy->next, i++)

Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v1.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v1.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v1.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -551,7 +551,7 @@
     status = HYD_pmcd_pmi_fill_in_exec_launch_info(pg);
     HYDU_ERR_POP(status, "unable to fill in executable arguments\n");
 
-    status = HYDT_bsci_launch_procs(proxy_args, node_list, NULL);
+    status = HYDT_bsci_launch_procs(HYD_server_info.base_path, proxy_args, node_list, NULL);
     HYDU_ERR_POP(status, "launcher cannot launch processes\n");
     HYDU_free_node_list(node_list);
 

Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v2.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v2.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v2.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -732,7 +732,7 @@
     status = HYD_pmcd_pmi_fill_in_exec_launch_info(pg);
     HYDU_ERR_POP(status, "unable to fill in executable arguments\n");
 
-    status = HYDT_bsci_launch_procs(proxy_args, node_list, NULL);
+    status = HYDT_bsci_launch_procs(HYD_server_info.base_path, proxy_args, node_list, NULL);
     HYDU_ERR_POP(status, "launcher cannot launch processes\n");
     HYDU_free_node_list(node_list);
 

Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_utils.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_utils.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmiserv_utils.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -12,8 +12,7 @@
 
 HYD_status HYD_pmcd_pmi_fill_in_proxy_args(char **proxy_args, char *control_port, int pgid)
 {
-    int i, arg, use_ddd, use_valgrind, use_strace;
-    char *path_str[HYD_NUM_TMP_STRINGS];
+    int arg, use_ddd, use_valgrind, use_strace;
     HYD_status status = HYD_SUCCESS;
 
     arg = 0;
@@ -45,14 +44,7 @@
         proxy_args[arg++] = HYDU_strdup("-ff");
     }
 
-    i = 0;
-    path_str[i++] = HYDU_strdup(HYD_server_info.base_path);
-    path_str[i++] = HYDU_strdup("hydra_pmi_proxy");
-    path_str[i] = NULL;
-    status = HYDU_str_alloc_and_join(path_str, &proxy_args[arg++]);
-    HYDU_ERR_POP(status, "unable to join strings\n");
-    HYDU_free_strlist(path_str);
-
+    proxy_args[arg++] = HYDU_strdup("hydra_pmi_proxy");
     proxy_args[arg++] = HYDU_strdup("--control-port");
     proxy_args[arg++] = HYDU_strdup(control_port);
 

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/external/external.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/external/external.h	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/external/external.h	2011-01-13 11:09:42 UTC (rev 7709)
@@ -14,8 +14,8 @@
 #include "sge.h"
 #include "pbs.h"
 
-HYD_status HYDT_bscd_external_launch_procs(char **args, struct HYD_node *node_list,
-                                           int *control_fd);
+HYD_status HYDT_bscd_external_launch_procs(const char *base_path, char **args,
+                                           struct HYD_node *node_list, int *control_fd);
 HYD_status HYDT_bscd_external_launcher_finalize(void);
 HYD_status HYDT_bscd_external_query_env_inherit(const char *env_name, int *ret);
 HYD_status HYDT_bscd_external_query_native_int(int *ret);

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/external/external_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/external/external_launch.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/external/external_launch.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -12,8 +12,8 @@
 
 static int fd_stdout, fd_stderr;
 
-HYD_status HYDT_bscd_external_launch_procs(char **args, struct HYD_node *node_list,
-                                           int *control_fd)
+HYD_status HYDT_bscd_external_launch_procs(const char *base_path, char **args,
+                                           struct HYD_node *node_list, int *control_fd)
 {
     int num_hosts, idx, i, host_idx, fd, exec_idx, offset, lh;
     int *pid, *fd_list, *dummy;
@@ -210,8 +210,9 @@
         /* The stdin pointer is a dummy value. We don't just pass it
          * NULL, as older versions of ssh seem to freak out when no
          * stdin socket is provided. */
-        status = HYDU_create_process(targs + offset, env, dummy, &fd_stdout, &fd_stderr,
-                                     &HYD_bscu_pid_list[HYD_bscu_pid_count++], cpuset);
+        status = HYDU_create_process(base_path, targs + offset, env, dummy, &fd_stdout,
+                                     &fd_stderr, &HYD_bscu_pid_list[HYD_bscu_pid_count++],
+                                     cpuset);
         HYDU_ERR_POP(status, "create process returned error\n");
 
         if (offset && control_fd) {

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/external/ll.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/external/ll.h	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/external/ll.h	2011-01-13 11:09:42 UTC (rev 7709)
@@ -9,8 +9,8 @@
 
 #include "hydra.h"
 
-HYD_status HYDT_bscd_ll_launch_procs(char **args, struct HYD_node *node_list,
-                                     int *control_fd);
+HYD_status HYDT_bscd_ll_launch_procs(const char *base_path, char **args,
+                                     struct HYD_node *node_list, int *control_fd);
 HYD_status HYDT_bscd_ll_query_proxy_id(int *proxy_id);
 HYD_status HYDT_bscd_ll_query_node_list(struct HYD_node **node_list);
 HYD_status HYDTI_bscd_ll_query_node_count(int *count);

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/external/ll_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/external/ll_launch.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/external/ll_launch.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -12,8 +12,8 @@
 
 static int fd_stdout, fd_stderr;
 
-HYD_status HYDT_bscd_ll_launch_procs(char **args, struct HYD_node *node_list,
-                                     int *control_fd)
+HYD_status HYDT_bscd_ll_launch_procs(const char *base_path, char **args,
+                                     struct HYD_node *node_list, int *control_fd)
 {
     int idx, i, total_procs, node_count;
     int *pid, *fd_list;
@@ -88,7 +88,7 @@
     targs[idx++] = NULL;
 
     HYDT_bind_cpuset_zero(&cpuset);
-    status = HYDU_create_process(targs, NULL, NULL, &fd_stdout, &fd_stderr,
+    status = HYDU_create_process(base_path, targs, NULL, NULL, &fd_stdout, &fd_stderr,
                                  &HYD_bscu_pid_list[HYD_bscu_pid_count++], cpuset);
     HYDU_ERR_POP(status, "create process returned error\n");
 

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/external/slurm.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/external/slurm.h	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/external/slurm.h	2011-01-13 11:09:42 UTC (rev 7709)
@@ -9,8 +9,8 @@
 
 #include "hydra.h"
 
-HYD_status HYDT_bscd_slurm_launch_procs(char **args, struct HYD_node *node_list,
-                                        int *control_fd);
+HYD_status HYDT_bscd_slurm_launch_procs(const char *base_path, char **args,
+                                        struct HYD_node *node_list, int *control_fd);
 HYD_status HYDT_bscd_slurm_query_proxy_id(int *proxy_id);
 HYD_status HYDT_bscd_slurm_query_node_list(struct HYD_node **node_list);
 

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/external/slurm_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/external/slurm_launch.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/external/slurm_launch.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -59,8 +59,8 @@
     goto fn_exit;
 }
 
-HYD_status HYDT_bscd_slurm_launch_procs(char **args, struct HYD_node *node_list,
-                                        int *control_fd)
+HYD_status HYDT_bscd_slurm_launch_procs(const char *base_path, char **args,
+                                        struct HYD_node *node_list, int *control_fd)
 {
     int num_hosts, idx, i;
     int *pid, *fd_list;
@@ -141,7 +141,7 @@
     }
 
     HYDT_bind_cpuset_zero(&cpuset);
-    status = HYDU_create_process(targs, NULL, NULL, &fd_stdout, &fd_stderr,
+    status = HYDU_create_process(base_path, targs, NULL, NULL, &fd_stdout, &fd_stderr,
                                  &HYD_bscu_pid_list[HYD_bscu_pid_count++], cpuset);
     HYDU_ERR_POP(status, "create process returned error\n");
 

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/include/bsci.h.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/include/bsci.h.in	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/include/bsci.h.in	2011-01-13 11:09:42 UTC (rev 7709)
@@ -51,7 +51,8 @@
 
     /* Launcher functions */
     /** \brief Launch processes */
-    HYD_status(*launch_procs) (char **args, struct HYD_node *node_list, int *control_fd);
+    HYD_status(*launch_procs) (const char *base_path, char **args, struct HYD_node *node_list,
+                               int *control_fd);
 
     /** \brief Finalize the bootstrap control device */
     HYD_status(*launcher_finalize) (void);
@@ -96,6 +97,7 @@
 /**
  * \brief HYDT_bsci_launch_procs - Launch processes
  *
+ * \param[in]   base_path       Base path to launch processes from
  * \param[in]   args            Arguments to be used for the launched processes
  * \param[in]   node_list       List of nodes to launch processes on
  * \param[out]  control_fd      Control socket to communicate with the launched process
@@ -113,7 +115,8 @@
  * but allow proxies to query their ID information on each node using
  * the HYDT_bsci_query_proxy_id function.
  */
-HYD_status HYDT_bsci_launch_procs(char **args, struct HYD_node *node_list, int *control_fd);
+HYD_status HYDT_bsci_launch_procs(const char *base_path, char **args, struct HYD_node *node_list,
+                                  int *control_fd);
 
 
 /**

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_client.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_client.h	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_client.h	2011-01-13 11:09:42 UTC (rev 7709)
@@ -11,8 +11,8 @@
 #include "bscu.h"
 #include "persist.h"
 
-HYD_status HYDT_bscd_persist_launch_procs(char **args, struct HYD_node *node_list,
-                                          int *control_fd);
+HYD_status HYDT_bscd_persist_launch_procs(const char *base_path, char **args,
+                                          struct HYD_node *node_list, int *control_fd);
 HYD_status HYDT_bscd_persist_wait_for_completion(int timeout);
 
 extern int *HYDT_bscd_persist_control_fd;

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_launch.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_launch.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -58,8 +58,8 @@
     goto fn_exit;
 }
 
-HYD_status HYDT_bscd_persist_launch_procs(char **args, struct HYD_node *node_list,
-                                          int *control_fd)
+HYD_status HYDT_bscd_persist_launch_procs(const char *base_path, char **args,
+                                          struct HYD_node *node_list, int *control_fd)
 {
     struct HYD_node *node;
     int idx, i;

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_server.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_server.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/persist/persist_server.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -194,7 +194,7 @@
 
     /* spawn process */
     HYDT_bind_cpuset_zero(&cpuset);
-    status = HYDU_create_process(args, NULL, NULL, &private.stdout_fd,
+    status = HYDU_create_process(NULL, args, NULL, NULL, &private.stdout_fd,
                                  &private.stderr_fd, &private.app_pid, cpuset);
     HYDU_ERR_POP(status, "unable to create process\n");
 

Modified: mpich2/trunk/src/pm/hydra/tools/bootstrap/src/bsci_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bootstrap/src/bsci_launch.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/tools/bootstrap/src/bsci_launch.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -7,13 +7,14 @@
 #include "hydra.h"
 #include "bsci.h"
 
-HYD_status HYDT_bsci_launch_procs(char **args, struct HYD_node *node_list, int *control_fd)
+HYD_status HYDT_bsci_launch_procs(const char *base_path, char **args, struct HYD_node *node_list,
+                                  int *control_fd)
 {
     HYD_status status = HYD_SUCCESS;
 
     HYDU_FUNC_ENTER();
 
-    status = HYDT_bsci_fns.launch_procs(args, node_list, control_fd);
+    status = HYDT_bsci_fns.launch_procs(base_path, args, node_list, control_fd);
     HYDU_ERR_POP(status, "launcher returned error while launching processes\n");
 
   fn_exit:

Modified: mpich2/trunk/src/pm/hydra/utils/launch/launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/launch/launch.c	2011-01-13 11:09:17 UTC (rev 7708)
+++ mpich2/trunk/src/pm/hydra/utils/launch/launch.c	2011-01-13 11:09:42 UTC (rev 7709)
@@ -7,12 +7,11 @@
 #include "hydra.h"
 #include "bind.h"
 
-HYD_status HYDU_create_process(char **client_arg, struct HYD_env *env_list,
-                               int *in, int *out, int *err, int *pid,
+HYD_status HYDU_create_process(const char *base_path, char **client_arg,
+                               struct HYD_env *env_list, int *in, int *out, int *err, int *pid,
                                struct HYDT_bind_cpuset_t cpuset)
 {
-    int inpipe[2], outpipe[2], errpipe[2], tpid, i, j, k, has_space, num_args, ret;
-    char *path = NULL, **args;
+    int inpipe[2], outpipe[2], errpipe[2], tpid, ret;
     HYD_status status = HYD_SUCCESS;
 
     HYDU_FUNC_ENTER();
@@ -62,47 +61,12 @@
         status = HYDT_bind_process(cpuset);
         HYDU_ERR_POP(status, "bind process failed\n");
 
-        status = HYDU_strdup_list(client_arg, &args);
-        HYDU_ERR_POP(status, "unable to dup argument list\n");
-
-        num_args = HYDU_strlist_lastidx(client_arg);
-
-        for (j = 0; j < num_args; j++) {
-            has_space = 0;
-            for (i = 0; args[j][i]; i++) {
-                if (args[j][i] == ' ') {
-                    has_space = 1;
-                    break;
-                }
-            }
-
-            if (has_space) {
-                /* executable string has space */
-                HYDU_FREE(args[j]);
-
-                if (j == 0) {
-                    path = HYDU_strdup(client_arg[j]);
-                    k = 0;
-                    for (i = 0; path[i]; i++)
-                        if (path[i] == '/')
-                            k = i + 1;
-                    path[k] = 0;
-
-                    if (path[0]) {
-                        ret = chdir(path);
-                        HYDU_ASSERT(!ret, status);
-                    }
-
-                    args[j] = HYDU_strdup(&client_arg[j][k]);
-                }
-                else {
-                    HYDU_MALLOC(args[j], char *, strlen(client_arg[j]) + 3, status);
-                    MPL_snprintf(args[j], strlen(client_arg[j]) + 5, "'%s'", client_arg[j]);
-                }
-            }
+        if (base_path) {
+            ret = chdir(base_path);
+            HYDU_ASSERT(!ret, status);
         }
 
-        if (execvp(args[0], args) < 0) {
+        if (execvp(client_arg[0], client_arg) < 0) {
             /* The child process should never get back to the proxy
              * code; if there is an error, just throw it here and
              * exit. */



More information about the mpich2-commits mailing list