From 1cb435853347ee1eace4fac2f70e5b6aa6e08bd9 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Wed, 18 Jun 2003 16:42:27 +0000 Subject: [PATCH] Fix ls print in bls and bscan + fix match_bsr for interleaved session ids git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@590 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/src/stored/bextract.c | 301 ++++++++-------- bacula/src/stored/bls.c | 195 +++++------ bacula/src/stored/bscan.c | 587 ++++++++++++++++---------------- bacula/src/stored/match_bsr.c | 3 - bacula/src/stored/read_record.c | 3 +- 5 files changed, 544 insertions(+), 545 deletions(-) diff --git a/bacula/src/stored/bextract.c b/bacula/src/stored/bextract.c index fea67c21f4..7734432b43 100644 --- a/bacula/src/stored/bextract.c +++ b/bacula/src/stored/bextract.c @@ -60,9 +60,9 @@ static int prog_name_msg = 0; static int win32_data_msg = 0; static char *VolumeName = NULL; -static char *wbuf; /* write buffer address */ -static uint32_t wsize; /* write size */ -static uint64_t fileAddr = 0; /* file write address */ +static char *wbuf; /* write buffer address */ +static uint32_t wsize; /* write size */ +static uint64_t fileAddr = 0; /* file write address */ #define CONFIG_FILE "bacula-sd.conf" char *configfile; @@ -93,7 +93,7 @@ int main (int argc, char *argv[]) working_directory = "/tmp"; my_name_is(argc, argv, "bextract"); - init_msg(NULL, NULL); /* setup message handler */ + init_msg(NULL, NULL); /* setup message handler */ memset(ff, 0, sizeof(FF_PKT)); init_include_exclude_files(ff); @@ -102,59 +102,59 @@ int main (int argc, char *argv[]) while ((ch = getopt(argc, argv, "b:c:d:e:i:?")) != -1) { switch (ch) { case 'b': /* bootstrap file */ - bsr = parse_bsr(NULL, optarg); -// dump_bsr(bsr); - break; + bsr = parse_bsr(NULL, optarg); +// dump_bsr(bsr); + break; case 'c': /* specify config file */ - if (configfile != NULL) { - free(configfile); - } - configfile = bstrdup(optarg); - break; + if (configfile != NULL) { + free(configfile); + } + configfile = bstrdup(optarg); + break; case 'd': /* debug level */ - debug_level = atoi(optarg); - if (debug_level <= 0) - debug_level = 1; - break; + debug_level = atoi(optarg); + if (debug_level <= 0) + debug_level = 1; + break; case 'e': /* exclude list */ if ((fd = fopen(optarg, "r")) == NULL) { Pmsg2(0, "Could not open exclude file: %s, ERR=%s\n", - optarg, strerror(errno)); - exit(1); - } - while (fgets(line, sizeof(line), fd) != NULL) { - strip_trailing_junk(line); + optarg, strerror(errno)); + exit(1); + } + while (fgets(line, sizeof(line), fd) != NULL) { + strip_trailing_junk(line); Dmsg1(900, "add_exclude %s\n", line); - add_fname_to_exclude_list(ff, line); - } - fclose(fd); - break; + add_fname_to_exclude_list(ff, line); + } + fclose(fd); + break; case 'i': /* include list */ if ((fd = fopen(optarg, "r")) == NULL) { Pmsg2(0, "Could not open include file: %s, ERR=%s\n", - optarg, strerror(errno)); - exit(1); - } - while (fgets(line, sizeof(line), fd) != NULL) { - strip_trailing_junk(line); + optarg, strerror(errno)); + exit(1); + } + while (fgets(line, sizeof(line), fd) != NULL) { + strip_trailing_junk(line); Dmsg1(900, "add_include %s\n", line); - add_fname_to_include_list(ff, 0, line); - } - fclose(fd); - got_inc = TRUE; - break; + add_fname_to_include_list(ff, 0, line); + } + fclose(fd); + got_inc = TRUE; + break; case 'V': /* Volume name */ - VolumeName = optarg; - break; + VolumeName = optarg; + break; case '?': default: - usage(); + usage(); } /* end switch */ } /* end while */ @@ -172,7 +172,7 @@ int main (int argc, char *argv[]) parse_config(configfile); - if (!got_inc) { /* If no include file, */ + if (!got_inc) { /* If no include file, */ add_fname_to_include_list(ff, 0, "/"); /* include everything */ } @@ -184,11 +184,11 @@ int main (int argc, char *argv[]) } if (prog_name_msg) { Pmsg1(000, "%d Program Name and/or Program Data Stream records ignored.\n", - prog_name_msg); + prog_name_msg); } if (win32_data_msg) { Pmsg1(000, "%d Win32 data or Win32 gzip data stream records. Ignored.\n", - win32_data_msg); + win32_data_msg); } return 0; } @@ -205,7 +205,7 @@ static void do_extract(char *devname) /* Make sure where directory exists and that it is a directory */ if (stat(where, &statp) < 0) { Emsg2(M_ERROR_TERM, 0, "Cannot stat %s. It must exist. ERR=%s\n", - where, strerror(errno)); + where, strerror(errno)); } if (!S_ISDIR(statp.st_mode)) { Emsg1(M_ERROR_TERM, 0, "%s must be a directory.\n", where); @@ -254,11 +254,11 @@ static void record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) * close the output file. */ if (extract) { - if (!is_bopen(&bfd)) { + if (!is_bopen(&bfd)) { Emsg0(M_ERROR, 0, _("Logic error output file should be open but is not.\n")); - } - extract = FALSE; - set_attributes(jcr, attr, &bfd); + } + extract = FALSE; + set_attributes(jcr, attr, &bfd); } if (!unpack_attributes_record(jcr, rec->Stream, rec->data, attr)) { @@ -267,46 +267,45 @@ static void record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) if (attr->file_index != rec->FileIndex) { Emsg2(M_ERROR_TERM, 0, _("Record header file index %ld not equal record index %ld\n"), - rec->FileIndex, attr->file_index); + rec->FileIndex, attr->file_index); } - + if (file_is_included(ff, attr->fname) && !file_is_excluded(ff, attr->fname)) { - uint32_t LinkFI; - - decode_stat(attr->attr, &attr->statp, &LinkFI); - - build_attr_output_fnames(jcr, attr); - - extract = FALSE; - stat = create_file(jcr, attr, &bfd, REPLACE_ALWAYS); - switch (stat) { - case CF_ERROR: - case CF_SKIP: - break; - case CF_EXTRACT: - extract = TRUE; - print_ls_output(jcr, attr); - num_files++; - fileAddr = 0; - break; - case CF_CREATED: - set_attributes(jcr, attr, &bfd); - print_ls_output(jcr, attr); - num_files++; - fileAddr = 0; - break; - } + uint32_t LinkFI; + + decode_stat(attr->attr, &attr->statp, &LinkFI); + build_attr_output_fnames(jcr, attr); + + extract = FALSE; + stat = create_file(jcr, attr, &bfd, REPLACE_ALWAYS); + switch (stat) { + case CF_ERROR: + case CF_SKIP: + break; + case CF_EXTRACT: + extract = TRUE; + print_ls_output(jcr, attr); + num_files++; + fileAddr = 0; + break; + case CF_CREATED: + set_attributes(jcr, attr, &bfd); + print_ls_output(jcr, attr); + num_files++; + fileAddr = 0; + break; + } } /* Windows Backup data stream */ case STREAM_WIN32_DATA: if (!is_win32_backup()) { - if (!non_support_data) { + if (!non_support_data) { Jmsg(jcr, M_ERROR, 0, _("Win32 backup data not supported on this Client.\n")); - } - extract = FALSE; - non_support_data++; - return; + } + extract = FALSE; + non_support_data++; + return; } goto extract_data; @@ -317,42 +316,42 @@ static void record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) extract_data: if (extract) { - if (rec->Stream == STREAM_SPARSE_DATA) { - ser_declare; - uint64_t faddr; - wbuf = rec->data + SPARSE_FADDR_SIZE; - wsize = rec->data_len - SPARSE_FADDR_SIZE; - ser_begin(rec->data, SPARSE_FADDR_SIZE); - unser_uint64(faddr); - if (fileAddr != faddr) { - fileAddr = faddr; - if (blseek(&bfd, (off_t)fileAddr, SEEK_SET) < 0) { + if (rec->Stream == STREAM_SPARSE_DATA) { + ser_declare; + uint64_t faddr; + wbuf = rec->data + SPARSE_FADDR_SIZE; + wsize = rec->data_len - SPARSE_FADDR_SIZE; + ser_begin(rec->data, SPARSE_FADDR_SIZE); + unser_uint64(faddr); + if (fileAddr != faddr) { + fileAddr = faddr; + if (blseek(&bfd, (off_t)fileAddr, SEEK_SET) < 0) { Emsg2(M_ERROR_TERM, 0, _("Seek error on %s: %s\n"), - attr->ofname, strerror(errno)); - } - } - } else { - wbuf = rec->data; - wsize = rec->data_len; - } - total += wsize; + attr->ofname, strerror(errno)); + } + } + } else { + wbuf = rec->data; + wsize = rec->data_len; + } + total += wsize; Dmsg2(8, "Write %u bytes, total=%u\n", wsize, total); - if ((uint32_t)bwrite(&bfd, wbuf, wsize) != wsize) { + if ((uint32_t)bwrite(&bfd, wbuf, wsize) != wsize) { Emsg2(M_ERROR_TERM, 0, _("Write error on %s: %s\n"), - attr->ofname, strerror(errno)); - } - fileAddr += wsize; + attr->ofname, strerror(errno)); + } + fileAddr += wsize; } /* Windows Backup GZIP data stream */ case STREAM_WIN32_GZIP_DATA: if (!is_win32_backup()) { - if (!non_support_attr) { + if (!non_support_attr) { Jmsg(jcr, M_ERROR, 0, _("Win32 GZIP backup data not supported on this Client.\n")); - } - extract = FALSE; - non_support_attr++; - return; + } + extract = FALSE; + non_support_attr++; + return; } /* Fall through desired */ @@ -361,49 +360,49 @@ extract_data: case STREAM_SPARSE_GZIP_DATA: #ifdef HAVE_LIBZ if (extract) { - uLongf compress_len; - int stat; - - if (rec->Stream == STREAM_SPARSE_GZIP_DATA) { - ser_declare; - uint64_t faddr; - wbuf = rec->data + SPARSE_FADDR_SIZE; - wsize = rec->data_len - SPARSE_FADDR_SIZE; - ser_begin(rec->data, SPARSE_FADDR_SIZE); - unser_uint64(faddr); - if (fileAddr != faddr) { - fileAddr = faddr; - if (blseek(&bfd, (off_t)fileAddr, SEEK_SET) < 0) { + uLongf compress_len; + int stat; + + if (rec->Stream == STREAM_SPARSE_GZIP_DATA) { + ser_declare; + uint64_t faddr; + wbuf = rec->data + SPARSE_FADDR_SIZE; + wsize = rec->data_len - SPARSE_FADDR_SIZE; + ser_begin(rec->data, SPARSE_FADDR_SIZE); + unser_uint64(faddr); + if (fileAddr != faddr) { + fileAddr = faddr; + if (blseek(&bfd, (off_t)fileAddr, SEEK_SET) < 0) { Emsg2(M_ERROR, 0, _("Seek error on %s: %s\n"), - attr->ofname, strerror(errno)); - } - } - } else { - wbuf = rec->data; - wsize = rec->data_len; - } - compress_len = compress_buf_size; - if ((stat=uncompress((Bytef *)compress_buf, &compress_len, - (const Bytef *)wbuf, (uLong)wsize) != Z_OK)) { + attr->ofname, strerror(errno)); + } + } + } else { + wbuf = rec->data; + wsize = rec->data_len; + } + compress_len = compress_buf_size; + if ((stat=uncompress((Bytef *)compress_buf, &compress_len, + (const Bytef *)wbuf, (uLong)wsize) != Z_OK)) { Emsg1(M_ERROR_TERM, 0, _("Uncompression error. ERR=%d\n"), stat); - } + } Dmsg2(100, "Write uncompressed %d bytes, total before write=%d\n", compress_len, total); - if ((uLongf)bwrite(&bfd, compress_buf, (size_t)compress_len) != compress_len) { + if ((uLongf)bwrite(&bfd, compress_buf, (size_t)compress_len) != compress_len) { Pmsg0(0, "===Write error===\n"); Emsg2(M_ERROR_TERM, 0, _("Write error on %s: %s\n"), - attr->ofname, strerror(errno)); - } - total += compress_len; - fileAddr += compress_len; + attr->ofname, strerror(errno)); + } + total += compress_len; + fileAddr += compress_len; Dmsg2(100, "Compress len=%d uncompressed=%d\n", rec->data_len, - compress_len); + compress_len); } #else if (extract) { Emsg0(M_ERROR, 0, "GZIP data stream found, but GZIP not configured!\n"); - extract = FALSE; - return; + extract = FALSE; + return; } #endif @@ -415,21 +414,21 @@ extract_data: case STREAM_PROGRAM_DATA: if (!prog_name_msg) { Pmsg0(000, "Got Program Name or Data Stream. Ignored.\n"); - prog_name_msg++; + prog_name_msg++; } break; default: /* If extracting, wierd stream (not 1 or 2), close output file anyway */ if (extract) { - if (!is_bopen(&bfd)) { + if (!is_bopen(&bfd)) { Emsg0(M_ERROR, 0, "Logic error output file should be open but is not.\n"); - } - extract = FALSE; - set_attributes(jcr, attr, &bfd); + } + extract = FALSE; + set_attributes(jcr, attr, &bfd); } Jmsg(jcr, M_ERROR, 0, _("Unknown stream=%d ignored. This shouldn't happen!\n"), - rec->Stream); + rec->Stream); break; } /* end switch */ @@ -439,19 +438,19 @@ extract_data: /* Dummies to replace askdir.c */ -int dir_get_volume_info(JCR *jcr, enum get_vol_info_rw writing) { return 1;} -int dir_find_next_appendable_volume(JCR *jcr) { return 1;} -int dir_update_volume_info(JCR *jcr, VOLUME_CAT_INFO *vol, int relabel) { return 1; } -int dir_create_jobmedia_record(JCR *jcr) { return 1; } -int dir_ask_sysop_to_mount_next_volume(JCR *jcr, DEVICE *dev) { return 1; } -int dir_update_file_attributes(JCR *jcr, DEV_RECORD *rec) { return 1;} -int dir_send_job_status(JCR *jcr) {return 1;} +int dir_get_volume_info(JCR *jcr, enum get_vol_info_rw writing) { return 1;} +int dir_find_next_appendable_volume(JCR *jcr) { return 1;} +int dir_update_volume_info(JCR *jcr, VOLUME_CAT_INFO *vol, int relabel) { return 1; } +int dir_create_jobmedia_record(JCR *jcr) { return 1; } +int dir_ask_sysop_to_mount_next_volume(JCR *jcr, DEVICE *dev) { return 1; } +int dir_update_file_attributes(JCR *jcr, DEV_RECORD *rec) { return 1;} +int dir_send_job_status(JCR *jcr) {return 1;} int dir_ask_sysop_to_mount_volume(JCR *jcr, DEVICE *dev) { fprintf(stderr, "Mount Volume %s on device %s and press return when ready: ", jcr->VolumeName, dev_name(dev)); - getchar(); + getchar(); return 1; } diff --git a/bacula/src/stored/bls.c b/bacula/src/stored/bls.c index f32a9bb30e..9f55aebeda 100644 --- a/bacula/src/stored/bls.c +++ b/bacula/src/stored/bls.c @@ -91,7 +91,7 @@ int main (int argc, char *argv[]) working_directory = "/tmp"; my_name_is(argc, argv, "bls"); - init_msg(NULL, NULL); /* initialize message handler */ + init_msg(NULL, NULL); /* initialize message handler */ memset(&ff, 0, sizeof(ff)); init_include_exclude_files(&ff); @@ -99,73 +99,73 @@ int main (int argc, char *argv[]) while ((ch = getopt(argc, argv, "b:c:d:e:i:jkLtvV:?")) != -1) { switch (ch) { case 'b': - bsrName = optarg; - break; + bsrName = optarg; + break; case 'c': /* specify config file */ - if (configfile != NULL) { - free(configfile); - } - configfile = bstrdup(optarg); - break; + if (configfile != NULL) { + free(configfile); + } + configfile = bstrdup(optarg); + break; case 'd': /* debug level */ - debug_level = atoi(optarg); - if (debug_level <= 0) - debug_level = 1; - break; + debug_level = atoi(optarg); + if (debug_level <= 0) + debug_level = 1; + break; case 'e': /* exclude list */ if ((fd = fopen(optarg, "r")) == NULL) { Pmsg2(0, _("Could not open exclude file: %s, ERR=%s\n"), - optarg, strerror(errno)); - exit(1); - } - while (fgets(line, sizeof(line), fd) != NULL) { - strip_trailing_junk(line); + optarg, strerror(errno)); + exit(1); + } + while (fgets(line, sizeof(line), fd) != NULL) { + strip_trailing_junk(line); Dmsg1(100, "add_exclude %s\n", line); - add_fname_to_exclude_list(&ff, line); - } - fclose(fd); - break; + add_fname_to_exclude_list(&ff, line); + } + fclose(fd); + break; case 'i': /* include list */ if ((fd = fopen(optarg, "r")) == NULL) { Pmsg2(0, "Could not open include file: %s, ERR=%s\n", - optarg, strerror(errno)); - exit(1); - } - while (fgets(line, sizeof(line), fd) != NULL) { - strip_trailing_junk(line); + optarg, strerror(errno)); + exit(1); + } + while (fgets(line, sizeof(line), fd) != NULL) { + strip_trailing_junk(line); Dmsg1(100, "add_include %s\n", line); - add_fname_to_include_list(&ff, 0, line); - } - fclose(fd); - break; + add_fname_to_include_list(&ff, 0, line); + } + fclose(fd); + break; case 'j': - list_jobs = TRUE; - break; + list_jobs = TRUE; + break; case 'k': - list_blocks = TRUE; - break; + list_blocks = TRUE; + break; case 'L': - dump_label = TRUE; - break; + dump_label = TRUE; + break; case 'v': - verbose++; - break; + verbose++; + break; case 'V': /* Volume name */ - VolumeName = optarg; - break; + VolumeName = optarg; + break; case '?': default: - usage(); + usage(); } /* end switch */ } /* end while */ @@ -189,12 +189,12 @@ int main (int argc, char *argv[]) for (i=0; i < argc; i++) { if (bsrName) { - bsr = parse_bsr(NULL, bsrName); + bsr = parse_bsr(NULL, bsrName); } jcr = setup_jcr("bls", argv[i], bsr, VolumeName); dev = setup_to_access_device(jcr, 1); /* acquire for read */ if (!dev) { - exit(1); + exit(1); } rec = new_record(); block = new_block(dev); @@ -206,15 +206,15 @@ int main (int argc, char *argv[]) if (dev->VolHdr.PrevVolName[0] != 0) { /* second volume */ Pmsg1(0, "\n\ Warning, this Volume is a continuation of Volume %s\n", - dev->VolHdr.PrevVolName); + dev->VolHdr.PrevVolName); } if (list_blocks) { - do_blocks(argv[i]); + do_blocks(argv[i]); } else if (list_jobs) { - do_jobs(argv[i]); + do_jobs(argv[i]); } else { - do_ls(argv[i]); + do_ls(argv[i]); } do_close(jcr); } @@ -246,45 +246,45 @@ static void do_blocks(char *infname) for ( ;; ) { if (!read_block_from_device(jcr, dev, block, NO_BLOCK_NUMBER_CHECK)) { Dmsg1(100, "!read_block(): ERR=%s\n", strerror_dev(dev)); - if (dev->state & ST_EOT) { - if (!mount_next_read_volume(jcr, dev, block)) { + if (dev->state & ST_EOT) { + if (!mount_next_read_volume(jcr, dev, block)) { Jmsg(jcr, M_INFO, 0, _("Got EOM at file %u on device %s, Volume \"%s\"\n"), - dev->file, dev_name(dev), jcr->VolumeName); - break; - } - /* Read and discard Volume label */ - DEV_RECORD *record; - record = new_record(); - read_block_from_device(jcr, dev, block, NO_BLOCK_NUMBER_CHECK); - read_record_from_block(block, record); - get_session_record(dev, record, &sessrec); - free_record(record); + dev->file, dev_name(dev), jcr->VolumeName); + break; + } + /* Read and discard Volume label */ + DEV_RECORD *record; + record = new_record(); + read_block_from_device(jcr, dev, block, NO_BLOCK_NUMBER_CHECK); + read_record_from_block(block, record); + get_session_record(dev, record, &sessrec); + free_record(record); Jmsg(jcr, M_INFO, 0, _("Mounted Volume \"%s\".\n"), jcr->VolumeName); - - } else if (dev->state & ST_EOF) { + + } else if (dev->state & 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); + dev->file, dev_name(dev), jcr->VolumeName); Dmsg0(20, "read_record got eof. try again\n"); - continue; - } else if (dev->state & ST_SHORT) { + continue; + } else if (dev->state & ST_SHORT) { Jmsg(jcr, M_INFO, 0, "%s", dev->errmsg); - continue; - } else { - /* I/O error */ - display_tape_error_status(jcr, dev); - break; - } + continue; + } else { + /* I/O error */ + display_tape_error_status(jcr, dev); + break; + } } Dmsg5(100, "Blk=%u blen=%u bVer=%d SessId=%u SessTim=%u\n", - block->BlockNumber, block->block_len, block->BlockVer, - block->VolSessionId, block->VolSessionTime); + block->BlockNumber, block->block_len, block->BlockVer, + block->VolSessionId, block->VolSessionTime); if (verbose == 1) { - read_record_from_block(block, rec); + read_record_from_block(block, rec); Pmsg7(-1, "Block: %u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s rlen=%d\n", - block->BlockNumber, block->block_len, - FI_to_ascii(rec->FileIndex), rec->VolSessionId, rec->VolSessionTime, - stream_to_ascii(rec->Stream, rec->FileIndex), rec->data_len); - rec->remainder = 0; + block->BlockNumber, block->block_len, + FI_to_ascii(rec->FileIndex), rec->VolSessionId, rec->VolSessionTime, + stream_to_ascii(rec->Stream, rec->FileIndex), rec->data_len); + rec->remainder = 0; } else if (verbose > 1) { dump_block(block, ""); } else { @@ -343,14 +343,15 @@ static void record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) if (attr->file_index != rec->FileIndex) { Emsg2(M_ERROR_TERM, 0, _("Record header file index %ld not equal record index %ld\n"), - rec->FileIndex, attr->file_index); + rec->FileIndex, attr->file_index); } decode_stat(attr->attr, &attr->statp, &LinkFI); + build_attr_output_fnames(jcr, attr); if (file_is_included(&ff, attr->fname) && !file_is_excluded(&ff, attr->fname)) { - print_ls_output(jcr, attr); - num_files++; + print_ls_output(jcr, attr); + num_files++; } } return; @@ -364,44 +365,44 @@ static void get_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sess switch (rec->FileIndex) { case PRE_LABEL: rtype = "Fresh Volume Label"; - break; + break; case VOL_LABEL: rtype = "Volume Label"; - unser_volume_label(dev, rec); - break; + unser_volume_label(dev, rec); + break; case SOS_LABEL: rtype = "Begin Session"; - unser_session_label(sessrec, rec); - break; + unser_session_label(sessrec, rec); + break; case EOS_LABEL: rtype = "End Session"; - break; + break; case EOM_LABEL: rtype = "End of Medium"; - break; + break; default: rtype = "Unknown"; - break; + break; } Dmsg5(10, "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n", - rtype, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len); + rtype, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len); } /* Dummies to replace askdir.c */ -int dir_get_volume_info(JCR *jcr, enum get_vol_info_rw writing) { return 1;} -int dir_find_next_appendable_volume(JCR *jcr) { return 1;} -int dir_update_volume_info(JCR *jcr, VOLUME_CAT_INFO *vol, int relabel) { return 1; } -int dir_create_jobmedia_record(JCR *jcr) { return 1; } -int dir_ask_sysop_to_mount_next_volume(JCR *jcr, DEVICE *dev) { return 1; } -int dir_update_file_attributes(JCR *jcr, DEV_RECORD *rec) { return 1;} -int dir_send_job_status(JCR *jcr) {return 1;} +int dir_get_volume_info(JCR *jcr, enum get_vol_info_rw writing) { return 1;} +int dir_find_next_appendable_volume(JCR *jcr) { return 1;} +int dir_update_volume_info(JCR *jcr, VOLUME_CAT_INFO *vol, int relabel) { return 1; } +int dir_create_jobmedia_record(JCR *jcr) { return 1; } +int dir_ask_sysop_to_mount_next_volume(JCR *jcr, DEVICE *dev) { return 1; } +int dir_update_file_attributes(JCR *jcr, DEV_RECORD *rec) { return 1;} +int dir_send_job_status(JCR *jcr) {return 1;} int dir_ask_sysop_to_mount_volume(JCR *jcr, DEVICE *dev) { fprintf(stderr, "Mount Volume \"%s\" on device %s and press return when ready: ", jcr->VolumeName, dev_name(dev)); - getchar(); + getchar(); return 1; } diff --git a/bacula/src/stored/bscan.c b/bacula/src/stored/bscan.c index ceeebe3de1..a31b0f709e 100644 --- a/bacula/src/stored/bscan.c +++ b/bacula/src/stored/bscan.c @@ -38,14 +38,14 @@ static void do_scan(void); static void record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec); static int create_file_attributes_record(B_DB *db, JCR *mjcr, - char *fname, char *lname, int type, - char *ap, DEV_RECORD *rec); + char *fname, char *lname, int type, + char *ap, DEV_RECORD *rec); static int create_media_record(B_DB *db, MEDIA_DBR *mr, VOLUME_LABEL *vl); static int update_media_record(B_DB *db, MEDIA_DBR *mr); static int create_pool_record(B_DB *db, POOL_DBR *pr); static JCR *create_job_record(B_DB *db, JOB_DBR *mr, SESSION_LABEL *label, DEV_RECORD *rec); static int update_job_record(B_DB *db, JOB_DBR *mr, SESSION_LABEL *elabel, - DEV_RECORD *rec); + DEV_RECORD *rec); static int create_client_record(B_DB *db, CLIENT_DBR *cr); static int create_fileset_record(B_DB *db, FILESET_DBR *fsr); static int create_jobmedia_record(B_DB *db, JCR *jcr); @@ -65,7 +65,7 @@ int win32_client = 0; /* Local variables */ static DEVICE *dev = NULL; static B_DB *db; -static JCR *bjcr; /* jcr for bscan */ +static JCR *bjcr; /* jcr for bscan */ static BSR *bsr = NULL; static MEDIA_DBR mr; static POOL_DBR pr; @@ -128,61 +128,61 @@ int main (int argc, char *argv[]) while ((ch = getopt(argc, argv, "b:c:d:mn:p:rsu:vVw:?")) != -1) { switch (ch) { case 'b': - bsr = parse_bsr(NULL, optarg); - break; + bsr = parse_bsr(NULL, optarg); + break; case 'c': /* specify config file */ - if (configfile != NULL) { - free(configfile); - } - configfile = bstrdup(optarg); - break; + if (configfile != NULL) { + free(configfile); + } + configfile = bstrdup(optarg); + break; case 'd': /* debug level */ - debug_level = atoi(optarg); - if (debug_level <= 0) - debug_level = 1; - break; + debug_level = atoi(optarg); + if (debug_level <= 0) + debug_level = 1; + break; case 'm': - update_vol_info = 1; - break; + update_vol_info = 1; + break; case 'n': - db_name = optarg; - break; + db_name = optarg; + break; case 'u': - db_user = optarg; - break; + db_user = optarg; + break; case 'p': - db_password = optarg; - break; + db_password = optarg; + break; case 'r': - list_records = 1; - break; + list_records = 1; + break; case 's': - update_db = 1; - break; + update_db = 1; + break; case 'v': - verbose++; - break; + verbose++; + break; case 'V': /* Volume name */ - VolumeName = optarg; - break; + VolumeName = optarg; + break; case 'w': - wd = optarg; - break; + wd = optarg; + break; case '?': default: - usage(); + usage(); } } @@ -204,7 +204,7 @@ int main (int argc, char *argv[]) if (!me) { UnlockRes(); Emsg1(M_ERROR_TERM, 0, _("No Storage resource defined in %s. Cannot continue.\n"), - configfile); + configfile); } UnlockRes(); /* Check if -w option given, otherwise use resource for working directory */ @@ -212,7 +212,7 @@ int main (int argc, char *argv[]) working_directory = wd; } else if (!me->working_directory) { Emsg1(M_ERROR_TERM, 0, _("No Working Directory defined in %s. Cannot continue.\n"), - configfile); + configfile); } else { working_directory = me->working_directory; } @@ -220,11 +220,11 @@ int main (int argc, char *argv[]) /* Check that working directory is good */ if (stat(working_directory, &stat_buf) != 0) { Emsg1(M_ERROR_TERM, 0, _("Working Directory: %s not found. Cannot continue.\n"), - working_directory); + working_directory); } if (!S_ISDIR(stat_buf.st_mode)) { Emsg1(M_ERROR_TERM, 0, _("Working Directory: %s is not a directory. Cannot continue.\n"), - working_directory); + working_directory); } bjcr = setup_jcr("bscan", argv[0], bsr, VolumeName); @@ -263,15 +263,15 @@ static int bscan_mount_next_read_volume(JCR *jcr, DEVICE *dev, DEV_BLOCK *block) Pmsg1(000, _("Create JobMedia for Job %s\n"), mjcr->Job); } if (dev->state & ST_TAPE) { - mjcr->EndBlock = dev->EndBlock; - mjcr->EndFile = dev->EndFile; + mjcr->EndBlock = dev->EndBlock; + mjcr->EndFile = dev->EndFile; } else { - mjcr->EndBlock = (uint32_t)dev->file_addr; - mjcr->StartBlock = (uint32_t)(dev->file_addr >> 32); + mjcr->EndBlock = (uint32_t)dev->file_addr; + mjcr->StartBlock = (uint32_t)(dev->file_addr >> 32); } if (!create_jobmedia_record(db, mjcr)) { Pmsg2(000, _("Could not create JobMedia record for Volume=%s Job=%s\n"), - dev->VolCatInfo.VolCatName, mjcr->Job); + dev->VolCatInfo.VolCatName, mjcr->Job); } } /* Now let common read routine get up next tape. Note, @@ -284,7 +284,7 @@ static int bscan_mount_next_read_volume(JCR *jcr, DEVICE *dev, DEV_BLOCK *block) return stat; } -static void do_scan() +static void do_scan() { attr = new_attr(); @@ -315,8 +315,8 @@ static void record_cb(JCR *bjcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) } if (list_records) { Pmsg5(000, _("Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n"), - rec->VolSessionId, rec->VolSessionTime, rec->FileIndex, - rec->Stream, rec->data_len); + rec->VolSessionId, rec->VolSessionTime, rec->FileIndex, + rec->Stream, rec->data_len); } /* * Check for Start or End of Session Record @@ -326,210 +326,210 @@ static void record_cb(JCR *bjcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) int save_update_db = update_db; if (verbose > 1) { - dump_label_record(dev, rec, 1); + dump_label_record(dev, rec, 1); } switch (rec->FileIndex) { case PRE_LABEL: Pmsg0(000, _("Volume is prelabeled. This tape cannot be scanned.\n")); - return; - break; + return; + break; case VOL_LABEL: - unser_volume_label(dev, rec); - /* Check Pool info */ - strcpy(pr.Name, dev->VolHdr.PoolName); - strcpy(pr.PoolType, dev->VolHdr.PoolType); - if (db_get_pool_record(bjcr, db, &pr)) { - if (verbose) { + unser_volume_label(dev, rec); + /* Check Pool info */ + strcpy(pr.Name, dev->VolHdr.PoolName); + strcpy(pr.PoolType, dev->VolHdr.PoolType); + if (db_get_pool_record(bjcr, db, &pr)) { + if (verbose) { Pmsg1(000, _("Pool record for %s found in DB.\n"), pr.Name); - } - } else { - if (!update_db) { + } + } else { + if (!update_db) { Pmsg1(000, _("VOL_LABEL: Pool record not found for Pool: %s\n"), - pr.Name); - } - create_pool_record(db, &pr); - } - if (strcmp(pr.PoolType, dev->VolHdr.PoolType) != 0) { + pr.Name); + } + create_pool_record(db, &pr); + } + if (strcmp(pr.PoolType, dev->VolHdr.PoolType) != 0) { Pmsg2(000, _("VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n"), - pr.PoolType, dev->VolHdr.PoolType); - return; - } else if (verbose) { + pr.PoolType, dev->VolHdr.PoolType); + return; + } else if (verbose) { Pmsg1(000, _("Pool type \"%s\" is OK.\n"), pr.PoolType); - } - - /* Check Media Info */ - memset(&mr, 0, sizeof(mr)); - strcpy(mr.VolumeName, dev->VolHdr.VolName); - mr.PoolId = pr.PoolId; - if (db_get_media_record(bjcr, db, &mr)) { - if (verbose) { + } + + /* Check Media Info */ + memset(&mr, 0, sizeof(mr)); + strcpy(mr.VolumeName, dev->VolHdr.VolName); + mr.PoolId = pr.PoolId; + if (db_get_media_record(bjcr, db, &mr)) { + if (verbose) { Pmsg1(000, _("Media record for %s found in DB.\n"), mr.VolumeName); - } - /* Clear out some volume statistics that will be updated */ - mr.VolJobs = mr.VolFiles = mr.VolBlocks = 0; - mr.VolBytes = rec->data_len + 20; - } else { - if (!update_db) { + } + /* Clear out some volume statistics that will be updated */ + mr.VolJobs = mr.VolFiles = mr.VolBlocks = 0; + mr.VolBytes = rec->data_len + 20; + } else { + if (!update_db) { Pmsg1(000, _("VOL_LABEL: Media record not found for Volume: %s\n"), - mr.VolumeName); - } - strcpy(mr.MediaType, dev->VolHdr.MediaType); - create_media_record(db, &mr, &dev->VolHdr); - } - if (strcmp(mr.MediaType, dev->VolHdr.MediaType) != 0) { + mr.VolumeName); + } + strcpy(mr.MediaType, dev->VolHdr.MediaType); + create_media_record(db, &mr, &dev->VolHdr); + } + if (strcmp(mr.MediaType, dev->VolHdr.MediaType) != 0) { Pmsg2(000, _("VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n"), - mr.MediaType, dev->VolHdr.MediaType); - return; - } else if (verbose) { + mr.MediaType, dev->VolHdr.MediaType); + return; + } else if (verbose) { Pmsg1(000, _("Media type \"%s\" is OK.\n"), mr.MediaType); - } - /* Reset some JCR variables */ - for (mjcr=NULL; (mjcr=next_attached_jcr(dev, mjcr)); ) { - mjcr->VolFirstIndex = mjcr->FileIndex = 0; - mjcr->StartBlock = mjcr->EndBlock = 0; - mjcr->StartFile = mjcr->EndFile = 0; - } + } + /* Reset some JCR variables */ + for (mjcr=NULL; (mjcr=next_attached_jcr(dev, mjcr)); ) { + mjcr->VolFirstIndex = mjcr->FileIndex = 0; + mjcr->StartBlock = mjcr->EndBlock = 0; + mjcr->StartFile = mjcr->EndFile = 0; + } Pmsg1(000, _("VOL_LABEL: OK for Volume: %s\n"), mr.VolumeName); - break; + break; case SOS_LABEL: - mr.VolJobs++; - if (ignored_msgs > 0) { + mr.VolJobs++; + if (ignored_msgs > 0) { Pmsg1(000, _("%d \"errors\" ignored before first Start of Session record.\n"), - ignored_msgs); - ignored_msgs = 0; - } - unser_session_label(&label, rec); - memset(&jr, 0, sizeof(jr)); - jr.JobId = label.JobId; - if (db_get_job_record(bjcr, db, &jr)) { - /* Job record already exists in DB */ + ignored_msgs); + ignored_msgs = 0; + } + unser_session_label(&label, rec); + memset(&jr, 0, sizeof(jr)); + jr.JobId = label.JobId; + if (db_get_job_record(bjcr, db, &jr)) { + /* Job record already exists in DB */ update_db = 0; /* don't change db in create_job_record */ - if (verbose) { + if (verbose) { Pmsg1(000, _("SOS_LABEL: Found Job record for JobId: %d\n"), jr.JobId); - } - } else { - /* Must create a Job record in DB */ - if (!update_db) { + } + } else { + /* Must create a Job record in DB */ + if (!update_db) { Pmsg1(000, _("SOS_LABEL: Job record not found for JobId: %d\n"), - jr.JobId); - } - } - /* Create Client record if not already there */ - strcpy(cr.Name, label.ClientName); - create_client_record(db, &cr); - jr.ClientId = cr.ClientId; + jr.JobId); + } + } + /* Create Client record if not already there */ + strcpy(cr.Name, label.ClientName); + create_client_record(db, &cr); + jr.ClientId = cr.ClientId; /* process label, if Job record exists don't update db */ - mjcr = create_job_record(db, &jr, &label, rec); - update_db = save_update_db; - - jr.PoolId = pr.PoolId; - /* Set start positions into JCR */ - if (dev->state & ST_TAPE) { - mjcr->StartBlock = dev->block_num; - mjcr->StartFile = dev->file; - } else { - mjcr->StartBlock = (uint32_t)dev->file_addr; - mjcr->StartFile = (uint32_t)(dev->file_addr >> 32); - } - mjcr->start_time = jr.StartTime; - mjcr->JobLevel = jr.Level; - - mjcr->client_name = get_pool_memory(PM_FNAME); - pm_strcpy(&mjcr->client_name, label.ClientName); - mjcr->pool_type = get_pool_memory(PM_FNAME); - pm_strcpy(&mjcr->pool_type, label.PoolType); - mjcr->fileset_name = get_pool_memory(PM_FNAME); - pm_strcpy(&mjcr->fileset_name, label.FileSetName); - mjcr->pool_name = get_pool_memory(PM_FNAME); - pm_strcpy(&mjcr->pool_name, label.PoolName); - - if (rec->VolSessionId != jr.VolSessionId) { + mjcr = create_job_record(db, &jr, &label, rec); + update_db = save_update_db; + + jr.PoolId = pr.PoolId; + /* Set start positions into JCR */ + if (dev->state & ST_TAPE) { + mjcr->StartBlock = dev->block_num; + mjcr->StartFile = dev->file; + } else { + mjcr->StartBlock = (uint32_t)dev->file_addr; + mjcr->StartFile = (uint32_t)(dev->file_addr >> 32); + } + mjcr->start_time = jr.StartTime; + mjcr->JobLevel = jr.Level; + + mjcr->client_name = get_pool_memory(PM_FNAME); + pm_strcpy(&mjcr->client_name, label.ClientName); + mjcr->pool_type = get_pool_memory(PM_FNAME); + pm_strcpy(&mjcr->pool_type, label.PoolType); + mjcr->fileset_name = get_pool_memory(PM_FNAME); + pm_strcpy(&mjcr->fileset_name, label.FileSetName); + mjcr->pool_name = get_pool_memory(PM_FNAME); + pm_strcpy(&mjcr->pool_name, label.PoolName); + + if (rec->VolSessionId != jr.VolSessionId) { Pmsg3(000, _("SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n"), - jr.JobId, - jr.VolSessionId, rec->VolSessionId); - return; - } - if (rec->VolSessionTime != jr.VolSessionTime) { + jr.JobId, + jr.VolSessionId, rec->VolSessionId); + return; + } + if (rec->VolSessionTime != jr.VolSessionTime) { Pmsg3(000, _("SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n"), - jr.JobId, - jr.VolSessionTime, rec->VolSessionTime); - return; - } - if (jr.PoolId != pr.PoolId) { + jr.JobId, + jr.VolSessionTime, rec->VolSessionTime); + return; + } + if (jr.PoolId != pr.PoolId) { Pmsg3(000, _("SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n"), - jr.JobId, - jr.PoolId, pr.PoolId); - return; - } - break; + jr.JobId, + jr.PoolId, pr.PoolId); + return; + } + break; case EOS_LABEL: - unser_session_label(&elabel, rec); + unser_session_label(&elabel, rec); - /* Create FileSet record */ - strcpy(fsr.FileSet, label.FileSetName); - strcpy(fsr.MD5, label.FileSetMD5); - create_fileset_record(db, &fsr); - jr.FileSetId = fsr.FileSetId; + /* Create FileSet record */ + strcpy(fsr.FileSet, label.FileSetName); + strcpy(fsr.MD5, label.FileSetMD5); + create_fileset_record(db, &fsr); + jr.FileSetId = fsr.FileSetId; - mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime); - if (!mjcr) { + mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime); + if (!mjcr) { Pmsg2(000, _("Could not find SessId=%d SessTime=%d for EOS record.\n"), - rec->VolSessionId, rec->VolSessionTime); - break; - } + rec->VolSessionId, rec->VolSessionTime); + break; + } - /* Do the final update to the Job record */ - update_job_record(db, &jr, &elabel, rec); + /* Do the final update to the Job record */ + update_job_record(db, &jr, &elabel, rec); - mjcr->end_time = jr.EndTime; - mjcr->JobStatus = JS_Terminated; + mjcr->end_time = jr.EndTime; + mjcr->JobStatus = JS_Terminated; - /* Create JobMedia record */ - create_jobmedia_record(db, mjcr); - detach_jcr_from_device(dev, mjcr); - free_jcr(mjcr); + /* Create JobMedia record */ + create_jobmedia_record(db, mjcr); + detach_jcr_from_device(dev, mjcr); + free_jcr(mjcr); - break; + break; case EOM_LABEL: - break; - - case EOT_LABEL: /* end of all tapes */ - /* - * Wiffle through all jobs still open and close - * them. - */ - if (update_db) { - for (mjcr=NULL; (mjcr=next_attached_jcr(dev, mjcr)); ) { - jr.JobId = mjcr->JobId; - jr.JobStatus = JS_ErrorTerminated; - jr.JobFiles = mjcr->JobFiles; - jr.JobBytes = mjcr->JobBytes; - jr.VolSessionId = mjcr->VolSessionId; - jr.VolSessionTime = mjcr->VolSessionTime; - jr.JobTDate = (utime_t)mjcr->start_time; - jr.ClientId = mjcr->ClientId; - free_jcr(mjcr); - if (!db_update_job_end_record(bjcr, db, &jr)) { + break; + + case EOT_LABEL: /* end of all tapes */ + /* + * Wiffle through all jobs still open and close + * them. + */ + if (update_db) { + for (mjcr=NULL; (mjcr=next_attached_jcr(dev, mjcr)); ) { + jr.JobId = mjcr->JobId; + jr.JobStatus = JS_ErrorTerminated; + jr.JobFiles = mjcr->JobFiles; + jr.JobBytes = mjcr->JobBytes; + jr.VolSessionId = mjcr->VolSessionId; + jr.VolSessionTime = mjcr->VolSessionTime; + jr.JobTDate = (utime_t)mjcr->start_time; + jr.ClientId = mjcr->ClientId; + free_jcr(mjcr); + if (!db_update_job_end_record(bjcr, db, &jr)) { Pmsg1(0, _("Could not update job record. ERR=%s\n"), db_strerror(db)); - } - } - } - mr.VolFiles = rec->File; - mr.VolBlocks = rec->Block; - mr.VolBytes += mr.VolBlocks * WRITE_BLKHDR_LENGTH; /* approx. */ - mr.VolMounts++; - update_media_record(db, &mr); + } + } + } + mr.VolFiles = rec->File; + mr.VolBlocks = rec->Block; + mr.VolBytes += mr.VolBlocks * WRITE_BLKHDR_LENGTH; /* approx. */ + mr.VolMounts++; + update_media_record(db, &mr); Pmsg3(0, _("End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n"), mr.VolFiles, - mr.VolBlocks, edit_uint64_with_commas(mr.VolBytes, ec1)); - break; + mr.VolBlocks, edit_uint64_with_commas(mr.VolBytes, ec1)); + break; default: - break; + break; } /* end switch */ return; } @@ -546,33 +546,34 @@ static void record_cb(JCR *bjcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) if (attr->file_index != rec->FileIndex) { Emsg2(M_ERROR_TERM, 0, _("Record header file index %ld not equal record index %ld\n"), - rec->FileIndex, attr->file_index); + rec->FileIndex, attr->file_index); } if (verbose > 1) { - uint32_t LinkFI; - decode_stat(attr->attr, &attr->statp, &LinkFI); - print_ls_output(bjcr, attr); + uint32_t LinkFI; + decode_stat(attr->attr, &attr->statp, &LinkFI); + build_attr_output_fnames(bjcr, attr); + print_ls_output(bjcr, attr); } mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime); if (!mjcr) { - if (mr.VolJobs > 0) { + if (mr.VolJobs > 0) { Pmsg2(000, _("Could not find Job SessId=%d SessTime=%d for Attributes record.\n"), - rec->VolSessionId, rec->VolSessionTime); - } else { - ignored_msgs++; - } - return; + rec->VolSessionId, rec->VolSessionTime); + } else { + ignored_msgs++; + } + return; } fr.JobId = mjcr->JobId; fr.FileId = 0; if (db_get_file_attributes_record(bjcr, db, attr->fname, &fr)) { - if (verbose > 1) { + if (verbose > 1) { Pmsg1(000, _("File record already exists for: %s\n"), attr->fname); - } + } } else { - create_file_attributes_record(db, mjcr, attr->fname, attr->lname, - attr->type, attr->attr, rec); + create_file_attributes_record(db, mjcr, attr->fname, attr->lname, + attr->type, attr->attr, rec); } free_jcr(mjcr); break; @@ -583,66 +584,66 @@ static void record_cb(JCR *bjcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) case STREAM_SPARSE_DATA: mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime); if (!mjcr) { - if (mr.VolJobs > 0) { + if (mr.VolJobs > 0) { Pmsg2(000, _("Could not find Job SessId=%d SessTime=%d for File Data record.\n"), - rec->VolSessionId, rec->VolSessionTime); - } else { - ignored_msgs++; - } - return; + rec->VolSessionId, rec->VolSessionTime); + } else { + ignored_msgs++; + } + return; } mjcr->JobBytes += rec->data_len; if (rec->Stream == STREAM_SPARSE_DATA) { - mjcr->JobBytes -= sizeof(uint64_t); + mjcr->JobBytes -= sizeof(uint64_t); } - - free_jcr(mjcr); /* done using JCR */ + + free_jcr(mjcr); /* done using JCR */ break; case STREAM_GZIP_DATA: mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime); if (!mjcr) { - if (mr.VolJobs > 0) { + if (mr.VolJobs > 0) { Pmsg2(000, _("Could not find Job SessId=%d SessTime=%d for GZIP Data record.\n"), - rec->VolSessionId, rec->VolSessionTime); - } else { - ignored_msgs++; - } - return; + rec->VolSessionId, rec->VolSessionTime); + } else { + ignored_msgs++; + } + return; } mjcr->JobBytes += rec->data_len; /* No correct, we should expand it */ - free_jcr(mjcr); /* done using JCR */ + free_jcr(mjcr); /* done using JCR */ break; case STREAM_SPARSE_GZIP_DATA: mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime); if (!mjcr) { - if (mr.VolJobs > 0) { + if (mr.VolJobs > 0) { Pmsg2(000, _("Could not find Job SessId=%d SessTime=%d for Sparse GZIP Data record.\n"), - rec->VolSessionId, rec->VolSessionTime); - } else { - ignored_msgs++; - } - return; + rec->VolSessionId, rec->VolSessionTime); + } else { + ignored_msgs++; + } + return; } mjcr->JobBytes += rec->data_len - sizeof(uint64_t); /* No correct, we should expand it */ - free_jcr(mjcr); /* done using JCR */ + free_jcr(mjcr); /* done using JCR */ break; /* Win32 GZIP stream */ case STREAM_WIN32_GZIP_DATA: mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime); if (!mjcr) { - if (mr.VolJobs > 0) { + if (mr.VolJobs > 0) { Pmsg2(000, _("Could not find Job SessId=%d SessTime=%d for Win32 GZIP Data record.\n"), - rec->VolSessionId, rec->VolSessionTime); - } else { - ignored_msgs++; - } - return; + rec->VolSessionId, rec->VolSessionTime); + } else { + ignored_msgs++; + } + return; } mjcr->JobBytes += rec->data_len; - free_jcr(mjcr); /* done using JCR */ + free_jcr(mjcr); /* done using JCR */ break; case STREAM_MD5_SIGNATURE: @@ -710,8 +711,8 @@ static void dird_free_jcr(JCR *jcr) * record, and then create the attributes record. */ static int create_file_attributes_record(B_DB *db, JCR *mjcr, - char *fname, char *lname, int type, - char *ap, DEV_RECORD *rec) + char *fname, char *lname, int type, + char *ap, DEV_RECORD *rec) { ar.fname = fname; @@ -866,8 +867,8 @@ static int create_fileset_record(B_DB *db, FILESET_DBR *fsr) } else { if (!db_create_fileset_record(bjcr, db, fsr)) { Pmsg2(0, _("Could not create FileSet record \"%s\". ERR=%s\n"), - fsr->FileSet, db_strerror(db)); - return 0; + fsr->FileSet, db_strerror(db)); + return 0; } if (verbose) { Pmsg1(000, _("Created FileSet record \"%s\"\n"), fsr->FileSet); @@ -882,7 +883,7 @@ static int create_fileset_record(B_DB *db, FILESET_DBR *fsr) * begins running. */ static JCR *create_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *label, - DEV_RECORD *rec) + DEV_RECORD *rec) { JCR *mjcr; struct date_time dt; @@ -927,8 +928,8 @@ static JCR *create_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *label, return mjcr; } Pmsg2(000, _("Created new JobId=%u record for original JobId=%u\n"), jr->JobId, - label->JobId); - mjcr->JobId = jr->JobId; /* set new JobId */ + label->JobId); + mjcr->JobId = jr->JobId; /* set new JobId */ return mjcr; } @@ -937,7 +938,7 @@ static JCR *create_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *label, * at Job termination time. */ static int update_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *elabel, - DEV_RECORD *rec) + DEV_RECORD *rec) { struct date_time dt; struct tm tm; @@ -946,7 +947,7 @@ static int update_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *elabel, mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime); if (!mjcr) { Pmsg2(000, _("Could not find SessId=%d SessTime=%d for EOS record.\n"), - rec->VolSessionId, rec->VolSessionTime); + rec->VolSessionId, rec->VolSessionTime); return 0; } if (elabel->VerNum >= 11) { @@ -992,18 +993,18 @@ static int update_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *elabel, switch (mjcr->JobStatus) { case JS_Terminated: term_msg = _("Backup OK"); - break; + break; case JS_FatalError: case JS_ErrorTerminated: term_msg = _("*** Backup Error ***"); - break; + break; case JS_Canceled: term_msg = _("Backup Canceled"); - break; + break; default: - term_msg = term_code; + term_msg = term_code; sprintf(term_code, _("Job Termination code: %d"), mjcr->JobStatus); - break; + break; } bstrftime(sdt, sizeof(sdt), mjcr->start_time); bstrftime(edt, sizeof(edt), mjcr->end_time); @@ -1021,20 +1022,20 @@ Volume Session Id: %d\n\ Volume Session Time: %d\n\ Last Volume Bytes: %s\n\ Termination: %s\n\n"), - edt, - mjcr->JobId, - mjcr->Job, - mjcr->fileset_name, - job_level_to_str(mjcr->JobLevel), - mjcr->client_name, - sdt, - edt, - edit_uint64_with_commas(mjcr->JobFiles, ec1), - edit_uint64_with_commas(mjcr->JobBytes, ec2), - mjcr->VolSessionId, - mjcr->VolSessionTime, - edit_uint64_with_commas(mr.VolBytes, ec3), - term_msg); + edt, + mjcr->JobId, + mjcr->Job, + mjcr->fileset_name, + job_level_to_str(mjcr->JobLevel), + mjcr->client_name, + sdt, + edt, + edit_uint64_with_commas(mjcr->JobFiles, ec1), + edit_uint64_with_commas(mjcr->JobBytes, ec2), + mjcr->VolSessionId, + mjcr->VolSessionTime, + edit_uint64_with_commas(mr.VolBytes, ec3), + term_msg); } free_jcr(mjcr); return 1; @@ -1073,7 +1074,7 @@ static int create_jobmedia_record(B_DB *db, JCR *mjcr) } if (verbose) { Pmsg2(000, _("Created JobMedia record JobId %d, MediaId %d\n"), - jmr.JobId, jmr.MediaId); + jmr.JobId, jmr.MediaId); } return 1; } @@ -1089,9 +1090,9 @@ static int update_SIG_record(B_DB *db, char *SIGbuf, DEV_RECORD *rec, int type) if (!mjcr) { if (mr.VolJobs > 0) { Pmsg2(000, _("Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n"), - rec->VolSessionId, rec->VolSessionTime); + rec->VolSessionId, rec->VolSessionTime); } else { - ignored_msgs++; + ignored_msgs++; } return 0; } @@ -1122,7 +1123,7 @@ static JCR *create_jcr(JOB_DBR *jr, DEV_RECORD *rec, uint32_t JobId) JCR *jobjcr; /* * Transfer as much as possible to the Job JCR. Most important is - * the JobId and the ClientId. + * the JobId and the ClientId. */ jobjcr = new_jcr(sizeof(JCR), dird_free_jcr); jobjcr->JobType = jr->Type; @@ -1140,19 +1141,19 @@ static JCR *create_jcr(JOB_DBR *jr, DEV_RECORD *rec, uint32_t JobId) } /* Dummies to replace askdir.c */ -int dir_get_volume_info(JCR *jcr, enum get_vol_info_rw writing) { return 1;} -int dir_find_next_appendable_volume(JCR *jcr) { return 1;} -int dir_update_volume_info(JCR *jcr, VOLUME_CAT_INFO *vol, int relabel) { return 1; } -int dir_create_jobmedia_record(JCR *jcr) { return 1; } -int dir_ask_sysop_to_mount_next_volume(JCR *jcr, DEVICE *dev) { return 1; } -int dir_update_file_attributes(JCR *jcr, DEV_RECORD *rec) { return 1;} -int dir_send_job_status(JCR *jcr) {return 1;} +int dir_get_volume_info(JCR *jcr, enum get_vol_info_rw writing) { return 1;} +int dir_find_next_appendable_volume(JCR *jcr) { return 1;} +int dir_update_volume_info(JCR *jcr, VOLUME_CAT_INFO *vol, int relabel) { return 1; } +int dir_create_jobmedia_record(JCR *jcr) { return 1; } +int dir_ask_sysop_to_mount_next_volume(JCR *jcr, DEVICE *dev) { return 1; } +int dir_update_file_attributes(JCR *jcr, DEV_RECORD *rec) { return 1;} +int dir_send_job_status(JCR *jcr) {return 1;} int dir_ask_sysop_to_mount_volume(JCR *jcr, DEVICE *dev) { fprintf(stderr, _("Mount Volume %s on device %s and press return when ready: "), jcr->VolumeName, dev_name(dev)); - getchar(); + getchar(); return 1; } diff --git a/bacula/src/stored/match_bsr.c b/bacula/src/stored/match_bsr.c index da72874d59..3b6d0f6f47 100755 --- a/bacula/src/stored/match_bsr.c +++ b/bacula/src/stored/match_bsr.c @@ -287,9 +287,6 @@ static int match_sessid(BSR *bsr, BSR_SESSID *sessid, DEV_RECORD *rec, int done) if (sessid->sessid <= rec->VolSessionId && sessid->sessid2 >= rec->VolSessionId) { return 1; } - if (rec->VolSessionId > sessid->sessid2) { - sessid->done = 1; - } if (sessid->next) { return match_sessid(bsr, sessid->next, rec, sessid->done && done); } diff --git a/bacula/src/stored/read_record.c b/bacula/src/stored/read_record.c index 4f5c676d41..a3c8858b5d 100644 --- a/bacula/src/stored/read_record.c +++ b/bacula/src/stored/read_record.c @@ -112,7 +112,8 @@ int read_records(JCR *jcr, DEVICE *dev, } } if (verbose) { - Dmsg2(10, "Block: %d blen=%d\n", block->BlockNumber, block->block_len); + Dmsg4(000, "Block: %d VI=%u VT=%u blen=%d\n", block->BlockNumber, + block->VolSessionId, block->VolSessionTime, block->block_len); } next_record: -- 2.39.5