};
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<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_");
}
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);
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;
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>
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();
}
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;
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));
}