Merge pull request #947 from dachary/wip-6824

mon: set ceph osd (down|out|in|rm) error code on failure

Reviewed-by: Sage Weil <sage@inktank.com>
This commit is contained in:
Sage Weil 2013-12-15 21:16:48 -08:00
commit 58d68995c4
2 changed files with 15 additions and 11 deletions

View File

@ -1,6 +1,8 @@
#!/bin/bash -x
set -e
set -o functrace
PS4=' ${FUNCNAME[0]}: $LINENO: '
get_pg()
{
@ -26,7 +28,7 @@ expect_false()
}
TMPFILE=/tmp/test_invalid.$$
trap "rm $TMPFILE" 0
trap "rm -f $TMPFILE" 0
function check_response()
{
@ -236,6 +238,8 @@ for id in `ceph osd ls` ; do
ceph tell osd.$id version
done
ceph osd rm 0 2>&1 | grep 'EBUSY'
id=`ceph osd create`
ceph osd lost $id --yes-i-really-mean-it
ceph osd rm $id
@ -323,10 +327,11 @@ for s in pg_num pgp_num size min_size crash_replay_interval crush_ruleset; do
ceph osd pool get data $s
done
ceph osd pool get data size | grep 'size: 2'
ceph osd pool set data size 3
ceph osd pool get data size | grep 'size: 3'
ceph osd pool set data size 2
old_size=$(ceph osd pool get data size | sed -e 's/size: //')
(( new_size = old_size + 1 ))
ceph osd pool set data size $new_size
ceph osd pool get data size | grep "size: $new_size"
ceph osd pool set data size $old_size
ceph osd pool set data hashpspool true
ceph osd pool set data hashpspool false

View File

@ -3604,17 +3604,15 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
long osd = parse_osd_id(idvec[j].c_str(), &ss);
if (osd < 0) {
ss << "invalid osd id" << osd;
// XXX -EINVAL here?
err = -EINVAL;
continue;
} else if (!osdmap.exists(osd)) {
ss << "osd." << osd << " does not exist. ";
err = 0;
continue;
}
if (prefix == "osd down") {
if (osdmap.is_down(osd)) {
ss << "osd." << osd << " is already down. ";
err = 0;
} else {
pending_inc.new_state[osd] = CEPH_OSD_UP;
ss << "marked down osd." << osd << ". ";
@ -3623,7 +3621,6 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
} else if (prefix == "osd out") {
if (osdmap.is_out(osd)) {
ss << "osd." << osd << " is already out. ";
err = 0;
} else {
pending_inc.new_weight[osd] = CEPH_OSD_OUT;
ss << "marked out osd." << osd << ". ";
@ -3632,7 +3629,6 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
} else if (prefix == "osd in") {
if (osdmap.is_in(osd)) {
ss << "osd." << osd << " is already in. ";
err = 0;
} else {
pending_inc.new_weight[osd] = CEPH_OSD_IN;
ss << "marked in osd." << osd << ". ";
@ -3640,7 +3636,10 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
}
} else if (prefix == "osd rm") {
if (osdmap.is_up(osd)) {
if (any)
ss << ", ";
ss << "osd." << osd << " is still up; must be down before removal. ";
err = -EBUSY;
} else {
pending_inc.new_state[osd] = osdmap.get_state(osd);
pending_inc.new_uuid[osd] = uuid_d();
@ -3656,7 +3655,7 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
}
if (any) {
getline(ss, rs);
wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_last_committed()));
wait_for_finished_proposal(new Monitor::C_Command(mon, m, err, rs, get_last_committed()));
return true;
}
} else if (prefix == "osd reweight") {