From 43ffb7c897f0fc3b407d09f19954865fad168e03 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Tue, 29 Aug 2017 09:33:51 +0800 Subject: [PATCH] mon/OSDMonitor: make 'osd crush class rename' idempotent Signed-off-by: xie xingguo (cherry picked from commit 2ee80aead88c90388871ee65d4ed31a2fa47f532) --- qa/standalone/crush/crush-classes.sh | 1 + src/mon/OSDMonitor.cc | 15 +++++---------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/qa/standalone/crush/crush-classes.sh b/qa/standalone/crush/crush-classes.sh index 160f9d8c1a12d..bcaab3fa0e889 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 5643261748fe1..c392950fb0053 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; } -- 2.39.5