Hello all,

   and welcome to the BugCast of today!

Today we will look at the consequences of a documentation bug. If the 
documentation says that you must do something which you cannot do because 
the software does not offer options to do it, then the respective thing 
cannot function. But then this is not a bug, because it works as 
documented: the documentation clearly states that to get the thing working 
you must do something which is not possible to do. So we call that a 
documentation bug.
We did already contemplate this in BBC#5162 - so here now is what appears 
to be the sequel. And, this one definitely is a bug.

The switch Job:RerunFailedLevels makes certain that if a Job does not end 
successful, the next invocation of the Job will automatically escalate to 
the previously failed level (Diff or Full). As discussed in BBC#5162, and 
as clearly stated in the documentation, a job that is *still running* will 
be considered as a *failed* job. So, if your incremental jobs happen to 
happen more frequently than the duration for a full backup, then all of 
your backups will become full backups. 
Obviousely this is complete crap, but - works-as-designed.

Now what is new in this BugCast is: RerunFailedLevels will not only 
consider previousely started backups for the same Client for rerunning, it 
will also trigger on entirely different jobs with completely another 
purpose: If for instance you happen to migrate or copy your jobs from disk 
to tape or archive at some later time, then, during that copy, your regular 
client backups will suddenly be escalated to Full! Without any sensible 
reason, but that's the way that crap works! A migrate (or copy) happens to 
run a 'virtual' instance of the original backup job alongside of the 
migrate job - and that virtual item happens to be in the job table of the 
catalog, with Level=Full and Status=Running - and thats enough for 
RerunFailedLevels to trigger another full backup!

So, as that whole crappy behaviour annoyed me already when I tried with I 
think Rel. 2.2.8, I now decided to say good riddance to either problem (the 
one that works-as-designed with the documentation-bug, and the real bug), 
once and for all:

+--- core/src/cats/sql_find.cc.orig     2020-04-15 23:12:31.997100000 +0000
++++ core/src/cats/sql_find.cc  2020-04-15 23:15:52.216751000 +0000
+@@ -288,7 +288,7 @@
+ 
+   /* Differential is since last Full backup */
+   Mmsg(cmd,
+-       "SELECT Level FROM Job WHERE JobStatus NOT IN ('T','W') AND "
++       "SELECT Level FROM Job WHERE JobStatus IN ('E','e','f','A','I') 
AND "
+        "Type='%c' AND Level IN ('%c','%c') AND Name='%s' AND ClientId=%s "
+        "AND FileSetId=%s AND StartTime>'%s' "
+        "ORDER BY StartTime DESC LIMIT 1",

Have fun, and stay tuned for the next BugCast!

----------
Footnotes:
 * Definition of 'Bug', according to the uWSGI people: ""Remember, if
   you cannot use uWSGI in some scenario, it is a uWSGI bug."
   [https://uwsgi-docs.readthedocs.io/en/latest/FAQ.html] 
 * Bug numbers have been randomized for security reasons.
 

-- 
You received this message because you are subscribed to the Google Groups 
"bareos-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/bareos-users/f6be6fad-774b-438b-970f-d6b97fe4035d%40googlegroups.com.

Reply via email to