From: Michal Rakowski Date: Fri, 28 May 2021 06:30:21 +0000 (+0200) Subject: Fix #7718 About not respecting StorageGroupPolicy set in JobDefs res X-Git-Tag: Release-11.3.2~522 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4dff8d8dfa50a4bc0c4cae8a2c411024239b64f6;p=thirdparty%2Fbacula.git Fix #7718 About not respecting StorageGroupPolicy set in JobDefs res --- 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();