return true;
}
- void ImageCtx::apply_metadata(const std::map<std::string, bufferlist> &meta) {
+ void ImageCtx::apply_metadata(const std::map<std::string, bufferlist> &meta,
+ bool thread_safe) {
ldout(cct, 20) << __func__ << dendl;
std::map<string, bool> configs = boost::assign::map_list_of(
"rbd_non_blocking_aio", false)(
ASSIGN_OPTION(journal_object_flush_interval, int64_t);
ASSIGN_OPTION(journal_object_flush_bytes, int64_t);
ASSIGN_OPTION(journal_object_flush_age, double);
- ASSIGN_OPTION(journal_pool, std::string);
ASSIGN_OPTION(journal_max_payload_bytes, uint64_t);
ASSIGN_OPTION(journal_max_concurrent_object_sets, int64_t);
ASSIGN_OPTION(mirroring_resync_after_disconnect, bool);
ASSIGN_OPTION(mirroring_replay_delay, int64_t);
ASSIGN_OPTION(skip_partial_discard, bool);
ASSIGN_OPTION(blkin_trace_all, bool);
+
+ if (thread_safe) {
+ ASSIGN_OPTION(journal_pool, std::string);
+ }
}
ExclusiveLock<ImageCtx> *ImageCtx::create_exclusive_lock() {
void cancel_async_requests();
void cancel_async_requests(Context *on_finish);
- void apply_metadata(const std::map<std::string, bufferlist> &meta);
+ void apply_metadata(const std::map<std::string, bufferlist> &meta,
+ bool thread_safe);
ExclusiveLock<ImageCtx> *create_exclusive_lock();
ObjectMap<ImageCtx> *create_object_map(uint64_t snap_id);
m_image_ctx->old_format = true;
m_image_ctx->header_oid = util::old_header_name(m_image_ctx->name);
- m_image_ctx->apply_metadata({});
+ m_image_ctx->apply_metadata({}, true);
send_register_watch();
}
}
}
- m_image_ctx->apply_metadata(m_metadata);
+ m_image_ctx->apply_metadata(m_metadata, true);
send_register_watch();
return nullptr;
}
}
- m_image_ctx.apply_metadata(m_metadata);
+ m_image_ctx.apply_metadata(m_metadata, false);
send_v2_get_flags();
return nullptr;
void expect_apply_metadata(MockRefreshImageCtx &mock_image_ctx,
int r) {
- EXPECT_CALL(mock_image_ctx, apply_metadata(_))
+ EXPECT_CALL(mock_image_ctx, apply_metadata(_, false))
.WillOnce(Return(r));
}
size_t, uint64_t, Context *, int, ZTracer::Trace *));
MOCK_METHOD8(write_to_cache, void(object_t, const bufferlist&, size_t,
uint64_t, Context *, int, uint64_t, ZTracer::Trace *));
- MOCK_METHOD1(apply_metadata, int(const std::map<std::string, bufferlist> &));
+ MOCK_METHOD2(apply_metadata, int(const std::map<std::string, bufferlist> &,
+ bool));
ImageCtx *image_ctx;
CephContext *cct;