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
~~~~~~~
: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``
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
// 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)
{
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,
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);
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);
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
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
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