-Changes to 1.38.3:
+Release 1.38.3 05Jan06:
+04Jan06
+- Move the suitable_drive flag to a better place to prevent
+ premature termination of the reservation if all drives
+ are busy -- should fix Arno's diff/inc pool failures.
+26Dec05
+- Add mutex to single thread VSS code in Win32.
+
Beta release 23Dec05:
22Dec05
- Add OPENSSL_INC to console dependencies, lib dependencies, and
required only if you do not want the default /usr/share.
Items to note!!!
+- The Storage daemon now keeps track of what tapes it is using
+ (was not the case in 1.36.x). This means that you must be much
+ more careful when removing tapes and putting up a new one. In
+ general, you should always do a "unmount" prior to removing a
+ tape, and a "mount" after putting a new one into the drive.
- If you use an Autochanger, you MUST update your SD conf file
to use the new Autochanger resource. Otherwise, certain commands
such as "update slots" may not work.
files, called "parts".
- For the details of the Python scripting support, please see the new
Python Scripting chapter in the manual.
+- The default user/group for the Director and Storage daemon installed
+ by rpms is bacula/bacula, thus you may need to add additional permissions
+ to your database, or modify the permissions of the tape drive. If
+ all else fails, change to using user=root. However, it is more secure
+ to use user=bacula.
Kern's ToDo List
- 07 December 2005
+ 26 December 2005
Major development:
Project Developer
- Does WildFile match against full name? Doc.
- %d and %v only valid on Director, not for ClientRunBefore/After.
+Priority:
+- Implement status that shows why a job is being held in reserve, or
+ rather why none of the drives are suitable.
+- Implement a way to disable a drive (so you can use the second
+ drive of an autochanger, and the first one will not be used or
+ even defined).
+- Implement code that makes the Dir aware that a drive is an
+ autochanger (so the user doesn't need to use the Autochanger = yes
+ directive).
+
For 1.39:
- Make hardlink code at line 240 of find_one.c use binary search.
- Queue warning/error messages during restore so that they
General:
-Changes to 1.38.3:
+Release 1.38.3 05Jan06:
+04Jan06
+- Move the suitable_drive flag to a better place to prevent
+ premature termination of the reservation if all drives
+ are busy -- should fix Arno's diff/inc pool failures.
+26Dec05
+- Add mutex to single thread VSS code in Win32.
+
Beta release 23Dec05:
22Dec05
- Add OPENSSL_INC to console dependencies, lib dependencies, and
General:
Changes to 1.39.3:
+04Jan06
+- Start implementing Verify list output.
+- Move the suitable_drive flag to a better place to prevent
+ premature termination of the reservation if all drives
+ are busy -- should fix Arno's diff/inc pool failures.
+26Dec05
+- Add mutex to single thread VSS code in Win32.
22Dec05
- Simplify code in askdir.c that waits for creating an appendable
volume so that it can handle multiple returns from the wait
{"migrationjob", store_res, ITEM(res_job.migration_job), R_JOB, 0, 0},
{"jobdefs", store_res, ITEM(res_job.jobdefs), R_JOBDEFS, 0, 0},
{"run", store_alist_str, ITEM(res_job.run_cmds), 0, 0, 0},
+ /* Root of where to restore files */
{"where", store_dir, ITEM(res_job.RestoreWhere), 0, 0, 0},
+ /* Where to find bootstrap during restore */
{"bootstrap",store_dir, ITEM(res_job.RestoreBootstrap), 0, 0, 0},
+ /* Where to write bootstrap file during backup */
{"writebootstrap",store_dir, ITEM(res_job.WriteBootstrap), 0, 0, 0},
+ {"writeverifylist",store_dir, ITEM(res_job.WriteVerifyList), 0, 0, 0},
{"replace", store_replace, ITEM(res_job.replace), 0, ITEM_DEFAULT, REPLACE_ALWAYS},
{"maxruntime", store_time, ITEM(res_job.MaxRunTime), 0, 0, 0},
{"fullmaxwaittime", store_time, ITEM(res_job.FullMaxWaitTime), 0, 0, 0},
char *RunAfterFailedJob; /* Run program after Job that errs */
char *ClientRunBeforeJob; /* Run client program before Job */
char *ClientRunAfterJob; /* Run client program after Job */
- char *WriteBootstrap; /* Where to write bootstrap Job updates */
+ union {
+ char *WriteBootstrap; /* Where to write bootstrap Job updates */
+ char *WriteVerifyList; /* List of changed files */
+ };
int replace; /* How (overwrite, ..) */
utime_t MaxRunTime; /* max run time in seconds */
utime_t MaxWaitTime; /* max blocking time in seconds */
const char *replace;
char *when, *verify_job_name, *catalog_name;
char *since = NULL;
+ char *verify_list;
bool cloned = false;
int Priority = 0;
int i, j, opt, files = 0;
"catalog", /* 17 override catalog */
"since", /* 18 since */
"cloned", /* 19 cloned */
+ "verifylist", /* 20 verify output list */
NULL};
#define YES_POS 14
replace = NULL;
verify_job_name = NULL;
catalog_name = NULL;
+ verify_list = NULL;
for (i=1; i<ua->argc; i++) {
Dmsg2(800, "Doing arg %d = %s\n", i, ua->argk[i]);
kw_ok = true;
break;
+ case 20: /* write verify list output */
+ verify_list = ua->argv[i];
+ kw_ok = true;
+ break;
+
default:
break;
}
} else {
Name = "";
}
+ if (!verify_list) {
+ verify_list = job->WriteVerifyList;
+ }
+ if (!verify_list) {
+ verify_list = "";
+ }
bsendmsg(ua, _("Run %s job\n"
"JobName: %s\n"
"FileSet: %s\n"
"Storage: %s\n"
"Pool: %s\n"
"Verify Job: %s\n"
+"Verify List: %s\n"
"When: %s\n"
"Priority: %d\n"),
_("Verify"),
jcr->store->hdr.name,
NPRT(jcr->pool->hdr.name),
Name,
+ verify_list,
bstrutime(dt, sizeof(dt), jcr->sched_time),
jcr->JobPriority);
}
goto bail_out;
}
-
if (!get_cmd(ua, _("OK to run? (yes/mod/no): "))) {
goto bail_out;
}
*
*/
/*
- Copyright (C) 2000-2005 Kern Sibbald
+ Copyright (C) 2000-2006 Kern Sibbald
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
rctx.device_name = device_name;
stat = search_res_for_device(rctx);
if (stat == 1) { /* found available device */
- rctx.suitable_device = true;
Dmsg1(100, "Suitable device found=%s\n", device_name);
ok = true;
break;
} else if (stat == 0) { /* device busy */
Dmsg1(100, "Suitable busy device found=%s\n", device_name);
- rctx.suitable_device = true; /* but it is busy, so continue looking */
+ } else {
+ /* otherwise error */
+ Dmsg0(100, "No suitable device found.\n");
}
- /* otherwise error */
}
if (ok) {
break;
return -1; /* no use waiting */
}
+ rctx.suitable_device = true;
Dmsg2(100, "Try reserve %s jobid=%d\n", rctx.device->hdr.name,
rctx.jcr->JobId);
dcr = new_dcr(rctx.jcr, rctx.device->dev);