Skip to content

Commit f818284

Browse files
author
Ralph Castain
authored
Merge pull request #4854 from rhc54/topic/update
Update ORTE to support PMIx v3
2 parents f15d620 + 2f85db9 commit f818284

File tree

97 files changed

+5606
-968
lines changed

Some content is hidden

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

97 files changed

+5606
-968
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)