From: Mykola Golub Date: Mon, 25 Mar 2019 06:54:46 +0000 (+0000) Subject: librbd: look for pool metadata in default namespace X-Git-Tag: v14.2.1~48^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F27423%2Fhead;p=ceph.git librbd: look for pool metadata in default namespace when applying pool level config overrides Fixes: https://tracker.ceph.com/issues/38928 Signed-off-by: Mykola Golub (cherry picked from commit 1729f149375420058c6628eb079cdc0c5ae92899) --- diff --git a/src/librbd/api/Config.cc b/src/librbd/api/Config.cc index eec026f31911..21d8c0ed3315 100644 --- a/src/librbd/api/Config.cc +++ b/src/librbd/api/Config.cc @@ -50,11 +50,13 @@ static std::set EXCLUDE_IMAGE_OPTIONS { }; struct Options : Parent { - librados::IoCtx& io_ctx; + librados::IoCtx m_io_ctx; - Options(librados::IoCtx& io_ctx, bool image_apply_only_options) - : io_ctx(io_ctx) { - CephContext *cct = reinterpret_cast(io_ctx.cct()); + Options(librados::IoCtx& io_ctx, bool image_apply_only_options) { + m_io_ctx.dup(io_ctx); + m_io_ctx.set_namespace(""); + + CephContext *cct = reinterpret_cast(m_io_ctx.cct()); const std::string rbd_key_prefix("rbd_"); const std::string rbd_mirror_key_prefix("rbd_mirror_"); @@ -77,7 +79,7 @@ struct Options : Parent { } int init() { - CephContext *cct = (CephContext *)io_ctx.cct(); + CephContext *cct = (CephContext *)m_io_ctx.cct(); for (auto &it : *this) { int r = cct->_conf.get_val(it.first.c_str(), &it.second.first); @@ -91,7 +93,7 @@ struct Options : Parent { while (more_results) { std::map pairs; - int r = librbd::api::PoolMetadata<>::list(io_ctx, last_key, MAX_KEYS, + int r = librbd::api::PoolMetadata<>::list(m_io_ctx, last_key, MAX_KEYS, &pairs); if (r < 0) { return r; diff --git a/src/librbd/image/RefreshRequest.cc b/src/librbd/image/RefreshRequest.cc index a79ffb7f293a..e622537da430 100644 --- a/src/librbd/image/RefreshRequest.cc +++ b/src/librbd/image/RefreshRequest.cc @@ -47,6 +47,8 @@ RefreshRequest::RefreshRequest(I &image_ctx, bool acquiring_lock, m_on_finish(create_async_context_callback(m_image_ctx, on_finish)), m_error_result(0), m_flush_aio(false), m_exclusive_lock(nullptr), m_object_map(nullptr), m_journal(nullptr), m_refresh_parent(nullptr) { + m_pool_metadata_io_ctx.dup(image_ctx.md_ctx); + m_pool_metadata_io_ctx.set_namespace(""); } template @@ -553,7 +555,7 @@ void RefreshRequest::send_v2_get_pool_metadata() { librados::AioCompletion *comp = create_rados_callback(this); m_out_bl.clear(); - m_image_ctx.md_ctx.aio_operate(RBD_INFO, comp, &op, &m_out_bl); + m_pool_metadata_io_ctx.aio_operate(RBD_INFO, comp, &op, &m_out_bl); comp->release(); } diff --git a/src/librbd/image/RefreshRequest.h b/src/librbd/image/RefreshRequest.h index 18a53f1fe1ea..9dd21157ee26 100644 --- a/src/librbd/image/RefreshRequest.h +++ b/src/librbd/image/RefreshRequest.h @@ -145,6 +145,7 @@ private: uint64_t m_flags = 0; uint64_t m_op_features = 0; + librados::IoCtx m_pool_metadata_io_ctx; std::string m_last_metadata_key; std::map m_metadata; diff --git a/src/test/librbd/image/test_mock_RefreshRequest.cc b/src/test/librbd/image/test_mock_RefreshRequest.cc index 777373c99663..31fff435cfb4 100644 --- a/src/test/librbd/image/test_mock_RefreshRequest.cc +++ b/src/test/librbd/image/test_mock_RefreshRequest.cc @@ -264,8 +264,6 @@ public: expect.WillOnce(Return(r)); } else { expect.WillOnce(DoDefault()); - EXPECT_CALL(get_mock_io_ctx(mock_image_ctx.md_ctx), - exec(RBD_INFO, _, StrEq("rbd"), StrEq("metadata_list"), _, _, _)); EXPECT_CALL(*mock_image_ctx.image_watcher, is_unregistered()) .WillOnce(Return(false)); }