spot / rpms / bacula

Forked from rpms/bacula 10 months ago
Clone
6be8d09
6be8d09
This patch should fix the logic error in checking for the MaxWaitTime of
6be8d09
a job in src/dird/job.c.  It fixes bug #802.
6be8d09
6be8d09
Apply it to Bacula version 2.0.3 with:
6be8d09
6be8d09
  cd <bacula-source>
6be8d09
  patch -p0 <2.0.3-maxwaittime.patch
6be8d09
  make
6be8d09
  ...
6be8d09
  make install
6be8d09
6be8d09
6be8d09
6be8d09
Index: src/dird/job.c
6be8d09
===================================================================
6be8d09
--- src/dird/job.c	(revision 4349)
6be8d09
+++ src/dird/job.c	(working copy)
6be8d09
@@ -481,7 +481,6 @@
6be8d09
 static bool job_check_maxwaittime(JCR *control_jcr, JCR *jcr)
6be8d09
 {
6be8d09
    bool cancel = false;
6be8d09
-   bool ok_to_cancel = false;
6be8d09
    JOB *job = jcr->job;
6be8d09
 
6be8d09
    if (job_canceled(jcr)) {
6be8d09
@@ -493,69 +492,18 @@
6be8d09
    } 
6be8d09
    if (jcr->JobLevel == L_FULL && job->FullMaxWaitTime != 0 &&
6be8d09
          (watchdog_time - jcr->start_time) >= job->FullMaxWaitTime) {
6be8d09
-      ok_to_cancel = true;
6be8d09
+      cancel = true;
6be8d09
    } else if (jcr->JobLevel == L_DIFFERENTIAL && job->DiffMaxWaitTime != 0 &&
6be8d09
          (watchdog_time - jcr->start_time) >= job->DiffMaxWaitTime) {
6be8d09
-      ok_to_cancel = true;
6be8d09
+      cancel = true;
6be8d09
    } else if (jcr->JobLevel == L_INCREMENTAL && job->IncMaxWaitTime != 0 &&
6be8d09
          (watchdog_time - jcr->start_time) >= job->IncMaxWaitTime) {
6be8d09
-      ok_to_cancel = true;
6be8d09
+      cancel = true;
6be8d09
    } else if (job->MaxWaitTime != 0 &&
6be8d09
          (watchdog_time - jcr->start_time) >= job->MaxWaitTime) {
6be8d09
-      ok_to_cancel = true;
6be8d09
-   }
6be8d09
-   if (!ok_to_cancel) {
6be8d09
-      return false;
6be8d09
-   }
6be8d09
-
6be8d09
-/*
6be8d09
- * I don't see the need for all this -- kes 17Dec06
6be8d09
- */
6be8d09
-#ifdef xxx
6be8d09
-   Dmsg3(800, "Job %d (%s): MaxWaitTime of %d seconds exceeded, "
6be8d09
-         "checking status\n",
6be8d09
-         jcr->JobId, jcr->Job, job->MaxWaitTime);
6be8d09
-   switch (jcr->JobStatus) {
6be8d09
-   case JS_Created:
6be8d09
-   case JS_Blocked:
6be8d09
-   case JS_WaitFD:
6be8d09
-   case JS_WaitSD:
6be8d09
-   case JS_WaitStoreRes:
6be8d09
-   case JS_WaitClientRes:
6be8d09
-   case JS_WaitJobRes:
6be8d09
-   case JS_WaitPriority:
6be8d09
-   case JS_WaitMaxJobs:
6be8d09
-   case JS_WaitStartTime:
6be8d09
       cancel = true;
6be8d09
-      Dmsg0(200, "JCR blocked in #1\n");
6be8d09
-      break;
6be8d09
-   case JS_Running:
6be8d09
-      Dmsg0(800, "JCR running, checking SD status\n");
6be8d09
-      switch (jcr->SDJobStatus) {
6be8d09
-      case JS_WaitMount:
6be8d09
-      case JS_WaitMedia:
6be8d09
-      case JS_WaitFD:
6be8d09
-         cancel = true;
6be8d09
-         Dmsg0(800, "JCR blocked in #2\n");
6be8d09
-         break;
6be8d09
-      default:
6be8d09
-         Dmsg0(800, "JCR not blocked in #2\n");
6be8d09
-         break;
6be8d09
-      }
6be8d09
-      break;
6be8d09
-   case JS_Terminated:
6be8d09
-   case JS_ErrorTerminated:
6be8d09
-   case JS_Canceled:
6be8d09
-   case JS_FatalError:
6be8d09
-      Dmsg0(800, "JCR already dead in #3\n");
6be8d09
-      break;
6be8d09
-   default:
6be8d09
-      Jmsg1(jcr, M_ERROR, 0, _("Unhandled job status code %d\n"),
6be8d09
-            jcr->JobStatus);
6be8d09
    }
6be8d09
-   Dmsg3(800, "MaxWaitTime result: %scancel JCR %p (%s)\n",
6be8d09
-         cancel ? "" : "do not ", jcr, jcr->Job);
6be8d09
-#endif
6be8d09
+
6be8d09
    return cancel;
6be8d09
 }
6be8d09
 
6be8d09
@@ -574,36 +522,6 @@
6be8d09
       return false;
6be8d09
    }
6be8d09
 
6be8d09
-#ifdef xxx
6be8d09
-   switch (jcr->JobStatus) {
6be8d09
-   case JS_Created:
6be8d09
-   case JS_Running:
6be8d09
-   case JS_Blocked:
6be8d09
-   case JS_WaitFD:
6be8d09
-   case JS_WaitSD:
6be8d09
-   case JS_WaitStoreRes:
6be8d09
-   case JS_WaitClientRes:
6be8d09
-   case JS_WaitJobRes:
6be8d09
-   case JS_WaitPriority:
6be8d09
-   case JS_WaitMaxJobs:
6be8d09
-   case JS_WaitStartTime:
6be8d09
-   case JS_Differences:
6be8d09
-      cancel = true;
6be8d09
-      break;
6be8d09
-   case JS_Terminated:
6be8d09
-   case JS_ErrorTerminated:
6be8d09
-   case JS_Canceled:
6be8d09
-   case JS_FatalError:
6be8d09
-      cancel = false;
6be8d09
-      break;
6be8d09
-   default:
6be8d09
-      Jmsg1(jcr, M_ERROR, 0, _("Unhandled job status code %d\n"),
6be8d09
-            jcr->JobStatus);
6be8d09
-   }
6be8d09
-
6be8d09
-   Dmsg3(200, "MaxRunTime result: %scancel JCR %p (%s)\n",
6be8d09
-         cancel ? "" : "do not ", jcr, jcr->Job);
6be8d09
-#endif
6be8d09
    return true;
6be8d09
 }
6be8d09