Bacula-users

Re: [Bacula-users] Incremental Jobs

2014-11-21 08:31:01
Subject: Re: [Bacula-users] Incremental Jobs
From: Martin Simmons <martin AT lispworks DOT com>
To: bacula-users AT lists.sourceforge DOT net
Date: Fri, 21 Nov 2014 13:26:33 GMT
>>>>> On Thu, 20 Nov 2014 17:48:56 -0500, Bill Arlofski said:
> 
> On 11/19/2014 11:47 AM, Martin Simmons wrote:
> >>>>>> On Tue, 18 Nov 2014 17:34:18 -0500, Bill Arlofski said:
> >>
> >> On 11/18/2014 07:50 AM, Dante Colo wrote:
> >>> Hello Heitor
> >>>
> >>> I tried but wasn't the case, anyway thank you for the suggestion.
> >>
> >> re: Adding  Ignore Fileset Changes = Yes   option in fileset.
> >>
> >> If you add that to a fileset, it will take affect after the first full of 
> >> that
> >> newly modified fileset is complete.
> >>
> >> I say "newly modified fileset" because by adding that option, you are in 
> >> fact
> >> changing the fileset, and Bacula will think it needs to run a full.
> > 
> > I don't think that is true.  The fileset md5 doesn't include boolean options
> > like Ignore Fileset Changes.
> > 
> > __Martin
> 
> Hi Martin,
> 
> while testing this out the other day (in an effort to make sure I was correct
> before posting :) I ran into an interesting thing.
> 
> I made sure all jobs were not running, and that the last run for job I was
> going to use in my test had completed OK. It was an incremental earlier that 
> day.
> 
> I manually started an Incremental of that job, and it ran as an Incremental -
> so far so good.
> 
> Then I edited the Fileset for that job, and only added a "#" to comment out
> the Ignore Fileset Changes = Yes that I had in there since the beginning and
> saved the Fileset.
> 
> I then issued a "reload" in bconsole and started the job again as Incremental
> and it auto-upgraded it to Full due to "No prior Full backup Job record 
> found".
> 
> After going back and forth a few times on this, and then checking the Fileset
> in the db, I realized that it was not being updated until/unless I edited the
> Include {} stanza. (just as you had mentioned in your reply)
> 
> This made no sense to me because if the Fileset's MD5, nor CreateTime are not
> changing, and a new record for that Fileset is not being created, I could  not
> understand how Bacula is determining that it needs to run a full.
> 
> 
> So, after seeing your response, and thinking about what I must have done wrong
> the other day, today I tried the process over - carefully.
> 
> And sure enough, I ran a manual incremental, then edited the Fileset and
> (only) added  "#" in front of the "Ignore Fileset Changes = Yes" in my
> fileset, then issued a reload and attempted another incremental and Bacula
> upgraded it to Full due to "No prior Full Job record found"
> 
> As you can see, my db shows no new changes to that fileset today, but it seems
> Bacula is using something else to make the upgrade determination.
> 
> 
> mysql> select * from FileSet WHERE FileSet LIKE 'ups%';
> +-----------+-------------------+------------------------+---------------------+
> | FileSetId | FileSet           | MD5                    | CreateTime         
>  |
> +-----------+-------------------+------------------------+---------------------+
> |        60 | upsmonFullFileSet | 2HsumTUBV++T5yE8q5RW7A | 2014-11-18 
> 17:32:55 |
> |        59 | upsmonFullFileSet | K+/HI8wAIXQPJl+626FcAC | 2014-11-18 
> 17:24:12 |
> |        57 | upsmonFullFileSet | 6jcy46+Z3hIPR5o9+D/0bD | 2014-11-18 
> 17:21:38 |
> |        58 | upsmonFullFileSet | a3tIy5BQ96c/E88+nk/CGA | 2014-11-18 
> 17:23:24 |
> +-----------+-------------------+------------------------+---------------------+
> 4 rows in set (0.00 sec)
> 
> 
> 
> Thoughts?  Comments? Help?  :)

I suspsect it is a bug in the code to handle the "Ignore Fileset Changes"
option.

The code looks for the FileSetId to be used as follows:

   if (!jcr->fileset->ignore_fs_changes ||
       !db_get_fileset_record(jcr, jcr->db, &fsr)) {
      if (!db_create_fileset_record(jcr, jcr->db, &fsr)) {
         Jmsg(jcr, M_ERROR, 0, _("Could not create FileSet \"%s\" record. 
ERR=%s\n"),
            fsr.FileSet, db_strerror(jcr->db));
         return false;
      }
   }
   jcr->jr.FileSetId = fsr.FileSetId;

There are two cases:

1) "Ignore Fileset Changes = Yes": db_get_fileset_record is called to find an
existing record, but that ignores the md5 of the current fileset and always
returns the newest record in the catalog.  As a result, Bacula will look for a
prior full backup with FileSetId 60.

2) "Ignore Fileset Changes = No": db_get_fileset_record is not called, so we
reach the call to db_create_fileset_record.  This also looks for an existing
record, but does check the current md5.  As a result, Bacula will look for a
prior full backup with FileSetId 57, 58 or 59.

My guess is that you do have a full backup for the FileSetId selected in case
2, but not in case 1.

__Martin

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk
_______________________________________________
Bacula-users mailing list
Bacula-users AT lists.sourceforge DOT net
https://lists.sourceforge.net/lists/listinfo/bacula-users

<Prev in Thread] Current Thread [Next in Thread>