> What I have implemented already is (passes regression > testing, so all existing features work despite the new code): > - Separation of read/write descriptors in the Storage daemon. > - Separation of the read/write Storage names in the Director that > are sent to the Storage daemon (both a read and a write storage > device can now be sent).
Neat. > - Implementation of a skeleton of Migration/Copy job code in > the Director. > - Implementation of the following new Pool Directives: > Migration Time = <duration> > Migration High Bytes = <size> > Migration Low Bytes = <size> > Next Pool = <Pool-res-name> > (nothing is done with them yet, but all the Catalog variables > exist already in 1.38.x). And these values apply to all volumes in the pool, right? Did you want to treat the values for the entire pool (eg number of volumes * size of volume), or for individual volumes? Operationally, I think you'll be more concerned with the entire pool case, using the volume occupancy information to select what volumes are eligible for migration. > How does it work? Much like a Verify job. > You define a Migrate or Copy job much the same as you do a > Verify job, with the exception that you specify a Migration > Job (target) rather than a Verify Job name (i.e. you tell it > what job you want migrated). The from Storage daemon is > defined in the specified target Migration Job. The from Pool > is specified in the target Job's Pool's Next Pool, and if not > specified, it is taken from the Pool specified in the current job. > > You then schedule this Migration job using a schedule. When > it runs, it will check that either the Migration Time is > depassed (it is if it is zero) or the Migration High Bytes > are exceeded in the target's Pool. If one of those is true, > the job will start and will migrate the last target job run > (this needs to be improved) by reading that job, much like a > restore, and writing it to the destination pool, then for a > Migration, the old job is deleted from the catalog (perhaps > the Volume will be removed -- another Feature Request), or in > the case of a Copy, the old Job information will be left unchanged. Hmm. I really think migration should be volume-oriented, not job oriented. You really want to use this to clear entire volumes, not job-by-job. I'd suggest that the migration code check whether the pool exceeds the "Migration High Bytes" value, and then select volumes for migration starting with the ones with the least space in use (it's faster to clear an almost empty volume, minimizing the time the volume is unavailable for appends) that is not in use in another job. The migration code should then move ALL the jobs off the volume to the volumes in the next pool, and release the original volume as available for use. The migration code could then continue with the next volume if pool utilization is still above the threshold, or stop if below the threshold. If there are absolutely no volumes available in the source pool for whatever reason, dip into your scratch pool and log the event. That way, you don't have to tie anything to the job itself, and you can run regularly scheduled jobs that just "do the right thing" at regular intervals. It also lends itself easily to later adding a trigger-based process that would fire automatically if a threshold in a pool was exceeded. > - You need a different Migration job for each job to be > migrated. This is a bit annoying but is mitigated by JobDefs. See above. IMHO, this really isn't job management, it's volume management. All we're doing is rearranging where the server stored the data, not the characteristics of an individual job. > - I haven't worked out exactly what to keep in the catalog > for Migration jobs (a job that runs but does nothing should > probably be recorded, a job that runs and migrates data > should probably be labeled as a Backup job to simplify the > restore code ...). Start/stop times, amount of data migrated, number of volumes processed, pool occupancy at start, pool occupancy at end. I think labeling it as a Backup job would be confusing. It's not really a backup; it's a migration job. > - The last 20% of the programming effort requires 80% of the work :-) And most of the grief. > - I'm thinking about adding an interactive migration console > command, similar to the restore command, except that the > files selected will be written to the output. This is a way > to "migrate" multiple jobs (i.e. the current state of the > system) or in other words do a "vitual Full backup" or a > "consolidation". > To be consistent this command would not allow selection of > individual files, i.e. it will take all files from the > specified jobs. There's two cases, I think: migration and data movement. I'd add two commands: MOVE DATA and MIGRATE DATA. MOVE DATA just moves data from volume A to volume B, using the standard Bacula append rules, updating the database as it goes along so that the active location for a file in the database is now recorded as volume B rather than volume A. Takes two specific volume names as arguments. MIGRATE DATA would take a pool name as input, and perform the equivalent of a migrate job. The input pool name is required, and the default behavior would be to use the nextpool attribute. If an output pool is specified, the nextpool attribute in the database is ignored, and the output pool is used as specified. > - An Archive feature can also be implement from this -- it is > simply a Copy with no record being put in the catalog and the > output Volume types being Archive rather than Backup. (Note, > my concept of Archive is that no record of them remains in > the catalog -- this may be a subjet of discussion ...) I'd say that you absolutely *want* records of where you archive stuff. You could add a COPY DATA command that would behave like the MOVE DATA command I described above, and give it an option as to whether to record the copy in the database or not (default being yes). There you probably want to allow either volume names or specifying individual job numbers to copy to the new volume. Coupled with my feature request for multiple copypool processing, I think this removes the last few barriers to calling Bacula enterprise-grade -- this is a really seriously cool step forward. -- db > > Comments? > > -- > Best regards, > > Kern > > ("> > /\ > V_V > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep > through log files for problems? Stop! Download the new AJAX > search engine that makes searching your log files as easy as > surfing the web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click > _______________________________________________ > Bacula-devel mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/bacula-devel > > > ** ACCEPT: CRM114 PASS Markovian Matcher ** CLASSIFY > succeeds; success probability: 1.0000 pR: 89.8182 Best match > to file #0 (nonspam.css) prob: 1.0000 pR: 89.8182 Total > features in input file: 20240 #0 (nonspam.css): features: > 4701816, hits: 27522279, prob: 1.00e+00, pR: 89.82 > #1 (spam.css): features: 3751671, hits: 33422044, prob: > 1.52e-90, pR: -89.82 > > > > ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_idv37&alloc_id865&op=click _______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users