]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Cleanup of code in SD that sets the LastWritten date. This doesn't
authorKern Sibbald <kern@sibbald.com>
Sun, 4 Nov 2007 19:57:42 +0000 (19:57 +0000)
committerKern Sibbald <kern@sibbald.com>
Sun, 4 Nov 2007 19:57:42 +0000 (19:57 +0000)
     really change anything, but is the beginning of doing it *right*.
     To do it completely right the LastWritten date must be passed to
     the SD, but it is not yet done.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5852 91ce42f0-d328-0410-95d8-f526ca767f89

17 files changed:
bacula/src/dird/catreq.c
bacula/src/stored/acquire.c
bacula/src/stored/askdir.c
bacula/src/stored/bcopy.c
bacula/src/stored/bextract.c
bacula/src/stored/block.c
bacula/src/stored/bls.c
bacula/src/stored/bscan.c
bacula/src/stored/btape.c
bacula/src/stored/dev.h
bacula/src/stored/device.c
bacula/src/stored/dvd.c
bacula/src/stored/label.c
bacula/src/stored/mount.c
bacula/src/stored/protos.h
bacula/src/version.h
bacula/technotes-2.3

index cc1903615f8ea585503b65f9d0e8d53060a7150b..709707069d2046430a7390bbf04d548e6ab04e5a 100644 (file)
@@ -54,10 +54,10 @@ static char Find_media[] = "CatReq Job=%127s FindMedia=%d pool_name=%127s media_
 static char Get_Vol_Info[] = "CatReq Job=%127s GetVolInfo VolName=%127s write=%d\n";
 
 static char Update_media[] = "CatReq Job=%127s UpdateMedia VolName=%s"
-   " VolJobs=%u VolFiles=%u VolBlocks=%u VolBytes=%" lld " VolMounts=%u"
-   " VolErrors=%u VolWrites=%u MaxVolBytes=%" lld " EndTime=%d VolStatus=%10s"
-   " Slot=%d relabel=%d InChanger=%d VolReadTime=%" lld " VolWriteTime=%" lld
-   " VolFirstWritten=%" lld " VolParts=%u\n";
+   " VolJobs=%u VolFiles=%u VolBlocks=%u VolBytes=%lld VolMounts=%u"
+   " VolErrors=%u VolWrites=%u MaxVolBytes=%lld EndTime=%lld VolStatus=%10s"
+   " Slot=%d relabel=%d InChanger=%d VolReadTime=%lld VolWriteTime=%lld"
+   " VolFirstWritten=%lld VolParts=%u\n";
 
 static char Create_job_media[] = "CatReq Job=%127s CreateJobMedia "
    " FirstIndex=%u LastIndex=%u StartFile=%u EndFile=%u "
@@ -113,6 +113,7 @@ void catalog_request(JCR *jcr, BSOCK *bs)
    uint32_t Stripe;
    uint64_t MediaId;
    utime_t VolFirstWritten;
+   utime_t VolLastWritten;
 
    memset(&mr, 0, sizeof(mr));
    memset(&sdmr, 0, sizeof(sdmr));
@@ -217,7 +218,7 @@ void catalog_request(JCR *jcr, BSOCK *bs)
    } else if (sscanf(bs->msg, Update_media, &Job, &sdmr.VolumeName,
       &sdmr.VolJobs, &sdmr.VolFiles, &sdmr.VolBlocks, &sdmr.VolBytes,
       &sdmr.VolMounts, &sdmr.VolErrors, &sdmr.VolWrites, &sdmr.MaxVolBytes,
-      &sdmr.LastWritten, &sdmr.VolStatus, &sdmr.Slot, &label, &sdmr.InChanger,
+      &VolLastWritten, &sdmr.VolStatus, &sdmr.Slot, &label, &sdmr.InChanger,
       &sdmr.VolReadTime, &sdmr.VolWriteTime, &VolFirstWritten,
       &sdmr.VolParts) == 19) {
 
@@ -266,6 +267,11 @@ void catalog_request(JCR *jcr, BSOCK *bs)
          }
       }
       Dmsg2(400, "Update media: BefVolJobs=%u After=%u\n", mr.VolJobs, sdmr.VolJobs);
+      /* Check if the volume has been written by the job, 
+       * and update the LastWritten field if needed */
+      if (mr.VolBlocks != sdmr.VolBlocks && VolLastWritten != 0) {
+         mr.LastWritten = VolLastWritten;
+      }
       /* Copy updated values to original media record */
       mr.VolJobs      = sdmr.VolJobs;
       mr.VolFiles     = sdmr.VolFiles;
@@ -274,7 +280,6 @@ void catalog_request(JCR *jcr, BSOCK *bs)
       mr.VolMounts    = sdmr.VolMounts;
       mr.VolErrors    = sdmr.VolErrors;
       mr.VolWrites    = sdmr.VolWrites;
-      mr.LastWritten  = sdmr.LastWritten;
       mr.Slot         = sdmr.Slot;
       mr.InChanger    = sdmr.InChanger;
       mr.VolReadTime  = sdmr.VolReadTime;
index 3de501061b5ec0eadeeffd82a38af6e3357e9047..2fba3600569f764276f113415c0c48061eb342e8 100644 (file)
@@ -436,7 +436,7 @@ DCR *acquire_device_for_append(DCR *dcr)
       jcr->NumWriteVolumes = 1;
    }
    dev->VolCatInfo.VolCatJobs++;              /* increment number of jobs on vol */
-   dir_update_volume_info(dcr, false);        /* send Volume info to Director */
+   dir_update_volume_info(dcr, false, false); /* send Volume info to Director */
    dev->dlock();
    if (dcr->reserved_device) {
       dev->reserved_device--;
@@ -505,7 +505,7 @@ bool release_device(DCR *dcr)
    if (dev->can_read()) {
       dev->clear_read();              /* clear read bit */
       Dmsg0(100, "dir_update_vol_info. Release0\n");
-      dir_update_volume_info(dcr, false); /* send Volume info to Director */
+      dir_update_volume_info(dcr, false, false); /* send Volume info to Director */
 
    } else if (dev->num_writers > 0) {
       /* 
@@ -531,7 +531,7 @@ bool release_device(DCR *dcr)
             dev->VolCatInfo.VolCatFiles = dev->file;   /* set number of files */
             /* Note! do volume update before close, which zaps VolCatInfo */
             Dmsg0(100, "dir_update_vol_info. Release0\n");
-            dir_update_volume_info(dcr, false); /* send Volume info to Director */
+            dir_update_volume_info(dcr, false, false); /* send Volume info to Director */
          }
       }
 
index 40bde43760f2cd6e99f7d839f6469852c0459318..a4dc84ed7fb5707860219e9f656a256c8ae0040a 100644 (file)
@@ -42,7 +42,7 @@ static char Find_media[]   = "CatReq Job=%s FindMedia=%d pool_name=%s media_type
 static char Get_Vol_Info[] = "CatReq Job=%s GetVolInfo VolName=%s write=%d\n";
 static char Update_media[] = "CatReq Job=%s UpdateMedia VolName=%s"
    " VolJobs=%u VolFiles=%u VolBlocks=%u VolBytes=%s VolMounts=%u"
-   " VolErrors=%u VolWrites=%u MaxVolBytes=%s EndTime=%d VolStatus=%s"
+   " VolErrors=%u VolWrites=%u MaxVolBytes=%s EndTime=%s VolStatus=%s"
    " Slot=%d relabel=%d InChanger=%d VolReadTime=%s VolWriteTime=%s"
    " VolFirstWritten=%s VolParts=%u\n";
 static char Create_job_media[] = "CatReq Job=%s CreateJobMedia"
@@ -314,14 +314,13 @@ bail_out:
  * back to the director. The information comes from the
  * dev record.
  */
-bool dir_update_volume_info(DCR *dcr, bool label)
+bool dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten)
 {
    JCR *jcr = dcr->jcr;
    BSOCK *dir = jcr->dir_bsock;
    DEVICE *dev = dcr->dev;
-   time_t LastWritten = time(NULL);
    VOLUME_CAT_INFO *vol = &dev->VolCatInfo;
-   char ed1[50], ed2[50], ed3[50], ed4[50], ed5[50];
+   char ed1[50], ed2[50], ed3[50], ed4[50], ed5[50], ed6[50];
    int InChanger;
    bool ok = false;
    POOL_MEM VolumeName;
@@ -344,6 +343,9 @@ bool dir_update_volume_info(DCR *dcr, bool label)
    if (label) {
       bstrncpy(vol->VolCatStatus, "Append", sizeof(vol->VolCatStatus));
    }
+// if (update_LastWritten) {
+      vol->VolLastWritten = time(NULL);
+// }
    pm_strcpy(VolumeName, vol->VolCatName);
    bash_spaces(VolumeName);
    InChanger = vol->InChanger;
@@ -352,7 +354,8 @@ bool dir_update_volume_info(DCR *dcr, bool label)
       vol->VolCatBlocks, edit_uint64(vol->VolCatBytes, ed1),
       vol->VolCatMounts, vol->VolCatErrors,
       vol->VolCatWrites, edit_uint64(vol->VolCatMaxBytes, ed2),
-      LastWritten, vol->VolCatStatus, vol->Slot, label,
+      edit_uint64(vol->VolLastWritten, ed6), 
+      vol->VolCatStatus, vol->Slot, label,
       InChanger,                      /* bool in structure */
       edit_int64(vol->VolReadTime, ed3),
       edit_int64(vol->VolWriteTime, ed4),
index 73416afbe405088e865ba036b22771cd4b502425..0faaf89d7385a205da981b42c9efcff375c73f3b 100644 (file)
@@ -298,7 +298,7 @@ static bool record_cb(DCR *in_dcr, DEV_RECORD *rec)
 
 /* Dummies to replace askdir.c */
 bool    dir_find_next_appendable_volume(DCR *dcr) { return 1;}
-bool    dir_update_volume_info(DCR *dcr, bool relabel) { return 1; }
+bool    dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten) { return 1; }
 bool    dir_create_jobmedia_record(DCR *dcr) { return 1; }
 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; }
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
index cfa5b5b8bfabb95acc7495f4066aa5de26547cb9..70508df1f4dc567f002f56932e7fd06a8bf84f8e 100644 (file)
@@ -482,7 +482,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec)
 
 /* Dummies to replace askdir.c */
 bool    dir_find_next_appendable_volume(DCR *dcr) { return 1;}
-bool    dir_update_volume_info(DCR *dcr, bool relabel) { return 1; }
+bool    dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten) { return 1; }
 bool    dir_create_jobmedia_record(DCR *dcr) { return 1; }
 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; }
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
index e5b95b624db4a98acd1838415a184553ddbcde48..d257f05b63e566746f5fe0cd16f88afa39e1b54c 100644 (file)
@@ -746,7 +746,7 @@ static bool terminate_writing_volume(DCR *dcr)
       dev->VolCatInfo.VolCatParts = dev->num_dvd_parts;
    }
    
-   if (!dir_update_volume_info(dcr, false)) {
+   if (!dir_update_volume_info(dcr, false, true)) {
       ok = false;
    }
    Dmsg1(100, "dir_update_volume_info terminate writing -- %s\n", ok?"OK":"ERROR");
@@ -798,7 +798,7 @@ static bool do_new_file_bookkeeping(DCR *dcr)
       return false;
    }
    dev->VolCatInfo.VolCatFiles = dev->file;
-   if (!dir_update_volume_info(dcr, false)) {
+   if (!dir_update_volume_info(dcr, false, false)) {
       Dmsg0(190, "Error from update_vol_info.\n");
       terminate_writing_volume(dcr);
       dev->dev_errno = EIO;
@@ -856,7 +856,7 @@ static bool do_dvd_size_checks(DCR *dcr)
       
       dev->VolCatInfo.VolCatParts = dev->num_dvd_parts;
             
-      if (!dir_update_volume_info(dcr, false)) {
+      if (!dir_update_volume_info(dcr, false, false)) {
          Dmsg0(190, "Error from update_vol_info.\n");
          dev->dev_errno = EIO;
          return false;
index 218db4e64e6a1dc12cc96d35bdb3565da044169c..7f74b99bb064e67675bcd9e64a8b0600f24bc9e4 100644 (file)
@@ -446,7 +446,7 @@ static void get_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sess
 
 /* Dummies to replace askdir.c */
 bool    dir_find_next_appendable_volume(DCR *dcr) { return 1;}
-bool    dir_update_volume_info(DCR *dcr, bool relabel) { return 1; }
+bool    dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten) { return 1; }
 bool    dir_create_jobmedia_record(DCR *dcr) { return 1; }
 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; }
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
index fd0924c3404381da4a2bd676f95453e48e4b97ae..f5ef83bf97f33ba8bf3ac042512509cd223282be 100644 (file)
@@ -1277,7 +1277,7 @@ static JCR *create_jcr(JOB_DBR *jr, DEV_RECORD *rec, uint32_t JobId)
 
 /* Dummies to replace askdir.c */
 bool    dir_find_next_appendable_volume(DCR *dcr) { return 1;}
-bool    dir_update_volume_info(DCR *dcr, bool relabel) { return 1; }
+bool    dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten) { return 1; }
 bool    dir_create_jobmedia_record(DCR *dcr) { return 1; }
 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; }
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
index f63f3403a7d55bb1d50aef4286e1fbd6432c52e1..81237ece1bd27e9c9011ae2434920baaaf6dec62 100644 (file)
@@ -2649,7 +2649,7 @@ get_cmd(const char *prompt)
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
 bool    dir_send_job_status(JCR *jcr) {return 1;}
 
-bool dir_update_volume_info(DCR *dcr, bool relabel)
+bool dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten)
 {
    return 1;
 }
index 45cd39f6accce2cb9cd98f56f7a7f53d4acadb55..d2a2243ebbfcf5bcc87cfce6d875ea0c696daf87 100644 (file)
@@ -158,6 +158,7 @@ struct VOLUME_CAT_INFO {
    btime_t  VolWriteTime;             /* time spent writing this Volume */
    int64_t  VolMediaId;               /* MediaId */
    utime_t  VolFirstWritten;          /* Time of first write */
+   utime_t  VolLastWritten;           /* Time of last write */
    bool     InChanger;                /* Set if vol in current magazine */
    char VolCatStatus[20];             /* Volume status */
    char VolCatName[MAX_NAME_LENGTH];  /* Desired volume to mount */
index 473b3e79504b9ff56d7d534c6fa83cdb0676752c..3aeaf86927f9fdd85084cba7e9fa0259248cf5e2 100644 (file)
@@ -132,7 +132,7 @@ bool fixup_device_block_write_error(DCR *dcr)
    dev->dlock();                    /* lock again */
 
    dev->VolCatInfo.VolCatJobs++;              /* increment number of jobs on vol */
-   dir_update_volume_info(dcr, false);        /* send Volume info to Director */
+   dir_update_volume_info(dcr, false, false); /* send Volume info to Director */
 
    Jmsg(jcr, M_INFO, 0, _("New volume \"%s\" mounted on device %s at %s.\n"),
       dcr->VolumeName, dev->print_name(), bstrftime(dt, sizeof(dt), time(NULL)));
index 367e6a8a019cdb41dbd359b492d309ee4795ed76..142027f44609f77fb77e5c6448063d793cfecd54 100644 (file)
@@ -1,16 +1,7 @@
-/*
- *
- *   dvd.c  -- Routines specific to DVD devices (and
- *             possibly other removable hard media). 
- *
- *    Nicolas Boichat, MMV
- *
- *   Version $Id$
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2005-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2005-2007 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ *
+ *   dvd.c  -- Routines specific to DVD devices (and
+ *             possibly other removable hard media). 
+ *
+ *    Nicolas Boichat, MMV
+ *
+ *   Version $Id$
+ */
 
 #include "bacula.h"
 #include "stored.h"
@@ -686,7 +686,7 @@ bool truncate_dvd(DCR *dcr)
    dcr->VolCatInfo.VolCatBytes = 0;
 
    /* Update catalog */
-   if (!dir_update_volume_info(dcr, false)) {
+   if (!dir_update_volume_info(dcr, false, true)) {
       return false;
    }
    
index 77afb82da190de3eebf842c224ea1fc2e7030bdb..e3db2c7c7e0edca288752d3770d6844b1d03746f 100644 (file)
@@ -505,7 +505,7 @@ bool rewrite_volume_label(DCR *dcr, bool recycle)
    }
    Dmsg0(150, "dir_update_vol_info. Set Append\n");
    bstrncpy(dev->VolCatInfo.VolCatStatus, "Append", sizeof(dev->VolCatInfo.VolCatStatus));
-   if (!dir_update_volume_info(dcr, true)) {  /* indicate doing relabel */
+   if (!dir_update_volume_info(dcr, true, true)) {  /* indicate doing relabel */
       return false;
    }
    if (recycle) {
index 6733f9a6e8b1974afab079def676c12cb51b38ee..9462815a2001f6d8e95405b9ca49c32651dfab9d 100644 (file)
@@ -436,7 +436,7 @@ read_volume:
       }
       dev->VolCatInfo.VolCatMounts++;      /* Update mounts */
       Dmsg1(150, "update volinfo mounts=%d\n", dev->VolCatInfo.VolCatMounts);
-      if (!dir_update_volume_info(dcr, false)) {
+      if (!dir_update_volume_info(dcr, false, false)) {
          return false;
       }
       
@@ -523,7 +523,7 @@ static int try_autolabel(DCR *dcr, bool opened)
       Dmsg0(150, "dir_update_vol_info. Set Append\n");
       /* Copy Director's info into the device info */
       dev->VolCatInfo = dcr->VolCatInfo;    /* structure assignment */
-      if (!dir_update_volume_info(dcr, true)) {  /* indicate tape labeled */
+      if (!dir_update_volume_info(dcr, true, true)) {  /* indicate tape labeled */
          return try_error;
       }
       Jmsg(dcr->jcr, M_INFO, 0, _("Labeled new Volume \"%s\" on device %s.\n"),
@@ -556,7 +556,7 @@ void mark_volume_in_error(DCR *dcr)
    dev->VolCatInfo = dcr->VolCatInfo;     /* structure assignment */
    bstrncpy(dev->VolCatInfo.VolCatStatus, "Error", sizeof(dev->VolCatInfo.VolCatStatus));
    Dmsg0(150, "dir_update_vol_info. Set Error.\n");
-   dir_update_volume_info(dcr, false);
+   dir_update_volume_info(dcr, false, false);
 }
 
 /*
@@ -574,7 +574,7 @@ static void mark_volume_not_inchanger(DCR *dcr)
    dcr->VolCatInfo.InChanger = false;
    dev->VolCatInfo.InChanger = false;
    Dmsg0(400, "update vol info in mount\n");
-   dir_update_volume_info(dcr, true);  /* set new status */
+   dir_update_volume_info(dcr, true, false);  /* set new status */
 }
 
 /*
index 77225f932d4b3d368643838e06f9d54aca709cce..f9e98a243cd66f07e32d1988a18e1c4e5c0d3206 100644 (file)
@@ -49,7 +49,7 @@ enum get_vol_info_rw {
 };
 bool    dir_get_volume_info(DCR *dcr, enum get_vol_info_rw);
 bool    dir_find_next_appendable_volume(DCR *dcr);
-bool    dir_update_volume_info(DCR *dcr, bool label);
+bool    dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten);
 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr);
 bool    dir_ask_sysop_to_mount_volume(DCR *dcr);
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec);
index e2db23da2f8662328dac79a35127690c1312cc0e..4becebd444235c65ada1f955b44dda0947b5040a 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "2.3.6"
-#define BDATE   "19 October 2007"
-#define LSMDATE "19Oct07"
+#define BDATE   "04 November 2007"
+#define LSMDATE "04Nov07"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2007 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2007"       /* year for copyright messages in progs */
index 7ca5025ed71ff0f0799b98874aa0aead53f63485..3832586b4cf4c2f41129abac499b73477e5a205d 100644 (file)
@@ -2,6 +2,10 @@
 
 General:
 04Nov07
+kes  Cleanup of code in SD that sets the LastWritten date. This doesn't 
+     really change anything, but is the beginning of doing it *right*.
+     To do it completely right the LastWritten date must be passed to
+     the SD, but it is not yet done.
 kes  Minor tweaks to some bat restore SQL.
 kes  This patch fixes bug #1003 where putting the message output from
      a Verify job into the catalog results in a recursive loop.  The problem