From: xie xingguo Date: Sat, 22 Jul 2017 10:14:17 +0000 (+0800) Subject: mon/OSDMonitor: ENOENT on removing non-existent app key X-Git-Tag: v12.1.2~86^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F16530%2Fhead;p=ceph.git 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 --- 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 {