]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/backup.c
kes Fix memory leak with storage ids in cats/sql_get.c
[bacula/bacula] / bacula / src / dird / backup.c
index 47e70441b7e7093256da9b1304544f75e14c010e..8b9dfd8db262b130f03cbbe0eb1ad9c8476e8cd1 100644 (file)
@@ -16,7 +16,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-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.
@@ -53,8 +53,11 @@ static char storaddr[]  = "storage address=%s port=%d ssl=%d\n";
 static char OKbackup[]   = "2000 OK backup\n";
 static char OKstore[]    = "2000 OK storage\n";
 static char EndJob[]     = "2800 End Job TermCode=%d JobFiles=%u "
-                           "ReadBytes=%lld JobBytes=%lld Errors=%u\n";
-
+                           "ReadBytes=%llu JobBytes=%llu Errors=%u "  
+                           "VSS=%d Encrypt=%d\n";
+/* Pre 1.39.29 (04Dec06) EndJob */
+static char OldEndJob[]  = "2800 End Job TermCode=%d JobFiles=%u "
+                           "ReadBytes=%llu JobBytes=%llu Errors=%u\n";
 /* 
  * Called here before the job is run to do the job
  *   specific setup.
@@ -75,7 +78,7 @@ bool do_backup_init(JCR *jcr)
 
    apply_pool_overrides(jcr);
 
-   jcr->jr.PoolId = get_or_create_pool_record(jcr, jcr->pool->hdr.name);
+   jcr->jr.PoolId = get_or_create_pool_record(jcr, jcr->pool->name());
    if (jcr->jr.PoolId == 0) {
       return false;
    }
@@ -168,15 +171,19 @@ bool do_backup(JCR *jcr)
    set_jcr_job_status(jcr, JS_Running);
    fd = jcr->file_bsock;
 
-   if (!send_include_list(jcr)) {
+   if (!send_level_command(jcr)) {
       goto bail_out;
    }
 
-   if (!send_exclude_list(jcr)) {
+   if (!send_runscripts_commands(jcr)) {
       goto bail_out;
    }
 
-   if (!send_level_command(jcr)) {
+   if (!send_include_list(jcr)) {
+      goto bail_out;
+   }
+
+   if (!send_exclude_list(jcr)) {
       goto bail_out;
    }
 
@@ -202,11 +209,6 @@ bool do_backup(JCR *jcr)
       goto bail_out;
    }
 
-
-   if (!send_runscripts_commands(jcr)) {
-      goto bail_out;
-   }
-
    /*    
     * We re-update the job start record so that the start
     *  time is set after the run before job.  This avoids 
@@ -259,13 +261,19 @@ int wait_for_job_termination(JCR *jcr)
    BSOCK *fd = jcr->file_bsock;
    bool fd_ok = false;
    uint32_t JobFiles, Errors;
-   uint64_t ReadBytes, JobBytes;
+   uint64_t ReadBytes = 0;
+   uint64_t JobBytes = 0;
+   int VSS = 0;
+   int Encrypt = 0;
 
    set_jcr_job_status(jcr, JS_Running);
    /* Wait for Client to terminate */
    while ((n = bget_dirmsg(fd)) >= 0) {
-      if (!fd_ok && sscanf(fd->msg, EndJob, &jcr->FDJobStatus, &JobFiles,
-          &ReadBytes, &JobBytes, &Errors) == 5) {
+      if (!fd_ok && 
+          (sscanf(fd->msg, EndJob, &jcr->FDJobStatus, &JobFiles,
+              &ReadBytes, &JobBytes, &Errors, &VSS, &Encrypt) == 7 ||
+           sscanf(fd->msg, OldEndJob, &jcr->FDJobStatus, &JobFiles,
+                 &ReadBytes, &JobBytes, &Errors) == 5)) {
          fd_ok = true;
          set_jcr_job_status(jcr, jcr->FDJobStatus);
          Dmsg1(100, "FDStatus=%c\n", (char)jcr->JobStatus);
@@ -277,6 +285,7 @@ int wait_for_job_termination(JCR *jcr)
          break;
       }
    }
+
    if (is_bnet_error(fd)) {
       Jmsg(jcr, M_FATAL, 0, _("Network error with FD during %s: ERR=%s\n"),
           job_type_to_str(jcr->JobType), bnet_strerror(fd));
@@ -293,6 +302,8 @@ int wait_for_job_termination(JCR *jcr)
       jcr->Errors = Errors;
       jcr->ReadBytes = ReadBytes;
       jcr->JobBytes = JobBytes;
+      jcr->VSS = VSS;
+      jcr->Encrypt = Encrypt;
    } else {
       Jmsg(jcr, M_FATAL, 0, _("No Job status returned from FD.\n"));
    }
@@ -323,19 +334,17 @@ void backup_cleanup(JCR *jcr, int TermCode)
    char ec6[30], 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;
+   int msg_type = M_INFO;
    MEDIA_DBR mr;
    CLIENT_DBR cr;
    double kbps, compression;
    utime_t RunTime;
 
    Dmsg2(100, "Enter backup_cleanup %d %c\n", TermCode, TermCode);
-   dequeue_messages(jcr);             /* display any queued messages */
    memset(&mr, 0, sizeof(mr));
    memset(&cr, 0, sizeof(cr));
-   set_jcr_job_status(jcr, TermCode);
 
-   update_job_end_record(jcr);        /* update database */
+   update_job_end(jcr, TermCode);
 
    if (!db_get_job_record(jcr, jcr->db, &jcr->jr)) {
       Jmsg(jcr, M_WARNING, 0, _("Error getting job record for stats: %s"),
@@ -358,7 +367,6 @@ void backup_cleanup(JCR *jcr, int TermCode)
 
    update_bootstrap_file(jcr);
 
-   msg_type = M_INFO;                 /* by default INFO message */
    switch (jcr->JobStatus) {
       case JS_Terminated:
          if (jcr->Errors || jcr->SDErrors) {
@@ -448,6 +456,8 @@ void backup_cleanup(JCR *jcr, int TermCode)
 "  SD Bytes Written:       %s (%sB)\n"
 "  Rate:                   %.1f KB/s\n"
 "  Software Compression:   %s\n"
+"  VSS:                    %s\n"
+"  Encryption:             %s\n"
 "  Volume name(s):         %s\n"
 "  Volume Session Id:      %d\n"
 "  Volume Session Time:    %d\n"
@@ -466,7 +476,7 @@ void backup_cleanup(JCR *jcr, int TermCode)
         jcr->client->name(), cr.Uname,
         jcr->fileset->name(), jcr->FSCreateTime,
         jcr->pool->name(), jcr->pool_source,
-        jcr->wstore->name(), jcr->storage_source,
+        jcr->wstore->name(), jcr->wstore_source,
         schedt,
         sdt,
         edt,
@@ -480,6 +490,8 @@ void backup_cleanup(JCR *jcr, int TermCode)
         edit_uint64_with_suffix(jcr->SDJobBytes, ec6),
         (float)kbps,
         compress,
+        jcr->VSS?"yes":"no",
+        jcr->Encrypt?"yes":"no",
         jcr->VolumeName,
         jcr->VolSessionId,
         jcr->VolSessionTime,