]> git.sur5r.net Git - bacula/bacula/commitdiff
Virtual Backup tweaks -- it is close to working.
authorKern Sibbald <kern@sibbald.com>
Wed, 16 Jul 2008 08:43:50 +0000 (08:43 +0000)
committerKern Sibbald <kern@sibbald.com>
Wed, 16 Jul 2008 08:43:50 +0000 (08:43 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@7391 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/cats/sql_get.c
bacula/src/dird/job.c
bacula/src/dird/ua_run.c
bacula/src/dird/vbackup.c
bacula/src/stored/mount.c
bacula/src/stored/read_record.c
bacula/technotes-2.5

index 84611b7f368833f8bca046885ad52be0c26553a1..ae306b6be4f57bf7fef4acdd399c46936a179a49 100644 (file)
@@ -1049,7 +1049,7 @@ bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids,
  "JOIN Path ON (Path.PathId = Temp.PathId) "
  "JOIN File ON (File.FileId = Temp.FileId) "
 "WHERE File.FileIndex > 0 ORDER BY JobId, FileIndex ASC",     /* Return sorted by JobId, */
-                                                             /* FileIndex for restore code */ 
+                                                              /* FileIndex for restore code */ 
              jobids);
 #else
    /*  
@@ -1097,7 +1097,7 @@ bool db_accurate_get_jobids(JCR *jcr, B_DB *mdb,
       return false;
    }
 
-   if (jr->JobLevel == L_INCREMENTAL) {
+   if (jr->JobLevel == L_INCREMENTAL || jr->JobLevel == L_VIRTUAL_FULL) {
 
       /* Now, find the last differential backup after the last full */
       Mmsg(query, 
index b0251cd16f9a3769f9ab54798daacf997fd89351..209d3d6fca0b5d286380b9a59e7cbe579c85a309 100644 (file)
@@ -1156,9 +1156,8 @@ void copy_rwstorage(JCR *jcr, alist *storage, const char *where)
 {
    if (jcr->JobReads) {
       copy_rstorage(jcr, storage, where);
-   } else {
-      copy_wstorage(jcr, storage, where);
    }
+   copy_wstorage(jcr, storage, where);
 }
 
 
@@ -1171,9 +1170,8 @@ void set_rwstorage(JCR *jcr, USTORE *store)
    }
    if (jcr->JobReads) {
       set_rstorage(jcr, store);
-   } else {
-      set_wstorage(jcr, store);
    }
+   set_wstorage(jcr, store);
 }
 
 void free_rwstorage(JCR *jcr)
index 97b3590e199533bf0076c19cc9bb432c70102c6f..22d06838327731770f5f9f41f4ae40fd953a1bb6 100644 (file)
@@ -678,29 +678,29 @@ static void select_job_level(UAContext *ua, JCR *jcr)
 {
    if (jcr->JobType == JT_BACKUP) {
       start_prompt(ua, _("Levels:\n"));
-      add_prompt(ua, _("Base"));
+//    add_prompt(ua, _("Base"));
       add_prompt(ua, _("Full"));
       add_prompt(ua, _("Incremental"));
       add_prompt(ua, _("Differential"));
       add_prompt(ua, _("Since"));
       add_prompt(ua, _("VirtualFull"));
       switch (do_prompt(ua, "", _("Select level"), NULL, 0)) {
+//    case 0:
+//       jcr->JobLevel = L_BASE;
+//       break;
       case 0:
-         jcr->JobLevel = L_BASE;
-         break;
-      case 1:
          jcr->JobLevel = L_FULL;
          break;
-      case 2:
+      case 1:
          jcr->JobLevel = L_INCREMENTAL;
          break;
-      case 3:
+      case 2:
          jcr->JobLevel = L_DIFFERENTIAL;
          break;
-      case 4:
+      case 3:
          jcr->JobLevel = L_SINCE;
          break;
-      case 5:
+      case 4:
          jcr->JobLevel = L_VIRTUAL_FULL;
          break;
       default:
index d0e4056d98addf9b1728b9ddd0abbb95da0c6c36..86c117d1cabeac5d51e7e42215d30e358fe53508 100644 (file)
@@ -90,6 +90,13 @@ bool do_vbackup_init(JCR *jcr)
 
    Dmsg2(dbglevel, "Read pool=%s (From %s)\n", jcr->rpool->name(), jcr->rpool_source);
 
+   jcr->start_time = time(NULL);
+   jcr->jr.StartTime = jcr->start_time;
+   jcr->jr.JobLevel = L_FULL;      /* we want this to appear as a Full backup */
+   if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) {
+      Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db));
+   }
+
    POOLMEM *jobids = get_pool_memory(PM_FNAME);
    db_accurate_get_jobids(jcr, jcr->db, &jcr->jr, jobids);
    Dmsg1(000, "Accurate jobids=%s\n", jobids);
@@ -220,7 +227,6 @@ bool do_vbackup(JCR *jcr)
       return false;
    }
 
-
    set_jcr_job_status(jcr, JS_Running);
 
    /* Pickup Job termination data */
@@ -243,8 +249,8 @@ bool do_vbackup(JCR *jcr)
 void vbackup_cleanup(JCR *jcr, int TermCode)
 {
    char sdt[50], edt[50], schedt[50];
-   char ec1[30], ec2[30], ec3[30], ec4[30], ec5[30], compress[50];
-   char ec6[30], ec7[30], ec8[30], elapsed[50];
+   char ec1[30], ec3[30], ec4[30], compress[50];
+   char ec7[30], ec8[30], elapsed[50];
    char term_code[100], fd_term_msg[100], sd_term_msg[100];
    const char *term_msg;
    int msg_type = M_INFO;
@@ -257,8 +263,23 @@ void vbackup_cleanup(JCR *jcr, int TermCode)
    memset(&mr, 0, sizeof(mr));
    memset(&cr, 0, sizeof(cr));
 
+   jcr->JobLevel = L_FULL;            /* we want this to appear as a Full backup */
+   jcr->jr.JobLevel = L_FULL;         /* we want this to appear as a Full backup */
+   jcr->JobFiles = jcr->SDJobFiles;
+   jcr->JobBytes = jcr->SDJobBytes;
    update_job_end(jcr, TermCode);
 
+#ifdef xxx
+   /* ***FIXME*** set to time of last incremental */
+   /* Update final items to set them to the previous job's values */
+   Mmsg(query, "UPDATE Job SET StartTime='%s',EndTime='%s',"
+               "JobTDate=%s WHERE JobId=%s", 
+      jcr->previous_jr.cStartTime, jcr->previous_jr.cEndTime, 
+      edit_uint64(jcr->previous_jr.JobTDate, ec1),
+      edit_uint64(mig_jcr->jr.JobId, ec2));
+   db_sql_query(mig_jcr->db, query.c_str(), NULL, NULL);
+#endif
+
    if (!db_get_job_record(jcr, jcr->db, &jcr->jr)) {
       Jmsg(jcr, M_WARNING, 0, _("Error getting Job record for Job report: ERR=%s"),
          db_strerror(jcr->db));
@@ -365,9 +386,7 @@ void vbackup_cleanup(JCR *jcr, int TermCode)
 "  End time:               %s\n"
 "  Elapsed time:           %s\n"
 "  Priority:               %d\n"
-"  FD Files Written:       %s\n"
 "  SD Files Written:       %s\n"
-"  FD Bytes Written:       %s (%sB)\n"
 "  SD Bytes Written:       %s (%sB)\n"
 "  Rate:                   %.1f KB/s\n"
 "  Software Compression:   %s\n"
@@ -378,9 +397,7 @@ void vbackup_cleanup(JCR *jcr, int TermCode)
 "  Volume Session Id:      %d\n"
 "  Volume Session Time:    %d\n"
 "  Last Volume Bytes:      %s (%sB)\n"
-"  Non-fatal FD errors:    %d\n"
 "  SD Errors:              %d\n"
-"  FD termination status:  %s\n"
 "  SD termination status:  %s\n"
 "  Termination:            %s\n\n"),
         my_name, VERSION, LSMDATE, edt,
@@ -399,11 +416,8 @@ void vbackup_cleanup(JCR *jcr, int TermCode)
         edit_utime(RunTime, elapsed, sizeof(elapsed)),
         jcr->JobPriority,
         edit_uint64_with_commas(jcr->jr.JobFiles, ec1),
-        edit_uint64_with_commas(jcr->SDJobFiles, ec2),
         edit_uint64_with_commas(jcr->jr.JobBytes, ec3),
         edit_uint64_with_suffix(jcr->jr.JobBytes, ec4),
-        edit_uint64_with_commas(jcr->SDJobBytes, ec5),
-        edit_uint64_with_suffix(jcr->SDJobBytes, ec6),
         kbps,
         compress,
         jcr->VSS?_("yes"):_("no"),
@@ -414,9 +428,7 @@ void vbackup_cleanup(JCR *jcr, int TermCode)
         jcr->VolSessionTime,
         edit_uint64_with_commas(mr.VolBytes, ec7),
         edit_uint64_with_suffix(mr.VolBytes, ec8),
-        jcr->Errors,
         jcr->SDErrors,
-        fd_term_msg,
         sd_term_msg,
         term_msg);
 
@@ -487,8 +499,8 @@ static bool create_bootstrap_file(JCR *jcr, POOLMEM *jobids)
 #endif
 
    complete_bsr(ua, rx.bsr);
-// Dmsg0(000, "Print bsr\n");
-// print_bsr(ua, rx.bsr);
+   Dmsg0(000, "Print bsr\n");
+   print_bsr(ua, rx.bsr);
 
    jcr->ExpectedFiles = write_bsr_file(ua, rx);
    Dmsg1(000, "Found %d files to consolidate.\n", jcr->ExpectedFiles);
index 7e47508b71cc5b0a6663f306c9d17bbfc4ae1528..8b8b27bded16206ad2b5440e58ca10e6de13be78 100644 (file)
@@ -142,7 +142,7 @@ mount_next_vol:
    } else {
       autochanger = false;
       VolCatInfo.Slot = 0;
-      ask = true;
+      ask = retry >= 2;
    }
    Dmsg1(150, "autoload_dev returns %d\n", autochanger);
    /*
index 8a0534e1ddc74ea18a0331dbdeff1ece9d4540b2..1ca911aa8345d18ba6d94381ecf4ac7789608ca3 100644 (file)
@@ -52,7 +52,7 @@ static bool try_repositioning(JCR *jcr, DEV_RECORD *rec, DCR *dcr);
 static char *rec_state_to_str(DEV_RECORD *rec);
 #endif
 
-static const int dbglvl = 1000;
+static const int dbglvl = 200;
 
 bool read_records(DCR *dcr,
        bool record_cb(DCR *dcr, DEV_RECORD *rec),
index d03e727554654d81337467e9d60325ef8dd45fb2..0abaaa5afd2ec92b20d0a68d32f12b4e24fc9dcd 100644 (file)
@@ -30,7 +30,11 @@ vtape driver
 
 
 General:
+16Jul08
+kes  Virtual Backup tweaks -- it is close to working.
 15Jul08
+kes  Ensure that SD tried to mount a volume not in an autochanger
+     at least once before asking for operator intervention.
 kes  Make SD aware of Virtual Backup jobs.
 kes  Add VirtualFull for bat.
 kes  Changes to get read storage correct for Virtual Backup.