From: xie xingguo Date: Tue, 29 Aug 2017 01:33:51 +0000 (+0800) Subject: mon/OSDMonitor: make 'osd crush class rename' idempotent X-Git-Tag: v12.2.1~83^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=43ffb7c897f0fc3b407d09f19954865fad168e03;p=ceph.git mon/OSDMonitor: make 'osd crush class rename' idempotent Signed-off-by: xie xingguo (cherry picked from commit 2ee80aead88c90388871ee65d4ed31a2fa47f532) --- diff --git a/qa/standalone/crush/crush-classes.sh b/qa/standalone/crush/crush-classes.sh index 160f9d8c1a12..bcaab3fa0e88 100755 --- a/qa/standalone/crush/crush-classes.sh +++ b/qa/standalone/crush/crush-classes.sh @@ -209,6 +209,7 @@ function TEST_mon_classes() { ceph osd crush tree --show-shadow | grep 'class_1' || return 1 ceph osd crush rule create-replicated class_1_rule default host class_1 || return 1 ceph osd crush class rename class_1 class_2 + ceph osd crush class rename class_1 class_2 # idempotent ceph osd crush class ls | grep 'class_1' && return 1 ceph osd crush tree --show-shadow | grep 'class_1' && return 1 ceph osd crush class ls | grep 'class_2' || return 1 diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 5643261748fe..c392950fb005 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -7528,16 +7528,11 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, CrushWrapper newcrush; _get_pending_crush(newcrush); - - if (!newcrush.class_exists(srcname)) { - err = -ENOENT; - ss << "class '" << srcname << "' does not exist"; - goto reply; - } - - if (newcrush.class_exists(dstname)) { - err = -EEXIST; - ss << "class '" << dstname << "' already exists"; + if (!newcrush.class_exists(srcname) && newcrush.class_exists(dstname)) { + // suppose this is a replay and return success + // so command is idempotent + ss << "already renamed to '" << dstname << "'"; + err = 0; goto reply; }