C_SaferCond ctx;
auto req = mirror::EnableRequest<I>::create(
- image_ctx, mirror_image_mode, "", &ctx);
+ image_ctx, mirror_image_mode, "", false, &ctx);
req->send();
r = ctx.wait();
if (r < 0) {
C_SaferCond ctx;
auto req = mirror::EnableRequest<ImageCtx>::create(
- ictx, static_cast<cls::rbd::MirrorImageMode>(mode), "", &ctx);
+ ictx, static_cast<cls::rbd::MirrorImageMode>(mode), "", false, &ctx);
req->send();
r = ctx.wait();
ImageCtx::get_thread_pool_instance(cct, &thread_pool, &op_work_queue);
C_SaferCond ctx;
auto req = mirror::EnableRequest<I>::create(
- io_ctx, image_id, cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, "", op_work_queue,
- &ctx);
+ io_ctx, image_id, cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, "", false,
+ op_work_queue, &ctx);
req->send();
r = ctx.wait();
if (r < 0) {
Context *ctx = create_context_callback<
klass, &klass::handle_enable_mirror>(this);
auto req = mirror::EnableRequest<I>::create(
- m_imctx, m_mirror_image_mode, m_non_primary_global_image_id, ctx);
+ m_imctx, m_mirror_image_mode, m_non_primary_global_image_id, true, ctx);
req->send();
}
auto req = mirror::EnableRequest<I>::create(
m_io_ctx, m_image_id, m_mirror_image_mode,
- m_non_primary_global_image_id, m_op_work_queue, ctx);
+ m_non_primary_global_image_id, true, m_op_work_queue, ctx);
req->send();
}
I* image_ctx,
cls::rbd::MirrorImageMode mode,
const std::string &non_primary_global_image_id,
- ContextWQ *op_work_queue, Context *on_finish)
+ bool image_clean, ContextWQ *op_work_queue,
+ Context *on_finish)
: m_io_ctx(io_ctx), m_image_id(image_id), m_image_ctx(image_ctx),
m_mode(mode), m_non_primary_global_image_id(non_primary_global_image_id),
- m_op_work_queue(op_work_queue), m_on_finish(on_finish),
+ m_image_clean(image_clean), m_op_work_queue(op_work_queue),
+ m_on_finish(on_finish),
m_cct(reinterpret_cast<CephContext*>(io_ctx.cct())) {
}
EnableRequest<I>,
&EnableRequest<I>::handle_create_primary_snapshot>(this);
auto req = snapshot::CreatePrimaryRequest<I>::create(
- m_image_ctx, m_mirror_image.global_image_id, CEPH_NOSNAP,
+ m_image_ctx, m_mirror_image.global_image_id,
+ (m_image_clean ? 0 : CEPH_NOSNAP),
snapshot::CREATE_PRIMARY_FLAG_IGNORE_EMPTY_PEERS, &m_snap_id, ctx);
req->send();
}
static EnableRequest *create(ImageCtxT *image_ctx,
cls::rbd::MirrorImageMode mode,
const std::string &non_primary_global_image_id,
- Context *on_finish) {
+ bool image_clean, Context *on_finish) {
return new EnableRequest(image_ctx->md_ctx, image_ctx->id, image_ctx, mode,
- non_primary_global_image_id,
+ non_primary_global_image_id, image_clean,
image_ctx->op_work_queue, on_finish);
}
static EnableRequest *create(librados::IoCtx &io_ctx,
const std::string &image_id,
cls::rbd::MirrorImageMode mode,
const std::string &non_primary_global_image_id,
- ContextWQ *op_work_queue, Context *on_finish) {
+ bool image_clean, ContextWQ *op_work_queue,
+ Context *on_finish) {
return new EnableRequest(io_ctx, image_id, nullptr, mode,
- non_primary_global_image_id, op_work_queue,
- on_finish);
+ non_primary_global_image_id, image_clean,
+ op_work_queue, on_finish);
}
void send();
EnableRequest(librados::IoCtx &io_ctx, const std::string &image_id,
ImageCtxT* image_ctx, cls::rbd::MirrorImageMode mode,
const std::string &non_primary_global_image_id,
- ContextWQ *op_work_queue, Context *on_finish);
+ bool image_clean, ContextWQ *op_work_queue, Context *on_finish);
librados::IoCtx &m_io_ctx;
std::string m_image_id;
ImageCtxT* m_image_ctx;
cls::rbd::MirrorImageMode m_mode;
std::string m_non_primary_global_image_id;
+ bool m_image_clean;
ContextWQ *m_op_work_queue;
Context *m_on_finish;
&EnableFeaturesRequest<I>::handle_enable_mirror_image>(this);
auto req = mirror::EnableRequest<I>::create(
- &image_ctx, cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, "", ctx);
+ &image_ctx, cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, "", false, ctx);
req->send();
}
static EnableRequest* create(MockTestImageCtx* image_ctx,
cls::rbd::MirrorImageMode mode,
const std::string &non_primary_global_image_id,
- Context *on_finish) {
+ bool image_clean, Context *on_finish) {
ceph_assert(s_instance != nullptr);
+ EXPECT_TRUE(image_clean);
s_instance->on_finish = on_finish;
return s_instance;
}
static EnableRequest *create(MockOperationImageCtx *image_ctx,
cls::rbd::MirrorImageMode mirror_image_mode,
const std::string& non_primary_global_image_id,
- Context *on_finish) {
+ bool image_clean, Context *on_finish) {
ceph_assert(s_instance != nullptr);
s_instance->on_finish = on_finish;
return s_instance;