]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Fix #7718 About not respecting StorageGroupPolicy set in JobDefs res
authorMichal Rakowski <michal.rakowski@baculasystems.com>
Fri, 28 May 2021 06:30:21 +0000 (08:30 +0200)
committerEric Bollengier <eric@baculasystems.com>
Thu, 24 Mar 2022 08:03:02 +0000 (09:03 +0100)
bacula/src/dird/dird.c
bacula/src/dird/job.c
bacula/src/dird/store_mngr.h

index fa43b7236f11b8131363b1143d6acfb2355070cc..8259a7ccb56efbd2be4a4fc7e80ccac308227b9d 100644 (file)
@@ -1048,6 +1048,7 @@ static bool check_resources()
                 * Handle strings and directory strings
                 */
                if (job_items[i].handler == store_str ||
+                   job_items[i].handler == store_storage_mngr ||
                    job_items[i].handler == store_dir) {
                   def_svalue = (char **)((char *)(job->jobdefs) + offset);
                   Dmsg5(400, "Job \"%s\", field \"%s\" def_svalue=%s item %d offset=%u\n",
index d5ffff560c4f1781402ea091a0a49c843c903fc4..ddc5b4111ae4224da068ec45f0b0dc01151a707a 100644 (file)
@@ -1602,17 +1602,31 @@ static void init_store_manager(JCR *jcr, const char *policy)
 
 static void set_jcr_default_store(JCR *jcr, JOB *job)
 {
-   const char *store_policy = job->storage_policy ? job->storage_policy : job->pool->storage_policy;
+   /* Check if storage policy is defined in:
+    *    1. Pool resource
+    *    2. Job Resource
+    *    3. JobDefs resource used by job
+    * If no policy defined, used the default one.
+    */
+   const char *store_policy = StorageManager::get_default_policy();
+
+   if (job->pool->storage_policy) {
+      Dmsg1(dbglvl_store_mngr, "Using Storage Group Policy from the Pool resource for JobId: %d\n", jcr->JobId);
+      store_policy = job->pool->storage_policy;
+   } else if (job->storage_policy) {
+      Dmsg1(dbglvl_store_mngr, "Using Storage Group Policy from the Job resource for JobId: %d\n", jcr->JobId);
+      store_policy = job->storage_policy;
+   }
 
    init_store_manager(jcr, store_policy);
 
    /* Use storage definition from proper resource */
-   if (job->storage) {
-      Dmsg1(dbglvl_store_mngr, "Using Storage definition from the Job resource for JobId: %d\n", jcr->JobId);
-      copy_rwstorage(jcr, job->storage, _("Job resource"));
-   } else {
+   if (job->pool->storage) {
       Dmsg1(dbglvl_store_mngr, "Using Storage definition from the Pool resource for JobId: %d\n", jcr->JobId);
       copy_rwstorage(jcr, job->pool->storage, _("Pool resource"));
+   } else {
+      Dmsg1(dbglvl_store_mngr, "Using Storage definition from the Job resource for JobId: %d\n", jcr->JobId);
+      copy_rwstorage(jcr, job->storage, _("Job resource"));
    }
 }
 
index fd0ec7e359211bc7530252439b0308ca64b8d004..13c7b36bb882bef88b3b293505ecdbe4a05c7386 100644 (file)
@@ -126,6 +126,9 @@ class StorageManager : public SMARTALLOC {
 
       StorageManager(const char *policy);
 
+      static const char *get_default_policy() {
+         return "ListedOrder";
+      }
 
       /************ READ STORAGE HELPERS ************/
       STORE *get_rstore();