mirror of
https://github.com/ceph/ceph
synced 2025-03-11 02:39:05 +00:00
Merge remote-tracking branch 'origin/giant'
This commit is contained in:
commit
7a39e7cbe6
@ -3419,27 +3419,7 @@ int OSDMonitor::prepare_pool_crush_ruleset(const unsigned pool_type,
|
||||
return *crush_ruleset;
|
||||
}
|
||||
} else {
|
||||
int ret;
|
||||
ret = osdmap.crush->get_rule_id(ruleset_name);
|
||||
if (ret != -ENOENT) {
|
||||
// found it, use it
|
||||
*crush_ruleset = ret;
|
||||
} else {
|
||||
CrushWrapper newcrush;
|
||||
_get_pending_crush(newcrush);
|
||||
|
||||
ret = newcrush.get_rule_id(ruleset_name);
|
||||
if (ret != -ENOENT) {
|
||||
// found it, wait for it to be proposed
|
||||
dout(20) << "prepare_pool_crush_ruleset: ruleset "
|
||||
<< ruleset_name << " is pending, try again" << dendl;
|
||||
return -EAGAIN;
|
||||
} else {
|
||||
//Cannot find it , return error
|
||||
ss << "Specified ruleset " << ruleset_name << " doesn't exist";
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return get_crush_ruleset(ruleset_name, crush_ruleset, ss);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -3478,6 +3458,35 @@ int OSDMonitor::prepare_pool_crush_ruleset(const unsigned pool_type,
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int OSDMonitor::get_crush_ruleset(const string &ruleset_name,
|
||||
int *crush_ruleset,
|
||||
stringstream &ss)
|
||||
{
|
||||
int ret;
|
||||
ret = osdmap.crush->get_rule_id(ruleset_name);
|
||||
if (ret != -ENOENT) {
|
||||
// found it, use it
|
||||
*crush_ruleset = ret;
|
||||
} else {
|
||||
CrushWrapper newcrush;
|
||||
_get_pending_crush(newcrush);
|
||||
|
||||
ret = newcrush.get_rule_id(ruleset_name);
|
||||
if (ret != -ENOENT) {
|
||||
// found it, wait for it to be proposed
|
||||
dout(20) << __func__ << ": ruleset " << ruleset_name
|
||||
<< " try again" << dendl;
|
||||
return -EAGAIN;
|
||||
} else {
|
||||
//Cannot find it , return error
|
||||
ss << "specified ruleset " << ruleset_name << " doesn't exist";
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name The name of the new pool
|
||||
* @param auid The auid of the pool owner. Can be -1
|
||||
@ -5266,6 +5275,7 @@ done:
|
||||
goto reply;
|
||||
}
|
||||
|
||||
bool implicit_ruleset_creation = false;
|
||||
string ruleset_name;
|
||||
cmd_getval(g_ceph_context, cmdmap, "ruleset", ruleset_name);
|
||||
string erasure_code_profile;
|
||||
@ -5294,6 +5304,7 @@ done:
|
||||
}
|
||||
}
|
||||
if (ruleset_name == "") {
|
||||
implicit_ruleset_creation = true;
|
||||
if (erasure_code_profile == "default") {
|
||||
ruleset_name = "erasure-code";
|
||||
} else {
|
||||
@ -5307,6 +5318,17 @@ done:
|
||||
ruleset_name = erasure_code_profile;
|
||||
}
|
||||
|
||||
if (!implicit_ruleset_creation && ruleset_name != "") {
|
||||
int ruleset;
|
||||
err = get_crush_ruleset(ruleset_name, &ruleset, ss);
|
||||
if (err == -EAGAIN) {
|
||||
wait_for_finished_proposal(new C_RetryMessage(this, m));
|
||||
return true;
|
||||
}
|
||||
if (err)
|
||||
goto reply;
|
||||
}
|
||||
|
||||
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) {
|
||||
|
@ -265,6 +265,9 @@ private:
|
||||
const string &profile,
|
||||
int *ruleset,
|
||||
stringstream &ss);
|
||||
int get_crush_ruleset(const string &ruleset_name,
|
||||
int *crush_ruleset,
|
||||
stringstream &ss);
|
||||
int get_erasure_code(const string &erasure_code_profile,
|
||||
ErasureCodeInterfaceRef *erasure_code,
|
||||
stringstream &ss) const;
|
||||
|
@ -1,6 +1,7 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2013,2014 Cloudwatt <libre.licensing@cloudwatt.com>
|
||||
# Copyright (C) 2014 Red Hat <contact@redhat.com>
|
||||
#
|
||||
# Author: Loic Dachary <loic@dachary.org>
|
||||
#
|
||||
@ -38,6 +39,7 @@ function TEST_default_deprectated_0() {
|
||||
run_mon $dir a --public-addr 127.0.0.1 \
|
||||
--osd_pool_default_crush_replicated_ruleset $expected
|
||||
./ceph --format json osd dump | grep '"crush_ruleset":'$expected
|
||||
CEPH_ARGS='' ./ceph --admin-daemon $dir/a/ceph-mon.a.asok log flush || return 1
|
||||
! grep "osd_pool_default_crush_rule is deprecated " $dir/a/log || return 1
|
||||
}
|
||||
|
||||
@ -48,6 +50,7 @@ function TEST_default_deprectated_1() {
|
||||
run_mon $dir a --public-addr 127.0.0.1 \
|
||||
--osd_pool_default_crush_rule $expected
|
||||
./ceph --format json osd dump | grep '"crush_ruleset":'$expected
|
||||
CEPH_ARGS='' ./ceph --admin-daemon $dir/a/ceph-mon.a.asok log flush || return 1
|
||||
grep "osd_pool_default_crush_rule is deprecated " $dir/a/log || return 1
|
||||
}
|
||||
|
||||
@ -60,6 +63,7 @@ function TEST_default_deprectated_2() {
|
||||
--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 || return 1
|
||||
CEPH_ARGS='' ./ceph --admin-daemon $dir/a/ceph-mon.a.asok log flush || return 1
|
||||
grep "osd_pool_default_crush_rule is deprecated " $dir/a/log || return 1
|
||||
}
|
||||
|
||||
@ -95,6 +99,12 @@ function TEST_erasure_crush_rule() {
|
||||
./ceph osd erasure-code-profile set myprofile
|
||||
./ceph osd pool create $poolname 12 12 erasure myprofile
|
||||
./ceph osd crush rule ls | grep $poolname || return 1
|
||||
#
|
||||
# a non existent crush ruleset given in argument is an error
|
||||
# http://tracker.ceph.com/issues/9304
|
||||
#
|
||||
poolname=pool_erasure3
|
||||
! ./ceph osd pool create $poolname 12 12 erasure myprofile INVALIDRULESET || return 1
|
||||
}
|
||||
|
||||
function TEST_erasure_crush_rule_pending() {
|
||||
@ -107,6 +117,7 @@ function TEST_erasure_crush_rule_pending() {
|
||||
result=$(echo '{"prefix":"osdmonitor_prepare_command","prepare":"osd crush rule create-erasure","name":"'$crush_ruleset'"}' | nc -U $dir/a/ceph-mon.a.asok | cut --bytes=5-)
|
||||
test $result = true || return 1
|
||||
./ceph osd pool create pool_erasure 12 12 erasure default $crush_ruleset || return 1
|
||||
CEPH_ARGS='' ./ceph --admin-daemon $dir/a/ceph-mon.a.asok log flush || return 1
|
||||
grep "$crush_ruleset try again" $dir/a/log || return 1
|
||||
}
|
||||
|
||||
@ -122,7 +133,7 @@ function TEST_simple_crush_rule_pending() {
|
||||
test $result = true || return 1
|
||||
./ceph osd pool create pool_simple 12 12 replicated $crush_ruleset || return 1
|
||||
CEPH_ARGS='' ./ceph --admin-daemon $dir/a/ceph-mon.a.asok log flush || return 1
|
||||
grep "$crush_ruleset is pending, try again" $dir/a/log || return 1
|
||||
grep "$crush_ruleset try again" $dir/a/log || return 1
|
||||
}
|
||||
|
||||
function TEST_erasure_code_profile_default() {
|
||||
@ -236,10 +247,11 @@ function TEST_erasure_code_pool_lrc() {
|
||||
function TEST_replicated_pool() {
|
||||
local dir=$1
|
||||
run_mon $dir a --public-addr 127.0.0.1
|
||||
./ceph osd pool create replicated 12 12 replicated 2>&1 | \
|
||||
./ceph osd pool create replicated 12 12 replicated replicated_ruleset 2>&1 | \
|
||||
grep "pool 'replicated' created" || return 1
|
||||
./ceph osd pool create replicated 12 12 replicated 2>&1 | \
|
||||
./ceph osd pool create replicated 12 12 replicated replicated_ruleset 2>&1 | \
|
||||
grep 'already exists' || return 1
|
||||
! ./ceph osd pool create replicated0 12 12 replicated INVALIDRULESET
|
||||
# default is replicated
|
||||
./ceph osd pool create replicated1 12 12 2>&1 | \
|
||||
grep "pool 'replicated1' created" || return 1
|
||||
|
Loading…
Reference in New Issue
Block a user