]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: implement --osd-pool-default-crush-replicated-ruleset
authorLoic Dachary <loic@dachary.org>
Thu, 26 Dec 2013 11:03:57 +0000 (12:03 +0100)
committerLoic Dachary <loic@dachary.org>
Thu, 26 Dec 2013 23:13:47 +0000 (00:13 +0100)
--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 <loic@dachary.org>
PendingReleaseNotes
doc/rados/configuration/pool-pg-config-ref.rst
src/common/config_opts.h
src/crush/CrushWrapper.cc
src/crush/CrushWrapper.h
src/mon/OSDMonitor.cc
src/osd/OSDMap.cc
src/test/cli/osdmaptool/create-print.t
src/test/cli/osdmaptool/create-racks.t
src/test/mon/osd-pool-create.sh

index a3c1ac2f864a2df60eff77c8fb4ae2f823b83c54..0c39dbb96a38be58f4a450ac6f97584412d1b05f 100644 (file)
@@ -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
 ~~~~~~~
index 8c6632764a453c705911dbae4fd04122b76423f3..6c85a99843b0ad194a45ac3465eb0379ee781ba8 100644 (file)
@@ -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``
 
 
index 57b1b26b410e1d1180f4cb58dbabcef285740620..d4ffc93f94c1ba21185a6c22e9b1e0f72d2ae461 100644 (file)
@@ -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
index 77a2627977099d499e2efa1c9c160bf0329248af..041594bfcab336035513b11ad777ee44e87a897e 100644 (file)
@@ -1339,6 +1339,22 @@ void CrushWrapper::generate_test_instances(list<CrushWrapper*>& 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)
 {
index 82ecc5568e3565e89c13a662581597b366092224..d0f34f06984ace5b3353d44fe91febec47851198 100644 (file)
@@ -865,6 +865,7 @@ public:
   void dump_tree(const vector<__u32>& w, ostream *out, Formatter *f) const;
   static void generate_test_instances(list<CrushWrapper*>& 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,
index e1dda867ac1ecc63d2e4d1e63ce9f49c55a76546..b9e69a040cbf070f777e8f7fe0614a4d6c6ae79d 100644 (file)
@@ -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);
index 4a02ab4d36b5513a19d23d96ead03e66238d98eb..3cc166aa381bf65f3f583ecbc54a171cfcee7ab1 100644 (file)
@@ -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);
index 80761d9c371a61c484602b87f1496961e3302eab..4f88bed3106078515ac77fa23272f904f8fa826b 100644 (file)
   
   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
index e8fe4d0750244d6ca3abe31f93548ded0684ba63..363d7a7c538b73829a29e53047d6c8c87ec0b8b7 100644 (file)
   
   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
index 35cfd409ced348d330430c2d1210c2529dc2f9e2..6fb81b7019ea427fab29463913869a5e3f74ccfd 100755 (executable)
@@ -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