Skip to content

Commit 41014c1

Browse files
authored
Merge pull request #21 from hppritcha/upstream_pr1999
Use the PMIx functions to check params
2 parents 8da0632 + 19bbba9 commit 41014c1

File tree

5 files changed

+34
-349
lines changed

5 files changed

+34
-349
lines changed

src/mca/schizo/base/base.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
33
* Copyright (c) 2020 IBM Corporation. All rights reserved.
44
* Copyright (c) 2020 Cisco Systems, Inc. All rights reserved
5-
* Copyright (c) 2021-2023 Nanook Consulting. All rights reserved.
5+
* Copyright (c) 2021-2024 Nanook Consulting All rights reserved.
66
* $COPYRIGHT$
77
*
88
* Additional copyrights may follow
@@ -95,8 +95,6 @@ PRTE_EXPORT bool prte_schizo_base_check_directives(char *directive,
9595
PRTE_EXPORT bool prte_schizo_base_check_qualifiers(char *directive,
9696
char **valid,
9797
char *qual);
98-
PRTE_EXPORT bool prte_schizo_base_check_prte_param(char *param);
99-
PRTE_EXPORT bool prte_schizo_base_check_pmix_param(char *param);
10098
PRTE_EXPORT void prte_schizo_base_expose(char *param, char *prefix);
10199
PRTE_EXPORT int prte_schizo_base_add_directive(pmix_cli_result_t *results,
102100
const char *deprecated, const char *target,

src/mca/schizo/base/schizo_base_stubs.c

Lines changed: 3 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "src/include/pmix_frameworks.h"
2222
#include "src/include/prte_frameworks.h"
2323
#include "src/mca/errmgr/errmgr.h"
24+
#include "src/mca/pmdl/base/base.h"
2425
#include "src/mca/schizo/base/base.h"
2526
#include "src/runtime/prte_globals.h"
2627
#include "src/util/pmix_argv.h"
@@ -242,26 +243,6 @@ char *prte_schizo_base_strip_quotes(char *p)
242243
return pout;
243244
}
244245

245-
bool prte_schizo_base_check_prte_param(char *param)
246-
{
247-
char *p;
248-
size_t n;
249-
int len;
250-
251-
p = strchr(param, '_');
252-
len = (int)(p - param);
253-
254-
if (0 == strncmp(param, "prte", len)) {
255-
return true;
256-
}
257-
for (n=0; NULL != prte_framework_names[n]; n++) {
258-
if (0 == strncmp(param, prte_framework_names[n], len)) {
259-
return true;
260-
}
261-
}
262-
return false;
263-
}
264-
265246
int prte_schizo_base_parse_prte(int argc, int start, char **argv, char ***target)
266247
{
267248
int i;
@@ -312,7 +293,7 @@ int prte_schizo_base_parse_prte(int argc, int start, char **argv, char ***target
312293

313294
/* this is a generic MCA designation, so see if the parameter it
314295
* refers to belongs to one of our frameworks */
315-
use = prte_schizo_base_check_prte_param(p1);
296+
use = pmix_pmdl_base_check_prte_param(p1);
316297
if (use) {
317298
/* replace the generic directive with a PRRTE specific
318299
* one so we know this has been processed */
@@ -361,51 +342,6 @@ int prte_schizo_base_parse_prte(int argc, int start, char **argv, char ***target
361342
return PRTE_SUCCESS;
362343
}
363344

364-
static char **pmix_frameworks_tocheck = pmix_framework_names;
365-
static bool pmix_frameworks_setup = false;
366-
367-
static void setup_pmix_frameworks(void)
368-
{
369-
if (pmix_frameworks_setup) {
370-
return;
371-
}
372-
pmix_frameworks_setup = true;
373-
374-
char *env = getenv("PMIX_MCA_PREFIXES");
375-
if (NULL == env) {
376-
return;
377-
}
378-
379-
// If we found the env variable, it will be a comma-delimited list
380-
// of values. Split it into an argv-style array.
381-
char **tmp = PMIX_ARGV_SPLIT_COMPAT(env, ',');
382-
if (NULL != tmp) {
383-
pmix_frameworks_tocheck = tmp;
384-
}
385-
}
386-
387-
bool prte_schizo_base_check_pmix_param(char *param)
388-
{
389-
char *p;
390-
size_t n;
391-
int len;
392-
393-
setup_pmix_frameworks();
394-
395-
p = strchr(param, '_');
396-
len = (int)(p - param);
397-
398-
if (0 == strncmp(param, "pmix", len)) {
399-
return true;
400-
}
401-
for (n=0; NULL != pmix_frameworks_tocheck[n]; n++) {
402-
if (0 == strncmp(param, pmix_frameworks_tocheck[n], len)) {
403-
return true;
404-
}
405-
}
406-
return false;
407-
}
408-
409345
int prte_schizo_base_parse_pmix(int argc, int start, char **argv, char ***target)
410346
{
411347
int i;
@@ -487,7 +423,7 @@ int prte_schizo_base_parse_pmix(int argc, int start, char **argv, char ***target
487423

488424
/* this is a generic MCA designation, so see if the parameter it
489425
* refers to belongs to one of our frameworks */
490-
use = prte_schizo_base_check_pmix_param(p1);
426+
use = pmix_pmdl_base_check_pmix_param(p1);
491427
if (use) {
492428
/* replace the generic directive with a PMIx specific
493429
* one so we know this has been processed */

src/mca/schizo/ompi/schizo_ompi.c

Lines changed: 3 additions & 228 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
#include "src/mca/base/pmix_mca_base_vari.h"
5858
#include "src/mca/errmgr/errmgr.h"
5959
#include "src/mca/ess/base/base.h"
60+
#include "src/mca/pmdl/base/base.h"
6061
#include "src/mca/rmaps/base/base.h"
6162
#include "src/mca/state/base/base.h"
6263
#include "src/runtime/prte_globals.h"
@@ -1821,232 +1822,6 @@ static int parse_env(char **srcenv, char ***dstenv,
18211822
return PRTE_SUCCESS;
18221823
}
18231824

1824-
static bool check_prte_overlap(char *var, char *value)
1825-
{
1826-
char *tmp;
1827-
1828-
if (0 == strncmp(var, "dl_", 3)) {
1829-
pmix_asprintf(&tmp, "PRTE_MCA_prtedl_%s", &var[3]);
1830-
// set it, but don't overwrite if they already
1831-
// have a value in our environment
1832-
setenv(tmp, value, false);
1833-
free(tmp);
1834-
return true;
1835-
} else if (0 == strncmp(var, "oob_", 4)) {
1836-
pmix_asprintf(&tmp, "PRTE_MCA_%s", var);
1837-
// set it, but don't overwrite if they already
1838-
// have a value in our environment
1839-
setenv(tmp, value, false);
1840-
free(tmp);
1841-
return true;
1842-
} else if (0 == strncmp(var, "hwloc_", 6)) {
1843-
pmix_asprintf(&tmp, "PRTE_MCA_%s", var);
1844-
// set it, but don't overwrite if they already
1845-
// have a value in our environment
1846-
setenv(tmp, value, false);
1847-
free(tmp);
1848-
return true;
1849-
} else if (0 == strncmp(var, "if_", 3)) {
1850-
// need to convert if to prteif
1851-
pmix_asprintf(&tmp, "PRTE_MCA_prteif_%s", &var[3]);
1852-
// set it, but don't overwrite if they already
1853-
// have a value in our environment
1854-
setenv(tmp, value, false);
1855-
free(tmp);
1856-
return true;
1857-
} else if (0 == strncmp(var, "reachable_", strlen("reachable_"))) {
1858-
// need to convert reachable to prtereachable
1859-
pmix_asprintf(&tmp, "PRTE_MCA_prtereachable_%s", &var[strlen("reachable_")]);
1860-
// set it, but don't overwrite if they already
1861-
// have a value in our environment
1862-
setenv(tmp, value, false);
1863-
free(tmp);
1864-
return true;
1865-
} else if (0 == strncmp(var, "plm_rsh_", strlen("plm_rsh_"))) {
1866-
// need to convert rsh to ssh
1867-
pmix_asprintf(&tmp, "PRTE_MCA_plm_ssh_%s", &var[strlen("plm_rsh_")]);
1868-
// set it, but don't overwrite if they already
1869-
// have a value in our environment
1870-
setenv(tmp, value, false);
1871-
free(tmp);
1872-
return true;
1873-
} else if (0 == strncmp(var, "orte_", strlen("orte_"))) {
1874-
// need to convert "orte" to "prte"
1875-
pmix_asprintf(&tmp, "PRTE_MCA_prte_%s", &var[strlen("orte_")]);
1876-
// set it, but don't overwrite if they already
1877-
// have a value in our environment
1878-
setenv(tmp, value, false);
1879-
free(tmp);
1880-
return true;
1881-
}
1882-
return false;
1883-
}
1884-
1885-
1886-
static bool check_pmix_overlap(char *var, char *value)
1887-
{
1888-
char *tmp;
1889-
1890-
if (0 == strncmp(var, "dl_", 3)) {
1891-
pmix_asprintf(&tmp, "PMIX_MCA_pdl_%s", &var[3]);
1892-
// set it, but don't overwrite if they already
1893-
// have a value in our environment
1894-
setenv(tmp, value, false);
1895-
free(tmp);
1896-
return true;
1897-
} else if (0 == strncmp(var, "oob_", 4)) {
1898-
pmix_asprintf(&tmp, "PMIX_MCA_ptl_%s", &var[4]);
1899-
// set it, but don't overwrite if they already
1900-
// have a value in our environment
1901-
setenv(tmp, value, false);
1902-
free(tmp);
1903-
return true;
1904-
} else if (0 == strncmp(var, "hwloc_", 6)) {
1905-
pmix_asprintf(&tmp, "PMIX_MCA_%s", var);
1906-
// set it, but don't overwrite if they already
1907-
// have a value in our environment
1908-
setenv(tmp, value, false);
1909-
free(tmp);
1910-
return true;
1911-
} else if (0 == strncmp(var, "if_", 3)) {
1912-
// need to convert if to pif
1913-
pmix_asprintf(&tmp, "PMIX_MCA_pif_%s", &var[3]);
1914-
// set it, but don't overwrite if they already
1915-
// have a value in our environment
1916-
setenv(tmp, value, false);
1917-
free(tmp);
1918-
return true;
1919-
}
1920-
return false;
1921-
}
1922-
1923-
// NOTE: This code is fundamentally the same (module PMIX <-> OPAL)
1924-
// as the translate_params() routine in the OMPI repo's
1925-
// opal/mca/pmix/base/pmix_base_fns.c file. If there are
1926-
// changes here, there are likely to be changes there.
1927-
static int translate_params(void)
1928-
{
1929-
char *evar, *tmp, *e2;
1930-
char *file;
1931-
const char *home;
1932-
pmix_list_t params;
1933-
pmix_mca_base_var_file_value_t *fv;
1934-
uid_t uid;
1935-
int n, len;
1936-
1937-
/* since we are the proxy, we need to check the OMPI default
1938-
* MCA params to see if there is something relating to PRRTE
1939-
* in them - this would be "old" references to things from
1940-
* ORTE, as well as a few OPAL references that also impact us
1941-
*
1942-
* NOTE: we do this in the following precedence order. Note
1943-
* that we do not overwrite at any step - this is so that we
1944-
* don't overwrite something previously set by the user. So
1945-
* the order to execution is the opposite of the intended
1946-
* precedence order.
1947-
*
1948-
* 1. check the environmental paramaters for OMPI_MCA values
1949-
* that need to be translated
1950-
*
1951-
* 2. the user's home directory file as it should
1952-
* overwrite the system default file, but not the
1953-
* envars
1954-
*
1955-
* 3. the system default parameter file
1956-
*/
1957-
len = strlen("OMPI_MCA_");
1958-
for (n=0; NULL != environ[n]; n++) {
1959-
if (0 == strncmp(environ[n], "OMPI_MCA_", len)) {
1960-
e2 = strdup(environ[n]);
1961-
evar = strrchr(e2, '=');
1962-
*evar = '\0';
1963-
++evar;
1964-
if (check_prte_overlap(&e2[len], evar)) {
1965-
// check for pmix overlap
1966-
check_pmix_overlap(&e2[len], evar);
1967-
} else if (prte_schizo_base_check_prte_param(&e2[len])) {
1968-
pmix_asprintf(&tmp, "PRTE_MCA_%s", &e2[len]);
1969-
// set it, but don't overwrite if they already
1970-
// have a value in our environment
1971-
setenv(tmp, evar, false);
1972-
free(tmp);
1973-
// check for pmix overlap
1974-
check_pmix_overlap(&e2[len], evar);
1975-
} else if (prte_schizo_base_check_pmix_param(&e2[len])) {
1976-
pmix_asprintf(&tmp, "PMIX_MCA_%s", &e2[len]);
1977-
// set it, but don't overwrite if they already
1978-
// have a value in our environment
1979-
setenv(tmp, evar, false);
1980-
free(tmp);
1981-
}
1982-
free(e2);
1983-
}
1984-
}
1985-
1986-
/* see if the user has a default MCA param file */
1987-
uid = geteuid();
1988-
1989-
/* try to get their home directory */
1990-
home = pmix_home_directory(uid);
1991-
if (NULL != home) {
1992-
file = pmix_os_path(false, home, ".openmpi", "mca-params.conf", NULL);
1993-
PMIX_CONSTRUCT(&params, pmix_list_t);
1994-
pmix_mca_base_parse_paramfile(file, &params);
1995-
free(file);
1996-
PMIX_LIST_FOREACH (fv, &params, pmix_mca_base_var_file_value_t) {
1997-
// see if this param relates to PRRTE
1998-
if (check_prte_overlap(fv->mbvfv_var, fv->mbvfv_value)) {
1999-
check_pmix_overlap(fv->mbvfv_var, fv->mbvfv_value);
2000-
} else if (prte_schizo_base_check_prte_param(fv->mbvfv_var)) {
2001-
pmix_asprintf(&tmp, "PRTE_MCA_%s", fv->mbvfv_var);
2002-
// set it, but don't overwrite if they already
2003-
// have a value in our environment
2004-
setenv(tmp, fv->mbvfv_value, false);
2005-
free(tmp);
2006-
// if this relates to the DL, OOB, HWLOC, IF, or
2007-
// REACHABLE frameworks, then we also need to set
2008-
// the equivalent PMIx value
2009-
check_pmix_overlap(fv->mbvfv_var, fv->mbvfv_value);
2010-
} else if (prte_schizo_base_check_pmix_param(fv->mbvfv_var)) {
2011-
pmix_asprintf(&tmp, "PMIX_MCA_%s", fv->mbvfv_var);
2012-
// set it, but don't overwrite if they already
2013-
// have a value in our environment
2014-
setenv(tmp, fv->mbvfv_value, false);
2015-
free(tmp);
2016-
}
2017-
}
2018-
PMIX_LIST_DESTRUCT(&params);
2019-
}
2020-
2021-
/* check if the user has set OMPIHOME in their environment */
2022-
if (NULL != (evar = getenv("OMPIHOME"))) {
2023-
/* look for the default MCA param file */
2024-
file = pmix_os_path(false, evar, "etc", "openmpi-mca-params.conf", NULL);
2025-
PMIX_CONSTRUCT(&params, pmix_list_t);
2026-
pmix_mca_base_parse_paramfile(file, &params);
2027-
free(file);
2028-
PMIX_LIST_FOREACH (fv, &params, pmix_mca_base_var_file_value_t) {
2029-
// see if this param relates to PRRTE
2030-
if (check_prte_overlap(fv->mbvfv_var, fv->mbvfv_value)) {
2031-
check_pmix_overlap(fv->mbvfv_var, fv->mbvfv_value);
2032-
} else if (prte_schizo_base_check_prte_param(fv->mbvfv_var)) {
2033-
pmix_asprintf(&tmp, "PRTE_MCA_%s", fv->mbvfv_var);
2034-
// set it, but don't overwrite if they already
2035-
// have a value in our environment
2036-
setenv(tmp, fv->mbvfv_value, false);
2037-
free(tmp);
2038-
// if this relates to the DL, OOB, HWLOC, IF, or
2039-
// REACHABLE frameworks, then we also need to set
2040-
// the equivalent PMIx value
2041-
check_pmix_overlap(fv->mbvfv_var, fv->mbvfv_value);
2042-
}
2043-
}
2044-
PMIX_LIST_DESTRUCT(&params);
2045-
}
2046-
2047-
return 100;
2048-
}
2049-
20501825
static int detect_proxy(char *personalities)
20511826
{
20521827
char *evar;
@@ -2062,15 +1837,15 @@ static int detect_proxy(char *personalities)
20621837
/* this is a list of personalities we need to check -
20631838
* if it contains "ompi", then we are available */
20641839
if (NULL != strstr(personalities, "ompi")) {
2065-
return translate_params();
1840+
return 100;
20661841
}
20671842
return 0;
20681843
}
20691844

20701845
/* if we were told the proxy, then use it */
20711846
if (NULL != (evar = getenv("PRTE_MCA_schizo_proxy"))) {
20721847
if (0 == strcmp(evar, "ompi")) {
2073-
return translate_params();
1848+
return 100;
20741849
} else {
20751850
return 0;
20761851
}

0 commit comments

Comments
 (0)