]> git.sur5r.net Git - bacula/bacula/commitdiff
Re-fix bug #1311 if MaxDiffInterval exceeded ensure job upgraded
authorKern Sibbald <kern@sibbald.com>
Sun, 21 Jun 2009 09:46:45 +0000 (09:46 +0000)
committerKern Sibbald <kern@sibbald.com>
Sun, 21 Jun 2009 09:46:45 +0000 (09:46 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8916 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/kernstodo
bacula/patches/3.0.1-maxdiff.patch
bacula/src/dird/fd_cmds.c
bacula/src/version.h
bacula/technotes

index 1606fb963e62cb1582bf4783aab25001de06b651..2d2f3d7a063310a28b6e364a362d95dbce510921 100644 (file)
@@ -1,5 +1,5 @@
                     Kern's ToDo List
-                    02 May 2008
+                    21 June 2009
 
 Rescue:
 Add to USB key:
@@ -81,6 +81,12 @@ Professional Needs:
 Priority:
 ================
 
+- Fix restore of acls and extended attributes to count ERROR
+  messages and make errors non-fatal.
+- Put save/restore various platform acl/xattrs on a pointer to simplify
+  the code.
+  
+
 - Why no error message if restore has no permission on the where
   directory?
 - Possibly allow manual "purge" to purge a Volume that has not
@@ -96,11 +102,10 @@ Priority:
   - Add bRC_EndJob -- stops more calls to plugin this job
   - Add bRC_Term (unload plugin)
   - remove time_t from Jmsg and use utime_t?
-- Extended ACLs
 - Deadlock detection, watchdog sees if counter advances when jobs are
   running.  With debug on, can do a "status" command.
 - User options for plugins.
-- Pool Storage override precidence over command line.
+- Pool Storage override precedence over command line.
 - Autolabel only if Volume catalog information indicates tape not
   written. This will avoid overwriting a tape that gets an I/O
   error on reading the volume label.
index 143334e287bae88d9f9a73e481e58a50dc2cefaa..4fbd75f22aac144b9d8c14561b190047bf6a8b3c 100644 (file)
@@ -16,9 +16,9 @@
 
 Index: src/dird/fd_cmds.c
 ===================================================================
---- src/dird/fd_cmds.c (revision 8902)
+--- src/dird/fd_cmds.c (revision 8911)
 +++ src/dird/fd_cmds.c (working copy)
-@@ -198,22 +198,29 @@
+@@ -198,22 +198,33 @@
        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);
@@ -26,6 +26,8 @@ Index: src/dird/fd_cmds.c
 -      if (jcr->get_JobLevel() == L_INCREMENTAL && have_full && jcr->job->MaxDiffInterval > 0) {
 +      if (have_full) {
 +         last_full_time = str_to_utime(jcr->stime);
++      } else {
++         do_full = true;               /* No full, upgrade to one */
 +      }
 +      /* Make sure the last diff is recent enough */
 +      if (have_full && jcr->get_JobLevel() == L_INCREMENTAL && jcr->job->MaxDiffInterval > 0) {
@@ -33,6 +35,10 @@ Index: src/dird/fd_cmds.c
           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);
++            /* If no Diff since Full, use Full time */
++            if (last_diff_time < last_full_time) {
++               last_diff_time = last_full_time;
++            }
 +         } else {
 +            /* No last differential, so use last full time */
 +            last_diff_time = last_full_time;
@@ -45,8 +51,6 @@ Index: src/dird/fd_cmds.c
 +      /* 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);
  
@@ -55,7 +59,7 @@ Index: src/dird/fd_cmds.c
           /* 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 @@
+@@ -221,7 +232,7 @@
              level_to_str(jcr->get_JobLevel()));
           jcr->set_JobLevel(jcr->jr.JobLevel = L_FULL);
         } else if (do_diff) {
index 6859a6e55f3f51120354f7ad32d7dcc0333c11ac..3a1d1999bd352ec11fc3942afc6c8005d90f24ac 100644 (file)
@@ -198,22 +198,33 @@ 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);
+      } else {
+         do_full = true;               /* No full, upgrade to one */
+      }
+      /* 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);
+            /* If no Diff since Full, use Full time */
+            if (last_diff_time < last_full_time) {
+               last_diff_time = last_full_time;
+            }
+         } 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);
       }
       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 +232,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 7a344ed3f104a24f4d68593622d6e565d490743c..31f94b1488bf0b9eff56262c0717aa32088e199b 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "3.0.2"
-#define BDATE   "18 June 2009"
-#define LSMDATE "18Jun09"
+#define BDATE   "21 June 2009"
+#define LSMDATE "21Jun09"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2009 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2009"       /* year for copyright messages in progs */
index 94472d8d7793f13251ece8b057c181ff61645b6e..b82c8eb30ad1a2fd289d9da69a8706753970bff4 100644 (file)
@@ -2,6 +2,8 @@
           
 General:
 
+21Jun09
+kes  Re-fix bug #1311 if MaxDiffInterval exceeded ensure job upgraded
 18Jun09
 kes  Add all Job Types to job_type_to_str() for bat.
 kes  Fix bug #1311 if MaxDiffInterval exceeded ensure job upgraded