]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix bug #1311 if MaxDiffInterval exceeded ensure job upgraded
authorKern Sibbald <kern@sibbald.com>
Thu, 18 Jun 2009 12:49:10 +0000 (12:49 +0000)
committerKern Sibbald <kern@sibbald.com>
Thu, 18 Jun 2009 12:49:10 +0000 (12:49 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8908 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/dird/fd_cmds.c
bacula/technotes

index 6859a6e55f3f51120354f7ad32d7dcc0333c11ac..cf29751ba17a5259c18f2d396649ca4454bdb62f 100644 (file)
@@ -198,22 +198,29 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
       now = (utime_t)time(NULL);
       jcr->jr.JobId = 0;     /* flag to return since time */
       have_full = db_find_job_start_time(jcr, jcr->db, &jcr->jr, &jcr->stime);
-      /* If there was a successful job, make sure it is recent enough */
-      if (jcr->get_JobLevel() == L_INCREMENTAL && have_full && jcr->job->MaxDiffInterval > 0) {
+      if (have_full) {
+         last_full_time = str_to_utime(jcr->stime);
+      }
+      /* Make sure the last diff is recent enough */
+      if (have_full && jcr->get_JobLevel() == L_INCREMENTAL && jcr->job->MaxDiffInterval > 0) {
          /* Lookup last diff job */
          if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, L_DIFFERENTIAL)) {
             last_diff_time = str_to_utime(stime);
-            do_diff = ((now - last_diff_time) >= jcr->job->MaxDiffInterval);
+         } else {
+            /* No last differential, so use last full time */
+            last_diff_time = last_full_time;
          }
+         do_diff = ((now - last_diff_time) >= jcr->job->MaxDiffInterval);
       }
-      if (have_full && jcr->job->MaxFullInterval > 0 &&
-         db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, L_FULL)) {
-         last_full_time = str_to_utime(stime);
+      /* Note, do_full takes precedence over do_diff */
+      if (have_full && jcr->job->MaxFullInterval > 0) {
          do_full = ((now - last_full_time) >= jcr->job->MaxFullInterval);
+      } else {
+         do_full = true;
       }
       free_pool_memory(stime);
 
-      if (!have_full || do_full) {
+      if (do_full) {
          /* No recent Full job found, so upgrade this one to Full */
          Jmsg(jcr, M_INFO, 0, "%s", db_strerror(jcr->db));
          Jmsg(jcr, M_INFO, 0, _("No prior or suitable Full backup found in catalog. Doing FULL backup.\n"));
@@ -221,7 +228,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
             level_to_str(jcr->get_JobLevel()));
          jcr->set_JobLevel(jcr->jr.JobLevel = L_FULL);
        } else if (do_diff) {
-         /* No recent diff job found, so upgrade this one to Full */
+         /* No recent diff job found, so upgrade this one to Diff */
          Jmsg(jcr, M_INFO, 0, _("No prior or suitable Differential backup found in catalog. Doing Differential backup.\n"));
          bsnprintf(since, since_len, _(" (upgraded from %s)"),
             level_to_str(jcr->get_JobLevel()));
index 34dc8632f8603eec07f76b5a0a415b08b2431dfb..7ba9fa6472a217ccaa28a8f087942b09bd09f990 100644 (file)
@@ -2,6 +2,8 @@
           
 General:
 
+18Jun09
+kes  Fix bug #1311 if MaxDiffInterval exceeded ensure job upgraded
 17Jun09
 kes  Fix bug #1305 make errors obtaining acl during backup non-fatal
 kes  Fix bug #1309 inappropriate error message during btape fill command