Skip to content

Commit

Permalink
mon/OSDMonitor.cc : set erasure-code-profile to "" when create replic…
Browse files Browse the repository at this point in the history
…ated pools.

when we create a pool specify a rule, for example "ceph osd pool create foo replicated 10 rule_foo",
we will set pool foo erasure-code-profile to rule_foo,
if there has an erasure-code-profile names rule_foo, use "ceph osd erasure-code-profile rule_foo" will fail,
"Error EBUSY: foo pool(s) are using the erasure code profile 'rule_foo'", this is wrong.

we should do:
1. set erasure-code-profile to "" when create replicated pools
2. whether erasure-code-profile is used by pool not only judge pool erasure_code_profile property and also the pool is_erasure

Signed-off-by: zouaiguo <zou.aiguo@zte.com.cn>
  • Loading branch information
zouaiguo committed Dec 26, 2017
1 parent f9eea16 commit 0aaa667
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
19 changes: 19 additions & 0 deletions qa/workunits/cephtool/test.sh
Expand Up @@ -1703,6 +1703,25 @@ function test_mon_osd_pool()
set -e
ceph osd pool delete replicated replicated --yes-i-really-really-mean-it
ceph osd pool delete ec_test ec_test --yes-i-really-really-mean-it

# test create pool with rule
ceph osd erasure-code-profile set foo foo
ceph osd erasure-code-profile ls | grep foo
ceph osd crush rule create-replicated foo default host
ceph osd pool create replicated 12 12 replicated foo
ceph osd erasure-code-profile rm foo
ceph osd pool delete replicated replicated --yes-i-really-really-mean-it
ceph osd crush rule rm foo

ceph osd erasure-code-profile set foo foo
ceph osd erasure-code-profile ls | grep foo
ceph osd crush rule create-erasure foo foo
ceph osd pool create erasure 12 12 erasure foo
expect_false ceph osd erasure-code-profile rm foo
ceph osd pool delete erasure erasure --yes-i-really-really-mean-it
ceph osd crush rule rm foo
ceph osd erasure-code-profile rm foo

}

function test_mon_osd_pool_quota()
Expand Down
3 changes: 2 additions & 1 deletion src/mon/OSDMonitor.cc
Expand Up @@ -5442,7 +5442,7 @@ bool OSDMonitor::erasure_code_profile_in_use(
for (map<int64_t, pg_pool_t>::const_iterator p = pools.begin();
p != pools.end();
++p) {
if (p->second.erasure_code_profile == profile) {
if (p->second.erasure_code_profile == profile && p->second.is_erasure()) {
*ss << osdmap.pool_name[p->first] << " ";
found = true;
}
Expand Down Expand Up @@ -10194,6 +10194,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
} else {
//NOTE:for replicated pool,cmd_map will put rule_name to erasure_code_profile field
rule_name = erasure_code_profile;
erasure_code_profile = "";
}

if (!implicit_rule_creation && rule_name != "") {
Expand Down

0 comments on commit 0aaa667

Please sign in to comment.