From: Kern Sibbald Date: Thu, 18 Jun 2009 12:49:10 +0000 (+0000) Subject: Fix bug #1311 if MaxDiffInterval exceeded ensure job upgraded X-Git-Tag: Release-3.0.2~158 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=78dcf9e21546c4a8527eb7be71eed2e19bd99b8c;p=bacula%2Fbacula Fix bug #1311 if MaxDiffInterval exceeded ensure job upgraded git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8908 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/dird/fd_cmds.c b/bacula/src/dird/fd_cmds.c index 6859a6e55f..cf29751ba1 100644 --- a/bacula/src/dird/fd_cmds.c +++ b/bacula/src/dird/fd_cmds.c @@ -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())); diff --git a/bacula/technotes b/bacula/technotes index 34dc8632f8..7ba9fa6472 100644 --- a/bacula/technotes +++ b/bacula/technotes @@ -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