From 4dff8d8dfa50a4bc0c4cae8a2c411024239b64f6 Mon Sep 17 00:00:00 2001 From: Michal Rakowski Date: Fri, 28 May 2021 08:30:21 +0200 Subject: [PATCH] Fix #7718 About not respecting StorageGroupPolicy set in JobDefs res --- bacula/src/dird/dird.c | 1 + bacula/src/dird/job.c | 24 +++++++++++++++++++----- bacula/src/dird/store_mngr.h | 3 +++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/bacula/src/dird/dird.c b/bacula/src/dird/dird.c index fa43b7236..8259a7ccb 100644 --- a/bacula/src/dird/dird.c +++ b/bacula/src/dird/dird.c @@ -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", diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index d5ffff560..ddc5b4111 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -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")); } } diff --git a/bacula/src/dird/store_mngr.h b/bacula/src/dird/store_mngr.h index fd0ec7e35..13c7b36bb 100644 --- a/bacula/src/dird/store_mngr.h +++ b/bacula/src/dird/store_mngr.h @@ -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(); -- 2.47.3