From f010499da57f849e2f0b7d3c4d4f25418a075940 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Tue, 14 Apr 2009 12:44:53 +0000 Subject: [PATCH] Fix bug #1268 Full Max Run Time cancels jobs (when Max Run Time = 0). git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8728 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/Patchnotes | 3 ++ bacula/patches/3.0.0-maxruntime.patch | 59 +++++++++++++++++++++++++++ bacula/src/dird/job.c | 18 +++++--- bacula/technotes | 2 + 4 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 bacula/patches/3.0.0-maxruntime.patch diff --git a/bacula/Patchnotes b/bacula/Patchnotes index 304387cdf7..76ea7bb5ca 100644 --- a/bacula/Patchnotes +++ b/bacula/Patchnotes @@ -2,4 +2,7 @@ Patches Committed: +14Apr09 +3.0.0-maxruntime.patch +11Apr09 3.0.0-read-vol-list.patch diff --git a/bacula/patches/3.0.0-maxruntime.patch b/bacula/patches/3.0.0-maxruntime.patch new file mode 100644 index 0000000000..f232eb360b --- /dev/null +++ b/bacula/patches/3.0.0-maxruntime.patch @@ -0,0 +1,59 @@ + + This patch can be applied to version 3.0.0. It fixes bug #1268 + Full Max Run TIme cancels jobs (when Max Run Time = 0). + + Apply it to version 3.0.0 with: + + cd + patch -p0 <3.0.0-read-vol-list.patch + ./configure + make + ... + make install + + + +Index: src/dird/job.c +=================================================================== +--- src/dird/job.c (revision 8699) ++++ src/dird/job.c (working copy) +@@ -578,6 +578,7 @@ + { + bool cancel = false; + JOB *job = jcr->job; ++ utime_t run_time; + + if (job_canceled(jcr) || jcr->JobStatus == JS_Created) { + return false; +@@ -586,20 +587,25 @@ + 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; + } + diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index 4329a76f2e..252a89a865 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -578,6 +578,7 @@ static bool job_check_maxruntime(JCR *jcr) { bool cancel = false; JOB *job = jcr->job; + utime_t run_time; if (job_canceled(jcr) || jcr->JobStatus == JS_Created) { return false; @@ -586,20 +587,25 @@ static bool job_check_maxruntime(JCR *jcr) 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; } diff --git a/bacula/technotes b/bacula/technotes index c6a118c0ce..3334291aed 100644 --- a/bacula/technotes +++ b/bacula/technotes @@ -2,6 +2,8 @@ General: +14Apr09 +kes Fix bug #1268 Full Max Run Time cancels jobs (when Max Run Time = 0). 11Apr09 kes Modify insertion of read Volumes in SD to be done before the drive reservation. This ensures that a Volume to be read will not -- 2.39.5