]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
librbd: look for pool metadata in default namespace
authorMykola Golub <mgolub@suse.com>
Mon, 25 Mar 2019 06:54:46 +0000 (06:54 +0000)
committerMykola Golub <mgolub@suse.com>
Mon, 25 Mar 2019 09:30:46 +0000 (09:30 +0000)
when applying pool level config overrides

Fixes: https://tracker.ceph.com/issues/38928
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/librbd/api/Config.cc
src/librbd/image/RefreshRequest.cc
src/librbd/image/RefreshRequest.h
src/test/librbd/image/test_mock_RefreshRequest.cc

index 55456b93e5cdbe2e0b646d9026946fb22772ea83..60598f8d15b3a1597693c9feec5499f15e5b1f30 100644 (file)
@@ -50,11 +50,13 @@ static std::set<std::string_view> EXCLUDE_IMAGE_OPTIONS {
   };
 
 struct Options : Parent {
-  librados::IoCtxio_ctx;
+  librados::IoCtx m_io_ctx;
 
-  Options(librados::IoCtx& io_ctx, bool image_apply_only_options)
-    : io_ctx(io_ctx) {
-    CephContext *cct = reinterpret_cast<CephContext *>(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<CephContext *>(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<std::string, bufferlist> 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;
index ec290a957ec547363b2442629a75fee93bf7a6e0..d3777c61011133b7627bf1d11b06dfb2fb437d89 100644 (file)
@@ -47,6 +47,8 @@ RefreshRequest<I>::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 <typename I>
@@ -553,7 +555,7 @@ void RefreshRequest<I>::send_v2_get_pool_metadata() {
   librados::AioCompletion *comp =
     create_rados_callback<klass, &klass::handle_v2_get_pool_metadata>(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();
 }
 
index 18a53f1fe1eaf53322fd10ef71fa0883a6ec8ee3..9dd21157ee26d0b319511a8032b33a6d262b7433 100644 (file)
@@ -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<std::string, bufferlist> m_metadata;
 
index 414303b036b3f8d5cc16f2261a8102bf8701ea59..4a6cea16e0412c11fe0ee3a005ce0f1f5a94c612 100644 (file)
@@ -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));
     }