From 8b2b5a33bd156ef1a14e3cf68b7ed923dc7b4645 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Thu, 26 Dec 2013 09:59:18 +0100 Subject: [PATCH] mon: implement --osd-pool-default-crush-erasure-ruleset It must be different from the replicated default. Signed-off-by: Loic Dachary --- src/common/config.h | 1 + src/common/config_opts.h | 1 + src/mon/OSDMonitor.cc | 16 ++++++++++++---- src/test/mon/osd-pool-create.sh | 8 ++++++++ 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/common/config.h b/src/common/config.h index 4ba1cb9b87886..0b6ab761162eb 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -31,6 +31,7 @@ extern struct ceph_file_layout g_default_file_layout; enum { CEPH_DEFAULT_CRUSH_REPLICATED_RULESET, + CEPH_DEFAULT_CRUSH_ERASURE_RULESET, }; #define OSD_REP_PRIMARY 0 diff --git a/src/common/config_opts.h b/src/common/config_opts.h index d4ffc93f94c1b..0a452fec46bbb 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -395,6 +395,7 @@ OPTION(osd_pgp_bits, OPT_INT, 6) // bits per osd OPTION(osd_crush_chooseleaf_type, OPT_INT, 1) // 1 = host OPTION(osd_pool_default_crush_rule, OPT_INT, -1) // deprecated for osd_pool_default_crush_replicated_ruleset OPTION(osd_pool_default_crush_replicated_ruleset, OPT_INT, CEPH_DEFAULT_CRUSH_REPLICATED_RULESET) +OPTION(osd_pool_default_crush_erasure_ruleset, OPT_INT, CEPH_DEFAULT_CRUSH_ERASURE_RULESET) OPTION(osd_pool_default_size, OPT_INT, 3) OPTION(osd_pool_default_min_size, OPT_INT, 0) // 0 means no specific default; ceph will use size-size/2 OPTION(osd_pool_default_pg_num, OPT_INT, 8) // number of PGs for new pools. Configure in global or mon section of ceph.conf diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index b9e69a040cbf0..3ff0d660a2b14 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2784,11 +2784,19 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_ruleset, pi->size = g_conf->osd_pool_default_size; pi->min_size = g_conf->get_osd_pool_default_min_size(); - if (crush_ruleset >= 0) + if (crush_ruleset >= 0) { pi->crush_ruleset = crush_ruleset; - else - pi->crush_ruleset = - CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(g_ceph_context); + } else { + switch(pool_type) { + case pg_pool_t::TYPE_REPLICATED: + pi->crush_ruleset = + CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(g_ceph_context); + break; + case pg_pool_t::TYPE_ERASURE: + pi->crush_ruleset = g_conf->osd_pool_default_crush_erasure_ruleset; + break; + } + } pi->object_hash = CEPH_STR_HASH_RJENKINS; pi->set_pg_num(pg_num ? pg_num : g_conf->osd_pool_default_pg_num); pi->set_pgp_num(pgp_num ? pgp_num : g_conf->osd_pool_default_pgp_num); diff --git a/src/test/mon/osd-pool-create.sh b/src/test/mon/osd-pool-create.sh index 6fb81b7019ea4..c3c07ccb8d004 100755 --- a/src/test/mon/osd-pool-create.sh +++ b/src/test/mon/osd-pool-create.sh @@ -81,6 +81,14 @@ run_mon --osd_pool_default_erasure_code_properties 1 ./ceph osd pool create poolA 12 12 erasure 2>&1 | grep 'must be a JSON object' kill_mon +# explicitly set the default erasure crush rule +expected=88 +run_mon --osd_pool_default_crush_erasure_ruleset $expected +./ceph --format json osd dump | grep '"crush_ruleset":'$expected && exit 1 +./ceph osd pool create pool_erasure 12 12 erasure +./ceph --format json osd dump | grep '"crush_ruleset":'$expected +kill_mon + expected='"foo":"bar"' # osd_pool_default_erasure_code_properties is JSON run_mon --osd_pool_default_erasure_code_properties "{$expected}" -- 2.39.5