From 7abb223a62fe23ecb9630965f0bac3718ceaea34 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Tue, 2 Sep 2003 13:46:27 +0000 Subject: [PATCH] Fix positioning error on second tape git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@683 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/ReleaseNotes | 4 ++- bacula/kernstodo | 32 +++++++++++----------- bacula/src/console/console.c | 7 ++--- bacula/src/dird/expand.c | 8 +++--- bacula/src/dird/ua_cmds.c | 16 ++++++----- bacula/src/dird/ua_status.c | 5 ++-- bacula/src/filed/status.c | 3 ++- bacula/src/lib/htable.c | 2 +- bacula/src/lib/message.c | 4 +-- bacula/src/lib/rwlock.c | 2 +- bacula/src/lib/scan.c | 2 +- bacula/src/lib/semlock.c | 2 +- bacula/src/stored/acquire.c | 15 ----------- bacula/src/stored/dev.c | 5 +++- bacula/src/stored/match_bsr.c | 2 +- bacula/src/stored/read_record.c | 48 ++++++++++++++++++++------------- bacula/src/stored/status.c | 6 +++-- bacula/src/stored/stored_conf.c | 2 +- bacula/src/version.h | 4 +-- 19 files changed, 90 insertions(+), 79 deletions(-) diff --git a/bacula/ReleaseNotes b/bacula/ReleaseNotes index 80cf6b305b..ee48485945 100644 --- a/bacula/ReleaseNotes +++ b/bacula/ReleaseNotes @@ -5,7 +5,9 @@ Major Changes this Release: - Fixed gnome-console to compile with RH9 (Gnome 2.0) -- Implemented a single routine to read_records. +- Implemented a single routine to read_records. It also returns + a different record packet for each session. This means + that multiple simultaneous jobs should work. - Implemented forward space file/block whenever possible. - Added SDConnectTimeout to FD. diff --git a/bacula/kernstodo b/bacula/kernstodo index 71eebb5e4b..dc49d83619 100644 --- a/bacula/kernstodo +++ b/bacula/kernstodo @@ -27,29 +27,19 @@ Testing to do: (painful) - Figure out how to use ssh or stunnel to protect Bacula communications. For 1.32: +- Is a pool specification really needed for a restore? Yes, and + you may want to exclude archive Pools. - Look at libkse (man kse) for FreeBSD threading. - Look into Microsoft Volume Shadowcopy Service VSS for backing up system state components (Active Directory, System Volume, ...) - Add ExhautiveRestoreSearch and use repositioning at the beginning - of the tape. -- Add Machine type (Linux/Windows) to Status report for daemons. -- Document "status" in the console. -- Document driving console from shell script. + of the tape. - Specify list of files to restore - Implement ClientRunBeforeJob and ClientRunAfterJob. -- Restore file list. -- Write JobMedia records with max file size is reached on tape. - Look at the possibility of loading only the necessary data into the restore tree (i.e. do it one directory at a time as the user walks through the tree). -- Possibly use the hash code if the user selects all. -- Handle the case of multiple JobMedia records pending (i.e. the - thread is slow and multiple situations requiring a JobMedia - record occur). -- Fix maximum file size (block.c) to generate JobMedia records. -- Do performance analysis on the restore tree routines. -- Implement forward spacing between files. -- Make the default file size 1GB on the tape. +- Possibly use the hash code if the user selects all for a restore command. - Orphaned Dir buffer at parse_conf.c:373 => store_dir - Implement some way for the File daemon to contact the Director to start a job or pass its DHCP obtained IP number. @@ -78,7 +68,6 @@ For 1.32: - Implement List Volume Job=xxx or List scheduled volumes or Status Director - Allow a slot or range of slots on the label barcodes command. - Implement a PostgreSQL driver. -- Is a pool specification really needed for a restore? - Bacula needs to propagate SD errors. > > cluster-dir: Start Backup JobId 252, Job=REUTERS.2003-08-11_15.04.12 > > prod4-sd: REUTERS.2003-08-11_15.04.12 Error: Write error on device @@ -865,3 +854,16 @@ Done: (see kernsdone for more) - Fix read_record to handle multiple sessions. - Tip from Steve Allam mt -f /dev/nst0 defblksize 0 +- Document "status" in the console. +- Document driving console from shell script. +- Write JobMedia records with max file size is reached on tape. +- Handle the case of multiple JobMedia records pending (i.e. the + thread is slow and multiple situations requiring a JobMedia + record occur). +- Do performance analysis on the restore tree routines. +- Fix maximum file size (block.c) to generate JobMedia records. +- Make the default file size 1GB on the tape. +- Implement forward spacing between files. +- Add Machine type (Linux/Windows) to Status report for daemons. + Look at src/host.h + diff --git a/bacula/src/console/console.c b/bacula/src/console/console.c index 769ae122a5..8e9849bc93 100644 --- a/bacula/src/console/console.c +++ b/bacula/src/console/console.c @@ -77,14 +77,14 @@ static int sleepcmd(FILE *input, BSOCK *UA_sock); static void usage() { fprintf(stderr, _( -"\nVersion: " VERSION " (" BDATE ")\n\n" +"\nVersion: " VERSION " (" BDATE ") %s %s %s\n\n" "Usage: console [-s] [-c config_file] [-d debug_level] [config_file]\n" " -c set configuration file to file\n" " -dnn set debug level to nn\n" " -s no signals\n" " -t test - read configuration and exit\n" " -? print this message.\n" -"\n")); +"\n"), HOST_OS, DISTNAME, DISTVER); exit(1); } @@ -504,7 +504,8 @@ again: static int versioncmd(FILE *input, BSOCK *UA_sock) { - sendit("Version: " VERSION " (" BDATE ")\n"); + sendit("Version: " VERSION " (" BDATE ") %s %s %s\n", + HOST_OS, DISTNAME, DISTVER); return 1; } diff --git a/bacula/src/dird/expand.c b/bacula/src/dird/expand.c index 6f327cdd0d..308624f794 100644 --- a/bacula/src/dird/expand.c +++ b/bacula/src/dird/expand.c @@ -323,7 +323,7 @@ static var_rc_t operate_var(var_t *var, void *my_ctx, char **out_ptr, int *out_len, int *out_size) { var_rc_t stat = VAR_ERR_UNDEFINED_OPERATION; - Dmsg0(000, "Enter operate_var\n"); +// Dmsg0(000, "Enter operate_var\n"); if (!val_ptr) { *out_size = 0; return stat; @@ -335,14 +335,14 @@ static var_rc_t operate_var(var_t *var, void *my_ctx, } memcpy(buf, arg_ptr, arg_len); buf[arg_len] = 0; - Dmsg1(000, "Arg=%s\n", buf); +// Dmsg1(000, "Arg=%s\n", buf); memcpy(buf, val_ptr, val_len); buf[val_len] = 0; - Dmsg1(000, "Val=%s\n", buf); +// Dmsg1(000, "Val=%s\n", buf); LockRes(); for (COUNTER *counter=NULL; (counter = (COUNTER *)GetNextRes(R_COUNTER, (RES *)counter)); ) { if (strcmp(counter->hdr.name, buf) == 0) { - Dmsg2(000, "counter=%s val=%s\n", counter->hdr.name, buf); +// Dmsg2(000, "counter=%s val=%s\n", counter->hdr.name, buf); break; } } diff --git a/bacula/src/dird/ua_cmds.c b/bacula/src/dird/ua_cmds.c index 68bceaddb8..214bc6a130 100644 --- a/bacula/src/dird/ua_cmds.c +++ b/bacula/src/dird/ua_cmds.c @@ -42,7 +42,7 @@ extern jobq_t job_queue; /* job queue */ extern char *list_pool; /* Imported functions */ -extern int statuscmd(UAContext *ua, char *cmd); +extern int status_cmd(UAContext *ua, char *cmd); extern int listcmd(UAContext *ua, char *cmd); extern int llistcmd(UAContext *ua, char *cmd); extern int show_cmd(UAContext *ua, char *cmd); @@ -60,7 +60,9 @@ extern int relabel_cmd(UAContext *ua, char *cmd); extern int update_slots(UAContext *ua); /* ua_label.c */ /* Forward referenced functions */ -static int add_cmd(UAContext *ua, char *cmd), createcmd(UAContext *ua, char *cmd), cancelcmd(UAContext *ua, char *cmd); +static int add_cmd(UAContext *ua, char *cmd); +static int create_cmd(UAContext *ua, char *cmd); +static int cancel_cmd(UAContext *ua, char *cmd); static int setdebug_cmd(UAContext *ua, char *cmd); static int var_cmd(UAContext *ua, char *cmd); static int estimate_cmd(UAContext *ua, char *cmd); @@ -86,8 +88,8 @@ static struct cmdstruct commands[] = { { N_("add"), add_cmd, _("add media to a pool")}, { N_("autodisplay"), autodisplaycmd, _("autodisplay [on/off] -- console messages")}, { N_("automount"), automount_cmd, _("automount [on/off] -- after label")}, - { N_("cancel"), cancelcmd, _("cancel job=nnn -- cancel a job")}, - { N_("create"), createcmd, _("create DB Pool from resource")}, + { N_("cancel"), cancel_cmd, _("cancel job=nnn -- cancel a job")}, + { N_("create"), create_cmd, _("create DB Pool from resource")}, { N_("delete"), delete_cmd, _("delete [pool= | media volume=]")}, { N_("estimate"), estimate_cmd, _("performs FileSet estimate, listing gives full listing")}, { N_("exit"), quit_cmd, _("exit = quit")}, @@ -108,7 +110,7 @@ static struct cmdstruct commands[] = { { N_("setdebug"), setdebug_cmd, _("sets debug level")}, { N_("show"), show_cmd, _("show (resource records) [jobs | pools | ... | all]")}, { N_("sqlquery"), sqlquerycmd, _("use SQL to query catalog")}, - { N_("status"), statuscmd, _("status [storage | client]=")}, + { N_("status"), status_cmd, _("status [storage | client]=")}, { N_("time"), time_cmd, _("print current time")}, { N_("unmount"), unmount_cmd, _("unmount ")}, { N_("update"), update_cmd, _("update Volume or Pool")}, @@ -338,7 +340,7 @@ int automount_cmd(UAContext *ua, char *cmd) /* * Cancel a job */ -static int cancelcmd(UAContext *ua, char *cmd) +static int cancel_cmd(UAContext *ua, char *cmd) { int i; int njobs = 0; @@ -558,7 +560,7 @@ int create_pool(JCR *jcr, B_DB *db, POOL *pool, e_pool_op op) * Create a Pool Record in the database. * It is always created from the Resource record. */ -static int createcmd(UAContext *ua, char *cmd) +static int create_cmd(UAContext *ua, char *cmd) { POOL *pool; diff --git a/bacula/src/dird/ua_status.c b/bacula/src/dird/ua_status.c index 77a2fa55be..2ba3a70ec4 100644 --- a/bacula/src/dird/ua_status.c +++ b/bacula/src/dird/ua_status.c @@ -43,7 +43,7 @@ static void do_all_status(UAContext *ua, char *cmd); /* * status command */ -int statuscmd(UAContext *ua, char *cmd) +int status_cmd(UAContext *ua, char *cmd) { STORE *store; CLIENT *client; @@ -197,7 +197,8 @@ static void do_director_status(UAContext *ua, char *cmd) int pool_mem = FALSE; Dmsg0(200, "Doing status\n"); - bsendmsg(ua, "%s Version: " VERSION " (" BDATE ")\n", my_name); + bsendmsg(ua, "%s Version: " VERSION " (" BDATE ") %s %s %s\n", my_name, + HOST_OS, DISTNAME, DISTVER); bstrftime(dt, sizeof(dt), daemon_start_time); bsendmsg(ua, _("Daemon started %s, %d Job%s run.\n"), dt, last_job.NumJobs, last_job.NumJobs == 1 ? "" : "s"); diff --git a/bacula/src/filed/status.c b/bacula/src/filed/status.c index 3b6902c723..c1c6ce1878 100755 --- a/bacula/src/filed/status.c +++ b/bacula/src/filed/status.c @@ -50,7 +50,8 @@ static void do_status(void sendit(char *msg, int len, void *sarg), void *arg) msg = (char *)get_pool_memory(PM_MESSAGE); found = 0; - len = Mmsg(&msg, "%s Version: " VERSION " (" BDATE ")\n", my_name); + len = Mmsg(&msg, "%s Version: " VERSION " (" BDATE ") %s %s %s\n", my_name, + HOST_OS, DISTNAME, DISTVER); sendit(msg, len, arg); bstrftime(dt, sizeof(dt), daemon_start_time); len = Mmsg(&msg, _("Daemon started %s, %d Job%s run.\n"), dt, last_job.NumJobs, diff --git a/bacula/src/lib/htable.c b/bacula/src/lib/htable.c index 1c4c4bf639..7bd134ca23 100644 --- a/bacula/src/lib/htable.c +++ b/bacula/src/lib/htable.c @@ -138,7 +138,7 @@ void htable::stats() void htable::grow_table() { - Dmsg1(000, "Grow called old size = %d\n", buckets); + Dmsg1(100, "Grow called old size = %d\n", buckets); /* Setup a bigger table */ htable *big = (htable *)malloc(sizeof(htable)); big->loffset = loffset; diff --git a/bacula/src/lib/message.c b/bacula/src/lib/message.c index 4fc1447aac..dc7c4723ff 100755 --- a/bacula/src/lib/message.c +++ b/bacula/src/lib/message.c @@ -423,7 +423,7 @@ void close_msg(JCR *jcr) } if (!(bpipe=open_mail_pipe(jcr, &cmd, d))) { - Dmsg0(000, "open mail pipe failed.\n"); + Pmsg0(000, "open mail pipe failed.\n"); goto rem_temp_file; } Dmsg0(150, "Opened mail pipe\n"); @@ -434,7 +434,7 @@ void close_msg(JCR *jcr) fputs(line, bpipe->wfd); } if (!close_wpipe(bpipe)) { /* close write pipe sending mail */ - Dmsg1(000, "close error: ERR=%s\n", strerror(errno)); + Pmsg1(000, "close error: ERR=%s\n", strerror(errno)); } /* diff --git a/bacula/src/lib/rwlock.c b/bacula/src/lib/rwlock.c index 68adf340b7..6729a31ca1 100644 --- a/bacula/src/lib/rwlock.c +++ b/bacula/src/lib/rwlock.c @@ -385,7 +385,7 @@ void *thread_routine(void *arg) } } if (repeats > 0) { - Dmsg2(000, "Thread %d found unchanged elements %d times\n", + Pmsg2(000, "Thread %d found unchanged elements %d times\n", self->thread_num, repeats); } return NULL; diff --git a/bacula/src/lib/scan.c b/bacula/src/lib/scan.c index 2a80ad2b18..f435502b6c 100644 --- a/bacula/src/lib/scan.c +++ b/bacula/src/lib/scan.c @@ -231,7 +231,7 @@ int parse_args(POOLMEM *cmd, POOLMEM **args, int *argc, } #ifdef xxxx for (int i=0; i < *argc; i++) { - Dmsg3(000, "Arg %d: kw=%s val=%s\n", i, argk[i], argv[i]?argv[i]:"NULL"); + Pmsg3(000, "Arg %d: kw=%s val=%s\n", i, argk[i], argv[i]?argv[i]:"NULL"); } #endif return 1; diff --git a/bacula/src/lib/semlock.c b/bacula/src/lib/semlock.c index 7682682056..2b5263167a 100644 --- a/bacula/src/lib/semlock.c +++ b/bacula/src/lib/semlock.c @@ -278,7 +278,7 @@ void *thread_routine(void *arg) } } if (repeats > 0) { - Dmsg2(000, "Thread %d found unchanged elements %d times\n", + Pmsg2(000, "Thread %d found unchanged elements %d times\n", self->thread_num, repeats); } return NULL; diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index fdd4b1f4d2..9242ca96d2 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -140,21 +140,6 @@ default_path: attach_jcr_to_device(dev, jcr); /* attach jcr to device */ Jmsg(jcr, M_INFO, 0, _("Ready to read from volume \"%s\" on device %s.\n"), jcr->VolumeName, dev_name(dev)); - if (jcr->bsr) { - BSR *bsr; - - jcr->bsr->reposition = true; - bsr = find_next_bsr(jcr->bsr, dev); - if (bsr) { - Jmsg(jcr, M_INFO, 0, _("Forward spacing to file:block %u:%u.\n"), - bsr->volfile->sfile, bsr->volblock->sblock); - reposition_dev(dev, bsr->volfile->sfile, bsr->volblock->sblock); - } else if ((dev->state & ST_TAPE) && vol->start_file > 0) { - Dmsg1(200, "====== Got start_file = %d\n", vol->start_file); - Jmsg(jcr, M_INFO, 0, _("Forward spacing to file %d.\n"), vol->start_file); - fsf_dev(dev, vol->start_file); - } - } get_out: P(dev->mutex); diff --git a/bacula/src/stored/dev.c b/bacula/src/stored/dev.c index 8f958576f7..f28eb4344d 100644 --- a/bacula/src/stored/dev.c +++ b/bacula/src/stored/dev.c @@ -941,7 +941,6 @@ bsr_dev(DEVICE *dev, int num) int reposition_dev(DEVICE *dev, uint32_t file, uint32_t block) { - if (dev->fd < 0) { dev->dev_errno = EBADF; Mmsg0(&dev->errmsg, _("Bad call to reposition_dev. Archive not open\n")); @@ -966,6 +965,10 @@ reposition_dev(DEVICE *dev, uint32_t file, uint32_t block) return 0; } } + if (block < dev->block_num) { + bsf_dev(dev, 1); + fsf_dev(dev, 1); + } if (block > dev->block_num) { /* Ignore errors as Bacula can read to the correct block */ Dmsg1(100, "fsr %d\n", block-dev->block_num); diff --git a/bacula/src/stored/match_bsr.c b/bacula/src/stored/match_bsr.c index d06cedd06c..ece77a6bd2 100755 --- a/bacula/src/stored/match_bsr.c +++ b/bacula/src/stored/match_bsr.c @@ -157,7 +157,7 @@ BSR *find_next_bsr(BSR *root_bsr, DEVICE *dev) if (!root_bsr || !root_bsr->use_positioning || !root_bsr->reposition || !dev_is_tape(dev)) { - Dmsg2(000, "use_pos=%d repos=%d\n", root_bsr->use_positioning, + Dmsg2(100, "use_pos=%d repos=%d\n", root_bsr->use_positioning, root_bsr->reposition); return NULL; } diff --git a/bacula/src/stored/read_record.c b/bacula/src/stored/read_record.c index a555a6a664..2dc21358e0 100644 --- a/bacula/src/stored/read_record.c +++ b/bacula/src/stored/read_record.c @@ -33,7 +33,7 @@ #include "bacula.h" #include "stored.h" -static void get_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sessrec); +static void handle_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sessrec); #ifdef DEBUG static char *rec_state_to_str(DEV_RECORD *rec); #endif @@ -93,25 +93,32 @@ int read_records(JCR *jcr, DEVICE *dev, */ read_block_from_device(jcr, dev, block, NO_BLOCK_NUMBER_CHECK); read_record_from_block(block, trec); - get_session_record(dev, trec, &sessrec); + handle_session_record(dev, trec, &sessrec); ok = record_cb(jcr, dev, block, trec); free_record(trec); /* * Now find and position to first file and block * on this tape. */ - BSR *bsr = find_next_bsr(jcr->bsr, dev); - if (bsr == NULL && jcr->bsr->mount_next_volume) { - Dmsg0(100, "Would mount next volume here\n"); - } - if (bsr) { - Dmsg4(100, "Reposition new tape from (file:block) %d:%d to %d:%d\n", - dev->file, dev->block_num, bsr->volfile->sfile, - bsr->volblock->sblock); - reposition_dev(dev, bsr->volfile->sfile, bsr->volblock->sblock); - Dmsg2(100, "Now at (file:block) %d:%d\n", - dev->file, dev->block_num); + if (jcr->bsr) { + BSR *bsr; + + jcr->bsr->reposition = true; + bsr = find_next_bsr(jcr->bsr, dev); + if (bsr) { + Jmsg(jcr, M_INFO, 0, _("Forward spacing to file:block %u:%u.\n"), + bsr->volfile->sfile, bsr->volblock->sblock); + Dmsg4(100, "Reposition new from (file:block) %d:%d to %d:%d\n", + dev->file, dev->block_num, bsr->volfile->sfile, + bsr->volblock->sblock); + reposition_dev(dev, bsr->volfile->sfile, bsr->volblock->sblock); + Dmsg2(100, "Now at (file:block) %d:%d\n", + dev->file, dev->block_num); + } } + /* After reading label, we must read first data block */ + continue; + } else if (dev_state(dev, ST_EOF)) { Jmsg(jcr, M_INFO, 0, "Got EOF at file %u on device %s, Volume \"%s\"\n", dev->file, dev_name(dev), jcr->VolumeName); @@ -161,6 +168,8 @@ int read_records(JCR *jcr, DEVICE *dev, rec->Block+1, block->BlockNumber); } } + Dmsg3(100, "After mount next vol. stat=%s blk=%d rem=%d\n", rec_state_to_str(rec), + block->BlockNumber, rec->remainder); record = 0; for (rec->state=0; !is_block_empty(rec); ) { if (!read_record_from_block(block, rec)) { @@ -193,7 +202,7 @@ int read_records(JCR *jcr, DEVICE *dev, /* Some sort of label? */ if (rec->FileIndex < 0) { - get_session_record(dev, rec, &sessrec); + handle_session_record(dev, rec, &sessrec); ok = record_cb(jcr, dev, block, rec); if (rec->FileIndex == EOS_LABEL) { Dmsg2(100, "Remove rec. SI=%d ST=%d\n", rec->VolSessionId, @@ -219,6 +228,7 @@ int read_records(JCR *jcr, DEVICE *dev, Dmsg0(100, "Would mount next volume here\n"); Dmsg2(100, "Current postion (file:block) %d:%d\n", dev->file, dev->block_num); + jcr->bsr->mount_next_volume = false; dev->state |= ST_EOT; rec->Block = 0; break; @@ -232,7 +242,7 @@ int read_records(JCR *jcr, DEVICE *dev, Dmsg2(100, "Now at (file:block) %d:%d\n", dev->file, dev->block_num); } - Dmsg5(10, "BSR no match rec=%d block=%d SessId=%d SessTime=%d FI=%d\n", + Dmsg5(100, "BSR no match rec=%d block=%d SessId=%d SessTime=%d FI=%d\n", record, block->BlockNumber, rec->VolSessionId, rec->VolSessionTime, rec->FileIndex); continue; /* we don't want record, read next one */ @@ -261,9 +271,10 @@ int read_records(JCR *jcr, DEVICE *dev, } -static void get_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sessrec) +static void handle_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sessrec) { char *rtype; + char buf[100]; memset(sessrec, 0, sizeof(sessrec)); switch (rec->FileIndex) { case PRE_LABEL: @@ -284,10 +295,11 @@ static void get_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sess rtype = "End of Media"; break; default: - rtype = "Unknown"; + bsnprintf(buf, sizeof(buf), "Unknown code %d\n", rec->FileIndex); + rtype = buf; break; } - Dmsg5(10, "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n", + Dmsg5(100, "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n", rtype, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len); } diff --git a/bacula/src/stored/status.c b/bacula/src/stored/status.c index 0b1d1a9565..196f31ac55 100644 --- a/bacula/src/stored/status.c +++ b/bacula/src/stored/status.c @@ -58,7 +58,8 @@ int status_cmd(JCR *jcr) char dt[MAX_TIME_LENGTH]; char b1[30], b2[30], b3[30]; - bnet_fsend(user, "\n%s Version: " VERSION " (" BDATE ")\n", my_name); + bnet_fsend(user, "\n%s Version: " VERSION " (" BDATE ") %s %s %s\n", my_name, + HOST_OS, DISTNAME, DISTVER); bstrftime(dt, sizeof(dt), daemon_start_time); bnet_fsend(user, _("Daemon started %s, %d Job%s run.\n"), dt, last_job.NumJobs, last_job.NumJobs == 1 ? "" : "s"); @@ -135,8 +136,9 @@ int status_cmd(JCR *jcr) bnet_fsend(user, _("%s %s job %s using Volume \"%s\" on device %s\n"), job_level_to_str(jcr->JobLevel), job_type_to_str(jcr->JobType), + jcr->Job, jcr->VolumeName, - jcr->Job, jcr->device->device_name); + jcr->device->device_name); sec = time(NULL) - jcr->run_time; if (sec <= 0) { sec = 1; diff --git a/bacula/src/stored/stored_conf.c b/bacula/src/stored/stored_conf.c index 96a5af907f..841f2b2728 100644 --- a/bacula/src/stored/stored_conf.c +++ b/bacula/src/stored/stored_conf.c @@ -108,7 +108,7 @@ static struct res_items dev_items[] = { {"minimumblocksize", store_pint, ITEM(res_dev.min_block_size), 0, 0, 0}, {"maximumblocksize", store_pint, ITEM(res_dev.max_block_size), 0, 0, 0}, {"maximumvolumesize", store_size, ITEM(res_dev.max_volume_size), 0, 0, 0}, - {"maximumfilesize", store_size, ITEM(res_dev.max_file_size), 0, 0, 0}, + {"maximumfilesize", store_size, ITEM(res_dev.max_file_size), 0, ITEM_DEFAULT, 1000000000}, {"volumecapacity", store_size, ITEM(res_dev.volume_capacity), 0, 0, 0}, {NULL, NULL, 0, 0, 0, 0} }; diff --git a/bacula/src/version.h b/bacula/src/version.h index 38952f019f..bb356469e5 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -2,8 +2,8 @@ #undef VERSION #define VERSION "1.32" #define VSTRING "1" -#define BDATE "1 Sep 2003" -#define LSMDATE "01Sep03" +#define BDATE "02 Sep 2003" +#define LSMDATE "02Sep03" /* Debug flags */ #undef DEBUG -- 2.39.5