Hello,

I am sorry, but it is not clear what you are doing here, in particular why you 
are adding a maxincinterval and what a "POLL" job is.

Best regards,

Kern

PS: All patches need to be submitted as attachments to avoid email wrapping.

On Wednesday 22 April 2009 02:58:17 Mordechai T. Abzug wrote:
> On Tue, Apr 21, 2009 at 06:38:14PM -0400, Mordechai T. Abzug wrote:
> > Looks like MaxFullInterval is working correctly, but MaxDiffInterval
> > isn't.
> >
> > Is this a bug, or am I missing something?
>
> Oh, I think I see the problem.  I've *never* run a differential on
> this client.  That's a problem here:
>
> diff -Nur bacula-3.0.0/src/dird/fd_cmds.c
> bacula-3.0.0-maxdiff_fix/src/dird/fd_cmds.c ---
> bacula-3.0.0/src/dird/fd_cmds.c     2008-10-24 09:04:16.000000000 -0400 +++
> bacula-3.0.0-maxdiff_fix/src/dird/fd_cmds.c 2009-04-21 20:29:45.000000000
> -0400 @@ -198,6 +198,8 @@
>           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 {
> +            do_diff = 1; /* if it's *never* run, promote */
>           }
>        }
>        if (have_full && jcr->job->MaxFullInterval > 0 &&
>
>
>
> However, I also wrote a patch to add in MaxIncrInterval and
> Level=Poll, similar to a feature request I recently made.  It also
> incorporates the above patch.  Here it is:
>
>
> diff -ur bacula-3.0.0-dist/src/cats/sql_find.c
> bacula-3.0.0-maxincr_and_poll/src/cats/sql_find.c ---
> bacula-3.0.0-dist/src/cats/sql_find.c 2009-03-07 15:59:46.000000000 -0500
> +++ bacula-3.0.0-maxincr_and_poll/src/cats/sql_find.c 2009-04-21
> 19:54:01.000000000 -0400 @@ -86,8 +86,9 @@
>        if (jr->JobLevel == L_DIFFERENTIAL) {
>           /* SQL cmd for Differential backup already edited above */
>
> -      /* Incremental is since last Full, Incremental, or Differential */
> -      } else if (jr->JobLevel == L_INCREMENTAL) {
> +      /* Incremental is since last Full, Incremental, or Differential.
> +         For Poll, do Incremental search as worst case */
> +      } else if (jr->JobLevel == L_INCREMENTAL || jr->JobLevel == L_POLL)
> { /*
>            * For an Incremental job, we must first ensure
>            *  that a Full backup was done (cmd edited above)
> diff -ur bacula-3.0.0-dist/src/dird/backup.c
> bacula-3.0.0-maxincr_and_poll/src/dird/backup.c ---
> bacula-3.0.0-dist/src/dird/backup.c   2009-03-07 15:59:46.000000000 -0500 +++
> bacula-3.0.0-maxincr_and_poll/src/dird/backup.c       2009-04-21
> 19:40:10.000000000 -0400 @@ -85,6 +85,10 @@
>        return false;
>     }
>
> +   if (jcr->get_JobLevel() == L_POLL) { /* do nothing if not promoted */
> +      return true;
> +   }
> +
>     jcr->jr.PoolId = get_or_create_pool_record(jcr, jcr->pool->name());
>     if (jcr->jr.PoolId == 0) {
>        return false;
> @@ -189,6 +193,11 @@
>        return do_vbackup(jcr);
>     }
>
> +   if (jcr->get_JobLevel() == L_POLL) {
> +      set_jcr_job_status(jcr, JS_Terminated);
> +      return true; /* nothing to do for unpromoted poll jobs */
> +   }
> +
>     /* Print Job Start message */
>     Jmsg(jcr, M_INFO, 0, _("Start Backup JobId %s, Job=%s\n"),
>          edit_uint64(jcr->JobId, ed1), jcr->Job);
> diff -ur bacula-3.0.0-dist/src/dird/dird_conf.c
> bacula-3.0.0-maxincr_and_poll/src/dird/dird_conf.c ---
> bacula-3.0.0-dist/src/dird/dird_conf.c        2009-03-05 04:43:19.000000000 
> -0500
> +++ bacula-3.0.0-maxincr_and_poll/src/dird/dird_conf.c        2009-04-21
> 06:26:44.000000000 -0400 @@ -305,6 +305,7 @@
>     {"maxstartdelay",store_time, ITEM(res_job.MaxStartDelay), 0, 0, 0},
>     {"maxfullinterval",  store_time, ITEM(res_job.MaxFullInterval), 0, 0,
> 0}, {"maxdiffinterval",  store_time, ITEM(res_job.MaxDiffInterval), 0, 0,
> 0}, +   {"maxincrinterval",  store_time, ITEM(res_job.MaxIncrInterval), 0,
> 0, 0}, {"jobretention", store_time, ITEM(res_job.JobRetention),  0, 0, 0},
> {"prefixlinks", store_bool, ITEM(res_job.PrefixLinks), 0, ITEM_DEFAULT,
> false}, {"prunejobs",   store_bool, ITEM(res_job.PruneJobs), 0,
> ITEM_DEFAULT, false}, @@ -457,6 +458,7 @@
>     {"Base",          L_BASE,            JT_BACKUP},
>     {"Incremental",   L_INCREMENTAL,     JT_BACKUP},
>     {"Differential",  L_DIFFERENTIAL,    JT_BACKUP},
> +   {"Poll",          L_POLL,            JT_BACKUP},
>     {"Since",         L_SINCE,           JT_BACKUP},
>     {"VirtualFull",   L_VIRTUAL_FULL,    JT_BACKUP},
>     {"Catalog",       L_VERIFY_CATALOG,  JT_VERIFY},
> diff -ur bacula-3.0.0-dist/src/dird/dird_conf.h
> bacula-3.0.0-maxincr_and_poll/src/dird/dird_conf.h ---
> bacula-3.0.0-dist/src/dird/dird_conf.h        2009-01-28 05:47:21.000000000 
> -0500
> +++ bacula-3.0.0-maxincr_and_poll/src/dird/dird_conf.h        2009-04-21
> 05:18:52.000000000 -0400 @@ -395,6 +395,7 @@
>     utime_t JobRetention;              /* job retention period in seconds
> */ utime_t MaxFullInterval;           /* Maximum time interval between
> Fulls */ utime_t MaxDiffInterval;           /* Maximum time interval
> between Diffs */ +   utime_t MaxIncrInterval;           /* Maximum time
> interval between Incrementals */ utime_t DuplicateJobProximity;     /*
> Permitted time between duplicicates */ int64_t spool_size;               
> /* Size of spool file for this job */ uint32_t MaxConcurrentJobs;        /*
> Maximum concurrent jobs */ diff -ur bacula-3.0.0-dist/src/dird/fd_cmds.c
> bacula-3.0.0-maxincr_and_poll/src/dird/fd_cmds.c ---
> bacula-3.0.0-dist/src/dird/fd_cmds.c  2008-10-24 09:04:16.000000000 -0400
> +++ bacula-3.0.0-maxincr_and_poll/src/dird/fd_cmds.c  2009-04-21
> 20:49:51.000000000 -0400 @@ -164,9 +164,11 @@
>     bool have_full;
>     bool do_full = false;
>     bool do_diff = false;
> +   bool do_incr = false;
>     utime_t now;
>     utime_t last_full_time;
>     utime_t last_diff_time;
> +   utime_t last_incr_time;
>
>     since[0] = 0;
>     /* If job cloned and a since time already given, use it */
> @@ -187,23 +189,39 @@
>     switch (jcr->get_JobLevel()) {
>     case L_DIFFERENTIAL:
>     case L_INCREMENTAL:
> +   case L_POLL:
>        POOLMEM *stime = get_pool_memory(PM_MESSAGE);
>        /* Look up start time of last Full job */
>        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 ((jcr->get_JobLevel() ==
> L_INCREMENTAL || jcr->get_JobLevel() == L_POLL) +           && have_full &&
> 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 {
> +            do_diff = 1; /* if there was *never* a diff, we're overdue */
>           }
>        }
> -      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);
> -         do_full = ((now - last_full_time) >= jcr->job->MaxFullInterval);
> +      if (have_full && jcr->job->MaxFullInterval > 0) {
> +         if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime,
> L_FULL)) { +           last_full_time = str_to_utime(stime);
> +           do_full = ((now - last_full_time) >=
> jcr->job->MaxFullInterval); +         } else {
> +           do_full = 1; /* if there was never a full, we're overdue. 
> Redundant to have_full */ +         }
> +      }
> +      if (jcr->get_JobLevel()==L_POLL && have_full && !do_full && !do_diff
> && +          jcr->job->MaxIncrInterval > 0) {
> +         if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime,
> L_INCREMENTAL)) { +           last_incr_time = str_to_utime(stime);
> +           do_incr = ((now - last_incr_time) >=
> jcr->job->MaxIncrInterval); +         } else {
> +           do_incr = 1; /* if there was never an incremental, we're
> overdue */ +         }
>        }
>        free_pool_memory(stime);
>
> @@ -220,6 +238,12 @@
>           bsnprintf(since, since_len, _(" (upgraded from %s)"),
>              level_to_str(jcr->get_JobLevel()));
>           jcr->set_JobLevel(jcr->jr.JobLevel = L_DIFFERENTIAL);
> +      } else if (do_incr) {
> +         /* No recent diff job found, so upgrade this one to Full */
> +         Jmsg(jcr, M_INFO, 0, _("No prior or suitable Incremental backup
> found in catalog. Doing Incremental backup.\n")); +        
> bsnprintf(since, since_len, _(" (upgraded from %s)"),
> +            level_to_str(jcr->get_JobLevel()));
> +         jcr->set_JobLevel(jcr->jr.JobLevel = L_INCREMENTAL);
>        } else {
>           if (jcr->job->rerun_failed_levels) {
>              if (db_find_failed_job_since(jcr, jcr->db, &jcr->jr,
> jcr->stime, JobLevel)) { diff -ur bacula-3.0.0-dist/src/dird/ua_run.c
> bacula-3.0.0-maxincr_and_poll/src/dird/ua_run.c ---
> bacula-3.0.0-dist/src/dird/ua_run.c   2009-03-25 17:14:58.000000000 -0400 +++
> bacula-3.0.0-maxincr_and_poll/src/dird/ua_run.c       2009-04-21
> 06:48:02.000000000 -0400 @@ -688,6 +688,7 @@
>        add_prompt(ua, _("Differential"));
>        add_prompt(ua, _("Since"));
>        add_prompt(ua, _("VirtualFull"));
> +      add_prompt(ua, _("Poll"));
>        switch (do_prompt(ua, "", _("Select level"), NULL, 0)) {
>  //    case 0:
>  //       jcr->JobLevel = L_BASE;
> @@ -707,6 +708,9 @@
>        case 4:
>           jcr->set_JobLevel(L_VIRTUAL_FULL);
>           break;
> +      case 5:
> +         jcr->set_JobLevel(L_POLL);
> +         break;
>        default:
>           break;
>        }
> diff -ur bacula-3.0.0-dist/src/filed/status.c
> bacula-3.0.0-maxincr_and_poll/src/filed/status.c ---
> bacula-3.0.0-dist/src/filed/status.c  2009-03-06 15:00:47.000000000 -0500
> +++ bacula-3.0.0-maxincr_and_poll/src/filed/status.c  2009-04-21
> 06:55:27.000000000 -0400 @@ -446,6 +446,9 @@
>     case L_DIFFERENTIAL:
>        str = _("Differential");
>        break;
> +   case L_POLL:
> +      str = _("Poll");
> +      break;
>     case L_SINCE:
>        str = _("Since");
>        break;
> diff -ur bacula-3.0.0-dist/src/jcr.h
> bacula-3.0.0-maxincr_and_poll/src/jcr.h ---
> bacula-3.0.0-dist/src/jcr.h   2009-03-07 15:59:46.000000000 -0500 +++
> bacula-3.0.0-maxincr_and_poll/src/jcr.h       2009-04-21 19:46:14.000000000 
> -0400
> @@ -45,6 +45,7 @@
>  #define L_INCREMENTAL            'I'  /* since last backup */
>  #define L_DIFFERENTIAL           'D'  /* since last full backup */
>  #define L_SINCE                  'S'
> +#define L_POLL                   'P'  /* poll if time for backup */
>  #define L_VERIFY_CATALOG         'C'  /* verify from catalog */
>  #define L_VERIFY_INIT            'V'  /* verify save (init DB) */
>  #define L_VERIFY_VOLUME_TO_CATALOG 'O'  /* verify Volume to catalog
> entries */ diff -ur bacula-3.0.0-dist/src/lib/util.c
> bacula-3.0.0-maxincr_and_poll/src/lib/util.c ---
> bacula-3.0.0-dist/src/lib/util.c      2009-03-07 15:59:46.000000000 -0500 +++
> bacula-3.0.0-maxincr_and_poll/src/lib/util.c  2009-04-21 06:53:57.000000000
> -0400 @@ -408,6 +408,9 @@
>     case L_DIFFERENTIAL:
>        str = _("Differential");
>        break;
> +   case L_POLL:
> +      str = _("Poll");
> +      break;
>     case L_SINCE:
>        str = _("Since");
>        break;
>
>
> - Morty
>
> ---------------------------------------------------------------------------
>--- Stay on top of everything new and different, both inside and
> around Java (TM) technology - register by April 22, and save
> $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
> 300 plus technical and hands-on sessions. Register today.
> Use priority code J9JMT32. http://p.sf.net/sfu/p
> _______________________________________________
> Bacula-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/bacula-devel



------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and 
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today. 
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
Bacula-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to