@@ -909,14 +909,42 @@ void pmix3x_value_load(pmix_value_t *v,
909909 v -> data .darray -> array = info ;
910910 n = 0 ;
911911 OPAL_LIST_FOREACH (val , list , opal_value_t ) {
912- (void )strncpy (info [n ].key , val -> key , PMIX_MAX_KEYLEN );
912+ if (NULL != val -> key ) {
913+ (void )strncpy (info [n ].key , val -> key , PMIX_MAX_KEYLEN );
914+ }
913915 pmix3x_value_load (& info [n ].value , val );
914916 ++ n ;
915917 }
916918 } else {
917919 v -> data .darray -> array = NULL ;
918920 }
919921 break ;
922+ case OPAL_PROC_INFO :
923+ v -> type = PMIX_PROC_INFO ;
924+ PMIX_PROC_INFO_CREATE (v -> data .pinfo , 1 );
925+ /* see if this job is in our list of known nspaces */
926+ found = false;
927+ OPAL_LIST_FOREACH (job , & mca_pmix_pmix3x_component .jobids , opal_pmix3x_jobid_trkr_t ) {
928+ if (job -> jobid == kv -> data .pinfo .name .jobid ) {
929+ (void )strncpy (v -> data .pinfo -> proc .nspace , job -> nspace , PMIX_MAX_NSLEN );
930+ found = true;
931+ break ;
932+ }
933+ }
934+ if (!found ) {
935+ (void )opal_snprintf_jobid (v -> data .pinfo -> proc .nspace , PMIX_MAX_NSLEN , kv -> data .pinfo .name .jobid );
936+ }
937+ v -> data .pinfo -> proc .rank = pmix3x_convert_opalrank (kv -> data .pinfo .name .vpid );
938+ if (NULL != kv -> data .pinfo .hostname ) {
939+ v -> data .pinfo -> hostname = strdup (kv -> data .pinfo .hostname );
940+ }
941+ if (NULL != kv -> data .pinfo .executable_name ) {
942+ v -> data .pinfo -> executable_name = strdup (kv -> data .pinfo .executable_name );
943+ }
944+ v -> data .pinfo -> pid = kv -> data .pinfo .pid ;
945+ v -> data .pinfo -> exit_code = kv -> data .pinfo .exit_code ;
946+ v -> data .pinfo -> state = pmix3x_convert_opalstate (kv -> data .pinfo .state );
947+ break ;
920948 case OPAL_ENVAR :
921949 v -> type = PMIX_ENVAR ;
922950 PMIX_ENVAR_CONSTRUCT (& v -> data .envar );
@@ -1099,7 +1127,9 @@ int pmix3x_value_unload(opal_value_t *kv,
10991127 /* handle the various types */
11001128 if (PMIX_INFO == v -> data .darray -> type ) {
11011129 pmix_info_t * iptr = (pmix_info_t * )v -> data .darray -> array ;
1102- ival -> key = strdup (iptr [n ].key );
1130+ if (NULL != iptr [n ].key ) {
1131+ ival -> key = strdup (iptr [n ].key );
1132+ }
11031133 rc = pmix3x_value_unload (ival , & iptr [n ].value );
11041134 if (OPAL_SUCCESS != rc ) {
11051135 OPAL_LIST_RELEASE (lt );
@@ -1110,6 +1140,37 @@ int pmix3x_value_unload(opal_value_t *kv,
11101140 }
11111141 }
11121142 break ;
1143+ case PMIX_PROC_INFO :
1144+ kv -> type = OPAL_PROC_INFO ;
1145+ if (NULL == v -> data .pinfo ) {
1146+ rc = OPAL_ERR_BAD_PARAM ;
1147+ break ;
1148+ }
1149+ /* see if this job is in our list of known nspaces */
1150+ found = false;
1151+ OPAL_LIST_FOREACH (job , & mca_pmix_pmix3x_component .jobids , opal_pmix3x_jobid_trkr_t ) {
1152+ if (0 == strncmp (job -> nspace , v -> data .pinfo -> proc .nspace , PMIX_MAX_NSLEN )) {
1153+ kv -> data .pinfo .name .jobid = job -> jobid ;
1154+ found = true;
1155+ break ;
1156+ }
1157+ }
1158+ if (!found ) {
1159+ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid (& kv -> data .pinfo .name .jobid , v -> data .pinfo -> proc .nspace ))) {
1160+ return pmix3x_convert_opalrc (rc );
1161+ }
1162+ }
1163+ kv -> data .pinfo .name .vpid = pmix3x_convert_rank (v -> data .pinfo -> proc .rank );
1164+ if (NULL != v -> data .pinfo -> hostname ) {
1165+ kv -> data .pinfo .hostname = strdup (v -> data .pinfo -> hostname );
1166+ }
1167+ if (NULL != v -> data .pinfo -> executable_name ) {
1168+ kv -> data .pinfo .executable_name = strdup (v -> data .pinfo -> executable_name );
1169+ }
1170+ kv -> data .pinfo .pid = v -> data .pinfo -> pid ;
1171+ kv -> data .pinfo .exit_code = v -> data .pinfo -> exit_code ;
1172+ kv -> data .pinfo .state = pmix3x_convert_state (v -> data .pinfo -> state );
1173+ break ;
11131174 case PMIX_ENVAR :
11141175 kv -> type = OPAL_ENVAR ;
11151176 OBJ_CONSTRUCT (& kv -> data .envar , opal_envar_t );
@@ -1347,6 +1408,7 @@ static void infocbfunc(pmix_status_t status,
13471408 opal_list_append (results , & iptr -> super );
13481409 iptr -> key = strdup (info [n ].key );
13491410 if (OPAL_SUCCESS != (rc = pmix3x_value_unload (iptr , & info [n ].value ))) {
1411+ OPAL_ERROR_LOG (rc );
13501412 OPAL_LIST_RELEASE (results );
13511413 results = NULL ;
13521414 break ;
@@ -1510,6 +1572,103 @@ opal_pmix_alloc_directive_t pmix3x_convert_allocdir(pmix_alloc_directive_t dir)
15101572 }
15111573}
15121574
1575+ int pmix3x_convert_state (pmix_proc_state_t state )
1576+ {
1577+ switch (state ) {
1578+ case PMIX_PROC_STATE_UNDEF :
1579+ return 0 ;
1580+ case PMIX_PROC_STATE_PREPPED :
1581+ case PMIX_PROC_STATE_LAUNCH_UNDERWAY :
1582+ return 1 ;
1583+ case PMIX_PROC_STATE_RESTART :
1584+ return 2 ;
1585+ case PMIX_PROC_STATE_TERMINATE :
1586+ return 3 ;
1587+ case PMIX_PROC_STATE_RUNNING :
1588+ return 4 ;
1589+ case PMIX_PROC_STATE_CONNECTED :
1590+ return 5 ;
1591+ case PMIX_PROC_STATE_UNTERMINATED :
1592+ return 15 ;
1593+ case PMIX_PROC_STATE_TERMINATED :
1594+ return 20 ;
1595+ case PMIX_PROC_STATE_KILLED_BY_CMD :
1596+ return 51 ;
1597+ case PMIX_PROC_STATE_ABORTED :
1598+ return 52 ;
1599+ case PMIX_PROC_STATE_FAILED_TO_START :
1600+ return 53 ;
1601+ case PMIX_PROC_STATE_ABORTED_BY_SIG :
1602+ return 54 ;
1603+ case PMIX_PROC_STATE_TERM_WO_SYNC :
1604+ return 55 ;
1605+ case PMIX_PROC_STATE_COMM_FAILED :
1606+ return 56 ;
1607+ case PMIX_PROC_STATE_SENSOR_BOUND_EXCEEDED :
1608+ return 57 ;
1609+ case PMIX_PROC_STATE_CALLED_ABORT :
1610+ return 58 ;
1611+ case PMIX_PROC_STATE_HEARTBEAT_FAILED :
1612+ return 59 ;
1613+ case PMIX_PROC_STATE_MIGRATING :
1614+ return 60 ;
1615+ case PMIX_PROC_STATE_CANNOT_RESTART :
1616+ return 61 ;
1617+ case PMIX_PROC_STATE_TERM_NON_ZERO :
1618+ return 62 ;
1619+ case PMIX_PROC_STATE_FAILED_TO_LAUNCH :
1620+ return 63 ;
1621+ default :
1622+ return 0 ; // undef
1623+ }
1624+ }
1625+
1626+ pmix_proc_state_t pmix3x_convert_opalstate (int state )
1627+ {
1628+ switch (state ) {
1629+ case 0 :
1630+ return PMIX_PROC_STATE_UNDEF ;
1631+ case 1 :
1632+ return PMIX_PROC_STATE_LAUNCH_UNDERWAY ;
1633+ case 2 :
1634+ return PMIX_PROC_STATE_RESTART ;
1635+ case 3 :
1636+ return PMIX_PROC_STATE_TERMINATE ;
1637+ case 4 :
1638+ return PMIX_PROC_STATE_RUNNING ;
1639+ case 5 :
1640+ return PMIX_PROC_STATE_CONNECTED ;
1641+ case 51 :
1642+ return PMIX_PROC_STATE_KILLED_BY_CMD ;
1643+ case 52 :
1644+ return PMIX_PROC_STATE_ABORTED ;
1645+ case 53 :
1646+ return PMIX_PROC_STATE_FAILED_TO_START ;
1647+ case 54 :
1648+ return PMIX_PROC_STATE_ABORTED_BY_SIG ;
1649+ case 55 :
1650+ return PMIX_PROC_STATE_TERM_WO_SYNC ;
1651+ case 56 :
1652+ return PMIX_PROC_STATE_COMM_FAILED ;
1653+ case 57 :
1654+ return PMIX_PROC_STATE_SENSOR_BOUND_EXCEEDED ;
1655+ case 58 :
1656+ return PMIX_PROC_STATE_CALLED_ABORT ;
1657+ case 59 :
1658+ return PMIX_PROC_STATE_HEARTBEAT_FAILED ;
1659+ case 60 :
1660+ return PMIX_PROC_STATE_MIGRATING ;
1661+ case 61 :
1662+ return PMIX_PROC_STATE_CANNOT_RESTART ;
1663+ case 62 :
1664+ return PMIX_PROC_STATE_TERM_NON_ZERO ;
1665+ case 63 :
1666+ return PMIX_PROC_STATE_FAILED_TO_LAUNCH ;
1667+ default :
1668+ return PMIX_PROC_STATE_UNDEF ;
1669+ }
1670+ }
1671+
15131672/**** INSTANTIATE INTERNAL CLASSES ****/
15141673OBJ_CLASS_INSTANCE (opal_pmix3x_jobid_trkr_t ,
15151674 opal_list_item_t ,
0 commit comments