Bacula-users

[Bacula-users] PATCH: Allow Copy Jobs to work within one tape library.

2009-11-18 00:56:56
Subject: [Bacula-users] PATCH: Allow Copy Jobs to work within one tape library.
From: Jim Barber <jim.barber AT ddihealth DOT com>
To: bacula-users AT lists.sourceforge DOT net
Date: Wed, 18 Nov 2009 13:52:19 +0800
Hi.

A while ago I tried to set up a backup strategy where I defined three pools.
An incremental pool; a full backup pool; and a copy pool.

The idea was to run incremental backups forever (except for the first one that 
would be promoted to a full).
Then at the end each week consolidate the incremental backups into a full 
backup using a VirtualFull job.
Then take a copy of the full backup for off-site storage.

When using a tape library, I could achieve incremental and virtual full backups 
okay.
But I could not run the Copy job because it refused to run, complaining that 
the read storage is the same as the write storage.

I looked at the code for migrate.c and compared it to vbackup.c since both have 
similar concepts.
I wanted to see why the virtual backup works and the copy won't.
I found identical code in both, except in the vbackup.c the particular check 
that fails for migrate.c has been wrapped in #ifdef to remove it.
Also a FIXME comment is there saying that instead it should just verify that 
the pools are different.

Below is a patch to migrate.c to do the same thing as vbackup.c does.
Is this a feasible patch?
Would there be any chance of this working its way into the official Bacula 
source? Or will it cause problems?

--- bacula-3.0.3.orig/src/dird/migrate.c
+++ bacula-3.0.3/src/dird/migrate.c
@@ -350,11 +350,14 @@
     Dmsg2(dbglevel, "Read store=%s, write store=%s\n",
        ((STORE *)jcr->rstorage->first())->name(),
        ((STORE *)jcr->wstorage->first())->name());
+   /* ***FIXME***  we really should simply verify that the pools are different 
*/
+#ifdef xxx
     if (((STORE *)jcr->rstorage->first())->name() == ((STORE 
*)jcr->wstorage->first())->name()) {
        Jmsg(jcr, M_FATAL, 0, _("Read storage \"%s\" same as write storage.\n"),
             ((STORE *)jcr->rstorage->first())->name());
        return false;
     }
+#endif
     if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage, 
/*send_bsr*/true)) {
        return false;
     }

At the moment I have a really badly hacked up configuration to try and achieve 
what I want by using each drive in the library independently.
It is complicated and messy with lots of work arounds for various scenarios.
If the above patch is okay then things become much simpler.

Regards,

-- 
----------
Jim Barber
DDI Health

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
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>