- Document JobStatus and Termination codes.
- Fix the error with the "DVI file can't be opened" while
building the French PDF.
+- Document more DVD stuff -- particularly that recycling doesn't work,
+ and all the other things too.
Priority:
For 1.39:
+- Change dbcheck to tell users to use native tools for fixing
+ broken databases, and to ensure they have the proper indexes.
+- add udev rules for Bacula devices.
- Add manpages to the list of directories for make install.
- If a job terminates, the DIR connection can close before the
Volume info is updated, leaving the File count wrong.
* name handler value code flags default_value
*/
static RES_ITEM runscript_items[] = {
- {"command", store_runscript_cmd, (char **)&res_runscript, 0, ITEM_REQUIRED, 0},
- {"target", store_runscript_target, (char **)&res_runscript, 0, 0, 0},
- {"runsonsuccess", store_bool, (char **)&res_runscript.on_success, 0, 0, 0},
- {"runsonfailure", store_bool, (char **)&res_runscript.on_failure, 0, 0, 0},
- {"abortjobonerror", store_bool, (char **)&res_runscript.abort_on_error, 0, 0, 0},
- {"runswhen", store_runscript_when, (char **)&res_runscript.when, 0, 0, 0},
- {"runsonclient", store_runscript_target, (char **)&res_runscript, 0, 0, 0}, /* TODO */
+ {"command", store_runscript_cmd, {(char **)&res_runscript}, 0, ITEM_REQUIRED, 0},
+ {"target", store_runscript_target, {(char **)&res_runscript}, 0, 0, 0},
+ {"runsonsuccess", store_bool, {(char **)&res_runscript.on_success}, 0, 0, 0},
+ {"runsonfailure", store_bool, {(char **)&res_runscript.on_failure}, 0, 0, 0},
+ {"abortjobonerror", store_bool, {(char **)&res_runscript.abort_on_error}, 0, 0, 0},
+ {"runswhen", store_runscript_when, {(char **)&res_runscript.when}, 0, 0, 0},
+ {"runsonclient", store_runscript_target, {(char **)&res_runscript}, 0, 0, 0}, /* TODO */
{NULL, NULL, {0}, 0, 0, 0}
};
lock_last_jobs_list();
struct s_last_job *je;
bsendmsg(ua, _("\nTerminated Jobs:\n"));
- bsendmsg(ua, _(" JobId Level Files Bytes Status Finished Name \n"));
- bsendmsg(ua, _("========================================================================\n"));
+ bsendmsg(ua, _(" JobId Level Files Bytes Status Finished Name \n"));
+ bsendmsg(ua, _("====================================================================\n"));
foreach_dlist(je, last_jobs) {
char JobName[MAX_NAME_LENGTH];
const char *termstat;
termstat = _("Other");
break;
}
- bsendmsg(ua, _("%6d %-6s %8s %14s %-7s %-8s %s\n"),
+ bsendmsg(ua, _("%6d %-6s %8s %10s %-7s %-8s %s\n"),
je->JobId,
level,
edit_uint64_with_commas(je->JobFiles, b1),
- edit_uint64_with_commas(je->JobBytes, b2),
+ edit_uint64_with_suffix(je->JobBytes, b2),
termstat,
dt, JobName);
}
jcr->num_files_examined--; /* correct file count */
return 1; /* not used */
case FT_NORECURSE:
- Jmsg(jcr, M_INFO, 1, _(" Recursion turned off. Will not descend into %s\n"),
- ff_pkt->fname);
+ Jmsg(jcr, M_INFO, 1, _(" Recursion turned off. Will not descend from %s into %s\n"),
+ ff_pkt->top_fname, ff_pkt->fname);
ff_pkt->type = FT_DIREND; /* Backup only the directory entry */
break;
case FT_NOFSCHG:
/* Suppress message for /dev filesystems */
if (strncmp(ff_pkt->fname, "/dev/", 5) != 0) {
- Jmsg(jcr, M_INFO, 1, _(" Filesystem change prohibited. Will not descend into %s\n"),
- ff_pkt->fname);
+ Jmsg(jcr, M_INFO, 1, _(" Filesystem change prohibited. Will not descend from %s into %s\n"),
+ ff_pkt->top_fname, ff_pkt->fname);
}
ff_pkt->type = FT_DIREND; /* Backup only the directory entry */
break;
case FT_INVALIDFS:
- Jmsg(jcr, M_INFO, 1, _(" Disallowed filesystem. Will not descend into %s\n"),
- ff_pkt->fname);
+ Jmsg(jcr, M_INFO, 1, _(" Disallowed filesystem. Will not descend from %s into %s\n"),
+ ff_pkt->top_fname, ff_pkt->fname);
ff_pkt->type = FT_DIREND; /* Backup only the directory entry */
break;
case FT_INVALIDDT:
sendit("\n", 1, arg); /* send separately */
msg = _("Terminated Jobs:\n");
sendit(msg, strlen(msg), arg);
- msg = _(" JobId Level Files Bytes Status Finished Name \n");
+ msg = _(" JobId Level Files Bytes Status Finished Name \n");
sendit(msg, strlen(msg), arg);
msg = _("======================================================================\n");
sendit(msg, strlen(msg), arg);
*p = 0;
}
}
- bsnprintf(buf, sizeof(buf), _("%6d %-6s %8s %14s %-7s %-8s %s\n"),
+ bsnprintf(buf, sizeof(buf), _("%6d %-6s %8s %10s %-7s %-8s %s\n"),
je->JobId,
level,
edit_uint64_with_commas(je->JobFiles, b1),
- edit_uint64_with_commas(je->JobBytes, b2),
+ edit_uint64_with_suffix(je->JobBytes, b2),
termstat,
dt, JobName);
sendit(buf, strlen(buf), arg);
}
for (j=0; j<incexe->name_list.size(); 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, true) == 0) {
+ ff->top_fname = (char *)incexe->name_list.get(j);
+ if (find_one_file(jcr, ff, our_callback, his_pkt, ff->top_fname, (dev_t)-1, true) == 0) {
return 0; /* error return */
}
}
* first argument to the find_files callback subroutine.
*/
struct FF_PKT {
+ char *top_fname; /* full filename before descending */
char *fname; /* full filename */
char *link; /* link if file linked */
POOLMEM *sys_fname; /* system filename */
* Version $Id$
*/
/*
- 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
#define BNET_TLS_NONE 0 /* cannot do TLS */
#define BNET_TLS_OK 1 /* can do, but not required on my end */
#define BNET_TLS_REQUIRED 2 /* TLS is required */
-
return false;
}
- /* List command? */
- if (strcmp(cmd, "list") == 0) {
- unload_autochanger(dcr, -1);
- }
if (strcmp(cmd, "drives") == 0) {
AUTOCHANGER *changer_res = dcr->device->changer_res;
int drives = 1;
DCR *dcr;
const char *cmd = NULL;
bool ok = false;
+ bool dolist = false;
if (sscanf(dir->msg, "autochanger list %127s", devname.c_str()) == 1) {
cmd = "list";
- ok = true;
+ dolist = ok = true;
} else if (sscanf(dir->msg, "autochanger slots %127s", devname.c_str()) == 1) {
cmd = "slots";
ok = true;
bnet_fsend(dir, _("3995 Device %s is not an autochanger.\n"),
dev->print_name());
/* Under certain "safe" conditions, we can steal the lock */
- } else if (!dev->is_open() || dev->can_steal_lock()) {
+ } else if (dolist || !dev->is_open() || dev->can_steal_lock()) {
autochanger_cmd(dcr, dir, cmd);
} else if (dev->is_busy() || dev->is_blocked()) {
send_dir_busy_message(dir, dev);
if (!dev) {
len = Mmsg(msg, _("No DEVICE structure.\n\n"));
sendit(msg, len, arg);
+ free_pool_memory(msg);
return;
}
switch (dev->dev_blocked) {
lock_last_jobs_list();
msg = _("\nTerminated Jobs:\n");
sendit(msg, strlen(msg), arg);
- msg = _(" JobId Level Files Bytes Status Finished Name \n");
+ msg = _(" JobId Level Files Bytes Status Finished Name \n");
sendit(msg, strlen(msg), arg);
- msg = _("======================================================================\n");
+ msg = _("===================================================================\n");
sendit(msg, strlen(msg), arg);
foreach_dlist(je, last_jobs) {
char JobName[MAX_NAME_LENGTH];
*p = 0;
}
}
- bsnprintf(buf, sizeof(buf), _("%6d %-6s %8s %14s %-7s %-8s %s\n"),
+ bsnprintf(buf, sizeof(buf), _("%6d %-6s %8s %10s %-7s %-8s %s\n"),
je->JobId,
level,
edit_uint64_with_commas(je->JobFiles, b1),
- edit_uint64_with_commas(je->JobBytes, b2),
+ edit_uint64_with_suffix(je->JobBytes, b2),
termstat,
dt, JobName);
sendit(buf, strlen(buf), arg);
#undef VERSION
#define VERSION "1.39.19"
-#define BDATE "07 August 2006"
-#define LSMDATE "07Aug06"
+#define BDATE "15 August 2006"
+#define LSMDATE "15Aug06"
#define BYEAR "2006" /* year for copyright messages in progs */
/* Debug flags */
Technical notes on version 1.39
General:
-07Aug06
+15Aug06
+kes Eliminate some compile warnings in dird_conf.c
+kes Format the bytes field in the terminated jobs part of the status
+ command for the three daemons with suffixes to reduce print size
+ of backup bytes. Suggested by a user.
+kes When not descending into a directory, print the File= name that
+ triggered it -- makes why not descending a bit clearer.
+kes Do not unload autochanger when doing a list command -- basic code
+ from Eric Bollengier.
+07Aug06
kes Fix bug #462 incorrect error message printed when client script called
from File= was not found.
kes Fix bug #558 (waiting for feedback) where Bacula needs too much time to