From: Michal Rakowski Date: Mon, 17 May 2021 21:23:28 +0000 (+0200) Subject: Fix #7644 About Storage Groups messages changes X-Git-Tag: Release-11.3.2~533 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9b1be1fed467179136ee91d3960611d056c3247c;p=thirdparty%2Fbacula.git Fix #7644 About Storage Groups messages changes Allow user to explcitly set 'ListedOrder' policy for storage group defined. This policy will be also used when no policy is specified at all. Change messages about Storage Groups and storage choice. --- diff --git a/bacula/src/dird/backup.c b/bacula/src/dird/backup.c index 8a9b7fed4..15fc77c3c 100644 --- a/bacula/src/dird/backup.c +++ b/bacula/src/dird/backup.c @@ -542,8 +542,7 @@ bool do_backup(JCR *jcr) if (wstore_group) { /* Apply policy for the write storage list */ jcr->store_mngr->apply_policy(true); - Jmsg(jcr, M_INFO, 0, _("Possible storage choices: %s\n"), - jcr->store_mngr->print_wlist()); + Dmsg1(100, "Possible storage choices: %s\n", jcr->store_mngr->print_wlist()); iter_no = 2; } @@ -558,10 +557,10 @@ bool do_backup(JCR *jcr) for (int iter=0; iterstore_mngr->get_wstore()->name()); + Dmsg1(100, "Failed connect to the storage: %s\n", jcr->store_mngr->get_wstore()->name()); continue; } else { - Jmsg(jcr, M_INFO, 0, _("Connected to the storage: %s\n"), - jcr->store_mngr->get_wstore()->name()); + Dmsg1(100, "Connected to the storage: %s\n", jcr->store_mngr->get_wstore()->name()); } alist wlist; @@ -595,12 +592,11 @@ bool do_backup(JCR *jcr) * because we have only 2 iterations (so 'iter' variable is either 0 or 1) */ if (!start_storage_daemon_job(jcr, NULL, &wlist, wstore_group ? (bool)iter : true)) { - Jmsg(jcr, M_INFO, 0, _("Failed to start job on the storage: %s\n"), - jcr->store_mngr->get_wstore()->name()); + Dmsg1(100, "Failed to start job on the storage: %s\n", jcr->store_mngr->get_wstore()->name()); continue; } else { - Jmsg(jcr, M_INFO, 0, _("Started job on storage: %s\n"), - jcr->store_mngr->get_wstore()->name()); + Jmsg(jcr, M_INFO, 0, _("Selected storage: %s, StorageGroupPolicy: \"%s\"\n"), + jcr->store_mngr->get_wstore()->name(), jcr->store_mngr->get_policy_name()); sd_job_started = true; break; } diff --git a/bacula/src/dird/dird_conf.c b/bacula/src/dird/dird_conf.c index 0f0f8d9e7..66cc4c210 100644 --- a/bacula/src/dird/dird_conf.c +++ b/bacula/src/dird/dird_conf.c @@ -602,7 +602,7 @@ RES_ITEM job_items[] = { {"Level", store_level, ITEM(res_job.JobLevel), 0, 0, 0}, {"Messages", store_res, ITEM(res_job.messages), R_MSGS, ITEM_REQUIRED, 0}, {"Storage", store_alist_res, ITEM(res_job.storage), R_STORAGE, 0, 0}, - {"StoragePolicy", store_storage_mngr, ITEM(res_job.storage_policy), 0, 0, 0}, + {"StorageGroupPolicy", store_storage_mngr, ITEM(res_job.storage_policy), 0, 0, 0}, {"Pool", store_res, ITEM(res_job.pool), R_POOL, ITEM_REQUIRED, 0}, {"NextPool", store_res, ITEM(res_job.next_pool), R_POOL, 0, 0}, {"FullBackupPool", store_res, ITEM(res_job.full_pool), R_POOL, 0, 0}, diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index 2f128d2e9..d6100da4a 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -1629,9 +1629,11 @@ void set_jcr_defaults(JCR *jcr, JOB *job) if (job->storage_policy) { if (strcmp(job->storage_policy, "LeastUsed") == 0) { jcr->store_mngr = New(LeastUsedStore()); + } else if (strcmp(job->storage_policy, "ListedOrder") == 0) { + jcr->store_mngr = New(ListedOrderStore()); } } else { - jcr->store_mngr = New(SimpleStoreMngr()); + jcr->store_mngr = New(ListedOrderStore()); } set_jcr_default_store(jcr, job); diff --git a/bacula/src/dird/store_mngr.c b/bacula/src/dird/store_mngr.c index f5615cdb4..c3e54bef4 100644 --- a/bacula/src/dird/store_mngr.c +++ b/bacula/src/dird/store_mngr.c @@ -299,7 +299,8 @@ void LeastUsedStore::apply_policy(bool write_store) { } -StorageManager::StorageManager() { +StorageManager::StorageManager(const char *policy) { + this->policy = bstrdup(policy); rstore.set_rw(false); wstore.set_rw(true); }; diff --git a/bacula/src/dird/store_mngr.h b/bacula/src/dird/store_mngr.h index 14c64c474..916c7cb15 100644 --- a/bacula/src/dird/store_mngr.h +++ b/bacula/src/dird/store_mngr.h @@ -42,6 +42,7 @@ class STORE; */ static char const *storage_mngmt_policy[] = { "LeastUsed", + "ListedOrder", NULL }; @@ -124,15 +125,17 @@ class StorageManager : public SMARTALLOC { protected: storage rstore; /* Read storage */ storage wstore; /* Write storage */ + const char *policy; public: virtual void apply_policy(bool write_store) = 0; virtual ~StorageManager() { reset_rwstorage(); + free(policy); }; - StorageManager(); + StorageManager(const char *policy); /* Helper to validate if policy user wants to use is a valid one */ static bool check_policy(const char *policy) { @@ -194,6 +197,10 @@ class StorageManager : public SMARTALLOC { /************ GENERIC STORAGE HELPERS ************/ void reset_rwstorage(); + + const char *get_policy_name() { + return policy; + } }; /* @@ -203,7 +210,7 @@ class LeastUsedStore : public StorageManager { public: void apply_policy(bool write_store); - LeastUsedStore() { + LeastUsedStore() : StorageManager("LeastUsed") { } ~LeastUsedStore() { @@ -213,7 +220,7 @@ class LeastUsedStore : public StorageManager { /* * Default policy for the storage group. It uses first available storage from the list. */ -class SimpleStoreMngr : public StorageManager { +class ListedOrderStore : public StorageManager { private: public: @@ -221,10 +228,10 @@ class SimpleStoreMngr : public StorageManager { /* Do nothing for now */ } - SimpleStoreMngr() { + ListedOrderStore(): StorageManager("ListedOrder") { } - ~SimpleStoreMngr() { + ~ListedOrderStore() { } };