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 <xie.xingguo@zte.com.cn>
This commit is contained in:
xie xingguo 2017-07-22 18:14:17 +08:00
parent b4dcdecb6a
commit 450633b9e6
2 changed files with 8 additions and 1 deletions

View File

@ -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

View File

@ -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 {