]> 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/src/win32/README.mingw32
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 92cb86ee778b28d4d082035c71e069d7b7e77898..18bf31de2d069d6f19a4d9c5fef812923841e983 100644 (file)
@@ -18,7 +18,7 @@ your questions on the bacula-devel list, but we can't guarantee anything.
 One-time Setup
 ==============
 
-If you're reading this file you've probably already enlisted in the CVS tree or
+If you're reading this file you've probably already enlisted in the SVN tree or
 extracted the contents of the source tar.  If not you need to do that first.
 
 You also need to download one of the doc tar balls and extract to your
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.