Fix a major foopah that broke debugger attach. With the revisions in updating proc state, we dropped the recording of each proc's pid. Thus, attaching debuggers would find a proctable whose pids all equal 0.
This required modification of the errmgr.update_state API so the pid could be passed in to the function that could update the proper data record(s). All calls to that API have been updated as well, but I obviously couldn't test them all. Thanks to Dong Ahn (LLNL) for catching this problem! Also fixed debugger daemon cospawn, both for initial launch and attach-while-running modes. Tested and verified on rsh and slurm. This commit was SVN r23300.
Этот коммит содержится в:
родитель
e9f4c84d7e
Коммит
099c3aad97
@ -42,6 +42,7 @@ static int update_state(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *proc_name,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code,
|
||||
orte_errmgr_stack_state_t *stack_state);
|
||||
|
||||
@ -74,6 +75,7 @@ static int update_state(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *proc,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code,
|
||||
orte_errmgr_stack_state_t *stack_state)
|
||||
{
|
||||
|
@ -63,6 +63,7 @@ int orte_errmgr_base_update_state(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *name,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code)
|
||||
{
|
||||
int rc=ORTE_SUCCESS;
|
||||
@ -89,7 +90,7 @@ int orte_errmgr_base_update_state(orte_jobid_t job,
|
||||
continue;
|
||||
}
|
||||
if( NULL != module->update_state ) {
|
||||
rc = module->update_state(job, jobstate, name, state, exit_code, &stack_state);
|
||||
rc = module->update_state(job, jobstate, name, state, pid, exit_code, &stack_state);
|
||||
if (ORTE_SUCCESS != rc || ORTE_ERRMGR_STACK_STATE_COMPLETE & stack_state) {
|
||||
break;
|
||||
}
|
||||
|
@ -65,6 +65,7 @@ ORTE_DECLSPEC int orte_errmgr_base_update_state(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *proc_name,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code);
|
||||
ORTE_DECLSPEC int orte_errmgr_base_abort(int error_code, char *fmt, ...)
|
||||
# if OPAL_HAVE_ATTRIBUTE_FORMAT_FUNCPTR
|
||||
|
@ -120,6 +120,7 @@ typedef int (*orte_errmgr_base_API_update_state_fn_t)(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *proc_name,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code);
|
||||
|
||||
/**
|
||||
@ -208,6 +209,7 @@ typedef int (*orte_errmgr_base_module_update_state_fn_t)(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *proc_name,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code,
|
||||
orte_errmgr_stack_state_t *stack_state);
|
||||
typedef int (*orte_errmgr_base_module_predicted_fault_fn_t)(char ***proc_list,
|
||||
|
@ -51,6 +51,7 @@ static void update_local_procs_in_job(orte_job_t *jdata, orte_job_state_t jobsta
|
||||
orte_proc_state_t state, orte_exit_code_t exit_code);
|
||||
static void update_proc(orte_job_t *jdata, orte_process_name_t *proc,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code);
|
||||
static void check_job_complete(orte_job_t *jdata);
|
||||
static void killprocs(orte_jobid_t job, orte_vpid_t vpid);
|
||||
@ -67,6 +68,7 @@ static int update_state(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *proc_name,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code,
|
||||
orte_errmgr_stack_state_t *stack_state);
|
||||
|
||||
@ -113,6 +115,7 @@ static int update_state(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *proc,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code,
|
||||
orte_errmgr_stack_state_t *stack_state)
|
||||
{
|
||||
@ -127,12 +130,12 @@ static int update_state(orte_jobid_t job,
|
||||
|
||||
OPAL_OUTPUT_VERBOSE((1, orte_errmgr_base.output,
|
||||
"%s errmgr:hnp: job %s reported state %s"
|
||||
" for proc %s state %s exit_code %d",
|
||||
" for proc %s state %s pid %d exit_code %d",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||
ORTE_JOBID_PRINT(job),
|
||||
orte_job_state_to_str(jobstate),
|
||||
(NULL == proc) ? "NULL" : ORTE_NAME_PRINT(proc),
|
||||
orte_proc_state_to_str(state), exit_code));
|
||||
orte_proc_state_to_str(state), pid, exit_code));
|
||||
|
||||
/*
|
||||
* if orte is trying to shutdown, just let it
|
||||
@ -320,7 +323,7 @@ static int update_state(orte_jobid_t job,
|
||||
/* guess not - let it fall thru to abort */
|
||||
}
|
||||
}
|
||||
update_proc(jdata, proc, state, exit_code);
|
||||
update_proc(jdata, proc, state, pid, exit_code);
|
||||
check_job_complete(jdata); /* need to set the job state */
|
||||
/* the job object for this job will have been NULL'd
|
||||
* in the array if the job was solely local. If it isn't
|
||||
@ -333,7 +336,7 @@ static int update_state(orte_jobid_t job,
|
||||
|
||||
case ORTE_PROC_STATE_FAILED_TO_START:
|
||||
case ORTE_PROC_STATE_CALLED_ABORT:
|
||||
update_proc(jdata, proc, state, exit_code);
|
||||
update_proc(jdata, proc, state, pid, exit_code);
|
||||
check_job_complete(jdata);
|
||||
/* the job object for this job will have been NULL'd
|
||||
* in the array if the job was solely local. If it isn't
|
||||
@ -346,17 +349,22 @@ static int update_state(orte_jobid_t job,
|
||||
|
||||
case ORTE_PROC_STATE_REGISTERED:
|
||||
case ORTE_PROC_STATE_RUNNING:
|
||||
update_proc(jdata, proc, state, exit_code);
|
||||
update_proc(jdata, proc, state, pid, exit_code);
|
||||
break;
|
||||
|
||||
case ORTE_PROC_STATE_LAUNCHED:
|
||||
/* record the pid for this child */
|
||||
update_proc(jdata, proc, state, pid, exit_code);
|
||||
break;
|
||||
|
||||
case ORTE_PROC_STATE_TERMINATED:
|
||||
case ORTE_PROC_STATE_KILLED_BY_CMD:
|
||||
update_proc(jdata, proc, state, exit_code);
|
||||
update_proc(jdata, proc, state, pid, exit_code);
|
||||
check_job_complete(jdata);
|
||||
break;
|
||||
|
||||
case ORTE_PROC_STATE_SENSOR_BOUND_EXCEEDED:
|
||||
update_proc(jdata, proc, state, exit_code);
|
||||
update_proc(jdata, proc, state, pid, exit_code);
|
||||
killprocs(proc->jobid, proc->vpid);
|
||||
check_job_complete(jdata); /* need to set the job state */
|
||||
/* the job object for this job will have been NULL'd
|
||||
@ -388,7 +396,7 @@ static int update_state(orte_jobid_t job,
|
||||
hnp_abort(ORTE_JOBID_WILDCARD, exit_code);
|
||||
}
|
||||
} else {
|
||||
update_proc(jdata, proc, state, ORTE_ERR_COMM_FAILURE);
|
||||
update_proc(jdata, proc, state, pid, ORTE_ERR_COMM_FAILURE);
|
||||
/* kill all local procs */
|
||||
killprocs(ORTE_JOBID_WILDCARD, ORTE_VPID_WILDCARD);
|
||||
/* kill all jobs */
|
||||
@ -587,6 +595,7 @@ static void update_local_procs_in_job(orte_job_t *jdata, orte_job_state_t jobsta
|
||||
static void update_proc(orte_job_t *jdata,
|
||||
orte_process_name_t *proc,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code)
|
||||
{
|
||||
opal_list_item_t *item, *next;
|
||||
@ -603,9 +612,15 @@ static void update_proc(orte_job_t *jdata,
|
||||
if (child->name->jobid == proc->jobid) {
|
||||
if (child->name->vpid == proc->vpid) {
|
||||
child->state = state;
|
||||
if (0 < pid) {
|
||||
child->pid = pid;
|
||||
}
|
||||
child->exit_code = exit_code;
|
||||
proct = (orte_proc_t*)opal_pointer_array_get_item(jdata->procs, child->name->vpid);
|
||||
proct->state = state;
|
||||
if (0 < pid) {
|
||||
proct->pid = pid;
|
||||
}
|
||||
proct->exit_code = exit_code;
|
||||
if (ORTE_PROC_STATE_UNTERMINATED < state) {
|
||||
if (!jdata->enable_recovery) {
|
||||
@ -641,6 +656,9 @@ static void update_proc(orte_job_t *jdata,
|
||||
continue;
|
||||
}
|
||||
proct->state = state;
|
||||
if (0 < pid) {
|
||||
proct->pid = pid;
|
||||
}
|
||||
proct->exit_code = exit_code;
|
||||
if (ORTE_PROC_STATE_REGISTERED == state) {
|
||||
jdata->num_reported++;
|
||||
|
@ -49,7 +49,9 @@ static int pack_state_for_proc(opal_buffer_t *alert, orte_odls_child_t *child);
|
||||
static bool all_children_registered(orte_jobid_t job);
|
||||
static int pack_child_contact_info(orte_jobid_t job, opal_buffer_t *buf);
|
||||
static void failed_start(orte_odls_job_t *jobdat, orte_exit_code_t exit_code);
|
||||
static void update_local_children(orte_odls_job_t *jobdat, orte_job_state_t jobstate, orte_proc_state_t state);
|
||||
static void update_local_children(orte_odls_job_t *jobdat,
|
||||
orte_job_state_t jobstate,
|
||||
orte_proc_state_t state);
|
||||
static void killprocs(orte_jobid_t job, orte_vpid_t vpid);
|
||||
|
||||
|
||||
@ -68,6 +70,7 @@ static int update_state(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *proc,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code,
|
||||
orte_errmgr_stack_state_t *stack_state);
|
||||
|
||||
@ -109,6 +112,7 @@ static int update_state(orte_jobid_t job,
|
||||
orte_job_state_t jobstate,
|
||||
orte_process_name_t *proc,
|
||||
orte_proc_state_t state,
|
||||
pid_t pid,
|
||||
orte_exit_code_t exit_code,
|
||||
orte_errmgr_stack_state_t *stack_state)
|
||||
{
|
||||
@ -271,10 +275,10 @@ static int update_state(orte_jobid_t job,
|
||||
}
|
||||
|
||||
OPAL_OUTPUT_VERBOSE((5, orte_errmgr_base.output,
|
||||
"%s errmgr:orted got state %s for proc %s ",
|
||||
"%s errmgr:orted got state %s for proc %s pid %d",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||
orte_proc_state_to_str(state),
|
||||
ORTE_NAME_PRINT(proc)));
|
||||
ORTE_NAME_PRINT(proc), pid));
|
||||
|
||||
/*** UPDATE COMMAND FOR A SPECIFIC PROCESS ***/
|
||||
if (ORTE_PROC_STATE_SENSOR_BOUND_EXCEEDED == state) {
|
||||
@ -406,6 +410,9 @@ static int update_state(orte_jobid_t job,
|
||||
child->name->vpid == proc->vpid) {
|
||||
if (ORTE_PROC_STATE_UNTERMINATED > child->state) {
|
||||
child->state = state;
|
||||
if (0 < pid) {
|
||||
child->pid = pid;
|
||||
}
|
||||
child->exit_code = exit_code;
|
||||
}
|
||||
/* done with loop */
|
||||
|
@ -1046,7 +1046,7 @@ REPORT_ERROR:
|
||||
* deal with the hang!
|
||||
*/
|
||||
orte_errmgr.update_state(*job, ORTE_JOB_STATE_NEVER_LAUNCHED,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, rc);
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0, rc);
|
||||
|
||||
if (NULL != app_idx) {
|
||||
free(app_idx);
|
||||
@ -1342,25 +1342,6 @@ int orte_odls_base_default_launch_local(orte_jobid_t job,
|
||||
*/
|
||||
getcwd(basedir, sizeof(basedir));
|
||||
|
||||
/* if the job is INVALID, then we are only launching
|
||||
* debugger daemons - so do that
|
||||
*/
|
||||
if (ORTE_JOBID_INVALID == job) {
|
||||
OPAL_OUTPUT_VERBOSE((5, orte_odls_globals.output,
|
||||
"%s odls:launch forking debugger with %s",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||
(ORTE_JOB_CONTROL_FORWARD_OUTPUT & orte_odls_globals.debugger->controls) ? "output forwarded" : "no output"));
|
||||
fork_local(orte_odls_globals.debugger->apps[0], NULL, NULL, orte_odls_globals.debugger);
|
||||
orte_odls_globals.debugger_launched = true;
|
||||
if (ORTE_SUCCESS != (rc = orte_errmgr.update_state(orte_odls_globals.debugger->jobid,
|
||||
ORTE_JOB_STATE_RUNNING,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* compute the number of local procs alive */
|
||||
num_procs_alive = 0;
|
||||
for (item = opal_list_get_first(&orte_local_children);
|
||||
@ -1852,6 +1833,8 @@ int orte_odls_base_default_launch_local(orte_jobid_t job,
|
||||
} else {
|
||||
child->alive = true;
|
||||
child->state = ORTE_PROC_STATE_LAUNCHED;
|
||||
orte_errmgr.update_state(child->name->jobid, ORTE_JOB_STATE_LAUNCHED,
|
||||
child->name, child->state, child->pid, child->exit_code);
|
||||
}
|
||||
/* move to next processor */
|
||||
proc_rank++;
|
||||
@ -1891,7 +1874,7 @@ CLEANUP:
|
||||
*/
|
||||
if (launch_failed) {
|
||||
if (ORTE_SUCCESS != (rc = orte_errmgr.update_state(jobdat->jobid, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0,
|
||||
child->exit_code))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
}
|
||||
@ -1908,22 +1891,30 @@ CLEANUP:
|
||||
!orte_odls_globals.debugger_launched &&
|
||||
0 < opal_list_get_size(&orte_local_children)) {
|
||||
OPAL_OUTPUT_VERBOSE((5, orte_odls_globals.output,
|
||||
"%s odls:launch forking debugger with %s",
|
||||
"%s odls:launch forking debugger %s with %s",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||
orte_odls_globals.debugger->apps[0]->app,
|
||||
(ORTE_JOB_CONTROL_FORWARD_OUTPUT & orte_odls_globals.debugger->controls) ? "output forwarded" : "no output"));
|
||||
|
||||
fork_local(orte_odls_globals.debugger->apps[0], NULL, NULL, orte_odls_globals.debugger);
|
||||
odls_base_default_setup_fork(orte_odls_globals.debugger->apps[0],
|
||||
1, orte_process_info.num_procs,
|
||||
orte_process_info.num_procs,
|
||||
orte_process_info.num_procs, false,
|
||||
&(orte_odls_globals.debugger->apps[0]->env));
|
||||
fork_local(orte_odls_globals.debugger->apps[0], NULL,
|
||||
orte_odls_globals.debugger->apps[0]->env,
|
||||
orte_odls_globals.debugger);
|
||||
orte_odls_globals.debugger_launched = true;
|
||||
if (ORTE_SUCCESS != (rc = orte_errmgr.update_state(orte_odls_globals.debugger->jobid,
|
||||
ORTE_JOB_STATE_RUNNING,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
}
|
||||
}
|
||||
|
||||
if (ORTE_SUCCESS != (rc = orte_errmgr.update_state(jobdat->jobid, ORTE_JOB_STATE_RUNNING,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
}
|
||||
@ -1949,7 +1940,6 @@ CLEANUP:
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
opal_condition_signal(&orte_odls_globals.cond);
|
||||
OPAL_THREAD_UNLOCK(&orte_odls_globals.mutex);
|
||||
return rc;
|
||||
@ -2270,7 +2260,7 @@ int orte_odls_base_default_require_sync(orte_process_name_t *proc,
|
||||
|
||||
/* update the proc state */
|
||||
orte_errmgr.update_state(ORTE_JOBID_INVALID, ORTE_JOB_STATE_UNDEF,
|
||||
proc, ORTE_PROC_STATE_REGISTERED, 0);
|
||||
proc, ORTE_PROC_STATE_REGISTERED, 0, 0);
|
||||
|
||||
CLEANUP:
|
||||
opal_condition_signal(&orte_odls_globals.cond);
|
||||
@ -2347,7 +2337,8 @@ GOTCHILD:
|
||||
orte_session_dir_finalize(proc);
|
||||
/* alert the errmgr */
|
||||
if (ORTE_SUCCESS != (rc = orte_errmgr.update_state(ORTE_JOBID_INVALID, ORTE_JOB_STATE_UNDEF,
|
||||
proc, child->state, child->exit_code))) {
|
||||
proc, child->state, child->pid,
|
||||
child->exit_code))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
}
|
||||
}
|
||||
@ -2572,7 +2563,8 @@ MOVEON:
|
||||
orte_session_dir_finalize(proc);
|
||||
/* alert the errmgr */
|
||||
if (ORTE_SUCCESS != (rc = orte_errmgr.update_state(ORTE_JOBID_INVALID, ORTE_JOB_STATE_UNDEF,
|
||||
proc, child->state, child->exit_code))) {
|
||||
proc, child->state, child->pid,
|
||||
child->exit_code))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
}
|
||||
}
|
||||
@ -2834,7 +2826,7 @@ int orte_odls_base_default_kill_local_procs(opal_pointer_array_t *procs,
|
||||
*/
|
||||
if (child->iof_complete && child->waitpid_recvd) {
|
||||
rc = orte_errmgr.update_state(ORTE_JOBID_INVALID, ORTE_JOB_STATE_UNDEF,
|
||||
child->name, child->state,
|
||||
child->name, child->state, child->pid,
|
||||
child->exit_code);
|
||||
if (ORTE_ERR_SILENT == OPAL_SOS_GET_ERROR_CODE(rc)) {
|
||||
/* all procs are complete - we are done */
|
||||
|
@ -603,7 +603,7 @@ void mca_oob_tcp_peer_close(mca_oob_tcp_peer_t* peer)
|
||||
*/
|
||||
if (ORTE_ERR_UNRECOVERABLE == orte_errmgr.update_state(peer->peer_name.jobid, ORTE_JOB_STATE_COMM_FAILED,
|
||||
&peer->peer_name, ORTE_PROC_STATE_COMM_FAILED,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE)) {
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE)) {
|
||||
/* Should free the peer lock before we abort so we don't
|
||||
* get stuck in the orte_wait_kill when receiving messages in the
|
||||
* tcp OOB
|
||||
|
@ -402,7 +402,7 @@ cleanup:
|
||||
if (failed_launch) {
|
||||
orte_errmgr.update_state(failed_job, job_state,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
return rc;
|
||||
@ -488,14 +488,14 @@ static void alps_wait_cb(pid_t pid, int status, void* cbdata){
|
||||
* callback receive and exit
|
||||
*/
|
||||
orte_errmgr.update_state(ORTE_PROC_MY_NAME->jobid, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, status);
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0, status);
|
||||
|
||||
} else {
|
||||
/* an orted must have died unexpectedly after launch - report
|
||||
* that the daemon has failed so we exit
|
||||
*/
|
||||
orte_errmgr.update_state(ORTE_PROC_MY_NAME->jobid, ORTE_JOB_STATE_ABORTED,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, status);
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0, status);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -618,7 +618,7 @@ CLEANUP:
|
||||
if( NULL != rml_uri ) free(rml_uri);
|
||||
orte_errmgr.update_state(ORTE_PROC_MY_NAME->jobid, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_FAILED_TO_START,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
} else {
|
||||
orted_num_callback++;
|
||||
}
|
||||
|
@ -440,7 +440,7 @@ static void process_msg(int fd, short event, void *data)
|
||||
|
||||
/* update the state */
|
||||
orte_errmgr.update_state(job, ORTE_JOB_STATE_UNDEF,
|
||||
&name, state, exit_code);
|
||||
&name, state, pid, exit_code);
|
||||
}
|
||||
count = 1;
|
||||
}
|
||||
@ -475,7 +475,7 @@ static void process_msg(int fd, short event, void *data)
|
||||
/* update the errmgr state */
|
||||
orte_errmgr.update_state(job, ORTE_JOB_STATE_REGISTERED,
|
||||
&name, ORTE_PROC_STATE_REGISTERED,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
count=1;
|
||||
}
|
||||
/* pass the remainder of the buffer to the active module's
|
||||
|
@ -578,7 +578,7 @@ launch_apps:
|
||||
if (failed_launch) {
|
||||
orte_errmgr.update_state(failed_job, job_state,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
/* check for timing request - get stop time and process if so */
|
||||
|
@ -364,7 +364,7 @@ cleanup:
|
||||
if (failed_launch) {
|
||||
orte_errmgr.update_state(failed_job, job_state,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
@ -927,7 +927,7 @@ static void orte_plm_process_wait_daemon(pid_t pid, int status, void* cbdata)
|
||||
*/
|
||||
orte_errmgr.update_state(active_job, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
status);
|
||||
0, status);
|
||||
} /* if abnormal exit */
|
||||
|
||||
/* release any waiting threads */
|
||||
@ -1369,7 +1369,7 @@ launch_apps:
|
||||
if( failed_launch ) {
|
||||
orte_errmgr.update_state(jdata->jobid, job_state,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
@ -1033,7 +1033,7 @@ CLEANUP:
|
||||
if( NULL != rml_uri ) free(rml_uri);
|
||||
orte_errmgr.update_state(peer.jobid, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_FAILED_TO_START,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
} else {
|
||||
orted_num_callback++;
|
||||
}
|
||||
@ -1419,7 +1419,7 @@ launch_apps:
|
||||
if (failed_launch) {
|
||||
orte_errmgr.update_state(failed_job, job_state,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
/* cancel the lingering recv */
|
||||
|
@ -151,7 +151,7 @@ static void wait_cb(pid_t pid, int status, void* cbdata)
|
||||
}
|
||||
/* note that this daemon failed */
|
||||
orte_errmgr.update_state(proc->name.jobid, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_FAILED_TO_START, status);
|
||||
NULL, ORTE_PROC_STATE_FAILED_TO_START, 0, status);
|
||||
|
||||
/* release any waiting threads */
|
||||
OPAL_THREAD_LOCK(&mca_plm_rshd_component.lock);
|
||||
@ -376,7 +376,7 @@ cleanup:
|
||||
if (failed_launch) {
|
||||
orte_errmgr.update_state(failed_job, job_state,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
@ -487,7 +487,7 @@ cleanup:
|
||||
if (failed_launch) {
|
||||
orte_errmgr.update_state(failed_job, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
return rc;
|
||||
@ -588,7 +588,7 @@ static void srun_wait_cb(pid_t pid, int status, void* cbdata){
|
||||
"%s plm:slurm: daemon failed during launch",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME)));
|
||||
orte_errmgr.update_state(ORTE_PROC_MY_NAME->jobid, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, status);
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0, status);
|
||||
} else {
|
||||
/* if this is after launch, then we need to abort only if the status
|
||||
* returned is non-zero - i.e., if the orteds exited with an error
|
||||
@ -601,7 +601,7 @@ static void srun_wait_cb(pid_t pid, int status, void* cbdata){
|
||||
"%s plm:slurm: daemon failed while running",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME)));
|
||||
orte_errmgr.update_state(ORTE_PROC_MY_NAME->jobid, ORTE_JOB_STATE_ABORTED,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, status);
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0, status);
|
||||
}
|
||||
/* otherwise, check to see if this is the primary pid */
|
||||
if (primary_srun_pid == pid) {
|
||||
|
@ -300,7 +300,7 @@ static void orte_plm_submit_wait_daemon(pid_t pid, int status, void* cbdata)
|
||||
will be non-zero and forcibly terminate the job so orterun can exit
|
||||
*/
|
||||
orte_errmgr.update_state(active_job, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, status);
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0, status);
|
||||
|
||||
} /* if abnormal exit */
|
||||
|
||||
@ -931,7 +931,7 @@ launch_apps:
|
||||
if (failed_launch) {
|
||||
orte_errmgr.update_state(jdata->jobid, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
@ -471,7 +471,7 @@ launch_apps:
|
||||
if (failed_launch) {
|
||||
orte_errmgr.update_state(failed_job, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
OPAL_OUTPUT_VERBOSE((1, orte_plm_globals.output,
|
||||
@ -578,5 +578,5 @@ static void failed_start(int fd, short dummy, void *arg)
|
||||
|
||||
orte_errmgr.update_state(ORTE_PROC_MY_NAME->jobid, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
@ -549,7 +549,7 @@ launch_apps:
|
||||
if (failed_launch) {
|
||||
orte_errmgr.update_state(failed_job, job_state,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
OPAL_OUTPUT_VERBOSE((1, orte_plm_globals.output,
|
||||
@ -811,7 +811,7 @@ static void failed_start(int fd, short dummy, void *arg)
|
||||
}
|
||||
|
||||
orte_errmgr.update_state(ORTE_PROC_MY_NAME->jobid, ORTE_JOB_STATE_FAILED_TO_START,
|
||||
NULL, ORTE_PROC_STATE_UNDEF, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
NULL, ORTE_PROC_STATE_UNDEF, 0, ORTE_ERROR_DEFAULT_EXIT_CODE);
|
||||
}
|
||||
|
||||
static int obit_submit(int tid)
|
||||
|
@ -156,7 +156,7 @@ int orte_routed_base_process_callback(orte_jobid_t job, opal_buffer_t *buffer)
|
||||
|
||||
/* update the proc state */
|
||||
orte_errmgr.update_state(job, ORTE_JOB_STATE_UNDEF,
|
||||
&proc->name, ORTE_PROC_STATE_RUNNING, 0);
|
||||
&proc->name, ORTE_PROC_STATE_RUNNING, 0, 0);
|
||||
cnt = 1;
|
||||
}
|
||||
if (ORTE_ERR_UNPACK_READ_PAST_END_OF_BUFFER != OPAL_SOS_GET_ERROR_CODE(rc)) {
|
||||
|
@ -747,7 +747,7 @@ static int route_lost(const orte_process_name_t *route)
|
||||
ORTE_VPID_PRINT(route->vpid));
|
||||
orte_errmgr.update_state(route->jobid, ORTE_JOB_STATE_COMM_FAILED,
|
||||
(orte_process_name_t*)route,
|
||||
ORTE_PROC_STATE_COMM_FAILED, 1);
|
||||
ORTE_PROC_STATE_COMM_FAILED, 0, 1);
|
||||
}
|
||||
/* either way, take no further action */
|
||||
return ORTE_SUCCESS;
|
||||
|
@ -342,7 +342,7 @@ static void sample(int fd, short event, void *arg)
|
||||
ft->file, ft->file_size, ctime(&ft->last_access), ctime(&ft->last_mod));
|
||||
orte_errmgr.update_state(ft->jobid, ORTE_JOB_STATE_SENSOR_BOUND_EXCEEDED,
|
||||
NULL, ORTE_PROC_STATE_UNDEF,
|
||||
ORTE_ERR_PROC_STALLED);
|
||||
0, ORTE_ERR_PROC_STALLED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -285,7 +285,7 @@ static void check_heartbeat(int fd, short dummy, void *arg)
|
||||
name.vpid = v;
|
||||
orte_errmgr.update_state(ORTE_PROC_MY_NAME->jobid, ORTE_JOB_STATE_HEARTBEAT_FAILED,
|
||||
&name, ORTE_PROC_STATE_HEARTBEAT_FAILED,
|
||||
ORTE_ERR_HEARTBEAT_LOST);
|
||||
0, ORTE_ERR_HEARTBEAT_LOST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -256,7 +256,7 @@ static void sample(int fd, short event, void *arg)
|
||||
(unsigned long)stats.vsize/1000000, (unsigned long)job->memory_limit);
|
||||
orte_errmgr.update_state(child->name->jobid, ORTE_JOB_STATE_SENSOR_BOUND_EXCEEDED,
|
||||
child->name, ORTE_PROC_STATE_SENSOR_BOUND_EXCEEDED,
|
||||
ORTE_ERR_MEM_LIMIT_EXCEEDED);
|
||||
0, ORTE_ERR_MEM_LIMIT_EXCEEDED);
|
||||
}
|
||||
OBJ_DESTRUCT(&stats);
|
||||
}
|
||||
|
@ -516,7 +516,6 @@ static void check_debugger(int fd, short event, void *arg)
|
||||
if (!MPIR_forward_output) {
|
||||
jdata->controls &= ~ORTE_JOB_CONTROL_FORWARD_OUTPUT;
|
||||
}
|
||||
jdata->num_procs = orte_process_info.num_procs;
|
||||
/* add it to the global job pool */
|
||||
ljob = ORTE_LOCAL_JOBID(jdata->jobid);
|
||||
opal_pointer_array_set_item(orte_job_data, ljob, jdata);
|
||||
@ -527,6 +526,11 @@ static void check_debugger(int fd, short event, void *arg)
|
||||
} else {
|
||||
app->app = strdup((char*)MPIR_executable_path);
|
||||
}
|
||||
if (orte_hnp_is_allocated) {
|
||||
app->num_procs = orte_process_info.num_procs;
|
||||
} else {
|
||||
app->num_procs = orte_process_info.num_procs - 1;
|
||||
}
|
||||
opal_argv_append_nosize(&app->argv, app->app);
|
||||
build_debugger_args(app);
|
||||
opal_pointer_array_add(jdata->apps, &app->super);
|
||||
@ -688,6 +692,10 @@ void orte_debugger_init_after_spawn(orte_job_t *jdata)
|
||||
return;
|
||||
}
|
||||
|
||||
if (orte_output_debugger_proctable) {
|
||||
opal_output(orte_clean_output, "MPIR Proctable for job %s", ORTE_JOBID_PRINT(jdata->jobid));
|
||||
}
|
||||
|
||||
/* initialize MPIR_proctable */
|
||||
for (j=0; j < jdata->num_procs; j++) {
|
||||
if (NULL == (proc = (orte_proc_t*)opal_pointer_array_get_item(jdata->procs, j))) {
|
||||
@ -710,6 +718,11 @@ void orte_debugger_init_after_spawn(orte_job_t *jdata)
|
||||
opal_os_path( false, appctx->cwd, appctx->app, NULL );
|
||||
}
|
||||
MPIR_proctable[i].pid = proc->pid;
|
||||
if (orte_output_debugger_proctable) {
|
||||
opal_output(orte_clean_output, "%s: Host %s Exe %s Pid %d",
|
||||
ORTE_VPID_PRINT(i), MPIR_proctable[i].host_name,
|
||||
MPIR_proctable[i].executable_name, MPIR_proctable[i].pid);
|
||||
}
|
||||
}
|
||||
|
||||
if (orte_debug_flag) {
|
||||
|
@ -817,19 +817,6 @@ int orterun(int argc, char *argv[])
|
||||
/* Spawn the job */
|
||||
rc = orte_plm.spawn(jdata);
|
||||
|
||||
/* output debugger proctable, if requested */
|
||||
if (orte_output_debugger_proctable) {
|
||||
char *output;
|
||||
opal_dss.print(&output, NULL, jdata->map, ORTE_JOB_MAP);
|
||||
if (orte_xml_output) {
|
||||
fprintf(orte_xml_fp, "%s\n", output);
|
||||
fflush(orte_xml_fp);
|
||||
} else {
|
||||
opal_output(orte_clean_output, "%s", output);
|
||||
}
|
||||
free(output);
|
||||
}
|
||||
|
||||
/* complete debugger interface */
|
||||
orte_debugger_init_after_spawn(jdata);
|
||||
|
||||
|
@ -628,10 +628,6 @@ int orte_util_encode_pidmap(opal_byte_object_t *boptr)
|
||||
if (NULL == jdata->map) {
|
||||
continue;
|
||||
}
|
||||
/* if this is a debugger job, ignore it */
|
||||
if (jdata->controls & ORTE_JOB_CONTROL_DEBUGGER_DAEMON) {
|
||||
continue;
|
||||
}
|
||||
/* pack the jobid */
|
||||
if (ORTE_SUCCESS != (rc = opal_dss.pack(&buf, &jdata->jobid, 1, ORTE_JOBID))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user