Skip to content

Commit 0434b61

Browse files
author
Ralph Castain
committed
Update ORTE to support PMIx v3
This is a point-in-time update that includes support for several new PMIx features, mostly focused on debuggers and "instant on": * initial prototype support for PMIx-based debuggers. For the moment, this is restricted to using the DVM. Supports direct launch of apps under debugger control, and indirect launch using prun as the intermediate launcher. Includes ability for debuggers to control the environment of both the launcher and the spawned app procs. Work continues on completing support for indirect launch * IO forwarding for tools. Output of apps launched under tool control is directed to the tool and output there - includes support for XML formatting and output to files. Stdin can be forwarded from the tool to apps, but this hasn't been implemented in ORTE yet. * Fabric integration for "instant on". Enable collection of network "blobs" to be delivered to network libraries on compute nodes prior to local proc spawn. Infrastructure is in place - implementation will come later. * Harvesting and forwarding of envars. Enable network plugins to harvest envars and include them in the launch msg for setting the environment prior to local proc spawn. Currently, only OmniPath is supported. PMIx MCA params control which envars are included, and also allows envars to be excluded. Signed-off-by: Ralph Castain <[email protected]>
1 parent f15d620 commit 0434b61

File tree

88 files changed

+4652
-758
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+4652
-758
lines changed

opal/dss/dss_compare.c

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* Copyright (c) 2012 Los Alamos National Security, Inc. All rights reserved.
1313
* Copyright (c) 2014-2016 Research Organization for Information Science
1414
* and Technology (RIST). All rights reserved.
15-
* Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
15+
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
1616
* $COPYRIGHT$
1717
*
1818
* Additional copyrights may follow
@@ -359,6 +359,8 @@ int opal_dss_compare_value(opal_value_t *value1, opal_value_t *value2, opal_data
359359
return opal_dss_compare_timeval(&value1->data.tv, &value2->data.tv, type);
360360
case OPAL_NAME:
361361
return opal_dss_compare_name(&value1->data.name, &value2->data.name, type);
362+
case OPAL_ENVAR:
363+
return opal_dss_compare_envar(&value1->data.envar, &value2->data.envar, type);
362364
default:
363365
opal_output(0, "COMPARE-OPAL-VALUE: UNSUPPORTED TYPE %d", (int)value1->type);
364366
return OPAL_EQUAL;
@@ -458,3 +460,47 @@ int opal_dss_compare_status(int *value1, int *value2, opal_data_type_t type)
458460
return OPAL_EQUAL;
459461
}
460462

463+
int opal_dss_compare_envar(opal_envar_t *value1, opal_envar_t *value2, opal_data_type_t type)
464+
{
465+
int rc;
466+
467+
if (NULL != value1->envar) {
468+
if (NULL == value2->envar) {
469+
return OPAL_VALUE1_GREATER;
470+
}
471+
rc = strcmp(value1->envar, value2->envar);
472+
if (rc < 0) {
473+
return OPAL_VALUE2_GREATER;
474+
} else if (0 < rc) {
475+
return OPAL_VALUE1_GREATER;
476+
}
477+
} else if (NULL != value2->envar) {
478+
/* we know value1->envar had to be NULL */
479+
return OPAL_VALUE2_GREATER;
480+
}
481+
482+
/* if both are NULL or are equal, then check value */
483+
if (NULL != value1->value) {
484+
if (NULL == value2->value) {
485+
return OPAL_VALUE1_GREATER;
486+
}
487+
rc = strcmp(value1->value, value2->value);
488+
if (rc < 0) {
489+
return OPAL_VALUE2_GREATER;
490+
} else if (0 < rc) {
491+
return OPAL_VALUE1_GREATER;
492+
}
493+
} else if (NULL != value2->value) {
494+
/* we know value1->value had to be NULL */
495+
return OPAL_VALUE2_GREATER;
496+
}
497+
498+
/* finally, check separator */
499+
if (value1->separator < value2->separator) {
500+
return OPAL_VALUE2_GREATER;
501+
}
502+
if (value2->separator < value1->separator) {
503+
return OPAL_VALUE1_GREATER;
504+
}
505+
return OPAL_EQUAL;
506+
}

opal/dss/dss_copy.c

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* University of Stuttgart. All rights reserved.
1010
* Copyright (c) 2004-2005 The Regents of the University of California.
1111
* All rights reserved.
12-
* Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
12+
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
1313
* Copyright (c) 2014-2015 Research Organization for Information Science
1414
* and Technology (RIST). All rights reserved.
1515
* $COPYRIGHT$
@@ -338,6 +338,16 @@ int opal_dss_copy_value(opal_value_t **dest, opal_value_t *src,
338338
case OPAL_NAME:
339339
memcpy(&p->data.name, &src->data.name, sizeof(opal_process_name_t));
340340
break;
341+
case OPAL_ENVAR:
342+
OBJ_CONSTRUCT(&p->data.envar, opal_envar_t);
343+
if (NULL != src->data.envar.envar) {
344+
p->data.envar.envar = strdup(src->data.envar.envar);
345+
}
346+
if (NULL != src->data.envar.value) {
347+
p->data.envar.value = strdup(src->data.envar.value);
348+
}
349+
p->data.envar.separator = src->data.envar.separator;
350+
break;
341351
default:
342352
opal_output(0, "COPY-OPAL-VALUE: UNSUPPORTED TYPE %d", (int)src->type);
343353
return OPAL_ERROR;
@@ -409,3 +419,25 @@ int opal_dss_copy_vpid(opal_vpid_t **dest, opal_vpid_t *src, opal_data_type_t ty
409419

410420
return OPAL_SUCCESS;
411421
}
422+
423+
int opal_dss_copy_envar(opal_envar_t **dest, opal_envar_t *src, opal_data_type_t type)
424+
{
425+
opal_envar_t *val;
426+
427+
val = OBJ_NEW(opal_envar_t);
428+
if (NULL == val) {
429+
OPAL_ERROR_LOG(OPAL_ERR_OUT_OF_RESOURCE);
430+
return OPAL_ERR_OUT_OF_RESOURCE;
431+
}
432+
433+
if (NULL != src->envar) {
434+
val->envar = strdup(src->envar);
435+
}
436+
if (NULL != src->value) {
437+
val->value = strdup(src->value);
438+
}
439+
val->separator = src->separator;
440+
*dest = val;
441+
442+
return OPAL_SUCCESS;
443+
}

opal/dss/dss_internal.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* Copyright (c) 2004-2005 The Regents of the University of California.
1212
* All rights reserved.
1313
* Copyright (c) 2012 Los Alamos National Security, Inc. All rights reserved.
14-
* Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
14+
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
1515
* Copyright (c) 2014 Research Organization for Information Science
1616
* and Technology (RIST). All rights reserved.
1717
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
@@ -334,6 +334,8 @@ int opal_dss_pack_vpid(opal_buffer_t *buffer, const void *src,
334334

335335
int opal_dss_pack_status(opal_buffer_t *buffer, const void *src,
336336
int32_t num_vals, opal_data_type_t type);
337+
int opal_dss_pack_envar(opal_buffer_t *buffer, const void *src,
338+
int32_t num_vals, opal_data_type_t type);
337339

338340
/*
339341
* Internal unpack functions
@@ -407,6 +409,9 @@ int opal_dss_unpack_vpid(opal_buffer_t *buffer, void *dest,
407409
int opal_dss_unpack_status(opal_buffer_t *buffer, void *dest,
408410
int32_t *num_vals, opal_data_type_t type);
409411

412+
int opal_dss_unpack_envar(opal_buffer_t *buffer, void *dest,
413+
int32_t *num_vals, opal_data_type_t type);
414+
410415
/*
411416
* Internal copy functions
412417
*/
@@ -438,6 +443,8 @@ int opal_dss_copy_jobid(opal_jobid_t **dest, opal_jobid_t *src, opal_data_type_t
438443

439444
int opal_dss_copy_vpid(opal_vpid_t **dest, opal_vpid_t *src, opal_data_type_t type);
440445

446+
int opal_dss_copy_envar(opal_envar_t **dest, opal_envar_t *src, opal_data_type_t type);
447+
441448

442449
/*
443450
* Internal compare functions
@@ -503,6 +510,7 @@ int opal_dss_compare_jobid(opal_jobid_t *value1,
503510
opal_data_type_t type);
504511

505512
int opal_dss_compare_status(int *value1, int *value2, opal_data_type_t type);
513+
int opal_dss_compare_envar(opal_envar_t *value1, opal_envar_t *value2, opal_data_type_t type);
506514

507515
/*
508516
* Internal print functions
@@ -544,6 +552,8 @@ int opal_dss_print_name(char **output, char *prefix, opal_process_name_t *name,
544552
int opal_dss_print_jobid(char **output, char *prefix, opal_process_name_t *src, opal_data_type_t type);
545553
int opal_dss_print_vpid(char **output, char *prefix, opal_process_name_t *src, opal_data_type_t type);
546554
int opal_dss_print_status(char **output, char *prefix, int *src, opal_data_type_t type);
555+
int opal_dss_print_envar(char **output, char *prefix,
556+
opal_envar_t *src, opal_data_type_t type);
547557

548558

549559
/*

opal/dss/dss_load_unload.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* University of Stuttgart. All rights reserved.
1010
* Copyright (c) 2004-2005 The Regents of the University of California.
1111
* All rights reserved.
12-
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
12+
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
1313
* Copyright (c) 2015-2017 Research Organization for Information Science
1414
* and Technology (RIST). All rights reserved.
1515
* $COPYRIGHT$

opal/dss/dss_open_close.c

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* Copyright (c) 2004-2005 The Regents of the University of California.
1212
* All rights reserved.
1313
* Copyright (c) 2012-2013 Los Alamos National Security, Inc. All rights reserved.
14-
* Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
14+
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
1515
* Copyright (c) 2015 Research Organization for Information Science
1616
* and Technology (RIST). All rights reserved.
1717
* Copyright (c) 2017 IBM Corporation. All rights reserved.
@@ -232,6 +232,26 @@ OBJ_CLASS_INSTANCE(opal_node_stats_t, opal_object_t,
232232
opal_node_stats_destruct);
233233

234234

235+
static void opal_envar_construct(opal_envar_t *obj)
236+
{
237+
obj->envar = NULL;
238+
obj->value = NULL;
239+
obj->separator = '\0';
240+
}
241+
static void opal_envar_destruct(opal_envar_t *obj)
242+
{
243+
if (NULL != obj->envar) {
244+
free(obj->envar);
245+
}
246+
if (NULL != obj->value) {
247+
free(obj->value);
248+
}
249+
}
250+
OBJ_CLASS_INSTANCE(opal_envar_t,
251+
opal_list_item_t,
252+
opal_envar_construct,
253+
opal_envar_destruct);
254+
235255
int opal_dss_register_vars (void)
236256
{
237257
mca_base_var_enum_t *new_enum;
@@ -624,6 +644,17 @@ int opal_dss_open(void)
624644
"OPAL_STATUS", &tmp))) {
625645
return rc;
626646
}
647+
648+
tmp = OPAL_ENVAR;
649+
if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_envar,
650+
opal_dss_unpack_envar,
651+
(opal_dss_copy_fn_t)opal_dss_copy_envar,
652+
(opal_dss_compare_fn_t)opal_dss_compare_envar,
653+
(opal_dss_print_fn_t)opal_dss_print_envar,
654+
OPAL_DSS_UNSTRUCTURED,
655+
"OPAL_ENVAR", &tmp))) {
656+
return rc;
657+
}
627658
/* All done */
628659

629660
opal_dss_initialized = true;

opal/dss/dss_pack.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* Copyright (c) 2004-2005 The Regents of the University of California.
1111
* All rights reserved.
1212
* Copyright (c) 2011-2013 Cisco Systems, Inc. All rights reserved.
13-
* Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
13+
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
1414
* Copyright (c) 2014 Research Organization for Information Science
1515
* and Technology (RIST). All rights reserved.
1616
* $COPYRIGHT$
@@ -836,6 +836,11 @@ int opal_dss_pack_value(opal_buffer_t *buffer, const void *src,
836836
return ret;
837837
}
838838
break;
839+
case OPAL_ENVAR:
840+
if (OPAL_SUCCESS != (ret = opal_dss_pack_buffer(buffer, &ptr[i]->data.envar, 1, OPAL_ENVAR))) {
841+
return ret;
842+
}
843+
break;
839844
default:
840845
opal_output(0, "PACK-OPAL-VALUE: UNSUPPORTED TYPE %d FOR KEY %s", (int)ptr[i]->type, ptr[i]->key);
841846
return OPAL_ERROR;
@@ -981,3 +986,24 @@ int opal_dss_pack_status(opal_buffer_t *buffer, const void *src,
981986

982987
return ret;
983988
}
989+
990+
int opal_dss_pack_envar(opal_buffer_t *buffer, const void *src,
991+
int32_t num_vals, opal_data_type_t type)
992+
{
993+
int ret;
994+
int32_t n;
995+
opal_envar_t *ptr = (opal_envar_t*)src;
996+
997+
for (n=0; n < num_vals; n++) {
998+
if (OPAL_SUCCESS != (ret = opal_dss_pack_string(buffer, &ptr[n].envar, 1, OPAL_STRING))) {
999+
return ret;
1000+
}
1001+
if (OPAL_SUCCESS != (ret = opal_dss_pack_string(buffer, &ptr[n].value, 1, OPAL_STRING))) {
1002+
return ret;
1003+
}
1004+
if (OPAL_SUCCESS != (ret = opal_dss_pack_byte(buffer, &ptr[n].separator, 1, OPAL_BYTE))) {
1005+
return ret;
1006+
}
1007+
}
1008+
return OPAL_SUCCESS;
1009+
}

opal/dss/dss_print.c

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* Copyright (c) 2004-2005 The Regents of the University of California.
1111
* All rights reserved.
1212
* Copyright (c) 2012 Los Alamos National Security, Inc. All rights reserved.
13-
* Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
13+
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
1414
* Copyright (c) 2014 Research Organization for Information Science
1515
* and Technology (RIST). All rights reserved.
1616
* $COPYRIGHT$
@@ -806,6 +806,13 @@ int opal_dss_print_value(char **output, char *prefix, opal_value_t *src, opal_da
806806
case OPAL_PTR:
807807
asprintf(output, "%sOPAL_VALUE: Data type: OPAL_PTR\tKey: %s", prefx, src->key);
808808
break;
809+
case OPAL_ENVAR:
810+
asprintf(output, "%sOPAL_VALUE: Data type: OPAL_ENVAR\tKey: %s\tName: %s\tValue: %s\tSeparator: %c",
811+
prefx, src->key,
812+
(NULL == src->data.envar.envar) ? "NULL" : src->data.envar.envar,
813+
(NULL == src->data.envar.value) ? "NULL" : src->data.envar.value,
814+
('\0' == src->data.envar.separator) ? ' ' : src->data.envar.separator);
815+
break;
809816
default:
810817
asprintf(output, "%sOPAL_VALUE: Data type: UNKNOWN\tKey: %s\tValue: UNPRINTABLE",
811818
prefx, src->key);
@@ -895,3 +902,25 @@ int opal_dss_print_status(char **output, char *prefix,
895902
asprintf(output, "%sData type: OPAL_STATUS\tValue: %s", prefx, opal_strerror(*src));
896903
return OPAL_SUCCESS;
897904
}
905+
906+
907+
int opal_dss_print_envar(char **output, char *prefix,
908+
opal_envar_t *src, opal_data_type_t type)
909+
{
910+
char *prefx = " ";
911+
912+
/* deal with NULL prefix */
913+
if (NULL != prefix) prefx = prefix;
914+
915+
/* if src is NULL, just print data type and return */
916+
if (NULL == src) {
917+
asprintf(output, "%sData type: OPAL_ENVAR\tValue: NULL pointer", prefx);
918+
return OPAL_SUCCESS;
919+
}
920+
921+
asprintf(output, "%sOPAL_VALUE: Data type: OPAL_ENVAR\tName: %s\tValue: %s\tSeparator: %c",
922+
prefx, (NULL == src->envar) ? "NULL" : src->envar,
923+
(NULL == src->value) ? "NULL" : src->value,
924+
('\0' == src->separator) ? ' ' : src->separator);
925+
return OPAL_SUCCESS;
926+
}

opal/dss/dss_types.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* reserved.
1616
* Copyright (c) 2014-2016 Research Organization for Information Science
1717
* and Technology (RIST). All rights reserved.
18-
* Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
18+
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
1919
* $COPYRIGHT$
2020
*
2121
* Additional copyrights may follow
@@ -107,6 +107,7 @@ typedef struct {
107107
#define OPAL_INFO_DIRECTIVES (opal_data_type_t) 36 /**< corresponds to PMIx info directives type (uint32_t) */
108108
#define OPAL_PROC_STATE (opal_data_type_t) 37 /**< corresponds to PMIx proc state type (uint8_t) */
109109
#define OPAL_PROC_INFO (opal_data_type_t) 38 /**< corresponds to PMIx proc_info type */
110+
#define OPAL_ENVAR (opal_data_type_t) 39 /**< corresponds to PMIx envar type */
110111

111112
/* OPAL Dynamic */
112113
#define OPAL_DSS_ID_DYNAMIC (opal_data_type_t) 100
@@ -131,7 +132,16 @@ typedef struct {
131132
opal_status_t exit_code;
132133
opal_proc_state_t state;
133134
} opal_proc_info_t;
134-
OBJ_CLASS_DECLARATION(opal_proc_info_t);
135+
OPAL_DECLSPEC OBJ_CLASS_DECLARATION(opal_proc_info_t);
136+
137+
/* defaine a struct for envar directives */
138+
typedef struct {
139+
opal_list_item_t super;
140+
char *envar;
141+
char *value;
142+
char separator;
143+
} opal_envar_t;
144+
OPAL_DECLSPEC OBJ_CLASS_DECLARATION(opal_envar_t);
135145

136146
/* Data value object */
137147
typedef struct {
@@ -163,6 +173,7 @@ typedef struct {
163173
opal_process_name_t name;
164174
opal_proc_info_t pinfo;
165175
void *ptr; // never packed or passed anywhere
176+
opal_envar_t envar;
166177
} data;
167178
} opal_value_t;
168179
OPAL_DECLSPEC OBJ_CLASS_DECLARATION(opal_value_t);

0 commit comments

Comments
 (0)