Skip to content

Commit

Permalink
Implement support for PMIX_PREFIX attribute
Browse files Browse the repository at this point in the history
Standard requires we support it, so check for its
presence in either job-info or app-info during
PMIx_Spawn and adjust accordingly.

Signed-off-by: Ralph Castain <rhc@pmix.org>
  • Loading branch information
rhc54 committed Mar 18, 2024
1 parent 8a5bee6 commit 775839b
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion src/client/pmix_client_spawn.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
#include "src/util/pmix_output.h"
#include "src/util/pmix_environ.h"
#include "src/util/pmix_getcwd.h"
#include "src/util/pmix_printf.h"

#include "src/server/pmix_server_ops.h"
#include "pmix_client_ops.h"
Expand Down Expand Up @@ -130,7 +131,7 @@ PMIX_EXPORT pmix_status_t PMIx_Spawn_nb(const pmix_info_t job_info[], size_t nin
pmix_kval_t *kv;
pmix_list_t ilist;
char cwd[PMIX_PATH_MAX];
char *tmp, *t2;
char *tmp, *t2, *prefix, *defprefix = NULL;
pmix_setup_caddy_t *cd;
bool proxy = false;
pmix_proc_t parent;
Expand Down Expand Up @@ -185,6 +186,8 @@ PMIX_EXPORT pmix_status_t PMIx_Spawn_nb(const pmix_info_t job_info[], size_t nin
} else if (PMIX_CHECK_KEY(&job_info[n], PMIX_PARENT_ID)) {
PMIX_XFER_PROCID(&parent, job_info[n].value.data.proc);
proxy = true;
} else if (PMIX_CHECK_KEY(&job_info[n], PMIX_PREFIX)) {
defprefix = job_info[n].value.data.string;
}
PMIX_INFO_XFER(&jinfo[n], &job_info[n]);
}
Expand Down Expand Up @@ -249,6 +252,26 @@ PMIX_EXPORT pmix_status_t PMIx_Spawn_nb(const pmix_info_t job_info[], size_t nin
free(t2);
}

// check for prefix and adjust if required
prefix = NULL;
for (m=0; m < aptr->ninfo; m++) {
if (PMIX_CHECK_KEY(&aptr->info[m], PMIX_PREFIX)) {
prefix = aptr->info[m].value.data.string;
break;
}
}
if (NULL != prefix) {
// prefix the command
pmix_asprintf(&tmp, "%s/%s", prefix, aptr->cmd);
free(aptr->cmd);
aptr->cmd = tmp;
} else if (NULL != defprefix) {
// prefix the command
pmix_asprintf(&tmp, "%s/%s", defprefix, aptr->cmd);
free(aptr->cmd);
aptr->cmd = tmp;
}

// copy the env array
appsptr[n].env = PMIx_Argv_copy(aptr->env);

Expand Down

0 comments on commit 775839b

Please sign in to comment.