From 11044f5f1b6221eeb8a7837a9b90cd2a4c39936e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 4 Jun 2018 11:00:08 -0500 Subject: [PATCH] osd,mds,common: make 'config rm ...' idempotent Fixes: http://tracker.ceph.com/issues/24408 Signed-off-by: Sage Weil --- qa/workunits/mon/config.sh | 1 + src/common/ceph_context.cc | 2 +- src/mds/MDSDaemon.cc | 3 +++ src/osd/OSD.cc | 3 +++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/qa/workunits/mon/config.sh b/qa/workunits/mon/config.sh index 547e4e291dc02..d97106a4a141b 100755 --- a/qa/workunits/mon/config.sh +++ b/qa/workunits/mon/config.sh @@ -74,6 +74,7 @@ do done ceph config show osd.0 | grep debug_xio | grep 'override mon' ceph tell osd.0 config unset debug_xio +ceph tell osd.0 config unset debug_xio ceph config rm osd.0 debug_xio while ceph config show osd.0 | grep debug_xio | grep mon diff --git a/src/common/ceph_context.cc b/src/common/ceph_context.cc index 80ee593dfeee8..faaca450b2d59 100644 --- a/src/common/ceph_context.cc +++ b/src/common/ceph_context.cc @@ -441,7 +441,7 @@ void CephContext::do_command(std::string_view command, const cmdmap_t& cmdmap, f->dump_string("error", "syntax error: 'config unset '"); } else { int r = _conf->rm_val(var.c_str()); - if (r < 0) { + if (r < 0 && r != -ENOENT) { f->dump_stream("error") << "error unsetting '" << var << "': " << cpp_strerror(r); } else { diff --git a/src/mds/MDSDaemon.cc b/src/mds/MDSDaemon.cc index 757959a4094c7..0bc7cf68d9113 100644 --- a/src/mds/MDSDaemon.cc +++ b/src/mds/MDSDaemon.cc @@ -794,6 +794,9 @@ int MDSDaemon::_handle_command( if (r == 0) { cct->_conf->apply_changes(nullptr); } + if (r == -ENOENT) { + r = 0; // idempotent + } } else if (prefix == "exit") { // We will send response before executing ss << "Exiting..."; diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index b23e88fa75389..c251caa4396ef 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -5828,6 +5828,9 @@ void OSD::do_command(Connection *con, ceph_tid_t tid, vector& cmd, buffe if (r == 0) { cct->_conf->apply_changes(nullptr); } + if (r == -ENOENT) { + r = 0; // make command idempotent + } osd_lock.Lock(); } else if (prefix == "cluster_log") { -- 2.39.5