From 2b3873186a442ed055acb5470e31d96d45569ca8 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 30 Jan 2020 23:32:40 -0500 Subject: [PATCH] rbd-mirror: stub prepare snapshot replay state machine The stub doesn't check for split-brain and it doesn't see if the image still requires a resync. Signed-off-by: Jason Dillaman --- src/tools/rbd_mirror/CMakeLists.txt | 1 + .../snapshot/PrepareReplayRequest.cc | 39 ++++++++ .../snapshot/PrepareReplayRequest.h | 89 +++++++++++++++++++ .../image_replayer/snapshot/StateBuilder.cc | 7 +- 4 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 src/tools/rbd_mirror/image_replayer/snapshot/PrepareReplayRequest.cc create mode 100644 src/tools/rbd_mirror/image_replayer/snapshot/PrepareReplayRequest.h diff --git a/src/tools/rbd_mirror/CMakeLists.txt b/src/tools/rbd_mirror/CMakeLists.txt index 92aa4662496..5ab5d6c588f 100644 --- a/src/tools/rbd_mirror/CMakeLists.txt +++ b/src/tools/rbd_mirror/CMakeLists.txt @@ -52,6 +52,7 @@ set(rbd_mirror_internal image_replayer/journal/StateBuilder.cc image_replayer/journal/SyncPointHandler.cc image_replayer/snapshot/CreateLocalImageRequest.cc + image_replayer/snapshot/PrepareReplayRequest.cc image_replayer/snapshot/StateBuilder.cc image_sync/SyncPointCreateRequest.cc image_sync/SyncPointPruneRequest.cc diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/PrepareReplayRequest.cc b/src/tools/rbd_mirror/image_replayer/snapshot/PrepareReplayRequest.cc new file mode 100644 index 00000000000..38340de2284 --- /dev/null +++ b/src/tools/rbd_mirror/image_replayer/snapshot/PrepareReplayRequest.cc @@ -0,0 +1,39 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#include "PrepareReplayRequest.h" +#include "common/debug.h" +#include "common/dout.h" +#include "common/errno.h" +#include "librbd/ImageCtx.h" +#include "librbd/Utils.h" +#include "tools/rbd_mirror/ProgressContext.h" +#include "tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h" + +#define dout_context g_ceph_context +#define dout_subsys ceph_subsys_rbd_mirror +#undef dout_prefix +#define dout_prefix *_dout << "rbd::mirror::image_replayer::snapshot::" \ + << "PrepareReplayRequest: " << this << " " \ + << __func__ << ": " + +namespace rbd { +namespace mirror { +namespace image_replayer { +namespace snapshot { + +template +void PrepareReplayRequest::send() { + // TODO + *m_resync_requested = false; + *m_syncing = false; + + finish(0); +} + +} // namespace snapshot +} // namespace image_replayer +} // namespace mirror +} // namespace rbd + +template class rbd::mirror::image_replayer::snapshot::PrepareReplayRequest; diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/PrepareReplayRequest.h b/src/tools/rbd_mirror/image_replayer/snapshot/PrepareReplayRequest.h new file mode 100644 index 00000000000..4cd1f9b0d35 --- /dev/null +++ b/src/tools/rbd_mirror/image_replayer/snapshot/PrepareReplayRequest.h @@ -0,0 +1,89 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#ifndef RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_PREPARE_REPLAY_REQUEST_H +#define RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_PREPARE_REPLAY_REQUEST_H + +#include "include/int_types.h" +#include "librbd/mirror/Types.h" +#include "tools/rbd_mirror/BaseRequest.h" +#include +#include + +struct Context; +namespace librbd { struct ImageCtx; } + +namespace rbd { +namespace mirror { + +class ProgressContext; + +namespace image_replayer { +namespace snapshot { + +template class StateBuilder; + +template +class PrepareReplayRequest : public BaseRequest { +public: + static PrepareReplayRequest* create( + const std::string& local_mirror_uuid, + librbd::mirror::PromotionState remote_promotion_state, + ProgressContext* progress_ctx, + StateBuilder* state_builder, + bool* resync_requested, + bool* syncing, + Context* on_finish) { + return new PrepareReplayRequest( + local_mirror_uuid, remote_promotion_state, progress_ctx, state_builder, + resync_requested, syncing, on_finish); + } + + PrepareReplayRequest( + const std::string& local_mirror_uuid, + librbd::mirror::PromotionState remote_promotion_state, + ProgressContext* progress_ctx, + StateBuilder* state_builder, + bool* resync_requested, + bool* syncing, + Context* on_finish) + : BaseRequest(on_finish), + m_local_mirror_uuid(local_mirror_uuid), + m_remote_promotion_state(remote_promotion_state), + m_progress_ctx(progress_ctx), + m_state_builder(state_builder), + m_resync_requested(resync_requested), + m_syncing(syncing) { + } + + void send() override; + +private: + // TODO + /** + * @verbatim + * + * + * | + * v + * + * + * @endverbatim + */ + + std::string m_local_mirror_uuid; + librbd::mirror::PromotionState m_remote_promotion_state; + ProgressContext* m_progress_ctx; + StateBuilder* m_state_builder; + bool* m_resync_requested; + bool* m_syncing; +}; + +} // namespace snapshot +} // namespace image_replayer +} // namespace mirror +} // namespace rbd + +extern template class rbd::mirror::image_replayer::snapshot::PrepareReplayRequest; + +#endif // RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_PREPARE_REPLAY_REQUEST_H diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc index fcaa3c17b26..c52d3a611a1 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc +++ b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc @@ -8,6 +8,7 @@ #include "common/errno.h" #include "librbd/ImageCtx.h" #include "tools/rbd_mirror/image_replayer/snapshot/CreateLocalImageRequest.h" +#include "tools/rbd_mirror/image_replayer/snapshot/PrepareReplayRequest.h" #define dout_context g_ceph_context #define dout_subsys ceph_subsys_rbd_mirror @@ -83,9 +84,9 @@ BaseRequest* StateBuilder::create_prepare_replay_request( bool* resync_requested, bool* syncing, Context* on_finish) { - // TODO - ceph_assert(false); - return nullptr; + return PrepareReplayRequest::create( + local_mirror_uuid, this->remote_promotion_state, progress_ctx, this, + resync_requested, syncing, on_finish); } template -- 2.39.5