From 5bf9899a8c7b44400cbd9d47a2e4f2d47c92c27d Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Tue, 28 Jan 2020 13:42:39 -0500 Subject: [PATCH] rbd-mirror: pass mirror image mode to create image state machine Signed-off-by: Jason Dillaman --- .../test_mock_CreateLocalImageRequest.cc | 1 + .../test_mock_CreateImageRequest.cc | 4 ++- .../image_replayer/CreateImageRequest.cc | 31 ++++++++++--------- .../image_replayer/CreateImageRequest.h | 7 ++++- .../journal/CreateLocalImageRequest.cc | 3 +- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/test/rbd_mirror/image_replayer/journal/test_mock_CreateLocalImageRequest.cc b/src/test/rbd_mirror/image_replayer/journal/test_mock_CreateLocalImageRequest.cc index 6fc7580165e..08402c213de 100644 --- a/src/test/rbd_mirror/image_replayer/journal/test_mock_CreateLocalImageRequest.cc +++ b/src/test/rbd_mirror/image_replayer/journal/test_mock_CreateLocalImageRequest.cc @@ -69,6 +69,7 @@ struct CreateImageRequest { const std::string &local_image_name, const std::string &local_image_id, librbd::MockTestImageCtx *remote_image_ctx, + cls::rbd::MirrorImageMode mirror_image_mode, Context *on_finish) { ceph_assert(s_instance != nullptr); s_instance->on_finish = on_finish; diff --git a/src/test/rbd_mirror/image_replayer/test_mock_CreateImageRequest.cc b/src/test/rbd_mirror/image_replayer/test_mock_CreateImageRequest.cc index 896aa03e7d7..417c08c9657 100644 --- a/src/test/rbd_mirror/image_replayer/test_mock_CreateImageRequest.cc +++ b/src/test/rbd_mirror/image_replayer/test_mock_CreateImageRequest.cc @@ -383,7 +383,9 @@ public: return new MockCreateImageRequest(mock_threads, m_local_io_ctx, global_image_id, remote_mirror_uuid, local_image_name, local_image_id, - &mock_remote_image_ctx, on_finish); + &mock_remote_image_ctx, + cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, + on_finish); } librbd::ImageCtx *m_remote_image_ctx; diff --git a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc index 23dde23ec99..854f306f5fe 100644 --- a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc @@ -35,19 +35,22 @@ namespace mirror { namespace image_replayer { template -CreateImageRequest::CreateImageRequest(Threads* threads, - librados::IoCtx &local_io_ctx, - const std::string &global_image_id, - const std::string &remote_mirror_uuid, - const std::string &local_image_name, - const std::string &local_image_id, - I *remote_image_ctx, - Context *on_finish) +CreateImageRequest::CreateImageRequest( + Threads* threads, + librados::IoCtx &local_io_ctx, + const std::string &global_image_id, + const std::string &remote_mirror_uuid, + const std::string &local_image_name, + const std::string &local_image_id, + I *remote_image_ctx, + cls::rbd::MirrorImageMode mirror_image_mode, + Context *on_finish) : m_threads(threads), m_local_io_ctx(local_io_ctx), m_global_image_id(global_image_id), m_remote_mirror_uuid(remote_mirror_uuid), m_local_image_name(local_image_name), m_local_image_id(local_image_id), - m_remote_image_ctx(remote_image_ctx), m_on_finish(on_finish) { + m_remote_image_ctx(remote_image_ctx), + m_mirror_image_mode(mirror_image_mode), m_on_finish(on_finish) { } template @@ -83,9 +86,9 @@ void CreateImageRequest::create_image() { auto req = librbd::image::CreateRequest::create( config, m_local_io_ctx, m_local_image_name, m_local_image_id, - m_remote_image_ctx->size, image_options, false, - cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, m_global_image_id, - m_remote_mirror_uuid, m_remote_image_ctx->op_work_queue, ctx); + m_remote_image_ctx->size, image_options, false, m_mirror_image_mode, + m_global_image_id, m_remote_mirror_uuid, m_remote_image_ctx->op_work_queue, + ctx); req->send(); } @@ -346,8 +349,8 @@ void CreateImageRequest::clone_image() { librbd::image::CloneRequest *req = librbd::image::CloneRequest::create( config, m_local_parent_io_ctx, m_local_parent_spec.image_id, snap_name, CEPH_NOSNAP, m_local_io_ctx, m_local_image_name, m_local_image_id, opts, - cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, m_global_image_id, - m_remote_mirror_uuid, m_remote_image_ctx->op_work_queue, ctx); + m_mirror_image_mode, m_global_image_id, m_remote_mirror_uuid, + m_remote_image_ctx->op_work_queue, ctx); req->send(); } diff --git a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.h b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.h index 0b20da52920..c8564e6179b 100644 --- a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.h +++ b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.h @@ -8,6 +8,7 @@ #include "include/types.h" #include "include/rados/librados.hpp" #include "cls/journal/cls_journal_types.h" +#include "cls/rbd/cls_rbd_types.h" #include "librbd/Types.h" #include "librbd/journal/TypeTraits.h" #include @@ -35,10 +36,12 @@ public: const std::string &local_image_name, const std::string &local_image_id, ImageCtxT *remote_image_ctx, + cls::rbd::MirrorImageMode mirror_image_mode, Context *on_finish) { return new CreateImageRequest(threads, local_io_ctx, global_image_id, remote_mirror_uuid, local_image_name, - local_image_id, remote_image_ctx, on_finish); + local_image_id, remote_image_ctx, + mirror_image_mode, on_finish); } CreateImageRequest(Threads *threads, librados::IoCtx &local_io_ctx, @@ -47,6 +50,7 @@ public: const std::string &local_image_name, const std::string &local_image_id, ImageCtxT *remote_image_ctx, + cls::rbd::MirrorImageMode mirror_image_mode, Context *on_finish); void send(); @@ -95,6 +99,7 @@ private: std::string m_local_image_name; std::string m_local_image_id; ImageCtxT *m_remote_image_ctx; + cls::rbd::MirrorImageMode m_mirror_image_mode; Context *m_on_finish; librados::IoCtx m_remote_parent_io_ctx; diff --git a/src/tools/rbd_mirror/image_replayer/journal/CreateLocalImageRequest.cc b/src/tools/rbd_mirror/image_replayer/journal/CreateLocalImageRequest.cc index 9403108020c..fa8765faf1c 100644 --- a/src/tools/rbd_mirror/image_replayer/journal/CreateLocalImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/journal/CreateLocalImageRequest.cc @@ -115,7 +115,8 @@ void CreateLocalImageRequest::create_local_image() { auto request = CreateImageRequest::create( m_threads, m_local_io_ctx, m_global_image_id, m_state_builder->remote_mirror_uuid, image_name, - m_state_builder->local_image_id, m_remote_image_ctx, ctx); + m_state_builder->local_image_id, m_remote_image_ctx, + cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, ctx); request->send(); } template -- 2.39.5