if (ret) ret = enc_branch_states(ret, stat->branch_states);
if (ret) ret = enc_int_array(ret, stat->children_done_hist, EDG_WLL_NUMBER_OF_DONE_CODES-1);
if (ret) ret = enc_timeval(ret, stat->last_pbs_event_timestamp);
+ if (ret) ret = enc_string(ret, stat->pbs_reruning);
return ret;
}
if (tmp_in != NULL) {
stat->last_pbs_event_timestamp = dec_timeval(tmp_in, &tmp_in);
}
+ if (tmp_in != NULL) {
+ stat->pbs_reruning = dec_string(tmp_in, &tmp_in);
+ }
} else if (tmp_in != NULL) {
edg_wll_FreeStatus(pubstat);
free(pubstat);
if (USABLE(res)) {
js->pub.state = EDG_WLL_JOB_WAITING;
rep(js->pub.pbs_state, "Q");
+ js->pbs_reruning = 0; // reset possible reruning flag
}
if (USABLE_DATA(res)) {
rep_cond(js->pub.pbs_reason,e->PBSPending.reason);
js->pub.pbs_pid = e->PBSRun.pid;
}
break;
+ case EDG_WLL_EVENT_PBSRERUN:
+ if (USABLE(res)) {
+ switch (get_pbs_event_source(e->any.seqcode)) {
+ case EDG_WLL_PBS_EVENT_SOURCE_SERVER:
+ js->pub.state = EDG_WLL_JOB_WAITING;
+ rep(js->pub.pbs_state, "Q");
+ break;
+ case EDG_WLL_PBS_EVENT_SOURCE_MOM:
+ js->pub.state = EDG_WLL_JOB_WAITING;
+ rep(js->pub.pbs_state, "E");
+ js->pbs_reruning = 1;
+ break;
+ default:
+ assert(0); // running event from strande source
+ break;
+ }
+ }
+ if (USABLE_DATA(res)) {
+ }
+ break;
case EDG_WLL_EVENT_PBSDONE:
if (USABLE(res)) {
- js->pub.state = EDG_WLL_JOB_DONE;
- js->pub.done_code = EDG_WLL_STAT_OK;
- rep(js->pub.pbs_state, "C");
+ switch (get_pbs_event_source(e->any.seqcode)) {
+ case EDG_WLL_PBS_EVENT_SOURCE_SERVER:
+ js->pub.state = EDG_WLL_JOB_DONE;
+ js->pub.done_code = EDG_WLL_STAT_OK;
+ rep(js->pub.pbs_state, "C");
+ break;
+ case EDG_WLL_PBS_EVENT_SOURCE_MOM:
+ if (!js->pbs_reruning) {
+ js->pub.state = EDG_WLL_JOB_DONE;
+ js->pub.done_code = EDG_WLL_STAT_OK;
+ rep(js->pub.pbs_state, "C");
+ }
+ break;
+ default:
+ assert(0); //done event from strange source
+ break;
+ }
}
if (USABLE_DATA(res)) {
js->pub.pbs_exit_status = e->PBSDone.exit_status;