From: Sage Weil Date: Sat, 26 Jun 2021 18:17:04 +0000 (-0400) Subject: crush: remove last traces of 'ruleset' X-Git-Tag: v17.1.0~1398^2~11 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=d67bad8f3116b51152652f1e550ec48def095c62;p=ceph-ci.git crush: remove last traces of 'ruleset' Remove last traces of rulesets from crush. Mostly this means removing the checks that rule masks don't overlap, since no such rules should exist at this point, and the compiler no longer allows them. Scrub all mention of 'ruleset' from other code. Signed-off-by: Sage Weil --- diff --git a/src/crush/CrushCompiler.cc b/src/crush/CrushCompiler.cc index 007e7457d1b..bdffe435689 100644 --- a/src/crush/CrushCompiler.cc +++ b/src/crush/CrushCompiler.cc @@ -361,11 +361,8 @@ int CrushCompiler::decompile(ostream &out) print_rule_name(out, i, crush); out << " {\n"; out << "\tid " << i << "\n"; - if (i != crush.get_rule_mask_ruleset(i)) { - out << "\t# WARNING: ruleset " << crush.get_rule_mask_ruleset(i) << " != id " << i << "; this will not recompile to the same map\n"; - } - switch (crush.get_rule_mask_type(i)) { + switch (crush.get_rule_type(i)) { case CEPH_PG_TYPE_REPLICATED: out << "\ttype replicated\n"; break; @@ -373,7 +370,7 @@ int CrushCompiler::decompile(ostream &out) out << "\ttype erasure\n"; break; default: - out << "\ttype " << crush.get_rule_mask_type(i) << "\n"; + out << "\ttype " << crush.get_rule_type(i) << "\n"; } out << "\tmin_size " << crush.get_rule_mask_min_size(i) << "\n"; diff --git a/src/crush/CrushTester.cc b/src/crush/CrushTester.cc index 07a40b5c2c0..22cdf0db270 100644 --- a/src/crush/CrushTester.cc +++ b/src/crush/CrushTester.cc @@ -429,14 +429,6 @@ bool CrushTester::check_name_maps(unsigned max_id) const return true; } -static string get_rule_name(CrushWrapper& crush, int rule) -{ - if (crush.get_rule_name(rule)) - return crush.get_rule_name(rule); - else - return string("rule") + std::to_string(rule); -} - int CrushTester::test() { if (min_rule < 0 || max_rule < 0) { diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index 094fd0aa127..5a36d42d9d0 100644 --- a/src/crush/CrushWrapper.cc +++ b/src/crush/CrushWrapper.cc @@ -30,31 +30,6 @@ using ceph::decode_nohead; using ceph::encode; using ceph::Formatter; -bool CrushWrapper::has_legacy_rule_ids() const -{ - for (unsigned i=0; imax_rules; i++) { - crush_rule *r = crush->rules[i]; - if (r && - r->mask.ruleset != i) { - return true; - } - } - return false; -} - -std::map CrushWrapper::renumber_rules() -{ - std::map result; - for (unsigned i=0; imax_rules; i++) { - crush_rule *r = crush->rules[i]; - if (r && r->mask.ruleset != i) { - result[r->mask.ruleset] = i; - r->mask.ruleset = i; - } - } - return result; -} - bool CrushWrapper::has_non_straw2_buckets() const { for (int i=0; imax_buckets; ++i) { @@ -2281,14 +2256,9 @@ int CrushWrapper::add_simple_rule_at( *err << "rule with ruleno " << rno << " exists"; return -EEXIST; } - if (ruleset_exists(rno)) { - if (err) - *err << "ruleset " << rno << " exists"; - return -EEXIST; - } } else { for (rno = 0; rno < get_max_rules(); rno++) { - if (!rule_exists(rno) && !ruleset_exists(rno)) + if (!rule_exists(rno)) break; } } @@ -2334,7 +2304,6 @@ int CrushWrapper::add_simple_rule_at( steps = 5; int min_rep = mode == "firstn" ? 1 : 3; int max_rep = mode == "firstn" ? 10 : 20; - //set the ruleset the same as rule_id(rno) crush_rule *rule = crush_make_rule(steps, rno, rule_type, min_rep, max_rep); ceph_assert(rule); int step = 0; @@ -3570,27 +3539,26 @@ void CrushWrapper::dump_rules(Formatter *f) const } } -void CrushWrapper::dump_rule(int ruleset, Formatter *f) const +void CrushWrapper::dump_rule(int rule_id, Formatter *f) const { f->open_object_section("rule"); - f->dump_int("rule_id", ruleset); - if (get_rule_name(ruleset)) - f->dump_string("rule_name", get_rule_name(ruleset)); - f->dump_int("ruleset", get_rule_mask_ruleset(ruleset)); - f->dump_int("type", get_rule_mask_type(ruleset)); - f->dump_int("min_size", get_rule_mask_min_size(ruleset)); - f->dump_int("max_size", get_rule_mask_max_size(ruleset)); + f->dump_int("rule_id", rule_id); + if (get_rule_name(rule_id)) + f->dump_string("rule_name", get_rule_name(rule_id)); + f->dump_int("type", get_rule_type(rule_id)); + f->dump_int("min_size", get_rule_mask_min_size(rule_id)); + f->dump_int("max_size", get_rule_mask_max_size(rule_id)); f->open_array_section("steps"); - for (int j=0; jopen_object_section("step"); - switch (get_rule_op(ruleset, j)) { + switch (get_rule_op(rule_id, j)) { case CRUSH_RULE_NOOP: f->dump_string("op", "noop"); break; case CRUSH_RULE_TAKE: f->dump_string("op", "take"); { - int item = get_rule_arg1(ruleset, j); + int item = get_rule_arg1(rule_id, j); f->dump_int("item", item); const char *name = get_item_name(item); @@ -3602,36 +3570,36 @@ void CrushWrapper::dump_rule(int ruleset, Formatter *f) const break; case CRUSH_RULE_CHOOSE_FIRSTN: f->dump_string("op", "choose_firstn"); - f->dump_int("num", get_rule_arg1(ruleset, j)); - f->dump_string("type", get_type_name(get_rule_arg2(ruleset, j))); + f->dump_int("num", get_rule_arg1(rule_id, j)); + f->dump_string("type", get_type_name(get_rule_arg2(rule_id, j))); break; case CRUSH_RULE_CHOOSE_INDEP: f->dump_string("op", "choose_indep"); - f->dump_int("num", get_rule_arg1(ruleset, j)); - f->dump_string("type", get_type_name(get_rule_arg2(ruleset, j))); + f->dump_int("num", get_rule_arg1(rule_id, j)); + f->dump_string("type", get_type_name(get_rule_arg2(rule_id, j))); break; case CRUSH_RULE_CHOOSELEAF_FIRSTN: f->dump_string("op", "chooseleaf_firstn"); - f->dump_int("num", get_rule_arg1(ruleset, j)); - f->dump_string("type", get_type_name(get_rule_arg2(ruleset, j))); + f->dump_int("num", get_rule_arg1(rule_id, j)); + f->dump_string("type", get_type_name(get_rule_arg2(rule_id, j))); break; case CRUSH_RULE_CHOOSELEAF_INDEP: f->dump_string("op", "chooseleaf_indep"); - f->dump_int("num", get_rule_arg1(ruleset, j)); - f->dump_string("type", get_type_name(get_rule_arg2(ruleset, j))); + f->dump_int("num", get_rule_arg1(rule_id, j)); + f->dump_string("type", get_type_name(get_rule_arg2(rule_id, j))); break; case CRUSH_RULE_SET_CHOOSE_TRIES: f->dump_string("op", "set_choose_tries"); - f->dump_int("num", get_rule_arg1(ruleset, j)); + f->dump_int("num", get_rule_arg1(rule_id, j)); break; case CRUSH_RULE_SET_CHOOSELEAF_TRIES: f->dump_string("op", "set_chooseleaf_tries"); - f->dump_int("num", get_rule_arg1(ruleset, j)); + f->dump_int("num", get_rule_arg1(rule_id, j)); break; default: - f->dump_int("opcode", get_rule_op(ruleset, j)); - f->dump_int("arg1", get_rule_arg1(ruleset, j)); - f->dump_int("arg2", get_rule_arg2(ruleset, j)); + f->dump_int("opcode", get_rule_op(rule_id, j)); + f->dump_int("arg1", get_rule_arg1(rule_id, j)); + f->dump_int("arg2", get_rule_arg2(rule_id, j)); } f->close_section(); } @@ -3806,7 +3774,7 @@ int CrushWrapper::get_osd_pool_default_crush_replicated_rule( if (crush_rule < 0) { crush_rule = find_first_rule(pg_pool_t::TYPE_REPLICATED); } else if (!rule_exists(crush_rule)) { - crush_rule = -1; // match find_first_ruleset() retval + crush_rule = -1; // match find_first_rule() retval } return crush_rule; } diff --git a/src/crush/CrushWrapper.h b/src/crush/CrushWrapper.h index ff03da9d11f..567b654ce27 100644 --- a/src/crush/CrushWrapper.h +++ b/src/crush/CrushWrapper.h @@ -72,8 +72,6 @@ public: private: struct crush_map *crush = nullptr; - bool have_uniform_rules = false; - /* reverse maps */ mutable bool have_rmaps = false; mutable std::map type_rmap, name_rmap, rule_name_rmap; @@ -117,26 +115,6 @@ public: set_tunables_default(); } - /** - * true if any rule has a rule id != its position in the array - * - * These indicate "ruleset" IDs that were created by older versions - * of Ceph. They are cleaned up in renumber_rules so that eventually - * we can remove the code for handling them. - */ - bool has_legacy_rule_ids() const; - - /** - * fix rules whose ruleid != ruleset - * - * These rules were created in older versions of Ceph. The concept - * of a ruleset no longer exists. - * - * Return a map of old ID -> new ID. Caller must update OSDMap - * to use new IDs. - */ - std::map renumber_rules(); - /// true if any buckets that aren't straw2 bool has_non_straw2_buckets() const; @@ -1084,12 +1062,7 @@ public: if (IS_ERR(r)) return PTR_ERR(r); return r->len; } - int get_rule_mask_ruleset(unsigned ruleno) const { - crush_rule *r = get_rule(ruleno); - if (IS_ERR(r)) return -1; - return r->mask.ruleset; - } - int get_rule_mask_type(unsigned ruleno) const { + int get_rule_type(unsigned ruleno) const { crush_rule *r = get_rule(ruleno); if (IS_ERR(r)) return -1; return r->mask.type; @@ -1338,7 +1311,6 @@ public: name_map.rbegin()->first >= crush->max_devices) { crush->max_devices = name_map.rbegin()->first + 1; } - have_uniform_rules = !has_legacy_rule_ids(); build_rmaps(); } int bucket_set_alg(int id, int alg); @@ -1402,33 +1374,19 @@ public: crush->max_devices = m; } - bool ruleset_exists(const int ruleset) const { - for (size_t i = 0; i < crush->max_rules; ++i) { - if (rule_exists(i) && crush->rules[i]->mask.ruleset == ruleset) { - return true; - } - } - - return false; - } - /** - * Return the lowest numbered ruleset of type `type` + * Return the lowest numbered rule of type `type` * - * @returns a ruleset ID, or -1 if no matching rules found. + * @returns a rule ID, or -1 if no matching rules found. */ - int find_first_ruleset(int type) const { - int result = -1; - + int find_first_rule(int type) const { for (size_t i = 0; i < crush->max_rules; ++i) { if (crush->rules[i] - && crush->rules[i]->mask.type == type - && (crush->rules[i]->mask.ruleset < result || result == -1)) { - result = crush->rules[i]->mask.ruleset; + && crush->rules[i]->mask.type == type) { + return i; } } - - return result; + return -1; } bool have_choose_args(int64_t choose_args_index) const { @@ -1606,38 +1564,13 @@ public: const std::vector& orig, std::vector *out) const; - bool check_crush_rule(int ruleset, int type, int size, std::ostream& ss) { - ceph_assert(crush); - - __u32 i; - for (i = 0; i < crush->max_rules; i++) { - if (crush->rules[i] && - crush->rules[i]->mask.ruleset == ruleset && - crush->rules[i]->mask.type == type) { - - if (crush->rules[i]->mask.min_size <= size && - crush->rules[i]->mask.max_size >= size) { - return true; - } else if (size < crush->rules[i]->mask.min_size) { - ss << "pool size is smaller than the crush rule min size"; - return false; - } else { - ss << "pool size is bigger than the crush rule max size"; - return false; - } - } - } - - return false; - } - void encode(ceph::buffer::list &bl, uint64_t features) const; void decode(ceph::buffer::list::const_iterator &blp); void decode_crush_bucket(crush_bucket** bptr, ceph::buffer::list::const_iterator &blp); void dump(ceph::Formatter *f) const; void dump_rules(ceph::Formatter *f) const; - void dump_rule(int ruleset, ceph::Formatter *f) const; + void dump_rule(int rule, ceph::Formatter *f) const; void dump_tunables(ceph::Formatter *f) const; void dump_choose_args(ceph::Formatter *f) const; void list_rules(ceph::Formatter *f) const; diff --git a/src/crush/builder.c b/src/crush/builder.c index 25788e29071..04252265eee 100644 --- a/src/crush/builder.c +++ b/src/crush/builder.c @@ -98,14 +98,14 @@ int crush_add_rule(struct crush_map *map, struct crush_rule *rule, int ruleno) return r; } -struct crush_rule *crush_make_rule(int len, int ruleset, int type, int minsize, int maxsize) +struct crush_rule *crush_make_rule(int len, int ruleid, int type, int minsize, int maxsize) { struct crush_rule *rule; rule = malloc(crush_rule_size(len)); if (!rule) return NULL; rule->len = len; - rule->mask.ruleset = ruleset; + rule->mask.ruleset = ruleid; // these always match now rule->mask.type = type; rule->mask.min_size = minsize; rule->mask.max_size = maxsize; diff --git a/src/crush/builder.h b/src/crush/builder.h index bdf0a4b9cd8..89e77850827 100644 --- a/src/crush/builder.h +++ b/src/crush/builder.h @@ -37,9 +37,7 @@ extern void crush_finalize(struct crush_map *map); /** @ingroup API * * Allocate an empty crush_rule structure large enough to store __len__ steps. - * Steps can be added to a rule via crush_rule_set_step(). The __ruleset__ - * is a user defined integer, not used by __libcrush__ and stored in - * the allocated rule at __rule->mask.ruleset__. + * Steps can be added to a rule via crush_rule_set_step(). * * The rule is designed to allow crush_do_rule() to get at least __minsize__ items * and at most __maxsize__ items. @@ -54,14 +52,14 @@ extern void crush_finalize(struct crush_map *map); * If __malloc(3)__ fails, return NULL. * * @param len number of steps in the rule - * @param ruleset user defined value + * @param ruleid user defined value * @param type user defined value * @param minsize minimum number of items the rule can map * @param maxsize maximum number of items the rule can map * * @returns a pointer to the newly created rule or NULL */ -extern struct crush_rule *crush_make_rule(int len, int ruleset, int type, int minsize, int maxsize); +extern struct crush_rule *crush_make_rule(int len, int ruleid, int type, int minsize, int maxsize); /** @ingroup API * * Set the __pos__ step of the __rule__ to an operand and up to two arguments. diff --git a/src/crush/crush.h b/src/crush/crush.h index 91b78ad9ccf..9d49a958af9 100644 --- a/src/crush/crush.h +++ b/src/crush/crush.h @@ -24,8 +24,7 @@ #define CRUSH_MAGIC 0x00010000ul /* for detecting algorithm revisions */ #define CRUSH_MAX_DEPTH 10 /* max crush hierarchy depth */ -#define CRUSH_MAX_RULESET (1<<8) /* max crush ruleset number */ -#define CRUSH_MAX_RULES CRUSH_MAX_RULESET /* should be the same as max rulesets */ +#define CRUSH_MAX_RULES (1<<8) /* max crush rule id */ #define CRUSH_MAX_DEVICE_WEIGHT (100u * 0x10000u) #define CRUSH_MAX_BUCKET_WEIGHT (65535u * 0x10000u) @@ -82,7 +81,7 @@ enum crush_opcodes { * rule list for a matching rule_mask. */ struct crush_rule_mask { - __u8 ruleset; + __u8 ruleset; /* always matches rule_id now */ __u8 type; __u8 min_size; __u8 max_size; diff --git a/src/include/ceph_fs.h b/src/include/ceph_fs.h index eb73efa0366..2e3e119accc 100644 --- a/src/include/ceph_fs.h +++ b/src/include/ceph_fs.h @@ -77,7 +77,7 @@ struct ceph_file_layout { /* object -> pg layout */ __le32 fl_unused; /* unused; used to be preferred primary for pg (-1 for none) */ - __le32 fl_pg_pool; /* namespace, crush ruleset, rep level */ + __le32 fl_pg_pool; /* namespace, crush rule, rep level */ } __attribute__ ((packed)); #define CEPH_MIN_STRIPE_UNIT 65536 diff --git a/src/include/cephfs/libcephfs.h b/src/include/cephfs/libcephfs.h index 876ba2b0aea..a348a5b6c00 100644 --- a/src/include/cephfs/libcephfs.h +++ b/src/include/cephfs/libcephfs.h @@ -84,7 +84,7 @@ struct ceph_file_layout { /* object -> pg layout */ uint32_t fl_pg_preferred; /* preferred primary for pg (-1 for none) */ - uint32_t fl_pg_pool; /* namespace, crush ruleset, rep level */ + uint32_t fl_pg_pool; /* namespace, crush rule, rep level */ } __attribute__ ((packed)); struct CephContext; diff --git a/src/librados/RadosClient.h b/src/librados/RadosClient.h index 0db094b1800..df339772510 100644 --- a/src/librados/RadosClient.h +++ b/src/librados/RadosClient.h @@ -135,8 +135,8 @@ public: /* -1 was set as the default value and monitor will pickup the right crush rule with below order: - a) osd pool default crush replicated ruleset - b) the first ruleset in crush ruleset + a) osd pool default crush replicated rule + b) the first rule c) error out if no value find */ int pool_create(string& name, int16_t crush_rule=-1); diff --git a/src/sample.ceph.conf b/src/sample.ceph.conf index 13394d31f21..611e3b41c02 100644 --- a/src/sample.ceph.conf +++ b/src/sample.ceph.conf @@ -128,7 +128,7 @@ # (Default: 8) ;osd pool default pgp num = 128 - # The default CRUSH ruleset to use when creating a pool + # The default CRUSH rule to use when creating a pool # Type: 32-bit Integer # (Default: 0) ;osd pool default crush rule = 0 diff --git a/src/test/cli/crushtool/choose-args.t b/src/test/cli/crushtool/choose-args.t index db9c50bed24..1febf220c94 100644 --- a/src/test/cli/crushtool/choose-args.t +++ b/src/test/cli/crushtool/choose-args.t @@ -134,7 +134,6 @@ { "rule_id": 3, "rule_name": "data", - "ruleset": 3, "type": 1, "min_size": 2, "max_size": 2, diff --git a/src/test/erasure-code/TestErasureCodeClay.cc b/src/test/erasure-code/TestErasureCodeClay.cc index 26285e6d7f2..3d7abddf621 100644 --- a/src/test/erasure-code/TestErasureCodeClay.cc +++ b/src/test/erasure-code/TestErasureCodeClay.cc @@ -543,18 +543,18 @@ TEST(ErasureCodeClay, create_rule) profile["k"] = "2"; profile["m"] = "2"; EXPECT_EQ(0, clay.init(profile, &cerr)); - int ruleset = clay.create_rule("myrule", *c, &ss); - EXPECT_EQ(0, ruleset); + int ruleid = clay.create_rule("myrule", *c, &ss); + EXPECT_EQ(0, ruleid); EXPECT_EQ(-EEXIST, clay.create_rule("myrule", *c, &ss)); // - // the minimum that is expected from the created ruleset is to + // the minimum that is expected from the created rule is to // successfully map get_chunk_count() devices from the crushmap, // at least once. // vector<__u32> weight(c->get_max_devices(), 0x10000); vector out; int x = 0; - c->do_rule(ruleset, x, out, clay.get_chunk_count(), weight, 0); + c->do_rule(ruleid, x, out, clay.get_chunk_count(), weight, 0); ASSERT_EQ(out.size(), clay.get_chunk_count()); for (unsigned i=0; i weight(c->get_max_devices(), 0x10000); vector out; int x = 0; - c->do_rule(ruleset, x, out, isa.get_chunk_count(), weight, 0); + c->do_rule(rule, x, out, isa.get_chunk_count(), weight, 0); ASSERT_EQ(out.size(), isa.get_chunk_count()); for (unsigned i=0; i weight(c->get_max_devices(), 0x10000); vector out; int x = 0; - c->do_rule(ruleset, x, out, jerasure.get_chunk_count(), weight, 0); + c->do_rule(rule, x, out, jerasure.get_chunk_count(), weight, 0); ASSERT_EQ(out.size(), jerasure.get_chunk_count()); for (unsigned i=0; icreate(); crush->set_type_name(2, "root"); @@ -2422,7 +2422,7 @@ TEST(ErasureCodeShec, create_rule_1_2) TEST(ErasureCodeShec, create_rule_4) { - //create ruleset + //create rule CrushWrapper *crush = new CrushWrapper; crush->create(); crush->set_type_name(2, "root"); @@ -2473,7 +2473,7 @@ TEST(ErasureCodeShec, create_rule_4) TEST(ErasureCodeShec, create_rule2_1) { - //create ruleset + //create rule CrushWrapper *crush = new CrushWrapper; crush->create(); crush->set_type_name(2, "root"); @@ -2532,7 +2532,7 @@ struct CreateRuleset2_3_Param_d { TEST(ErasureCodeShec, create_rule2_3) { - //create ruleset + //create rule CrushWrapper *crush = new CrushWrapper; crush->create(); crush->set_type_name(2, "root"); diff --git a/src/test/librados/test.cc b/src/test/librados/test.cc index fdfbc54199c..be1b4faf8db 100644 --- a/src/test/librados/test.cc +++ b/src/test/librados/test.cc @@ -66,30 +66,30 @@ int destroy_ec_profile(rados_t *cluster, return ret; } -int destroy_ruleset(rados_t *cluster, - const std::string &ruleset, - std::ostream &oss) +int destroy_rule(rados_t *cluster, + const std::string &rule, + std::ostream &oss) { char *cmd[2]; std::string tmp = ("{\"prefix\": \"osd crush rule rm\", \"name\":\"" + - ruleset + "\"}"); + rule + "\"}"); cmd[0] = (char*)tmp.c_str(); cmd[1] = NULL; int ret = rados_mon_command(*cluster, (const char **)cmd, 1, "", 0, NULL, 0, NULL, 0); if (ret) - oss << "rados_mon_command: osd crush rule rm " + ruleset + " failed with error " << ret; + oss << "rados_mon_command: osd crush rule rm " + rule + " failed with error " << ret; return ret; } -int destroy_ec_profile_and_ruleset(rados_t *cluster, - const std::string &ruleset, - std::ostream &oss) +int destroy_ec_profile_and_rule(rados_t *cluster, + const std::string &rule, + std::ostream &oss) { int ret; - ret = destroy_ec_profile(cluster, ruleset, oss); + ret = destroy_ec_profile(cluster, rule, oss); if (ret) return ret; - return destroy_ruleset(cluster, ruleset, oss); + return destroy_rule(cluster, rule, oss); } @@ -100,7 +100,7 @@ std::string create_one_ec_pool(const std::string &pool_name, rados_t *cluster) return err; std::ostringstream oss; - int ret = destroy_ec_profile_and_ruleset(cluster, pool_name, oss); + int ret = destroy_ec_profile_and_rule(cluster, pool_name, oss); if (ret) { rados_shutdown(*cluster); return oss.str(); @@ -185,7 +185,7 @@ int destroy_one_ec_pool(const std::string &pool_name, rados_t *cluster) CephContext *cct = static_cast(rados_cct(*cluster)); if (!cct->_conf->mon_fake_pool_delete) { // hope this is in [global] std::ostringstream oss; - ret = destroy_ec_profile_and_ruleset(cluster, pool_name, oss); + ret = destroy_ec_profile_and_rule(cluster, pool_name, oss); if (ret) { rados_shutdown(*cluster); return ret; diff --git a/src/test/librados/test_cxx.cc b/src/test/librados/test_cxx.cc index 9349aece8dc..6c7e353e451 100644 --- a/src/test/librados/test_cxx.cc +++ b/src/test/librados/test_cxx.cc @@ -49,15 +49,15 @@ std::string create_one_pool_pp(const std::string &pool_name, Rados &cluster, return ""; } -int destroy_ruleset_pp(Rados &cluster, - const std::string &ruleset, +int destroy_rule_pp(Rados &cluster, + const std::string &rule, std::ostream &oss) { bufferlist inbl; int ret = cluster.mon_command("{\"prefix\": \"osd crush rule rm\", \"name\":\"" + - ruleset + "\"}", inbl, NULL, NULL); + rule + "\"}", inbl, NULL, NULL); if (ret) - oss << "mon_command: osd crush rule rm " + ruleset + " failed with error " << ret << std::endl; + oss << "mon_command: osd crush rule rm " + rule + " failed with error " << ret << std::endl; return ret; } @@ -72,15 +72,15 @@ int destroy_ec_profile_pp(Rados &cluster, const std::string& pool_name, return ret; } -int destroy_ec_profile_and_ruleset_pp(Rados &cluster, - const std::string &ruleset, +int destroy_ec_profile_and_rule_pp(Rados &cluster, + const std::string &rule, std::ostream &oss) { int ret; - ret = destroy_ec_profile_pp(cluster, ruleset, oss); + ret = destroy_ec_profile_pp(cluster, rule, oss); if (ret) return ret; - return destroy_ruleset_pp(cluster, ruleset, oss); + return destroy_rule_pp(cluster, rule, oss); } std::string create_one_ec_pool_pp(const std::string &pool_name, Rados &cluster) @@ -90,7 +90,7 @@ std::string create_one_ec_pool_pp(const std::string &pool_name, Rados &cluster) return err; std::ostringstream oss; - int ret = destroy_ec_profile_and_ruleset_pp(cluster, pool_name, oss); + int ret = destroy_ec_profile_and_rule_pp(cluster, pool_name, oss); if (ret) { cluster.shutdown(); return oss.str(); @@ -190,7 +190,7 @@ int destroy_one_ec_pool_pp(const std::string &pool_name, Rados &cluster) CephContext *cct = static_cast(cluster.cct()); if (!cct->_conf->mon_fake_pool_delete) { // hope this is in [global] std::ostringstream oss; - ret = destroy_ec_profile_and_ruleset_pp(cluster, pool_name, oss); + ret = destroy_ec_profile_and_rule_pp(cluster, pool_name, oss); if (ret) { cluster.shutdown(); return ret; diff --git a/src/test/osd/TestOSDMap.cc b/src/test/osd/TestOSDMap.cc index ff9eb57cf48..4657553174c 100644 --- a/src/test/osd/TestOSDMap.cc +++ b/src/test/osd/TestOSDMap.cc @@ -66,7 +66,7 @@ public: if (no_default_pools) // do not create any default pool(s) return; - // Create an EC ruleset and a pool using it + // Create an EC rule and a pool using it int r = osdmap.crush->add_simple_rule( "erasure", "default", "osd", "", "indep", pg_pool_t::TYPE_ERASURE, @@ -824,7 +824,7 @@ TEST_F(OSDMapTest, CleanPGUpmaps) { ASSERT_TRUE(!crush.rule_exists(rule_name)); int rno; for (rno = 0; rno < crush.get_max_rules(); rno++) { - if (!crush.rule_exists(rno) && !crush.ruleset_exists(rno)) + if (!crush.rule_exists(rno)) break; } string root_name = "default"; @@ -1151,7 +1151,7 @@ TEST_F(OSDMapTest, BUG_38897) { ASSERT_TRUE(!crush.rule_exists(rule_name)); int rno; for (rno = 0; rno < crush.get_max_rules(); rno++) { - if (!crush.rule_exists(rno) && !crush.ruleset_exists(rno)) + if (!crush.rule_exists(rno)) break; } int min_size = 3; @@ -1250,7 +1250,7 @@ TEST_F(OSDMapTest, BUG_38897) { ASSERT_TRUE(!crush.rule_exists(rule_name)); int rno; for (rno = 0; rno < crush.get_max_rules(); rno++) { - if (!crush.rule_exists(rno) && !crush.ruleset_exists(rno)) + if (!crush.rule_exists(rno)) break; } int min_size = 3; @@ -1407,7 +1407,7 @@ TEST_F(OSDMapTest, BUG_42052) { ASSERT_TRUE(!crush.rule_exists(rule_name)); int rno; for (rno = 0; rno < crush.get_max_rules(); rno++) { - if (!crush.rule_exists(rno) && !crush.ruleset_exists(rno)) + if (!crush.rule_exists(rno)) break; } int min_size = 3; @@ -1529,7 +1529,7 @@ TEST_F(OSDMapTest, BUG_42485) { ASSERT_TRUE(!crush.rule_exists(rule_name)); int rno; for (rno = 0; rno < crush.get_max_rules(); rno++) { - if (!crush.rule_exists(rno) && !crush.ruleset_exists(rno)) + if (!crush.rule_exists(rno)) break; } string root_name = "default"; @@ -1761,7 +1761,7 @@ TEST_F(OSDMapTest, BUG_43124) { ASSERT_TRUE(!crush.rule_exists(rule_name)); int rno; for (rno = 0; rno < crush.get_max_rules(); rno++) { - if (!crush.rule_exists(rno) && !crush.ruleset_exists(rno)) + if (!crush.rule_exists(rno)) break; } int min_size = 1; diff --git a/src/test/pybind/test_ceph_argparse.py b/src/test/pybind/test_ceph_argparse.py index 70b7860f026..8fa9bc22ce4 100755 --- a/src/test/pybind/test_ceph_argparse.py +++ b/src/test/pybind/test_ceph_argparse.py @@ -1060,7 +1060,7 @@ class TestOSD(TestArgparse): 'replicated']) self.assert_valid_command(['osd', 'pool', 'create', 'poolname', '128', '128', - 'erasure', 'A-Za-z0-9-_.', 'ruleset^^']) + 'erasure', 'A-Za-z0-9-_.', 'rule^^']) self.assert_valid_command(['osd', 'pool', 'create', 'poolname']) assert_equal({}, validate_command(sigdict, ['osd', 'pool', 'create'])) # invalid pg_num and pgp_num, like "-1", could spill over to @@ -1071,23 +1071,23 @@ class TestOSD(TestArgparse): assert_equal({}, validate_command(sigdict, ['osd', 'pool', 'create', 'poolname', '-1', '-1', - 'ruleset'])) + 'rule'])) assert_equal({}, validate_command(sigdict, ['osd', 'pool', 'create', 'poolname', '128', '128', 'erasure', '^^^', - 'ruleset'])) + 'rule'])) assert_equal({}, validate_command(sigdict, ['osd', 'pool', 'create', 'poolname', '128', '128', 'erasure', 'profile', - 'ruleset', + 'rule', 'toomany'])) assert_equal({}, validate_command(sigdict, ['osd', 'pool', 'create', 'poolname', '128', '128', 'INVALID', 'profile', - 'ruleset'])) + 'rule'])) def test_pool_delete(self): self.assert_valid_command(['osd', 'pool', 'delete', diff --git a/src/test/test_pool_create.sh b/src/test/test_pool_create.sh index 54abf157299..5dd5aeda1c2 100755 --- a/src/test/test_pool_create.sh +++ b/src/test/test_pool_create.sh @@ -32,14 +32,14 @@ function TEST_pool_create() { local rulename=testrule local poolname=rulepool - local var=`ceph osd crush rule dump|grep -w ruleset|sed -n '$p'|grep -o '[0-9]\+'` + local var=`ceph osd crush rule dump|grep -w rule|sed -n '$p'|grep -o '[0-9]\+'` var=`expr $var + 1 ` ceph osd getcrushmap -o "$dir/map1" crushtool -d "$dir/map1" -o "$dir/map1.txt" local minsize=0 local maxsize=1 - sed -i '/# end crush map/i\rule '$rulename' {\n ruleset \'$var'\n type replicated\n min_size \'$minsize'\n max_size \'$maxsize'\n step take default\n step choose firstn 0 type osd\n step emit\n }\n' "$dir/map1.txt" + sed -i '/# end crush map/i\rule '$rulename' {\n id \'$var'\n type replicated\n min_size \'$minsize'\n max_size \'$maxsize'\n step take default\n step choose firstn 0 type osd\n step emit\n }\n' "$dir/map1.txt" crushtool -c "$dir/map1.txt" -o "$dir/map1.bin" ceph osd setcrushmap -i "$dir/map1.bin" ceph osd pool create $poolname 200 $rulename 2>"$dir/rev" diff --git a/src/tools/crushtool.cc b/src/tools/crushtool.cc index 20dd45eca6f..6d996e73da1 100644 --- a/src/tools/crushtool.cc +++ b/src/tools/crushtool.cc @@ -1037,7 +1037,7 @@ int main(int argc, const char **argv) set roots; crush.find_roots(&roots); if (roots.size() > 1) { - cerr << "The crush rulesets will use the root " << root << "\n" + cerr << "The crush rules will use the root " << root << "\n" << "and ignore the others.\n" << "There are " << roots.size() << " roots, they can be\n" << "grouped into a single root by appending something like:\n"