@@ -279,6 +279,7 @@ int orte_odls_base_default_construct_child_list(opal_buffer_t *buffer,
279
279
int rc ;
280
280
orte_std_cntr_t cnt ;
281
281
orte_job_t * jdata = NULL , * daemons ;
282
+ orte_node_t * node ;
282
283
int32_t n , k ;
283
284
opal_buffer_t * bptr ;
284
285
orte_proc_t * pptr , * dmn ;
@@ -436,7 +437,8 @@ int orte_odls_base_default_construct_child_list(opal_buffer_t *buffer,
436
437
/* not ready for use yet */
437
438
continue ;
438
439
}
439
- if (!orte_get_attribute (& jdata -> attributes , ORTE_JOB_FULLY_DESCRIBED , NULL , OPAL_BOOL )) {
440
+ if (!ORTE_PROC_IS_HNP &&
441
+ orte_get_attribute (& jdata -> attributes , ORTE_JOB_FULLY_DESCRIBED , NULL , OPAL_BOOL )) {
440
442
/* the parser will have already made the connection, but the fully described
441
443
* case won't have done it, so connect the proc to its node here */
442
444
opal_output_verbose (5 , orte_odls_base_framework .framework_output ,
@@ -457,6 +459,17 @@ int orte_odls_base_default_construct_child_list(opal_buffer_t *buffer,
457
459
}
458
460
OBJ_RETAIN (dmn -> node );
459
461
pptr -> node = dmn -> node ;
462
+ /* add the node to the job map, if needed */
463
+ if (!ORTE_FLAG_TEST (pptr -> node , ORTE_NODE_FLAG_MAPPED )) {
464
+ OBJ_RETAIN (pptr -> node );
465
+ opal_pointer_array_add (jdata -> map -> nodes , pptr -> node );
466
+ jdata -> map -> num_nodes ++ ;
467
+ ORTE_FLAG_SET (pptr -> node , ORTE_NODE_FLAG_MAPPED );
468
+ }
469
+ /* add this proc to that node */
470
+ OBJ_RETAIN (pptr );
471
+ opal_pointer_array_add (pptr -> node -> procs , pptr );
472
+ pptr -> node -> num_procs ++ ;
460
473
}
461
474
/* see if it belongs to us */
462
475
if (pptr -> parent == ORTE_PROC_MY_NAME -> vpid ) {
@@ -485,6 +498,14 @@ int orte_odls_base_default_construct_child_list(opal_buffer_t *buffer,
485
498
ORTE_FLAG_SET (app , ORTE_APP_FLAG_USED_ON_NODE );
486
499
}
487
500
}
501
+ if (orte_get_attribute (& jdata -> attributes , ORTE_JOB_FULLY_DESCRIBED , NULL , OPAL_BOOL )) {
502
+ /* reset the mapped flags */
503
+ for (n = 0 ; n < jdata -> map -> nodes -> size ; n ++ ) {
504
+ if (NULL != (node = (orte_node_t * )opal_pointer_array_get_item (jdata -> map -> nodes , n ))) {
505
+ ORTE_FLAG_UNSET (node , ORTE_NODE_FLAG_MAPPED );
506
+ }
507
+ }
508
+ }
488
509
489
510
if (!orte_get_attribute (& jdata -> attributes , ORTE_JOB_FULLY_DESCRIBED , NULL , OPAL_BOOL )) {
490
511
/* compute and save bindings of local children */
0 commit comments