From 4b92bf3e5f72d55bdc35737881120b8aede6ef97 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Fri, 13 Mar 2020 15:52:56 -0400 Subject: [PATCH] rbd-mirror: pass InstanceWatcher to snapshot Replayer The replayer will request image syncs via the instance watcher in the next commit. Signed-off-by: Jason Dillaman --- .../snapshot/test_mock_Replayer.cc | 146 +++++++++++------- .../rbd_mirror/test_mock_ImageReplayer.cc | 7 +- src/tools/rbd_mirror/ImageReplayer.cc | 3 +- .../rbd_mirror/image_replayer/StateBuilder.h | 2 + .../image_replayer/journal/StateBuilder.cc | 3 +- .../image_replayer/journal/StateBuilder.h | 1 + .../image_replayer/snapshot/Replayer.cc | 3 + .../image_replayer/snapshot/Replayer.h | 8 +- .../image_replayer/snapshot/StateBuilder.cc | 6 +- .../image_replayer/snapshot/StateBuilder.h | 1 + 10 files changed, 111 insertions(+), 69 deletions(-) diff --git a/src/test/rbd_mirror/image_replayer/snapshot/test_mock_Replayer.cc b/src/test/rbd_mirror/image_replayer/snapshot/test_mock_Replayer.cc index 47e232e9f064c..391b4000a6c70 100644 --- a/src/test/rbd_mirror/image_replayer/snapshot/test_mock_Replayer.cc +++ b/src/test/rbd_mirror/image_replayer/snapshot/test_mock_Replayer.cc @@ -8,6 +8,7 @@ #include "librbd/mirror/snapshot/GetImageStateRequest.h" #include "librbd/mirror/snapshot/ImageMeta.h" #include "librbd/mirror/snapshot/UnlinkPeerRequest.h" +#include "tools/rbd_mirror/InstanceWatcher.h" #include "tools/rbd_mirror/Threads.h" #include "tools/rbd_mirror/image_replayer/CloseImageRequest.h" #include "tools/rbd_mirror/image_replayer/ReplayerListener.h" @@ -218,6 +219,10 @@ UnlinkPeerRequest* UnlinkPeerRequest::s_inst namespace rbd { namespace mirror { +template <> +struct InstanceWatcher { +}; + template <> struct Threads { MockSafeTimer *timer; @@ -349,6 +354,7 @@ public: typedef Replayer MockReplayer; typedef ApplyImageStateRequest MockApplyImageStateRequest; typedef StateBuilder MockStateBuilder; + typedef InstanceWatcher MockInstanceWatcher; typedef Threads MockThreads; typedef CloseImageRequest MockCloseImageRequest; typedef librbd::deep_copy::ImageCopyRequest MockImageCopyRequest; @@ -635,13 +641,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, InitShutDown) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -688,13 +695,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, SyncSnapshot) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -798,13 +806,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, InterruptedSync) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -880,13 +889,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, RemoteImageDemoted) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -964,13 +974,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, LocalImagePromoted) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1019,13 +1030,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, ResyncRequested) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1062,14 +1074,15 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, RegisterLocalUpdateWatcherError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); MockReplayerListener mock_replayer_listener; - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1094,14 +1107,15 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, RegisterRemoteUpdateWatcherError) InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); MockReplayerListener mock_replayer_listener; - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1133,13 +1147,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, UnregisterRemoteUpdateWatcherError InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1174,13 +1189,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, UnregisterLocalUpdateWatcherError) InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1215,13 +1231,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, LoadImageMetaError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1262,13 +1279,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, RefreshLocalImageError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1311,13 +1329,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, RefreshRemoteImageError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1361,13 +1380,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, CopySnapshotsError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1420,13 +1440,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, GetImageStateError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1481,13 +1502,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, CreateNonPrimarySnapshotError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1546,13 +1568,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, CopyImageError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1614,13 +1637,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, UpdateNonPrimarySnapshotError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1686,13 +1710,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, UnlinkPeerError) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); @@ -1771,13 +1796,14 @@ TEST_F(TestMockImageReplayerSnapshotReplayer, SplitBrain) { InSequence seq; + MockInstanceWatcher mock_instance_watcher; MockImageMeta mock_image_meta; MockStateBuilder mock_state_builder(mock_local_image_ctx, mock_remote_image_ctx, mock_image_meta); - MockReplayer mock_replayer{&mock_threads, "local mirror uuid", - &m_pool_meta_cache, &mock_state_builder, - &mock_replayer_listener}; + MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher, + "local mirror uuid", &m_pool_meta_cache, + &mock_state_builder, &mock_replayer_listener}; m_pool_meta_cache.set_remote_pool_meta( m_remote_io_ctx.get_id(), {"remote mirror uuid", "remote mirror peer uuid"}); diff --git a/src/test/rbd_mirror/test_mock_ImageReplayer.cc b/src/test/rbd_mirror/test_mock_ImageReplayer.cc index 653b6e98bb7c5..20693e3223b7b 100644 --- a/src/test/rbd_mirror/test_mock_ImageReplayer.cc +++ b/src/test/rbd_mirror/test_mock_ImageReplayer.cc @@ -175,7 +175,8 @@ struct StateBuilder { } MOCK_METHOD1(close, void(Context*)); - MOCK_METHOD4(create_replayer, Replayer*(Threads*, + MOCK_METHOD5(create_replayer, Replayer*(Threads*, + InstanceWatcher*, const std::string&, PoolMetaCache*, ReplayerListener*)); @@ -301,8 +302,8 @@ public: void expect_create_replayer(MockStateBuilder& mock_state_builder, MockReplayer& mock_replayer) { - EXPECT_CALL(mock_state_builder, create_replayer(_, _, _, _)) - .WillOnce(WithArg<3>( + EXPECT_CALL(mock_state_builder, create_replayer(_, _, _, _, _)) + .WillOnce(WithArg<4>( Invoke([&mock_replayer] (image_replayer::ReplayerListener* replayer_listener) { mock_replayer.replayer_listener = replayer_listener; diff --git a/src/tools/rbd_mirror/ImageReplayer.cc b/src/tools/rbd_mirror/ImageReplayer.cc index 8068ef678716f..dd74512dfd194 100644 --- a/src/tools/rbd_mirror/ImageReplayer.cc +++ b/src/tools/rbd_mirror/ImageReplayer.cc @@ -408,7 +408,8 @@ void ImageReplayer::start_replay() { std::unique_lock locker{m_lock}; ceph_assert(m_replayer == nullptr); - m_replayer = m_state_builder->create_replayer(m_threads, m_local_mirror_uuid, + m_replayer = m_state_builder->create_replayer(m_threads, m_instance_watcher, + m_local_mirror_uuid, m_pool_meta_cache, m_replayer_listener); diff --git a/src/tools/rbd_mirror/image_replayer/StateBuilder.h b/src/tools/rbd_mirror/image_replayer/StateBuilder.h index 99f5fce448778..d055c84e02068 100644 --- a/src/tools/rbd_mirror/image_replayer/StateBuilder.h +++ b/src/tools/rbd_mirror/image_replayer/StateBuilder.h @@ -15,6 +15,7 @@ namespace rbd { namespace mirror { struct BaseRequest; +template class InstanceWatcher; struct PoolMetaCache; struct ProgressContext; template class Threads; @@ -73,6 +74,7 @@ public: virtual Replayer* create_replayer( Threads* threads, + InstanceWatcher* instance_watcher, const std::string& local_mirror_uuid, PoolMetaCache* pool_meta_cache, ReplayerListener* replayer_listener) = 0; diff --git a/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.cc b/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.cc index c28e0694823f6..8d391580ed7c0 100644 --- a/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.cc +++ b/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.cc @@ -104,7 +104,8 @@ BaseRequest* StateBuilder::create_prepare_replay_request( template image_replayer::Replayer* StateBuilder::create_replayer( - Threads* threads, + Threads* threads, + InstanceWatcher* instance_watcher, const std::string& local_mirror_uuid, PoolMetaCache* pool_meta_cache, ReplayerListener* replayer_listener) { diff --git a/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h b/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h index 3f3621727ce4a..1d4fa83cbb041 100644 --- a/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h +++ b/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h @@ -60,6 +60,7 @@ public: image_replayer::Replayer* create_replayer( Threads* threads, + InstanceWatcher* instance_watcher, const std::string& local_mirror_uuid, PoolMetaCache* pool_meta_cache, ReplayerListener* replayer_listener) override; diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc index 2bb495913a54c..fc62e41611283 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc +++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc @@ -17,6 +17,7 @@ #include "librbd/mirror/snapshot/GetImageStateRequest.h" #include "librbd/mirror/snapshot/ImageMeta.h" #include "librbd/mirror/snapshot/UnlinkPeerRequest.h" +#include "tools/rbd_mirror/InstanceWatcher.h" #include "tools/rbd_mirror/PoolMetaCache.h" #include "tools/rbd_mirror/Threads.h" #include "tools/rbd_mirror/Types.h" @@ -110,11 +111,13 @@ struct Replayer::ProgressContext : public librbd::ProgressContext { template Replayer::Replayer( Threads* threads, + InstanceWatcher* instance_watcher, const std::string& local_mirror_uuid, PoolMetaCache* pool_meta_cache, StateBuilder* state_builder, ReplayerListener* replayer_listener) : m_threads(threads), + m_instance_watcher(instance_watcher), m_local_mirror_uuid(local_mirror_uuid), m_pool_meta_cache(pool_meta_cache), m_state_builder(state_builder), diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h index e5ae54c627264..fae097b1fcba0 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h +++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h @@ -22,6 +22,7 @@ namespace snapshot { template class Replay; } namespace rbd { namespace mirror { +template struct InstanceWatcher; class PoolMetaCache; template struct Threads; @@ -40,16 +41,18 @@ class Replayer : public image_replayer::Replayer { public: static Replayer* create( Threads* threads, + InstanceWatcher* instance_watcher, const std::string& local_mirror_uuid, PoolMetaCache* pool_meta_cache, StateBuilder* state_builder, ReplayerListener* replayer_listener) { - return new Replayer(threads, local_mirror_uuid, pool_meta_cache, - state_builder, replayer_listener); + return new Replayer(threads, instance_watcher, local_mirror_uuid, + pool_meta_cache, state_builder, replayer_listener); } Replayer( Threads* threads, + InstanceWatcher* instance_watcher, const std::string& local_mirror_uuid, PoolMetaCache* pool_meta_cache, StateBuilder* state_builder, @@ -180,6 +183,7 @@ private: struct ProgressContext; Threads* m_threads; + InstanceWatcher* m_instance_watcher; std::string m_local_mirror_uuid; PoolMetaCache* m_pool_meta_cache; StateBuilder* m_state_builder; diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc index 27225707f5532..2fb2534d64206 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc +++ b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc @@ -103,12 +103,14 @@ BaseRequest* StateBuilder::create_prepare_replay_request( template image_replayer::Replayer* StateBuilder::create_replayer( - Threads* threads, + Threads* threads, + InstanceWatcher* instance_watcher, const std::string& local_mirror_uuid, PoolMetaCache* pool_meta_cache, ReplayerListener* replayer_listener) { return Replayer::create( - threads, local_mirror_uuid, pool_meta_cache, this, replayer_listener); + threads, instance_watcher, local_mirror_uuid, pool_meta_cache, this, + replayer_listener); } } // namespace snapshot diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h index 83c55ebafdccf..ab326255fdb86 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h +++ b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h @@ -69,6 +69,7 @@ public: image_replayer::Replayer* create_replayer( Threads* threads, + InstanceWatcher* instance_watcher, const std::string& local_mirror_uuid, PoolMetaCache* pool_meta_cache, ReplayerListener* replayer_listener) override; -- 2.39.5