From: Jason Dillaman Date: Mon, 23 Dec 2019 15:46:09 +0000 (-0500) Subject: librbd: remove pool objects when removing a namespace X-Git-Tag: v15.1.0~369^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F32401%2Fhead;p=ceph.git librbd: remove pool objects when removing a namespace Avoid leaving RBD pool objects within a pool namespace that is being deleted. Fixes: https://tracker.ceph.com/issues/43378 Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/api/Namespace.cc b/src/librbd/api/Namespace.cc index 16dd4b81b4d2..6c5ac7fda314 100644 --- a/src/librbd/api/Namespace.cc +++ b/src/librbd/api/Namespace.cc @@ -14,6 +14,20 @@ namespace librbd { namespace api { +namespace { + +const std::list POOL_OBJECTS { + RBD_CHILDREN, + RBD_GROUP_DIRECTORY, + RBD_INFO, + RBD_MIRRORING, + RBD_TASK, + RBD_TRASH, + RBD_DIRECTORY +}; + +} // anonymous namespace + template int Namespace::create(librados::IoCtx& io_ctx, const std::string& name) { @@ -125,6 +139,15 @@ int Namespace::remove(librados::IoCtx& io_ctx, const std::string& name) return r; } + for (auto& oid : POOL_OBJECTS) { + r = ns_ctx.remove(oid); + if (r < 0 && r != -ENOENT) { + lderr(cct) << "failed to remove object '" << oid << "': " + << cpp_strerror(r) << dendl; + return r; + } + } + r = cls_client::namespace_remove(&default_ns_ctx, name); if (r < 0) { lderr(cct) << "failed to remove namespace: " << cpp_strerror(r) << dendl;