]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crush: simplify osd_pool_default_crush_rule config
authorSage Weil <sage@redhat.com>
Fri, 28 Apr 2017 22:33:49 +0000 (18:33 -0400)
committerSage Weil <sage@redhat.com>
Mon, 19 Jun 2017 23:09:06 +0000 (19:09 -0400)
Make an incompat change here with a release note since
this only affects pool creation, a rare event, and folks
who have customized their configs (also rare).

Keep it simple: a config sets the default rule, or else we pick
the first TYPE_REPLICATED pool in the crush map.

Signed-off-by: Sage Weil <sage@redhat.com>
PendingReleaseNotes
src/common/config.h
src/common/config_opts.h
src/crush/CrushWrapper.cc
src/crush/CrushWrapper.h
src/osd/OSDMap.cc
src/pybind/mgr/restful/api/crush.py
src/pybind/mgr/restful/common.py
src/pybind/mgr/restful/module.py
src/test/mon/osd-pool-create.sh

index b4dba595d9ab9232b0201db852865810e8fad2e8..6051ee609c6ee3eb3828603b2e99b731b2eee4f2 100644 (file)
 
 * The deprecated 'crush_ruleset' property has finally been removed; please use
   'crush_rule' instead for the 'osd pool get ...' and 'osd pool set ..' commands.
+
+* The 'osd pool default crush replicated ruleset' option has been
+  removed and replaced by the 'osd pool default crush rule' option.
+  By default it is -1, which means the mon will pick the first type
+  replicated rule in the CRUSH map for replicated pools.  Erasure
+  coded pools have rules that are automatically created for them if they are
+  not specified at pool creation time.
index 4c970d24c72944ecb3f840591ad8e165c4bdb6a8..0d32fb3b90c5beb578eccff625e58e60c68e413e 100644 (file)
 #include "log/SubsystemMap.h"
 #include "common/config_obs.h"
 
-enum {
-  CEPH_DEFAULT_CRUSH_REPLICATED_RULESET,
-  CEPH_DEFAULT_CRUSH_ERASURE_RULESET,
-};
-
 #define OSD_REP_PRIMARY 0
 #define OSD_REP_SPLAY   1
 #define OSD_REP_CHAIN   2
index f8af42a675689920385cbfe3e883b364990a2588..13add94e09361f3e26b74f63557c179e701171f0 100644 (file)
@@ -690,8 +690,7 @@ OPTION(osd_crush_chooseleaf_type, OPT_INT, 1) // 1 = host
 OPTION(osd_pool_use_gmt_hitset, OPT_BOOL, true) // try to use gmt for hitset archive names if all osds in cluster support it.
 OPTION(osd_crush_update_on_start, OPT_BOOL, true)
 OPTION(osd_crush_initial_weight, OPT_DOUBLE, -1) // if >=0, the initial weight is for newly added osds.
-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_rule, OPT_INT, -1)
 OPTION(osd_pool_erasure_code_stripe_unit, OPT_U32, 4096) // in bytes
 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
index c94fc6b97d6ce49d31c15a341eb250b4d1086938..192a0379157a0f7dc057f415f84180054c6a570f 100644 (file)
@@ -2389,26 +2389,6 @@ void CrushWrapper::generate_test_instances(list<CrushWrapper*>& o)
   // fixme
 }
 
-int CrushWrapper::_get_osd_pool_default_crush_replicated_ruleset(CephContext *cct,
-                                                                 bool quiet)
-{
-  int crush_ruleset = cct->_conf->osd_pool_default_crush_rule;
-  if (crush_ruleset == -1) {
-    crush_ruleset = cct->_conf->osd_pool_default_crush_replicated_ruleset;
-  } else if (!quiet) {
-    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;
-  }
-
-  return crush_ruleset;
-}
-
 /**
  * Determine the default CRUSH ruleset ID to be used with
  * newly created replicated pools.
@@ -2417,14 +2397,12 @@ int CrushWrapper::_get_osd_pool_default_crush_replicated_ruleset(CephContext *cc
  */
 int CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(CephContext *cct)
 {
-  int crush_ruleset = _get_osd_pool_default_crush_replicated_ruleset(cct,
-                                                                     false);
-  if (crush_ruleset == CEPH_DEFAULT_CRUSH_REPLICATED_RULESET) {
+  int crush_ruleset = cct->_conf->osd_pool_default_crush_rule;
+  if (crush_ruleset < 0) {
     crush_ruleset = find_first_ruleset(pg_pool_t::TYPE_REPLICATED);
   } else if (!ruleset_exists(crush_ruleset)) {
     crush_ruleset = -1; // match find_first_ruleset() retval
   }
-
   return crush_ruleset;
 }
 
index 959682ec14987a5c8d4fe2437a9a98a63a3647ec..059362a60d801b8b9d8fd49c16f4aa10e6cae29d 100644 (file)
@@ -1357,8 +1357,6 @@ public:
   void dump_tree(Formatter *f) const;
   static void generate_test_instances(list<CrushWrapper*>& o);
 
-  int _get_osd_pool_default_crush_replicated_ruleset(CephContext *cct,
-                                                     bool quiet);
   int get_osd_pool_default_crush_replicated_ruleset(CephContext *cct);
 
   static bool is_valid_crush_name(const string& s);
index 23404bb864a538e32b719a23b2cd620b14e22558..8f0dff9b868cc44e8cbfd91180c010fd21d406fc 100644 (file)
@@ -3459,14 +3459,10 @@ int OSDMap::build_simple_crush_rulesets(CephContext *cct,
                                        const string& root,
                                        ostream *ss)
 {
-  int crush_ruleset =
-      crush._get_osd_pool_default_crush_replicated_ruleset(cct, true);
+  int crush_ruleset = crush.get_osd_pool_default_crush_replicated_ruleset(cct);
   string failure_domain =
     crush.get_type_name(cct->_conf->osd_crush_chooseleaf_type);
 
-  if (crush_ruleset == CEPH_DEFAULT_CRUSH_REPLICATED_RULESET)
-    crush_ruleset = -1; // create ruleset 0 by default
-
   int r;
   r = crush.add_simple_ruleset_at("replicated_ruleset", root, failure_domain,
                                   "firstn", pg_pool_t::TYPE_REPLICATED,
index 046676a2815fb6a16d2017323bb571e703ce6d5d..11a04264da23a5e8e65319cba9e328591e0635a7 100644 (file)
@@ -7,25 +7,6 @@ from collections import defaultdict
 from restful.decorators import auth
 
 
-class CrushRuleset(RestController):
-    @expose(template='json')
-    @auth
-    def get(self, **kwargs):
-        """
-        Show crush rulesets
-        """
-        rules = module.instance.get('osd_map_crush')['rules']
-        nodes = module.instance.get('osd_map_tree')['nodes']
-
-        ruleset = defaultdict(list)
-        for rule in rules:
-            rule['osd_count'] = len(common.crush_rule_osds(nodes, rule))
-            ruleset[rule['ruleset']].append(rule)
-
-        return ruleset
-
-
-
 class CrushRule(RestController):
     @expose(template='json')
     @auth
@@ -41,8 +22,5 @@ class CrushRule(RestController):
 
         return rules
 
-
-
 class Crush(RestController):
     rule = CrushRule()
-    ruleset = CrushRuleset()
index 15a14ed9f47ec692a0637614e01611314f26292a..dc8b39b6e6e3c4dec4363f47810d254efbec8f6c 100644 (file)
@@ -12,7 +12,7 @@ OSD_IMPLEMENTED_COMMANDS = [
 # Valid values for the 'var' argument to 'ceph osd pool set'
 POOL_PROPERTIES_1 = [
     'size', 'min_size', 'crash_replay_interval', 'pg_num',
-    'crush_ruleset', 'hashpspool',
+    'crush_rule', 'hashpspool',
 ]
 
 POOL_PROPERTIES_2 = [
index 2759e96eddbd04b27ea917c4594835b6a8de156d..9d9d2db7a9f5828cabc89021faf39afd3eea7972 100644 (file)
@@ -419,7 +419,7 @@ class Module(MgrModule):
         osds_by_pool = {}
         for pool_id, pool in pools.items():
             pool_osds = None
-            for rule in [r for r in crush_rules if r['ruleset'] == pool['crush_ruleset']]:
+            for rule in [r for r in crush_rules if r['rule_id'] == pool['crush_rule']]:
                 if rule['min_size'] <= pool['size'] <= rule['max_size']:
                     pool_osds = common.crush_rule_osds(self.get('osd_map_tree')['nodes'], rule)
 
index cac15998abd5e3f02524c39cba84c53b9970be15..b879d9de0bec99b136649b10fff4ad328602be72 100755 (executable)
@@ -35,44 +35,6 @@ function run() {
     done
 }
 
-function TEST_default_deprectated_0() {
-    local dir=$1
-    # explicitly set the default crush rule
-    local expected=66
-    run_mon $dir a \
-        --osd_pool_default_crush_replicated_ruleset $expected || return 1
-    ceph osd pool get rbd crush_ruleset | grep 'ruleset: '$expected || return 1
-    ceph osd crush rule dump replicated_ruleset | grep '"ruleset": '$expected || return 1
-    CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
-    ! grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
-}
-
-function TEST_default_deprectated_1() {
-    local dir=$1
-    # explicitly set the default crush rule using deprecated option
-    local expected=55
-    run_mon $dir a \
-        --osd_pool_default_crush_rule $expected || return 1
-    ceph osd pool get rbd crush_ruleset | grep 'ruleset: '$expected || return 1
-    ceph osd crush rule dump replicated_ruleset | grep '"ruleset": '$expected || return 1
-    CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
-    grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
-}
-
-function TEST_default_deprectated_2() {
-    local dir=$1
-    local expected=77
-    local unexpected=33
-    run_mon $dir a \
-        --osd_pool_default_crush_rule $expected \
-        --osd_pool_default_crush_replicated_ruleset $unexpected || return 1
-    ceph osd pool get rbd crush_ruleset | grep 'ruleset: '$expected || return 1
-    ! ceph --format json osd dump | grep '"crush_ruleset":'$unexpected || return 1
-    ceph osd crush rule dump replicated_ruleset | grep '"ruleset": '$expected || return 1
-    CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
-    grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
-}
-
 # Before http://tracker.ceph.com/issues/8307 the invalid profile was created
 function TEST_erasure_invalid_profile() {
     local dir=$1
@@ -190,42 +152,6 @@ function TEST_replicated_pool_with_ruleset() {
         grep "doesn't exist" || return 1
 }
 
-function TEST_replicated_pool_with_non_existent_default_ruleset_0() {
-    local dir=$1
-    run_mon $dir a || return 1
-    # change the default crush rule
-    ceph tell mon.a injectargs -- \
-        --osd_pool_default_crush_replicated_ruleset 66 || return 1
-    ceph osd pool create mypool 12 12 replicated 2>&1 | \
-        grep "No suitable CRUSH rule exists" || return 1
-    CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
-    ! grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
-}
-
-function TEST_replicated_pool_with_non_existent_default_ruleset_1() {
-    local dir=$1
-    run_mon $dir a || return 1
-    # change the default crush rule using deprecated option
-    ceph tell mon.a injectargs -- \
-        --osd_pool_default_crush_rule 55 || return 1
-    ceph osd pool create mypool 12 12 replicated 2>&1 | \
-        grep "No suitable CRUSH rule exists" || return 1
-    CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
-    grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
-}
-
-function TEST_replicated_pool_with_non_existent_default_ruleset_2() {
-    local dir=$1
-    run_mon $dir a || return 1
-    ceph tell mon.a injectargs -- \
-        --osd_pool_default_crush_rule 77 \
-        --osd_pool_default_crush_replicated_ruleset 33 || return 1
-    ceph osd pool create mypool 12 12 replicated 2>&1 | \
-        grep "No suitable CRUSH rule exists" || return 1
-    CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
-    grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
-}
-
 function TEST_erasure_code_pool_lrc() {
     local dir=$1
     run_mon $dir a || return 1