]> git.sur5r.net Git - bacula/bacula/commitdiff
Rework Incomplete job intereaction with Base and Accurate
authorKern Sibbald <kern@sibbald.com>
Mon, 21 Feb 2011 10:30:57 +0000 (11:30 +0100)
committerKern Sibbald <kern@sibbald.com>
Sat, 20 Apr 2013 12:43:26 +0000 (14:43 +0200)
bacula/src/dird/backup.c
bacula/src/dird/jobq.c
bacula/src/stored/append.c

index d188e375cbd0b0b659aefa3e6c63b60f3c050ffd..f978df13bb6af832492f9bad814449b0401867e9 100644 (file)
@@ -242,36 +242,36 @@ bool send_accurate_current_files(JCR *jcr)
    db_list_ctx nb;
    char ed1[50];
 
+   /* In base level, no previous job is used and no restart incomplete jobs */
+   if (jcr->is_canceled() || jcr->is_JobLevel(L_BASE)) {
+      return true;
+   }
+   if (!jcr->accurate && !jcr->incomplete) {
+      return true;
+   }
+
    /* For incomplete Jobs, we add our own id */
    if (jcr->incomplete) {
       edit_int64(jcr->JobId, ed1);   
       jobids.add(ed1);
-   } else {
-      if (!jcr->accurate || job_canceled(jcr)) {
-         return true;
-      }
-      /* In base level, no previous job is used */
-      if (jcr->is_JobLevel(L_BASE)) {
+   }
+   
+   if (jcr->is_JobLevel(L_FULL)) {
+      /* On Full mode, if no previous base job, no accurate things */
+      if (!get_base_jobids(jcr, &jobids) && !jcr->incomplete) {
          return true;
       }
-   
-      if (jcr->is_JobLevel(L_FULL)) {
-         /* On Full mode, if no previous base job, no accurate things */
-         if (!get_base_jobids(jcr, &jobids)) {
-            return true;
-         }
-         jcr->HasBase = true;
-         Jmsg(jcr, M_INFO, 0, _("Using BaseJobId(s): %s\n"), jobids.list);
+      jcr->HasBase = true;
+      Jmsg(jcr, M_INFO, 0, _("Using BaseJobId(s): %s\n"), jobids.list);
 
-      } else {
-         /* For Incr/Diff level, we search for older jobs */
-         db_accurate_get_jobids(jcr, jcr->db, &jcr->jr, &jobids);
+   } else {
+      /* For Incr/Diff level, we search for older jobs */
+      db_accurate_get_jobids(jcr, jcr->db, &jcr->jr, &jobids);
 
-         /* We are in Incr/Diff, but no Full to build the accurate list... */
-         if (jobids.count == 0) {
-            Jmsg(jcr, M_FATAL, 0, _("Cannot find previous jobids.\n"));
-            return false;  /* fail */
-         }
+      /* We are in Incr/Diff, but no Full to build the accurate list... */
+      if (jobids.count == 0) {
+         Jmsg(jcr, M_FATAL, 0, _("Cannot find previous jobids.\n"));
+         return false;  /* fail */
       }
    }
 
index 7ceeb86f3e61f52870682b3bcd0d53bc03a556f2..a94235a234e73ed816dc8e2980987882e6bafb5c 100644 (file)
@@ -622,7 +622,8 @@ static bool reschedule_job(JCR *jcr, jobq_t *jq, jobq_item_t *je)
       resched = 
          /* Check for incomplete jobs */
          (jcr->job->RescheduleIncompleteJobs && 
-          jcr->is_incomplete() && jcr->is_JobType(JT_BACKUP)) ||
+          jcr->is_incomplete() && jcr->is_JobType(JT_BACKUP) &&
+          !jcr->is_JobLevel(L_BASE)) ||
          /* Check for failed jobs */
          (jcr->job->RescheduleOnError &&
           !jcr->is_JobStatus(JS_Terminated) &&
index 8cdc8b42d8da15fece21d19426056b4bc793f82d..72bf6ab1ac4ab7b7c9d5106f53ca40afe768e32e 100644 (file)
@@ -55,9 +55,10 @@ void possible_incomplete_job(JCR *jcr, int32_t last_file_index)
     *  for a production system, we probably want something like
     *  100-1000 files, and some number of bytes of data.
     *
-    *  ****FIXME**** update this
+    *  ****FIXME**** set last_file_index to something more
+    *    reasonable, and maybe check JobBytes.
     */
-   if (last_file_index > 10) {
+   if (jcr->spool_attributes && last_file_index > 10) {
       jcr->setJobStatus(JS_Incomplete);
    }
 }