* Version $Id$
*/
/*
- Copyright (C) 2000-2003 Kern Sibbald and John Walker
+ Copyright (C) 2000-2004 Kern Sibbald and John Walker
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
unlock_jcr_chain();
}
+/*
+ * Check if the maxwaittime has expired and it is possible
+ * to cancel the job.
+ */
static bool job_check_maxwaittime(JCR *control_jcr, JCR *jcr)
{
bool cancel = false;
"checking status\n",
jcr->JobId, jcr->Job, jcr->job->MaxWaitTime);
switch (jcr->JobStatus) {
- case JS_Created:
- case JS_Blocked:
+ case JS_Created:
+ case JS_Blocked:
+ case JS_WaitFD:
+ case JS_WaitSD:
+ case JS_WaitStoreRes:
+ case JS_WaitClientRes:
+ case JS_WaitJobRes:
+ case JS_WaitPriority:
+ case JS_WaitMaxJobs:
+ case JS_WaitStartTime:
+ cancel = true;
+ Dmsg0(200, "JCR blocked in #1\n");
+ break;
+ case JS_Running:
+ Dmsg0(200, "JCR running, checking SD status\n");
+ switch (jcr->SDJobStatus) {
+ case JS_WaitMount:
+ case JS_WaitMedia:
case JS_WaitFD:
- case JS_WaitSD:
- case JS_WaitStoreRes:
- case JS_WaitClientRes:
- case JS_WaitJobRes:
- case JS_WaitPriority:
- case JS_WaitMaxJobs:
- case JS_WaitStartTime:
cancel = true;
- Dmsg0(200, "JCR blocked in #1\n");
- break;
- case JS_Running:
- Dmsg0(200, "JCR running, checking SD status\n");
- switch (jcr->SDJobStatus) {
- case JS_WaitMount:
- case JS_WaitMedia:
- case JS_WaitFD:
- cancel = true;
- Dmsg0(200, "JCR blocked in #2\n");
- break;
- default:
- Dmsg0(200, "JCR not blocked in #2\n");
- break;
- }
- break;
- case JS_Terminated:
- case JS_ErrorTerminated:
- case JS_Canceled:
- Dmsg0(200, "JCR already dead in #3\n");
+ Dmsg0(200, "JCR blocked in #2\n");
break;
default:
- Emsg1(M_ABORT, 0, _("Unhandled job status code %d\n"),
- jcr->JobStatus);
+ Dmsg0(200, "JCR not blocked in #2\n");
+ break;
+ }
+ break;
+ case JS_Terminated:
+ case JS_ErrorTerminated:
+ case JS_Canceled:
+ case JS_FatalError:
+ Dmsg0(200, "JCR already dead in #3\n");
+ break;
+ default:
+ Jmsg1(jcr, M_ERROR, 0, _("Unhandled job status code %d\n"),
+ jcr->JobStatus);
}
Dmsg3(200, "MaxWaitTime result: %scancel JCR %p (%s)\n",
cancel ? "" : "do not ", jcr, jcr->job);
return cancel;
}
+/*
+ * Check if maxruntime has expired and if the job can be
+ * canceled.
+ */
static bool job_check_maxruntime(JCR *control_jcr, JCR *jcr)
{
bool cancel = false;
}
switch (jcr->JobStatus) {
- case JS_Created:
- case JS_Blocked:
- case JS_WaitFD:
- case JS_WaitSD:
- case JS_WaitStoreRes:
- case JS_WaitClientRes:
- case JS_WaitJobRes:
- case JS_WaitPriority:
- case JS_WaitMaxJobs:
- case JS_WaitStartTime:
- case JS_Running:
- cancel = true;
- break;
- case JS_Terminated:
- case JS_ErrorTerminated:
- case JS_Canceled:
- cancel = false;
- break;
- default:
- Emsg1(M_ABORT, 0, _("Unhandled job status code %d\n"),
- jcr->JobStatus);
+ case JS_Created:
+ case JS_Running:
+ case JS_Blocked:
+ case JS_WaitFD:
+ case JS_WaitSD:
+ case JS_WaitStoreRes:
+ case JS_WaitClientRes:
+ case JS_WaitJobRes:
+ case JS_WaitPriority:
+ case JS_WaitMaxJobs:
+ case JS_WaitStartTime:
+ case JS_Differences:
+ cancel = true;
+ break;
+ case JS_Terminated:
+ case JS_ErrorTerminated:
+ case JS_Canceled:
+ case JS_FatalError:
+ cancel = false;
+ break;
+ default:
+ Jmsg1(jcr, M_ERROR, 0, _("Unhandled job status code %d\n"),
+ jcr->JobStatus);
}
Dmsg3(200, "MaxRunTime result: %scancel JCR %p (%s)\n",
Jmsg(jcr, M_INFO, 0, _("RunAfter: %s"), line);
}
status = close_bpipe(bpipe);
+ /*
+ * Note, if we get an error here, do not mark the
+ * job in error, simply report the error condition.
+ */
if (status != 0) {
if (jcr->JobStatus == JS_Terminated) {
- Jmsg(jcr, M_FATAL, 0, _("RunAfterJob returned non-zero status=%d\n"),
+ Jmsg(jcr, M_ERROR, 0, _("RunAfterJob returned non-zero status=%d\n"),
status);
} else {
Jmsg(jcr, M_FATAL, 0, _("RunAfterFailedJob returned non-zero status=%d\n"),
status);
}
- set_jcr_job_status(jcr, JS_FatalError);
- update_job_end_record(jcr);
}
}
}
}
pm_strcpy(&jcr->client_name, jcr->client->hdr.name);
jcr->pool = job->pool;
+ jcr->full_pool = job->full_pool;
+ jcr->inc_pool = job->inc_pool;
+ jcr->dif_pool = job->dif_pool;
jcr->catalog = job->client->catalog;
jcr->fileset = job->fileset;
jcr->messages = job->messages;