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: v15.0.0~92^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1729f149375420058c6628eb079cdc0c5ae92899;p=ceph-ci.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 --- diff --git a/src/librbd/api/Config.cc b/src/librbd/api/Config.cc index 55456b93e5c..60598f8d15b 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& [k,v] : *this) { int r = cct->_conf.get_val(k, &v.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 ec290a957ec..d3777c61011 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 18a53f1fe1e..9dd21157ee2 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 414303b036b..4a6cea16e04 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)); }