/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2009 Free Software Foundation Europe e.V.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
{
bool cancel = false;
JOB *job = jcr->job;
+ utime_t run_time;
if (job_canceled(jcr) || jcr->JobStatus == JS_Created) {
return false;
job->IncMaxRunTime == 0 && job->DiffMaxRunTime == 0) {
return false;
}
- Dmsg6(200, "check_maxruntime %u - %u >= %u|%u|%u|%u\n\n",
- watchdog_time, jcr->start_time, job->MaxRunTime, job->FullMaxRunTime,
+ run_time = watchdog_time - jcr->start_time;
+ Dmsg7(200, "check_maxruntime %llu-%u=%llu >= %llu|%llu|%llu|%llu\n",
+ watchdog_time, jcr->start_time, run_time, job->MaxRunTime, job->FullMaxRunTime,
job->IncMaxRunTime, job->DiffMaxRunTime);
if (jcr->get_JobLevel() == L_FULL && job->FullMaxRunTime != 0 &&
- (watchdog_time - jcr->start_time) >= job->FullMaxRunTime) {
+ run_time >= job->FullMaxRunTime) {
+ Dmsg0(200, "check_maxwaittime: FullMaxcancel\n");
cancel = true;
} else if (jcr->get_JobLevel() == L_DIFFERENTIAL && job->DiffMaxRunTime != 0 &&
- (watchdog_time - jcr->start_time) >= job->DiffMaxRunTime) {
+ run_time >= job->DiffMaxRunTime) {
+ Dmsg0(200, "check_maxwaittime: DiffMaxcancel\n");
cancel = true;
} else if (jcr->get_JobLevel() == L_INCREMENTAL && job->IncMaxRunTime != 0 &&
- (watchdog_time - jcr->start_time) >= job->IncMaxRunTime) {
+ run_time >= job->IncMaxRunTime) {
+ Dmsg0(200, "check_maxwaittime: IncMaxcancel\n");
cancel = true;
- } else if ((watchdog_time - jcr->start_time) >= job->MaxRunTime) {
+ } else if (job->MaxRunTime > 0 && run_time >= job->MaxRunTime) {
+ Dmsg0(200, "check_maxwaittime: Maxcancel\n");
cancel = true;
}
jcr->jr.JobStatus = jcr->JobStatus;
jcr->jr.JobFiles = jcr->JobFiles;
jcr->jr.JobBytes = jcr->JobBytes;
+ jcr->jr.ReadBytes = jcr->ReadBytes;
jcr->jr.VolSessionId = jcr->VolSessionId;
jcr->jr.VolSessionTime = jcr->VolSessionTime;
- jcr->jr.JobErrors = jcr->Errors;
+ jcr->jr.JobErrors = jcr->JobErrors;
if (!db_update_job_end_record(jcr, jcr->db, &jcr->jr)) {
Jmsg(jcr, M_WARNING, 0, _("Error updating job record. %s"),
db_strerror(jcr->db));
len = strlen(dt) + 5; /* dt + .%02d EOS */
bstrncpy(name, base_name, sizeof(name));
name[sizeof(name)-len] = 0; /* truncate if too long */
- bsnprintf(jcr->Job, sizeof(jcr->Job), "%s.%s.%02d", name, dt, seq); /* add date & time */
+ bsnprintf(jcr->Job, sizeof(jcr->Job), "%s.%s_%02d", name, dt, seq); /* add date & time */
/* Convert spaces into underscores */
for (p=jcr->Job; *p; p++) {
if (*p == ' ') {
parse_ua_args(ua); /* parse command */
int stat = run_cmd(ua, ua->cmd);
if (stat == 0) {
- Jmsg(jcr, M_ERROR, 0, _("Could not start clone job.\n"));
+ Jmsg(jcr, M_ERROR, 0, _("Could not start clone job: \"%s\".\n"),
+ ua->cmd);
} else {
Jmsg(jcr, M_INFO, 0, _("Clone JobId %d started.\n"), stat);
}
}
/* TODO: redirect command ouput to job log */
-bool run_console_command(JCR *jcr, const char *cmd){
+bool run_console_command(JCR *jcr, const char *cmd)
+{
UAContext *ua;
bool ok;
JCR *ljcr = new_control_jcr("-RunScript-", JT_CONSOLE);