[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