From: Sage Weil Date: Mon, 4 Jun 2018 16:00:08 +0000 (-0500) Subject: osd,mds,common: make 'config rm ...' idempotent X-Git-Tag: v13.2.1~108^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F22552%2Fhead;p=ceph.git osd,mds,common: make 'config rm ...' idempotent Fixes: http://tracker.ceph.com/issues/24408 Signed-off-by: Sage Weil (cherry picked from commit 11044f5f1b6221eeb8a7837a9b90cd2a4c39936e) --- diff --git a/qa/workunits/mon/config.sh b/qa/workunits/mon/config.sh index 547e4e291dc0..d97106a4a141 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 f8988ca74644..5fee784edae9 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 4c78c36c8b9e..b330f5895f39 100644 --- a/src/mds/MDSDaemon.cc +++ b/src/mds/MDSDaemon.cc @@ -817,6 +817,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 a6cf1883603c..ca3427460d24 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -5873,6 +5873,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") {