From: Loic Dachary Date: Sun, 24 Aug 2014 22:50:23 +0000 (+0200) Subject: Merge pull request #2138 from xiaoxichen/fix_crush_ruleset X-Git-Tag: v0.86~221 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d848a40040475a04bc50e1de1e2c404a9d8c02d6;p=ceph.git Merge pull request #2138 from xiaoxichen/fix_crush_ruleset mon/OSDMonitor : Use user provided ruleset for replicated pool Reviewed-by: Loic Dachary --- d848a40040475a04bc50e1de1e2c404a9d8c02d6 diff --cc src/mon/OSDMonitor.cc index 1d25671dbb5c,15d2034b34af..dd729f064aa6 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@@ -5207,44 -5120,43 +5234,50 @@@ done cmd_getval(g_ceph_context, cmdmap, "ruleset", ruleset_name); string erasure_code_profile; cmd_getval(g_ceph_context, cmdmap, "erasure_code_profile", erasure_code_profile); - if (erasure_code_profile == "") - erasure_code_profile = "default"; - if (erasure_code_profile == "default") { - if (!osdmap.has_erasure_code_profile(erasure_code_profile)) { - if (pending_inc.has_erasure_code_profile(erasure_code_profile)) { - dout(20) << "erasure code profile " << erasure_code_profile << " already pending" << dendl; - goto wait; - } - map profile_map; - err = osdmap.get_erasure_code_profile_default(g_ceph_context, + if (pool_type == pg_pool_t::TYPE_ERASURE) { + if (erasure_code_profile == "") + erasure_code_profile = "default"; + //handle the erasure code profile + if (erasure_code_profile == "default") { + if (!osdmap.has_erasure_code_profile(erasure_code_profile)) { + if (pending_inc.has_erasure_code_profile(erasure_code_profile)) { + dout(20) << "erasure code profile " << erasure_code_profile << " already pending" << dendl; + goto wait; + } + + map profile_map; + err = osdmap.get_erasure_code_profile_default(g_ceph_context, profile_map, &ss); - if (err) - goto reply; - dout(20) << "erasure code profile " << erasure_code_profile << " set" << dendl; - pending_inc.set_erasure_code_profile(erasure_code_profile, profile_map); - goto wait; + if (err) + goto reply; + dout(20) << "erasure code profile " << erasure_code_profile << " set" << dendl; + pending_inc.set_erasure_code_profile(erasure_code_profile, profile_map); + goto wait; + } } - } - - if (ruleset_name == "") { - if (erasure_code_profile == "default") { - ruleset_name = "erasure-code"; - } else { - dout(1) << "implicitly use ruleset named after the pool: " + if (ruleset_name == "") { + if (erasure_code_profile == "default") { + ruleset_name = "erasure-code"; + } else { + dout(1) << "implicitly use ruleset named after the pool: " << poolstr << dendl; - ruleset_name = poolstr; + ruleset_name = poolstr; + } } + } else { + //NOTE:for replicated pool,cmd_map will put ruleset_name to erasure_code_profile field + ruleset_name = erasure_code_profile; } + int64_t expected_num_objects; + cmd_getval(g_ceph_context, cmdmap, "expected_num_objects", expected_num_objects, int64_t(0)); + if (expected_num_objects < 0) { + ss << "'expected_num_objects' must be non-negative"; + err = -EINVAL; + goto reply; + } err = prepare_new_pool(poolstr, 0, // auid=0 for admin created pool -1, // default crush rule ruleset_name,