From: Loic Dachary Date: Thu, 26 Dec 2013 11:03:57 +0000 (+0100) Subject: mon: implement --osd-pool-default-crush-replicated-ruleset X-Git-Tag: v0.75~31^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dd81858ca65b04daa220cb6ec1bbd9d8bca555aa;p=ceph.git mon: implement --osd-pool-default-crush-replicated-ruleset --osd-pool-default-crush-replicated-ruleset replaces --osd-pool-default-crush-rule If --osd-pool-default-crush-rule is set it takes precedence over --osd-pool-default-crush-replicated-ruleset and a deprecation warning is displayed. The CrushWrapper::get_osd_pool_default_crush_replicated_ruleset helper is used to implement this behaviour. Signed-off-by: Loic Dachary --- diff --git a/PendingReleaseNotes b/PendingReleaseNotes index a3c1ac2f864a..0c39dbb96a38 100644 --- a/PendingReleaseNotes +++ b/PendingReleaseNotes @@ -20,6 +20,10 @@ v0.74 monitors (e.g., after 'ceph-deploy new' but before 'ceph-deploy mon create ...'). +- The configuration option 'osd pool default crush rule' is deprecated + and replaced with 'osd pool default crush replicated ruleset'. 'osd + pool default crush rule' takes precedence for backward compatibility + and a deprecation warning is displayed when it is used. v0.72.2 ~~~~~~~ diff --git a/doc/rados/configuration/pool-pg-config-ref.rst b/doc/rados/configuration/pool-pg-config-ref.rst index 8c6632764a45..6c85a99843b0 100644 --- a/doc/rados/configuration/pool-pg-config-ref.rst +++ b/doc/rados/configuration/pool-pg-config-ref.rst @@ -66,10 +66,10 @@ Ceph configuration file. :Default: ``1``. Typically a host containing one or more Ceph OSD Daemons. -``osd pool default crush rule`` +``osd pool default crush replicated ruleset`` -:Description: The default CRUSH ruleset to use when creating a pool. -:Type: 32-bit Integer +:Description: The default CRUSH ruleset to use when creating a replicated pool. +:Type: 8-bit Integer :Default: ``0`` diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 57b1b26b410e..d4ffc93f94c1 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -393,7 +393,8 @@ OPTION(osd_client_message_cap, OPT_U64, 100) // num client messages OPTION(osd_pg_bits, OPT_INT, 6) // bits per osd 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, CEPH_DEFAULT_CRUSH_REPLICATED_RULESET) +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_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/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index 77a262797709..041594bfcab3 100644 --- a/src/crush/CrushWrapper.cc +++ b/src/crush/CrushWrapper.cc @@ -1339,6 +1339,22 @@ void CrushWrapper::generate_test_instances(list& o) // fixme } +int CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(CephContext *cct) +{ + int crush_ruleset = cct->_conf->osd_pool_default_crush_replicated_ruleset; + if (cct->_conf->osd_pool_default_crush_rule != -1) { + ldout(cct, 0) << "osd_pool_default_crush_rule is deprecated " + << "use osd_pool_default_crush_replicated_ruleset instead" + << dendl; + ldout(cct, 0) << "osd_pool_default_crush_rule = " + << cct->_conf-> osd_pool_default_crush_rule << " overrides " + << "osd_pool_default_crush_replicated_ruleset = " + << cct->_conf->osd_pool_default_crush_replicated_ruleset + << dendl; + crush_ruleset = cct->_conf->osd_pool_default_crush_rule; + } + return crush_ruleset; +} bool CrushWrapper::is_valid_crush_name(const string& s) { diff --git a/src/crush/CrushWrapper.h b/src/crush/CrushWrapper.h index 82ecc5568e35..d0f34f06984a 100644 --- a/src/crush/CrushWrapper.h +++ b/src/crush/CrushWrapper.h @@ -865,6 +865,7 @@ public: void dump_tree(const vector<__u32>& w, ostream *out, Formatter *f) const; static void generate_test_instances(list& o); + static int get_osd_pool_default_crush_replicated_ruleset(CephContext *cct); static bool is_valid_crush_name(const string& s); static bool is_valid_crush_loc(CephContext *cct, diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index e1dda867ac1e..b9e69a040cbf 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2787,7 +2787,8 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_ruleset, if (crush_ruleset >= 0) pi->crush_ruleset = crush_ruleset; else - pi->crush_ruleset = g_conf->osd_pool_default_crush_rule; + pi->crush_ruleset = + CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(g_ceph_context); 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/osd/OSDMap.cc b/src/osd/OSDMap.cc index 4a02ab4d36b5..3cc166aa381b 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1899,7 +1899,8 @@ int OSDMap::build_simple(CephContext *cct, epoch_t e, uuid_d &fsid, pools[pool].flags |= pg_pool_t::FLAG_HASHPSPOOL; pools[pool].size = cct->_conf->osd_pool_default_size; pools[pool].min_size = cct->_conf->get_osd_pool_default_min_size(); - pools[pool].crush_ruleset = cct->_conf->osd_pool_default_crush_rule; + pools[pool].crush_ruleset = + CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(cct); pools[pool].object_hash = CEPH_STR_HASH_RJENKINS; pools[pool].set_pg_num(poolbase << pg_bits); pools[pool].set_pgp_num(poolbase << pgp_bits); diff --git a/src/test/cli/osdmaptool/create-print.t b/src/test/cli/osdmaptool/create-print.t index 80761d9c371a..4f88bed31060 100644 --- a/src/test/cli/osdmaptool/create-print.t +++ b/src/test/cli/osdmaptool/create-print.t @@ -16,3 +16,32 @@ max_osd 3 + $ osdmaptool --clobber --createsimple 3 --osd_pool_default_crush_replicated_ruleset 66 myosdmap + osdmaptool: osdmap file 'myosdmap' + osdmaptool: writing epoch 1 to myosdmap + $ osdmaptool --print myosdmap | grep 'pool 0' + osdmaptool: osdmap file 'myosdmap' + pool 0 'data' replicated size 3 min_size 2 crush_ruleset 66 object_hash rjenkins pg_num 192 pgp_num 192 last_change 0 owner 0 flags hashpspool crash_replay_interval 45 + $ osdmaptool --clobber --createsimple 3 --osd_pool_default_crush_rule 55 myosdmap 2>&1 >/dev/null | sed -e 's/^.* 0 osd_pool_//' + osdmaptool: osdmap file 'myosdmap' + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 0 + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 0 + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 0 + $ osdmaptool --print myosdmap | grep 'pool 0' + osdmaptool: osdmap file 'myosdmap' + pool 0 'data' replicated size 3 min_size 2 crush_ruleset 55 object_hash rjenkins pg_num 192 pgp_num 192 last_change 0 owner 0 flags hashpspool crash_replay_interval 45 + $ osdmaptool --clobber --createsimple 3 --osd_pool_default_crush_replicated_ruleset 66 --osd_pool_default_crush_rule 55 myosdmap 2>&1 >/dev/null | sed -e 's/^.* 0 osd_pool_//' + osdmaptool: osdmap file 'myosdmap' + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 66 + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 66 + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 66 + $ osdmaptool --print myosdmap | grep 'pool 0' + osdmaptool: osdmap file 'myosdmap' + pool 0 'data' replicated size 3 min_size 2 crush_ruleset 55 object_hash rjenkins pg_num 192 pgp_num 192 last_change 0 owner 0 flags hashpspool crash_replay_interval 45 + $ rm -f myosdmap diff --git a/src/test/cli/osdmaptool/create-racks.t b/src/test/cli/osdmaptool/create-racks.t index e8fe4d075024..363d7a7c538b 100644 --- a/src/test/cli/osdmaptool/create-racks.t +++ b/src/test/cli/osdmaptool/create-racks.t @@ -19,4 +19,33 @@ max_osd 239 + + $ osdmaptool --clobber --create-from-conf --osd_pool_default_crush_replicated_ruleset 55 om -c $TESTDIR/ceph.conf.withracks + osdmaptool: osdmap file 'om' + osdmaptool: writing epoch 1 to om + $ osdmaptool --print om | grep 'pool 0' + osdmaptool: osdmap file 'om' + pool 0 'data' replicated size 3 min_size 2 crush_ruleset 55 object_hash rjenkins pg_num 15296 pgp_num 15296 last_change 0 owner 0 flags hashpspool crash_replay_interval 45 + $ osdmaptool --clobber --create-from-conf --osd_pool_default_crush_rule 55 om -c $TESTDIR/ceph.conf.withracks 2>&1 >/dev/null | sed -e 's/^.* 0 osd_pool_//' + osdmaptool: osdmap file 'om' + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 0 + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 0 + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 0 + $ osdmaptool --print om | grep 'pool 0' + osdmaptool: osdmap file 'om' + pool 0 'data' replicated size 3 min_size 2 crush_ruleset 55 object_hash rjenkins pg_num 15296 pgp_num 15296 last_change 0 owner 0 flags hashpspool crash_replay_interval 45 + $ osdmaptool --clobber --create-from-conf --osd_pool_default_crush_replicated_ruleset 66 --osd_pool_default_crush_rule 55 om -c $TESTDIR/ceph.conf.withracks 2>&1 >/dev/null | sed -e 's/^.* 0 osd_pool_//' + osdmaptool: osdmap file 'om' + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 66 + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 66 + default_crush_rule is deprecated use osd_pool_default_crush_replicated_ruleset instead + default_crush_rule = 55 overrides osd_pool_default_crush_replicated_ruleset = 66 + $ osdmaptool --print om | grep 'pool 0' + osdmaptool: osdmap file 'om' + pool 0 'data' replicated size 3 min_size 2 crush_ruleset 55 object_hash rjenkins pg_num 15296 pgp_num 15296 last_change 0 owner 0 flags hashpspool crash_replay_interval 45 $ rm -f om diff --git a/src/test/mon/osd-pool-create.sh b/src/test/mon/osd-pool-create.sh index 35cfd409ced3..6fb81b7019ea 100755 --- a/src/test/mon/osd-pool-create.sh +++ b/src/test/mon/osd-pool-create.sh @@ -51,6 +51,30 @@ function kill_mon() { rm -fr $DIR/store.db } +# explicitly set the default crush rule +expected=66 +run_mon --osd_pool_default_crush_replicated_ruleset $expected +./ceph --format json osd dump | grep '"crush_ruleset":'$expected +grep "osd_pool_default_crush_rule is deprecated " $DIR/log && exit 1 +kill_mon + +# explicitly set the default crush rule using deprecated option +expected=55 +run_mon --osd_pool_default_crush_rule $expected +./ceph --format json osd dump | grep '"crush_ruleset":'$expected +grep "osd_pool_default_crush_rule is deprecated " $DIR/log +kill_mon + +expected=77 +unexpected=33 +run_mon \ + --osd_pool_default_crush_rule $expected \ + --osd_pool_default_crush_replicated_ruleset $unexpected +./ceph --format json osd dump | grep '"crush_ruleset":'$expected +./ceph --format json osd dump | grep '"crush_ruleset":'$unexpected && exit 1 +grep "osd_pool_default_crush_rule is deprecated " $DIR/log +kill_mon + # osd_pool_default_erasure_code_properties is # valid JSON but not of the expected type run_mon --osd_pool_default_erasure_code_properties 1