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 Jan 9, 2018
1 parent f9eea16 commit a61e62c
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
11 changes: 11 additions & 0 deletions qa/workunits/cephtool/test.sh
Expand Up @@ -1703,6 +1703,17 @@ 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-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
8 changes: 6 additions & 2 deletions 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 @@ -5833,7 +5833,11 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid,
pi->set_pgp_num(pgp_num);
pi->last_change = pending_inc.epoch;
pi->auid = auid;
pi->erasure_code_profile = erasure_code_profile;
if (pool_type == pg_pool_t::TYPE_ERASURE) {
pi->erasure_code_profile = erasure_code_profile;
} else {
pi->erasure_code_profile = "";
}
pi->stripe_width = stripe_width;
pi->cache_target_dirty_ratio_micro =
g_conf->osd_pool_default_cache_target_dirty_ratio * 1000000;
Expand Down

0 comments on commit a61e62c

Please sign in to comment.