From: xie xingguo Date: Thu, 18 Oct 2018 05:59:16 +0000 (+0800) Subject: mon/OSDMonitor: make "ceph osd crush class rm" idempotent X-Git-Tag: v14.1.0~1070^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4bc54587a17243b1521aee75ebe393f6977b3641;p=ceph.git mon/OSDMonitor: make "ceph osd crush class rm" idempotent Removing a non-existent device class should be generally okay. Signed-off-by: xie xingguo --- diff --git a/qa/standalone/crush/crush-classes.sh b/qa/standalone/crush/crush-classes.sh index 2f4ce12e4238..44fb97cb70f8 100755 --- a/qa/standalone/crush/crush-classes.sh +++ b/qa/standalone/crush/crush-classes.sh @@ -156,7 +156,7 @@ function TEST_mon_classes() { ceph osd crush class rename TEMP CLASS || return 1 ceph osd crush class ls | grep CLASS || return 1 ceph osd crush class rm CLASS || return 1 - expect_failure $dir ENOENT ceph osd crush class rm CLASS || return 1 + ceph osd crush class rm CLASS || return 1 # test idempotence # test rm-device-class ceph osd crush set-device-class aaa osd.0 || return 1 diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index fc22bae4fd76..bcb8b63c8e3e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -8595,12 +8595,16 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, goto reply; } + if (!osdmap.crush->class_exists(device_class)) { + err = 0; + goto reply; + } + CrushWrapper newcrush; _get_pending_crush(newcrush); if (!newcrush.class_exists(device_class)) { - err = -ENOENT; - ss << "class '" << device_class << "' does not exist"; - goto reply; + err = 0; // make command idempotent + goto wait; } int class_id = newcrush.get_class_id(device_class); stringstream ts;