From 61c45fe03de7e2f8c276ef355c63280d5059582c Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Sun, 2 Feb 2014 09:56:13 +0100 Subject: [PATCH] mon: pool create helper for crush ruleset The crush ruleset of the replicated pools are by default set to osd_pool_default_crush_replicated_ruleset but it may vary depending on the pool type. Create a helper to compute the crush ruleset. Reviewed-By: Christophe Courtaut Signed-off-by: Loic Dachary --- src/mon/OSDMonitor.cc | 33 ++++++++++++++++++++++++--------- src/mon/OSDMonitor.h | 4 ++++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 8545457db4398..0a733684d2d7e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2791,6 +2791,27 @@ int OSDMonitor::prepare_pool_size(const unsigned pool_type, } return err; } +int OSDMonitor::prepare_pool_crush_ruleset(const unsigned pool_type, + const map &properties, + int *crush_ruleset, + stringstream &ss) +{ + if (*crush_ruleset < 0) { + switch (pool_type) { + case pg_pool_t::TYPE_REPLICATED: + *crush_ruleset = + CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(g_ceph_context); + break; + default: + ss << "prepare_pool_crush_ruleset: " << pool_type + << " is not a known pool type"; + return -EINVAL; + break; + } + } + + return 0; +} /** * @param name The name of the new pool * @param auid The auid of the pool owner. Can be -1 @@ -2813,15 +2834,9 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_ruleset, int r = prepare_pool_properties(pool_type, properties, &properties_map, ss); if (r) return r; - if (crush_ruleset < 0) { - if (pool_type == pg_pool_t::TYPE_REPLICATED) { - crush_ruleset = - CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(g_ceph_context); - } else { - ss << "prepare_new_pool(" << name << ") ruleset must be set"; - return -EINVAL; - } - } + r = prepare_pool_crush_ruleset(pool_type, properties_map, &crush_ruleset, ss); + if (r) + return r; unsigned size; r = prepare_pool_size(pool_type, properties_map, &size, ss); if (r) diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 2b16234994322..83ca34dab076d 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -240,6 +240,10 @@ private: const vector &properties, map *properties_map, stringstream &ss); + int prepare_pool_crush_ruleset(const unsigned pool_type, + const map &properties, + int *crush_ruleset, + stringstream &ss); int prepare_pool_size(const unsigned pool_type, const map &properties, unsigned *size, -- 2.39.5