]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Correct virtual changer check which was backwards. This caused
authorKern Sibbald <kern@sibbald.com>
Thu, 1 Mar 2007 08:38:47 +0000 (08:38 +0000)
committerKern Sibbald <kern@sibbald.com>
Thu, 1 Mar 2007 08:38:47 +0000 (08:38 +0000)
     volumes to be unloaded into slots already occupied.

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

bacula/kernstodo
bacula/src/dird/ua_prune.c
bacula/src/dird/ua_restore.c
bacula/src/lib/var.c
bacula/src/stored/autochanger.c
bacula/technotes-2.1

index 766e57a122841dc466576386067e1de9061d8ae9..306bf100e22709e5839808608a80626d56d89928 100644 (file)
@@ -6,6 +6,8 @@ Project                     Developer
 =======                     =========                         
 
 Document:
+- !!! Cannot restore two jobs a the same time that were
+  written simultaneously unless they were totally spooled.
 - Document cleaning up the spool files:
   db, pid, state, bsr, mail, conmsg, spool
 - Document the multiple-drive-changer.txt script.
@@ -41,6 +43,7 @@ Document:
  
 
 Priority:
+- Look at sg_logs -a /dev/sg0 for getting soft errors.
 - btape "test" command with Offline on Unmount = yes
 
    This test is essential to Bacula.
index 30e8dab2b27b62a36c81a707e5ee5667828cf790..89a0f8216462886493732ac84156bff1b945ed44 100644 (file)
@@ -1,16 +1,7 @@
-/*
- *
- *   Bacula Director -- User Agent Database prune Command
- *      Applies retention periods
- *
- *     Kern Sibbald, February MMII
- *
- *   Version $Id$
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2002-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2002-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.
 */
+/*
+ *
+ *   Bacula Director -- User Agent Database prune Command
+ *      Applies retention periods
+ *
+ *     Kern Sibbald, February MMII
+ *
+ *   Version $Id$
+ */
 
 #include "bacula.h"
 #include "dird.h"
@@ -267,11 +267,15 @@ int prune_files(UAContext *ua, CLIENT *client)
    db_sql_query(ua->db, query, file_delete_handler, (void *)&del);
 
    for (i=0; i < del.num_ids; i++) {
-      purge_files_from_job(ua, del.JobId[i]);
+      /* Don't prune current job */
+      if (ua->jcr->JobId != del.JobId[i]) {
+         purge_files_from_job(ua, del.JobId[i]);
+         del.num_del++;
+      }
    }
-   edit_uint64_with_commas(del.num_ids, ed1);
+   edit_uint64_with_commas(del.num_del, ed1);
    bsendmsg(ua, _("Pruned Files from %s Jobs for client %s from catalog.\n"),
-      ed1, client->hdr.name);
+      ed1, client->name());
 
 bail_out:
    db_unlock(ua->db);
@@ -418,13 +422,17 @@ int prune_jobs(UAContext *ua, CLIENT *client, int JobType)
     * Then delete the Job entry, and finally and JobMedia records.
     */
    for (i=0; i < del.num_ids; i++) {
-      if (!del.PurgedFiles[i]) {
-         purge_files_from_job(ua, del.JobId[i]);
+      /* Don't prune current job */
+      if (ua->jcr->JobId != del.JobId[i]) {
+         if (!del.PurgedFiles[i]) {
+            purge_files_from_job(ua, del.JobId[i]);
+         }
+         purge_job_from_catalog(ua, del.JobId[i]);
+         del.num_del++;
       }
-      purge_job_from_catalog(ua, del.JobId[i]);
    }
-   bsendmsg(ua, _("Pruned %d %s for client %s from catalog.\n"), del.num_ids,
-      del.num_ids==1?_("Job"):_("Jobs"), client->hdr.name);
+   bsendmsg(ua, _("Pruned %d %s for client %s from catalog.\n"), del.num_del,
+      del.num_del==1?_("Job"):_("Jobs"), client->name());
 
 bail_out:
    drop_temp_tables(ua);
@@ -523,7 +531,7 @@ bool prune_volume(UAContext *ua, MEDIA_DBR *mr)
          continue;
       }
       Dmsg2(200, "Looking at %s JobTdate=%d\n", jr.Job, (int)jr.JobTDate);
-      if (jr.JobTDate >= (now - period)) {
+      if (jr.JobTDate >= (now - period) || ua->jcr->JobId == del.JobId[i]) {
          continue;
       }
       purge_files_from_job(ua, del.JobId[i]);
index 420931d5f190bee571778c2b16388c43427079ac..cce2821ff08b6ae1c17dc47b0b57a2e2454d2ea7 100644 (file)
@@ -625,23 +625,19 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx)
       }
    }
 
-   if (*rx->JobIds == 0) {
-      bsendmsg(ua, _("No Jobs selected.\n"));
-      return 0;
-   }
-   if (strchr(rx->JobIds,',')) {
-      bsendmsg(ua, _("You have selected the following JobIds: %s\n"), rx->JobIds);
-   }
-   else {
-      bsendmsg(ua, _("You have selected the following JobId: %s\n"), rx->JobIds);
-   }
-
-
+   POOLMEM *JobIds = get_pool_memory(PM_FNAME);
+   *JobIds = 0;
    rx->TotalFiles = 0;
+   /*        
+    * Find total number of files to be restored, and filter the JobId
+    *  list to contain only ones permitted by the ACL conditions.
+    */
    for (p=rx->JobIds; ; ) {
+      char ed1[50];
       int stat = get_next_jobid_from_list(&p, &JobId);
       if (stat < 0) {
          bsendmsg(ua, _("Invalid JobId in list.\n"));
+         free_pool_memory(JobIds);
          return 0;
       }
       if (stat == 0) {
@@ -653,18 +649,33 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx)
       memset(&jr, 0, sizeof(JOB_DBR));
       jr.JobId = JobId;
       if (!db_get_job_record(ua->jcr, ua->db, &jr)) {
-         char ed1[50];
          bsendmsg(ua, _("Unable to get Job record for JobId=%s: ERR=%s\n"),
             edit_int64(JobId, ed1), db_strerror(ua->db));
+         free_pool_memory(JobIds);
          return 0;
       }
       if (!acl_access_ok(ua, Job_ACL, jr.Name)) {
-         bsendmsg(ua, _("No authorization. Job \"%s\" not selected.\n"),
-            jr.Name);
+         bsendmsg(ua, _("No authorization for JobId=%s (Job \"%s\"). Not selected.\n"),
+            edit_int64(JobId, ed1), jr.Name);
          continue;
       }
+      if (*JobIds != 0) {
+         pm_strcat(JobIds, ",");
+      }
+      pm_strcat(JobIds, edit_int64(JobId, ed1));
       rx->TotalFiles += jr.JobFiles;
    }
+   free_pool_memory(rx->JobIds);
+   rx->JobIds = JobIds;               /* Set ACL filtered list */
+   if (*rx->JobIds == 0) {
+      bsendmsg(ua, _("No Jobs selected.\n"));
+      return 0;
+   }
+   if (strchr(rx->JobIds,',')) {
+      bsendmsg(ua, _("You have selected the following JobIds: %s\n"), rx->JobIds);
+   } else {
+      bsendmsg(ua, _("You have selected the following JobId: %s\n"), rx->JobIds);
+   }
    return 1;
 }
 
index aac43f66e9e385f69765fe18d512d27d2b2cd0c9..27bf15d75d79552b90099646610af4406cc0f3be 100644 (file)
@@ -1990,8 +1990,9 @@ parse_variable_complex(
         rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
         goto error_return;
     }
-    inc = (*p == '+');                /* increment variable */
-    p++;
+    if ((inc = (*p++ == '+'))) {
+       p++;                           /* skip the + */ 
+    }
 
     /* lookup the variable value now */
     if (failed) {
index f278ebe622e36ea7ab1c3ce7564a10e4eb136e7e..afa7ed8464215b230b22fcb338e0016af206123a 100644 (file)
@@ -251,7 +251,7 @@ int get_autochanger_loaded_slot(DCR *dcr)
       return dev->Slot;
    }
    /* Virtual disk autochanger */
-   if (dcr->device->changer_command[0]) {
+   if (dcr->device->changer_command[0] ==0) {
       return 1;
    }
 
index 003bba7755ea8917e4d80806500d4eade3abb6fe..f31be91d432986b8b16009866d3b3357c6961cf9 100644 (file)
@@ -1,6 +1,16 @@
               Technical notes on version 2.1
 
 General:
+29Feb07
+kes  Correct virtual changer check which was backwards. This caused
+     volumes to be unloaded into slots already occupied.
+28Feb07
+kes  Apply Command ACL filter to JobId list in restore command.
+kes  Correct typeo in var.c patch.
+27Feb07
+kes  Don't let Bacula prune File or Job records for the current Job.
+kes  Fix variable substitution pad + inc bug reported (with patch)
+     in bug #791.
 26Feb07
 kes  Correct SQLite log table index as reported by Luca Berra.
 24Feb07
@@ -112,7 +122,7 @@ kes  Test on job_canceled() and sd_msg_thread_done inside
      Fixes bug #771.
 kes  Remove rl_catch_signal from console.c as it conflicted
      with the header definition. Fixes bug #765.
-ebl  Fixes bug #766 about RunsOnClient = Yes
+ebl  Fixes bug #766 about RunsOnClient = Yes (case sensitive)
 04Feb07
 kes  Clarify some stored/acquire messages to indicate if the
      problem is with read or append.