From 450633b9e6a1dae63feb06f25dea77f762324aa5 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Sat, 22 Jul 2017 18:14:17 +0800 Subject: [PATCH] mon/OSDMonitor: ENOENT on removing non-existent app key So we don't bother to trigger an pool update, which is potentially big stuff. Signed-off-by: xie xingguo --- qa/workunits/cephtool/test.sh | 1 + src/mon/OSDMonitor.cc | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index f7f45ccc41a8..f66df5a7e443 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -2374,6 +2374,7 @@ function test_mon_pool_application() ceph osd pool ls detail --format=json | grep '"application_metadata":{"rbd":{"key1":"value1"},"rgw":{}}' ceph osd pool application rm app_for_test rbd key1 ceph osd pool ls detail --format=json | grep '"application_metadata":{"rbd":{},"rgw":{}}' + ceph osd pool application rm app_for_test rbd key1 # should be idempotent expect_false ceph osd pool application disable app_for_test rgw ceph osd pool application disable app_for_test rgw --yes-i-really-mean-it diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index d39c3eed061d..3e9fae1cf486 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -6498,8 +6498,14 @@ int OSDMonitor::prepare_command_pool_application(const string &prefix, string key; cmd_getval(g_ceph_context, cmdmap, "key", key); + auto it = p.application_metadata[app].find(key); + if (it == p.application_metadata[app].end()) { + ss << "application '" << app << "' on pool '" << pool_name + << "' does not have key '" << key << "'"; + return 0; // idempotent + } - p.application_metadata[app].erase(key); + p.application_metadata[app].erase(it); ss << "removed application '" << app << "' key '" << key << "' on pool '" << pool_name << "'"; } else { -- 2.47.3