]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/btape.c
kes Move the checking of the database in initializion of the Director
[bacula/bacula] / bacula / src / stored / btape.c
index 8c7f3de857d97861cd6e6a0dc06fc8b99bfe4228..d2056e2a028c736484e029b9504eef74f2bc7d0a 100644 (file)
@@ -92,7 +92,6 @@ static bool my_mount_next_read_volume(DCR *dcr);
 static void scan_blocks();
 static void set_volume_name(const char *VolName, int volnum);
 static void rawfill_cmd();
-static void bfill_cmd();
 static bool open_the_device();
 static void autochangercmd();
 static void do_unfill();
@@ -727,14 +726,14 @@ static int re_read_block_test()
       Pmsg1(0, _("Wrote third record of %d bytes.\n"), rec->data_len);
    }
    weofcmd();
-   if (dev_cap(dev, CAP_TWOEOF)) {
+   if (dev->has_cap(CAP_TWOEOF)) {
       weofcmd();
    }
    if (!dev->bsf(1)) {
       Pmsg1(0, _("Backspace file failed! ERR=%s\n"), dev->bstrerror());
       goto bail_out;
    }
-   if (dev_cap(dev, CAP_TWOEOF)) {
+   if (dev->has_cap(CAP_TWOEOF)) {
       if (!dev->bsf(1)) {
          Pmsg1(0, _("Backspace file failed! ERR=%s\n"), dev->bstrerror());
          goto bail_out;
@@ -752,7 +751,7 @@ static int re_read_block_test()
       goto bail_out;
    }
    memset(rec->data, 0, rec->data_len);
-   if (!read_record_from_block(block, rec)) {
+   if (!read_record_from_block(dcr, block, rec)) {
       berrno be;
       Pmsg1(0, _("Read block failed! ERR=%s\n"), be.strerror(dev->dev_errno));
       goto bail_out;
@@ -841,7 +840,7 @@ static int write_read_test()
    }
    Pmsg1(0, _("Wrote 1000 blocks of %d bytes.\n"), rec->data_len);
    weofcmd();
-   if (dev_cap(dev, CAP_TWOEOF)) {
+   if (dev->has_cap(CAP_TWOEOF)) {
       weofcmd();
    }
    if (!dev->rewind(dcr)) {
@@ -864,7 +863,7 @@ read_again:
          goto bail_out;
       }
       memset(rec->data, 0, rec->data_len);
-      if (!read_record_from_block(block, rec)) {
+      if (!read_record_from_block(dcr, block, rec)) {
          berrno be;
          Pmsg2(0, _("Read record failed. Block %d! ERR=%s\n"), i, be.strerror(dev->dev_errno));
          goto bail_out;
@@ -953,7 +952,7 @@ static int position_test()
    }
    Pmsg1(0, _("Wrote 1000 blocks of %d bytes.\n"), rec->data_len);
    weofcmd();
-   if (dev_cap(dev, CAP_TWOEOF)) {
+   if (dev->has_cap(CAP_TWOEOF)) {
       weofcmd();
    }
    if (!dev->rewind(dcr)) {
@@ -1031,7 +1030,7 @@ read_again:
          goto bail_out;
       }
       memset(rec->data, 0, rec->data_len);
-      if (!read_record_from_block(block, rec)) {
+      if (!read_record_from_block(dcr, block, rec)) {
          berrno be;
          Pmsg1(0, _("Read record failed! ERR=%s\n"), be.strerror(dev->dev_errno));
          goto bail_out;
@@ -1081,7 +1080,7 @@ static int append_test()
    wrcmd();
    wrcmd();
    weofcmd();     /* end file 2 */
-   if (dev_cap(dev, CAP_TWOEOF)) {
+   if (dev->has_cap(CAP_TWOEOF)) {
       weofcmd();
    }
    dev->close();              /* release device */
@@ -1101,7 +1100,7 @@ static int append_test()
    Pmsg0(-1, _("\nNow the important part, I am going to attempt to append to the tape.\n\n"));
    wrcmd();
    weofcmd();
-   if (dev_cap(dev, CAP_TWOEOF)) {
+   if (dev->has_cap(CAP_TWOEOF)) {
       weofcmd();
    }
    rewindcmd();
@@ -1130,7 +1129,7 @@ static int autochanger_test()
    int sleep_time = 0;
 
    Dmsg1(100, "Max changer wait = %d sec\n", timeout);
-   if (!dev_cap(dev, CAP_AUTOCHANGER)) {
+   if (!dev->has_cap(CAP_AUTOCHANGER)) {
       return 1;
    }
    if (!(dcr->device && dcr->device->changer_name && dcr->device->changer_command)) {
@@ -1297,7 +1296,7 @@ static int fsf_test()
    weofcmd();     /* end file 3 */
    wrcmd();
    weofcmd();     /* end file 4 */
-   if (dev_cap(dev, CAP_TWOEOF)) {
+   if (dev->has_cap(CAP_TWOEOF)) {
       weofcmd();
    }
 
@@ -1360,10 +1359,10 @@ test_again:
 
 bail_out:
    Pmsg0(-1, _("\nThe forward space file test failed.\n"));
-   if (dev_cap(dev, CAP_FASTFSF)) {
+   if (dev->has_cap(CAP_FASTFSF)) {
       Pmsg0(-1, _("You have Fast Forward Space File enabled.\n"
               "I am turning it off then retrying the test.\n"));
-      dev->capabilities &= ~CAP_FASTFSF;
+      dev->clear_cap(CAP_FASTFSF);
       set_off = true;
       goto test_again;
    }
@@ -1398,13 +1397,13 @@ static void testcmd()
       goto all_done;
    }
    if (stat == -1) {                  /* first test failed */
-      if (dev_cap(dev, CAP_EOM) || dev_cap(dev, CAP_FASTFSF)) {
+      if (dev->has_cap(CAP_EOM) || dev->has_cap(CAP_FASTFSF)) {
          Pmsg0(-1, _("\nAppend test failed. Attempting again.\n"
                    "Setting \"Hardware End of Medium = no\n"
                    "    and \"Fast Forward Space File = no\n"
                    "and retrying append test.\n\n"));
-         dev->capabilities &= ~CAP_EOM; /* turn off eom */
-         dev->capabilities &= ~CAP_FASTFSF; /* turn off fast fsf */
+         dev->clear_cap(CAP_EOM);      /* turn off eom */
+         dev->clear_cap(CAP_FASTFSF);  /* turn off fast fsf */
          stat = append_test();
          if (stat == 1) {
             Pmsg0(-1, _("\n\nIt looks like the test worked this time, please add:\n\n"
@@ -1595,7 +1594,7 @@ static void rrcmd()
       len = 1024;
    }
    buf = (char *)malloc(len);
-   stat = read(dev->fd, buf, len);
+   stat = read(dev->fd(), buf, len);
    if (stat > 0 && stat <= len) {
       errno = 0;
    }
@@ -1630,7 +1629,7 @@ static void scancmd()
    tot_files = dev->file;
    Pmsg1(0, _("Starting scan at file %u\n"), dev->file);
    for (;;) {
-      if ((stat = read(dev->fd, buf, sizeof(buf))) < 0) {
+      if ((stat = read(dev->fd(), buf, sizeof(buf))) < 0) {
          berrno be;
          dev->clrerror(-1);
          Mmsg2(dev->errmsg, _("read error on %s. ERR=%s.\n"),
@@ -1774,7 +1773,7 @@ static void scan_blocks()
          block->VolSessionId, block->VolSessionTime);
       if (verbose == 1) {
          DEV_RECORD *rec = new_record();
-         read_record_from_block(block, rec);
+         read_record_from_block(dcr, block, rec);
          Pmsg8(-1, _("Blk_block: %u dev_blk=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s rlen=%d\n"),
               block->BlockNumber, dev->block_num, block->block_len,
               FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, rec->VolSessionTime,
@@ -2120,8 +2119,8 @@ static void do_unfill()
    LastBlock = 0;
 
    Dmsg0(20, "Enter do_unfill\n");
-   dev->capabilities |= CAP_ANONVOLS; /* allow reading any volume */
-   dev->capabilities &= ~CAP_LABEL;   /* don't label anything here */
+   dev->set_cap(CAP_ANONVOLS);        /* allow reading any volume */
+   dev->clear_cap(CAP_LABEL);         /* don't label anything here */
 
    end_of_tape = 0;
 
@@ -2152,7 +2151,7 @@ static void do_unfill()
    if (!simple) {
       /* Multiple Volume tape */
       /* Close device so user can use autochanger if desired */
-      if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) {
+      if (dev->has_cap(CAP_OFFLINEUNMOUNT)) {
          dev->offline();
       }
       autochanger = autoload_device(dcr, 1, NULL);
@@ -2211,7 +2210,7 @@ static void do_unfill()
 
    /* Multiple Volume tape */
    /* Close device so user can use autochanger if desired */
-   if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) {
+   if (dev->has_cap(CAP_OFFLINEUNMOUNT)) {
       dev->offline();
    }
 
@@ -2457,7 +2456,7 @@ static void qfillcmd()
    }
    printf("\n");
    weofcmd();
-   if (dev_cap(dev, CAP_TWOEOF)) {
+   if (dev->has_cap(CAP_TWOEOF)) {
       weofcmd();
    }
    rewindcmd();
@@ -2496,9 +2495,9 @@ static void rawfill_cmd()
    for ( ;; ) {
       *p = block_num;
       if (dev->is_tape()) {
-         stat = tape_write(dev->fd, block->buf, block->buf_len);
+         stat = tape_write(dev->fd(), block->buf, block->buf_len);
       } else {
-         stat = write(dev->fd, block->buf, block->buf_len);
+         stat = write(dev->fd(), block->buf, block->buf_len);
       }
       if (stat == (int)block->buf_len) {
          if ((block_num++ % 100) == 0) {
@@ -2522,60 +2521,12 @@ static void rawfill_cmd()
 }
 
 
-/*
- * Fill a tape using Bacula block writes
- */
-static void bfill_cmd()
-{
-   DEV_BLOCK *block = dcr->block;
-   uint32_t block_num = 0;
-   uint32_t *p;
-   int my_errno;
-   int fd;
-   uint32_t i;
-
-   fd = open("/dev/urandom", O_RDONLY);
-   if (fd) {
-      read(fd, block->buf, block->buf_len);
-      close(fd);
-   } else {
-      uint32_t *p = (uint32_t *)block->buf;
-      srandom(time(NULL));
-      for (i=0; i<block->buf_len/sizeof(uint32_t); i++) {
-         p[i] = random();
-      }
-   }
-   p = (uint32_t *)block->buf;
-   Pmsg1(0, _("Begin writing Bacula blocks of %u bytes.\n"), block->buf_len);
-   for ( ;; ) {
-      *p = block_num;
-      block->binbuf = block->buf_len;
-      block->bufp = block->buf + block->binbuf;
-      if (!write_block_to_dev(dcr)) {
-         break;
-      }
-      if ((block_num++ % 100) == 0) {
-         printf("+");
-         fflush(stdout);
-      }
-      p[0] += p[13];
-      for (i=1; i<(block->buf_len/sizeof(uint32_t)-1); i++) {
-         p[i] += p[i-1];
-      }
-   }
-   my_errno = errno;
-   printf("\n");
-   printf(_("Write failed at block %u.\n"), block_num);
-   weofcmd();
-}
-
 
 struct cmdstruct { const char *key; void (*func)(); const char *help; };
 static struct cmdstruct commands[] = {
  {NT_("autochanger"),autochangercmd, _("test autochanger")},
  {NT_("bsf"),       bsfcmd,       _("backspace file")},
  {NT_("bsr"),       bsrcmd,       _("backspace record")},
- {NT_("bfill"),     bfill_cmd,    _("fill tape using Bacula writes")},
  {NT_("cap"),       capcmd,       _("list device capabilities")},
  {NT_("clear"),     clearcmd,     _("clear tape errors")},
  {NT_("eod"),       eodcmd,       _("go to end of Bacula data for append")},
@@ -2621,7 +2572,7 @@ do_tape_cmds()
             break;
          }
       if (!found) {
-         Pmsg1(0, _("\"%s\" is an illegal command\n"), cmd);
+         Pmsg1(0, _("\"%s\" is an invalid command\n"), cmd);
       }
    }
 }
@@ -2650,7 +2601,7 @@ PROG_COPYRIGHT
 "       -s          turn off signals\n"
 "       -v          be verbose\n"
 "       -?          print this message.\n"
-"\n"), BYEAR, VERSION, BDATE);
+"\n"), 2000, VERSION, BDATE);
 
 }
 
@@ -2748,7 +2699,7 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr)
       set_volume_name("TestVolume2", 2);
    }
    /* Close device so user can use autochanger if desired */
-   if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) {
+   if (dev->has_cap(CAP_OFFLINEUNMOUNT)) {
       dev->offline();
    }
    autochanger = autoload_device(dcr, 1, NULL);