]> git.sur5r.net Git - bacula/bacula/commitdiff
Apply idea of part of Graham's tidy-bsr-source.patch, but modified
authorKern Sibbald <kern@sibbald.com>
Wed, 22 Jul 2009 19:06:18 +0000 (19:06 +0000)
committerKern Sibbald <kern@sibbald.com>
Wed, 22 Jul 2009 19:06:18 +0000 (19:06 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@9086 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/dird/bsr.c
bacula/technotes

index 24cabc3449998b1e2f823db3ad50f6ff92ad19ed..a924ff13672e497e0c6d2d435586113c1f8c19be 100644 (file)
@@ -322,6 +322,70 @@ void display_bsr_info(UAContext *ua, RESTORE_CTX &rx)
    return;
 }
 
+/*
+ * Write bsr data for a single bsr record
+ */
+static uint32_t write_bsr_item(RBSR *bsr, UAContext *ua, 
+                   RESTORE_CTX &rx, FILE *fd, bool &first, uint32_t &LastIndex)
+{
+   char ed1[50], ed2[50];
+   uint32_t count = 0;
+   uint32_t total_count = 0;
+   char device[MAX_NAME_LENGTH];
+
+   /*
+    * For a given volume, loop over all the JobMedia records.
+    *   VolCount is the number of JobMedia records.
+    */
+   for (int i=0; i < bsr->VolCount; i++) {
+      if (!is_volume_selected(bsr->fi, bsr->VolParams[i].FirstIndex,
+           bsr->VolParams[i].LastIndex)) {
+         bsr->VolParams[i].VolumeName[0] = 0;  /* zap VolumeName */
+         continue;
+      }
+      if (!rx.store) {
+         find_storage_resource(ua, rx, bsr->VolParams[i].Storage,
+                                       bsr->VolParams[i].MediaType);
+      }
+//    fprintf(fd, "Storage=\"%s\"\n", bsr->VolParams[i].Storage);
+      fprintf(fd, "Volume=\"%s\"\n", bsr->VolParams[i].VolumeName);
+      fprintf(fd, "MediaType=\"%s\"\n", bsr->VolParams[i].MediaType);
+      if (bsr->fileregex) {
+         fprintf(fd, "FileRegex=%s\n", bsr->fileregex);
+      }
+      if (get_storage_device(device, bsr->VolParams[i].Storage)) {
+         fprintf(fd, "Device=\"%s\"\n", device);
+      }
+      if (bsr->VolParams[i].Slot > 0) {
+         fprintf(fd, "Slot=%d\n", bsr->VolParams[i].Slot);
+      }
+      fprintf(fd, "VolSessionId=%u\n", bsr->VolSessionId);
+      fprintf(fd, "VolSessionTime=%u\n", bsr->VolSessionTime);
+      fprintf(fd, "VolAddr=%s-%s\n", edit_uint64(bsr->VolParams[i].StartAddr, ed1),
+              edit_uint64(bsr->VolParams[i].EndAddr, ed2));
+//    Dmsg2(100, "bsr VolParam FI=%u LI=%u\n",
+//      bsr->VolParams[i].FirstIndex, bsr->VolParams[i].LastIndex);
+
+      count = write_findex(bsr->fi, bsr->VolParams[i].FirstIndex,
+                           bsr->VolParams[i].LastIndex, fd);
+      if (count) {
+         fprintf(fd, "Count=%u\n", count);
+      }
+      total_count += count;
+      /* If the same file is present on two tapes or in two files
+       *   on a tape, it is a continuation, and should not be treated
+       *   twice in the totals.
+       */
+      if (!first && LastIndex == bsr->VolParams[i].FirstIndex) {
+         total_count--;
+      }
+      first = false;
+      LastIndex = bsr->VolParams[i].LastIndex;
+   }
+   return total_count;
+}
+
+
 /*
  * Here we actually write out the details of the bsr file.
  *  Note, there is one bsr for each JobId, but the bsr may
@@ -332,120 +396,22 @@ void display_bsr_info(UAContext *ua, RESTORE_CTX &rx)
  */
 static uint32_t write_bsr(UAContext *ua, RESTORE_CTX &rx, FILE *fd)
 {
-   char ed1[50], ed2[50];
-   uint32_t count = 0;
-   uint32_t total_count = 0;
-   uint32_t LastIndex = 0;
    bool first = true;
+   uint32_t LastIndex = 0;
+   uint32_t total_count = 0;
    char *p;
    JobId_t JobId;
-   char device[MAX_NAME_LENGTH];
    RBSR *bsr;
    if (*rx.JobIds == 0) {
       for (bsr=rx.bsr; bsr; bsr=bsr->next) {
-         /*
-          * For a given volume, loop over all the JobMedia records.
-          *   VolCount is the number of JobMedia records.
-          */
-         for (int i=0; i < bsr->VolCount; i++) {
-            if (!is_volume_selected(bsr->fi, bsr->VolParams[i].FirstIndex,
-                 bsr->VolParams[i].LastIndex)) {
-               bsr->VolParams[i].VolumeName[0] = 0;  /* zap VolumeName */
-               continue;
-            }
-            if (!rx.store) {
-               find_storage_resource(ua, rx, bsr->VolParams[i].Storage,
-                                             bsr->VolParams[i].MediaType);
-            }
-            fprintf(fd, "Volume=\"%s\"\n", bsr->VolParams[i].VolumeName);
-            fprintf(fd, "MediaType=\"%s\"\n", bsr->VolParams[i].MediaType);
-            if (bsr->fileregex) {
-               fprintf(fd, "FileRegex=%s\n", bsr->fileregex);
-            }
-            if (get_storage_device(device, bsr->VolParams[i].Storage)) {
-               fprintf(fd, "Device=\"%s\"\n", device);
-            }
-            if (bsr->VolParams[i].Slot > 0) {
-               fprintf(fd, "Slot=%d\n", bsr->VolParams[i].Slot);
-            }
-            fprintf(fd, "VolSessionId=%u\n", bsr->VolSessionId);
-            fprintf(fd, "VolSessionTime=%u\n", bsr->VolSessionTime);
-            fprintf(fd, "VolAddr=%s-%s\n", edit_uint64(bsr->VolParams[i].StartAddr, ed1),
-                    edit_uint64(bsr->VolParams[i].EndAddr, ed2));
-   //       Dmsg2(100, "bsr VolParam FI=%u LI=%u\n",
-   //          bsr->VolParams[i].FirstIndex, bsr->VolParams[i].LastIndex);
-
-            count = write_findex(bsr->fi, bsr->VolParams[i].FirstIndex,
-                                 bsr->VolParams[i].LastIndex, fd);
-            if (count) {
-               fprintf(fd, "Count=%u\n", count);
-            }
-            total_count += count;
-            /* If the same file is present on two tapes or in two files
-             *   on a tape, it is a continuation, and should not be treated
-             *   twice in the totals.
-             */
-            if (!first && LastIndex == bsr->VolParams[i].FirstIndex) {
-               total_count--;
-            }
-            first = false;
-            LastIndex = bsr->VolParams[i].LastIndex;
-         }
+         total_count += write_bsr_item(bsr, ua, rx, fd, first, LastIndex);
       }
       return total_count;
    }
    for (p=rx.JobIds; get_next_jobid_from_list(&p, &JobId) > 0; ) {
       for (bsr=rx.bsr; bsr; bsr=bsr->next) {
-         if (JobId != bsr->JobId) {
-            continue;
-         }
-         /*
-          * For a given volume, loop over all the JobMedia records.
-          *   VolCount is the number of JobMedia records.
-          */
-         for (int i=0; i < bsr->VolCount; i++) {
-            if (!is_volume_selected(bsr->fi, bsr->VolParams[i].FirstIndex,
-                 bsr->VolParams[i].LastIndex)) {
-               bsr->VolParams[i].VolumeName[0] = 0;  /* zap VolumeName */
-               continue;
-            }
-            if (!rx.store) {
-               find_storage_resource(ua, rx, bsr->VolParams[i].Storage,
-                                             bsr->VolParams[i].MediaType);
-            }
-            fprintf(fd, "Volume=\"%s\"\n", bsr->VolParams[i].VolumeName);
-            fprintf(fd, "MediaType=\"%s\"\n", bsr->VolParams[i].MediaType);
-            if (bsr->fileregex) {
-               fprintf(fd, "FileRegex=%s\n", bsr->fileregex);
-            }
-            if (get_storage_device(device, bsr->VolParams[i].Storage)) {
-               fprintf(fd, "Device=\"%s\"\n", device);
-            }
-            if (bsr->VolParams[i].Slot > 0) {
-               fprintf(fd, "Slot=%d\n", bsr->VolParams[i].Slot);
-            }
-            fprintf(fd, "VolSessionId=%u\n", bsr->VolSessionId);
-            fprintf(fd, "VolSessionTime=%u\n", bsr->VolSessionTime);
-            fprintf(fd, "VolAddr=%s-%s\n", edit_uint64(bsr->VolParams[i].StartAddr, ed1),
-                    edit_uint64(bsr->VolParams[i].EndAddr, ed2));
-   //       Dmsg2(100, "bsr VolParam FI=%u LI=%u\n",
-   //          bsr->VolParams[i].FirstIndex, bsr->VolParams[i].LastIndex);
-
-            count = write_findex(bsr->fi, bsr->VolParams[i].FirstIndex,
-                                 bsr->VolParams[i].LastIndex, fd);
-            if (count) {
-               fprintf(fd, "Count=%u\n", count);
-            }
-            total_count += count;
-            /* If the same file is present on two tapes or in two files
-             *   on a tape, it is a continuation, and should not be treated
-             *   twice in the totals.
-             */
-            if (!first && LastIndex == bsr->VolParams[i].FirstIndex) {
-               total_count--;
-            }
-            first = false;
-            LastIndex = bsr->VolParams[i].LastIndex;
+         if (JobId == bsr->JobId) {
+            total_count += write_bsr_item(bsr, ua, rx, fd, first, LastIndex);
          }
       }
    }
index a30511997a0ceed655acbb2c139543cbf7cb0361..1c5b46bce9d24853317129306cb4bf0f6a7839b4 100644 (file)
@@ -3,6 +3,7 @@
 General:
 
 22Jul09
+kes  Apply idea of part of Graham's tidy-bsr-source.patch, but modified
 kes  Fix bug #1337 Console tries to build with SSL when libssl-dev not installed. 
 21Jul09
 kes  Add setJobStatus method to JCR class.