#6 Select one from among Multiple Storage Devices for Job
#7 Single Job Writing to Multiple Storage Devices
+Regression tests:
+- Add Pool/Storage override regression test.
+- Add delete JobId to regression.
+- Add a regression test for dbcheck.
+- New test to add bscan to four-concurrent-jobs regression,
+ i.e. after the four-concurrent jobs zap the
+ database as is done in the bscan-test, then use bscan to
+ restore the database, do a restore and compare with the
+ original.
+- Add restore of specific JobId to regression (item 3
+ on the restore prompt)
+- Add IPv6 to regression
+- Add database test to regression. Test each function like delete,
+ purge, ...
+
1.37 Possibilities:
- Require restore via the restore command or make a restore Job
- Implement a Pool of type Cleaning?
- Implement VolReadTime and VolWriteTime in SD
- Modify Backing up Your Database to include a bootstrap file.
-- Add restore of specific JobId to regression.
- Think about making certain database errors fatal.
- Look at correcting the time jump in the sceduler for daylight
savings time changes.
- Implement Total Bytes Written, ... for restore job.
- Check dates entered by user for correctness (month/day/... ranges)
- Compress restore Volume listing by date and first file.
-- Add Pool/Storage override regression test.
-- Add delete JobId to regression.
-- Add bscan to four-concurrent-jobs regression.
- Look at patches/bacula_db.b2z postgresql that loops during restore.
See Gregory Wright.
-- Add IPv6 to regression
- Perhaps add read/write programs and/or plugins to FileSets.
- How to handle backing up portables ...
- Add some sort of guaranteed Interval for upgrading jobs.
- Add a read-only mode to the mount option.
- Allow Simultaneous Priorities = yes => run up to Max concurrent jobs even
with multiple priorities.
-- Add db check test to regression. Test each function like delete,
- purge, ...
- If you use restore replace=never, the directory attributes for
non-existent directories will not be restored properly.
creation date of files, we can be evensmarter about this and not count
entirely upon the length.On a restore, the full and all incrementals
since it will beapplied in sequence to restore the file.
-- Add a regression test for dbcheck.
- Allow for optional cancelling of SD and FD in case DIR
gets a fatal error. Requested by Jesse Guardiani <jesse@wingnet.net>
- Add "limit=n" for "list jobs"
bstrncat(ff->VerifyOpts, fo->VerifyOpts, sizeof(ff->VerifyOpts));
}
for (j=0; j<incexe->name_list.size(); j++) {
- Dmsg1(400, "F %s\n", (char *)incexe->name_list.get(j));
+ Dmsg1(100, "F %s\n", (char *)incexe->name_list.get(j));
char *fname = (char *)incexe->name_list.get(j);
if (find_one_file(jcr, ff, our_callback, his_pkt, fname, (dev_t)-1, 1) == 0) {
return 0; /* error return */
while (!job_canceled(jcr) && (inc = get_next_included_file(ff, inc))) {
/* Copy options for this file */
bstrncat(ff->VerifyOpts, inc->VerifyOpts, sizeof(ff->VerifyOpts));
- Dmsg1(50, "find_files: file=%s\n", inc->fname);
+ Dmsg1(100, "find_files: file=%s\n", inc->fname);
if (!file_is_excluded(ff, inc->fname)) {
if (find_one_file(jcr, ff, callback, his_pkt, inc->fname, (dev_t)-1, 1) ==0) {
return 0; /* error return */
for (k=0; k<fo->wild.size(); k++) {
if (fnmatch((char *)fo->wild.get(k), ff->fname, fnmode) == 0) {
if (ff->flags & FO_EXCLUDE) {
+ Dmsg2(100, "Exclude wild: %s file=%s\n", (char *)fo->wild.get(k),
+ ff->fname);
return false; /* reject file */
}
return true; /* accept file */
findFOPTS *fo = (findFOPTS *)incexe->opts_list.get(j);
for (k=0; k<fo->wild.size(); k++) {
if (fnmatch((char *)fo->wild.get(k), ff->fname, fnmode) == 0) {
- Dmsg1(400, "Reject wild1: %s\n", ff->fname);
+ Dmsg1(100, "Reject wild1: %s\n", ff->fname);
return false; /* reject file */
}
}
}
for (j=0; j<incexe->name_list.size(); j++) {
if (fnmatch((char *)incexe->name_list.get(j), ff->fname, fnmode) == 0) {
- Dmsg1(400, "Reject wild2: %s\n", ff->fname);
+ Dmsg1(100, "Reject wild2: %s\n", ff->fname);
return false; /* reject file */
}
}
*/
int generate_event(JCR *jcr, const char *event) { return 0; }
-void init_python_interpreter(char *progname) { }
+void init_python_interpreter(const char *progname, const char *scripts) { }
void term_python_interpreter() { }