]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl Add sanity checks for VolWriteTime and VolReadTime
authorEric Bollengier <eric@eb.homelinux.org>
Wed, 9 Apr 2008 19:55:36 +0000 (19:55 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Wed, 9 Apr 2008 19:55:36 +0000 (19:55 +0000)
ebl  Take care of bad clock changes while computing VolWriteTime
     and VolReadTime. This should fix or limit #1066

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

bacula/src/cats/sql_update.c
bacula/src/dird/catreq.c
bacula/src/stored/dev.c
bacula/technotes-2.3

index 161effa98d19dba01c733ea5a8c4c3a2e5ab2786..fa605998f7c20e5d08bb62f90f7252c177e93b5a 100644 (file)
@@ -356,6 +356,14 @@ db_update_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr)
       UPDATE_DB(jcr, mdb, mdb->cmd);
    }
 
+   /* sanity checks for #1066 */
+   if (mr->VolReadTime < 0) {
+      mr->VolReadTime = 0;
+   }
+   if (mr->VolWriteTime < 0) {
+      mr->VolWriteTime = 0;
+   }
+
    Mmsg(mdb->cmd, "UPDATE Media SET VolJobs=%u,"
         "VolFiles=%u,VolBlocks=%u,VolBytes=%s,VolMounts=%u,VolErrors=%u,"
         "VolWrites=%u,MaxVolBytes=%s,VolStatus='%s',"
index e04a1e7b43eed92c83d5878fcc2fb1834ec25fca..2119f1ebe6974cfd73140cf3a87b7d02ea357229 100644 (file)
@@ -284,10 +284,14 @@ void catalog_request(JCR *jcr, BSOCK *bs)
       mr.VolWrites    = sdmr.VolWrites;
       mr.Slot         = sdmr.Slot;
       mr.InChanger    = sdmr.InChanger;
-      mr.VolReadTime  = sdmr.VolReadTime;
-      mr.VolWriteTime = sdmr.VolWriteTime;
       mr.VolParts     = sdmr.VolParts;
       bstrncpy(mr.VolStatus, sdmr.VolStatus, sizeof(mr.VolStatus));
+      if (sdmr.VolReadTime >= 0) { 
+         mr.VolReadTime  = sdmr.VolReadTime;
+      }
+      if (sdmr.VolWriteTime >= 0) {
+         mr.VolWriteTime = sdmr.VolWriteTime;
+      }
       /*
        * Update to point to the last device used to write the Volume.
        *   However, do so only if we are writing the tape, i.e.
index 381986c68c30c6ff92c303e59d403b5637eb4c20..7c1410b41069f8d5ff7de01c03389ee82f64f3da 100644 (file)
@@ -2234,12 +2234,15 @@ void DEVICE::edit_mount_codes(POOL_MEM &omsg, const char *imsg)
    }
 }
 
-/* return the last timer interval (ms) */
+/* return the last timer interval (ms) 
+ * or 0 if something goes wrong
+ */
 btime_t DEVICE::get_timer_count()
 {
-   btime_t old = last_timer;
+   btime_t temp = last_timer;
    last_timer = get_current_btime();
-   return last_timer - old;
+   temp = last_timer - temp;   /* get elapsed time */
+   return (temp>0)?temp:0;     /* take care of skewed clock */
 }
 
 /* read from fd */
index 724940a656687b543a788ec4f1c96e4f8e3b41ce..d852fc13a62775a015f797e8746a4dd3a3c135cb 100644 (file)
@@ -25,6 +25,9 @@ Add long term statistics job table
 
 General:
 09Apr08
+ebl  Add sanity checks for VolWriteTime and VolReadTime
+ebl  Take care of bad clock changes while computing VolWriteTime
+     and VolReadTime. This should fix or limit #1066
 kes  Correct error string numbers in dird/catreq.c
 kes  Restructure reserving, acquiring, and mounting volumes. Calls to
      autochanger are deferred for mount.c -- simplifes the code.