From: Kern Sibbald Date: Thu, 18 Jun 2009 12:49:45 +0000 (+0000) Subject: Commit maxdiff patch X-Git-Tag: Release-3.0.2~157 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=98452fd4dace680206fb87c59faffa96ebfae935;p=bacula%2Fbacula Commit maxdiff patch git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8909 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/patches/3.0.1-maxdiff.patch b/bacula/patches/3.0.1-maxdiff.patch new file mode 100644 index 0000000000..143334e287 --- /dev/null +++ b/bacula/patches/3.0.1-maxdiff.patch @@ -0,0 +1,66 @@ + + This patch can be applied to version 3.0.1 and ensures that + if maxdiffinterval is set, it will be done even if no prior + Diff job ran. This should fix bug #1311. + + Apply it to version 3.0.1 with: + + cd + patch -p0 <3.0.1-maxdiff.patch + ./configure + make + ... + make install + + + +Index: src/dird/fd_cmds.c +=================================================================== +--- src/dird/fd_cmds.c (revision 8902) ++++ src/dird/fd_cmds.c (working copy) +@@ -198,22 +198,29 @@ + 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 @@ + 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()));