From e26fa83d4b11869b82028c741559b25161e84a75 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 11 Jun 2020 22:07:15 -0400 Subject: [PATCH] rbd-mirror: swapped ThreadPool/ContextWQ for AsioEngine The majority of usage of ContextWQ has been switched to use the ASIO ContextWQ adapter class. The journal remains the only remaining use of dedicated ThreadPools in rbd-mirror. Signed-off-by: Jason Dillaman --- .../test_mock_TrashMoveRequest.cc | 5 +++-- .../test_mock_TrashRemoveRequest.cc | 2 +- .../test_mock_CreateLocalImageRequest.cc | 2 +- .../test_mock_BootstrapRequest.cc | 6 +++--- .../test_mock_CreateImageRequest.cc | 2 +- .../test_mock_PrepareLocalImageRequest.cc | 2 +- .../test_mock_PrepareRemoteImageRequest.cc | 4 ++-- src/test/rbd_mirror/test_ImageSync.cc | 6 +++++- src/test/rbd_mirror/test_mock_ImageSync.cc | 6 +++--- .../rbd_mirror/test_mock_InstanceWatcher.cc | 5 +++-- .../rbd_mirror/test_mock_LeaderWatcher.cc | 6 +++--- .../rbd_mirror/test_mock_NamespaceReplayer.cc | 4 ++-- src/test/rbd_mirror/test_mock_fixture.h | 3 ++- src/tools/rbd_mirror/ImageDeleter.cc | 5 +++-- src/tools/rbd_mirror/ImageDeleter.h | 9 ++++++--- src/tools/rbd_mirror/ImageMap.cc | 2 +- src/tools/rbd_mirror/ImageReplayer.cc | 2 +- src/tools/rbd_mirror/ImageSync.cc | 1 + src/tools/rbd_mirror/ImageSync.h | 1 - src/tools/rbd_mirror/InstanceReplayer.cc | 2 +- src/tools/rbd_mirror/InstanceWatcher.cc | 10 ++++++---- src/tools/rbd_mirror/InstanceWatcher.h | 9 +++++---- src/tools/rbd_mirror/Instances.cc | 2 +- src/tools/rbd_mirror/LeaderWatcher.cc | 1 + src/tools/rbd_mirror/LeaderWatcher.h | 7 +++++-- src/tools/rbd_mirror/MirrorStatusUpdater.cc | 2 +- src/tools/rbd_mirror/MirrorStatusWatcher.cc | 2 +- src/tools/rbd_mirror/MirrorStatusWatcher.h | 10 +++++++--- src/tools/rbd_mirror/NamespaceReplayer.cc | 1 + src/tools/rbd_mirror/NamespaceReplayer.h | 1 - src/tools/rbd_mirror/PoolReplayer.h | 2 +- src/tools/rbd_mirror/PoolWatcher.cc | 1 + src/tools/rbd_mirror/RemotePoolPoller.cc | 2 +- src/tools/rbd_mirror/Threads.cc | 18 +++++------------- src/tools/rbd_mirror/Threads.h | 19 ++++++++++++------- .../image_deleter/TrashMoveRequest.cc | 9 ++++++++- .../image_deleter/TrashMoveRequest.h | 14 +++++++++----- .../image_deleter/TrashRemoveRequest.cc | 1 + .../image_deleter/TrashRemoveRequest.h | 12 ++++++++---- .../rbd_mirror/image_deleter/TrashWatcher.cc | 1 + .../image_replayer/BootstrapRequest.cc | 2 +- .../image_replayer/BootstrapRequest.h | 1 - .../image_replayer/CloseImageRequest.cc | 1 - .../image_replayer/CreateImageRequest.cc | 2 +- .../image_replayer/CreateImageRequest.h | 1 - .../image_replayer/OpenLocalImageRequest.cc | 18 ++++++++++-------- .../image_replayer/OpenLocalImageRequest.h | 12 +++++++----- .../image_replayer/PrepareLocalImageRequest.h | 14 ++++++++------ .../PrepareRemoteImageRequest.cc | 9 +++++++-- .../PrepareRemoteImageRequest.h | 1 - .../journal/EventPreprocessor.cc | 4 ++-- .../journal/EventPreprocessor.h | 13 ++++++++----- .../image_replayer/journal/Replayer.cc | 2 +- .../image_replayer/snapshot/Replayer.cc | 2 +- 54 files changed, 164 insertions(+), 117 deletions(-) diff --git a/src/test/rbd_mirror/image_deleter/test_mock_TrashMoveRequest.cc b/src/test/rbd_mirror/image_deleter/test_mock_TrashMoveRequest.cc index 2630915115d03..ae481dce4e294 100644 --- a/src/test/rbd_mirror/image_deleter/test_mock_TrashMoveRequest.cc +++ b/src/test/rbd_mirror/image_deleter/test_mock_TrashMoveRequest.cc @@ -74,7 +74,8 @@ struct ResetRequest { const std::string &image_id, const std::string &client_id, const std::string &mirror_uuid, - ContextWQ *op_work_queue, Context *on_finish) { + ContextWQ *op_work_queue, + Context *on_finish) { ceph_assert(s_instance != nullptr); EXPECT_EQ(librbd::Journal<>::LOCAL_MIRROR_UUID, mirror_uuid); s_instance->on_finish = on_finish; @@ -103,7 +104,7 @@ struct GetInfoRequest { Context *on_finish = nullptr; static GetInfoRequest* create(librados::IoCtx& io_ctx, - ContextWQ* context_wq, + librbd::asio::ContextWQ* context_wq, const std::string& image_id, cls::rbd::MirrorImage *mirror_image, PromotionState *promotion_state, diff --git a/src/test/rbd_mirror/image_deleter/test_mock_TrashRemoveRequest.cc b/src/test/rbd_mirror/image_deleter/test_mock_TrashRemoveRequest.cc index b9c5b1a2d7433..43057cce0489c 100644 --- a/src/test/rbd_mirror/image_deleter/test_mock_TrashRemoveRequest.cc +++ b/src/test/rbd_mirror/image_deleter/test_mock_TrashRemoveRequest.cc @@ -52,7 +52,7 @@ struct RemoveRequest { static RemoveRequest *create(librados::IoCtx &io_ctx, const std::string &image_id, - ContextWQ *work_queue, + librbd::asio::ContextWQ *work_queue, bool force, librbd::ProgressContext &progress_ctx, Context *on_finish) { diff --git a/src/test/rbd_mirror/image_replayer/snapshot/test_mock_CreateLocalImageRequest.cc b/src/test/rbd_mirror/image_replayer/snapshot/test_mock_CreateLocalImageRequest.cc index 18304f67dd7dc..3277f77f87aa2 100644 --- a/src/test/rbd_mirror/image_replayer/snapshot/test_mock_CreateLocalImageRequest.cc +++ b/src/test/rbd_mirror/image_replayer/snapshot/test_mock_CreateLocalImageRequest.cc @@ -48,7 +48,7 @@ template <> struct Threads { ceph::mutex &timer_lock; SafeTimer *timer; - ContextWQ *work_queue; + librbd::asio::ContextWQ *work_queue; Threads(Threads *threads) : timer_lock(threads->timer_lock), timer(threads->timer), diff --git a/src/test/rbd_mirror/image_replayer/test_mock_BootstrapRequest.cc b/src/test/rbd_mirror/image_replayer/test_mock_BootstrapRequest.cc index 8175680ab6c86..53a69a84eefaf 100644 --- a/src/test/rbd_mirror/image_replayer/test_mock_BootstrapRequest.cc +++ b/src/test/rbd_mirror/image_replayer/test_mock_BootstrapRequest.cc @@ -39,7 +39,7 @@ template <> struct Threads { ceph::mutex &timer_lock; SafeTimer *timer; - ContextWQ *work_queue; + librbd::asio::ContextWQ *work_queue; Threads(Threads *threads) : timer_lock(threads->timer_lock), timer(threads->timer), @@ -127,7 +127,7 @@ struct OpenLocalImageRequest { static OpenLocalImageRequest* create(librados::IoCtx &local_io_ctx, librbd::MockTestImageCtx **local_image_ctx, const std::string &local_image_id, - ContextWQ *work_queue, + librbd::asio::ContextWQ *work_queue, Context *on_finish) { ceph_assert(s_instance != nullptr); s_instance->image_ctx = local_image_ctx; @@ -160,7 +160,7 @@ struct PrepareLocalImageRequest { const std::string &global_image_id, std::string *local_image_name, StateBuilder** state_builder, - ContextWQ *work_queue, + librbd::asio::ContextWQ *work_queue, Context *on_finish) { ceph_assert(s_instance != nullptr); s_instance->local_image_name = local_image_name; 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 ab952269d3d22..2e10f28d6d8aa 100644 --- a/src/test/rbd_mirror/image_replayer/test_mock_CreateImageRequest.cc +++ b/src/test/rbd_mirror/image_replayer/test_mock_CreateImageRequest.cc @@ -118,7 +118,7 @@ template <> struct Threads { ceph::mutex &timer_lock; SafeTimer *timer; - ContextWQ *work_queue; + librbd::asio::ContextWQ *work_queue; Threads(Threads *threads) : timer_lock(threads->timer_lock), timer(threads->timer), diff --git a/src/test/rbd_mirror/image_replayer/test_mock_PrepareLocalImageRequest.cc b/src/test/rbd_mirror/image_replayer/test_mock_PrepareLocalImageRequest.cc index d2cb1afb67735..a53f01fd2c98e 100644 --- a/src/test/rbd_mirror/image_replayer/test_mock_PrepareLocalImageRequest.cc +++ b/src/test/rbd_mirror/image_replayer/test_mock_PrepareLocalImageRequest.cc @@ -38,7 +38,7 @@ struct GetInfoRequest { Context *on_finish = nullptr; static GetInfoRequest* create(librados::IoCtx& io_ctx, - ContextWQ* context_wq, + librbd::asio::ContextWQ* context_wq, const std::string& image_id, cls::rbd::MirrorImage *mirror_image, PromotionState *promotion_state, diff --git a/src/test/rbd_mirror/image_replayer/test_mock_PrepareRemoteImageRequest.cc b/src/test/rbd_mirror/image_replayer/test_mock_PrepareRemoteImageRequest.cc index ae03f708c085f..e49b40821821a 100644 --- a/src/test/rbd_mirror/image_replayer/test_mock_PrepareRemoteImageRequest.cc +++ b/src/test/rbd_mirror/image_replayer/test_mock_PrepareRemoteImageRequest.cc @@ -47,7 +47,7 @@ struct GetInfoRequest { Context *on_finish = nullptr; static GetInfoRequest* create(librados::IoCtx& io_ctx, - ContextWQ* context_wq, + librbd::asio::ContextWQ* context_wq, const std::string& image_id, cls::rbd::MirrorImage *mirror_image, PromotionState *promotion_state, @@ -84,7 +84,7 @@ template <> struct Threads { ceph::mutex &timer_lock; SafeTimer *timer; - ContextWQ *work_queue; + librbd::asio::ContextWQ *work_queue; Threads(Threads *threads) : timer_lock(threads->timer_lock), timer(threads->timer), diff --git a/src/test/rbd_mirror/test_ImageSync.cc b/src/test/rbd_mirror/test_ImageSync.cc index 7415fff2fa9a5..6b9b2f7d4071e 100644 --- a/src/test/rbd_mirror/test_ImageSync.cc +++ b/src/test/rbd_mirror/test_ImageSync.cc @@ -11,6 +11,7 @@ #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/internal.h" +#include "librbd/Journal.h" #include "librbd/Operations.h" #include "librbd/api/Io.h" #include "librbd/io/AioCompletion.h" @@ -82,8 +83,11 @@ public: m_local_io_ctx, m_threads->work_queue, nullptr, m_image_sync_throttler); m_instance_watcher->handle_acquire_leader(); + ContextWQ* context_wq; + librbd::Journal<>::get_work_queue(cct, &context_wq); + m_remote_journaler = new ::journal::Journaler( - m_threads->work_queue, m_threads->timer, &m_threads->timer_lock, + context_wq, m_threads->timer, &m_threads->timer_lock, m_remote_io_ctx, m_remote_image_ctx->id, "mirror-uuid", {}, nullptr); m_client_meta = {"image-id"}; diff --git a/src/test/rbd_mirror/test_mock_ImageSync.cc b/src/test/rbd_mirror/test_mock_ImageSync.cc index 5b424718cb738..bd6a2907830e6 100644 --- a/src/test/rbd_mirror/test_mock_ImageSync.cc +++ b/src/test/rbd_mirror/test_mock_ImageSync.cc @@ -36,8 +36,8 @@ public: librados::snap_t src_snap_id_start, librados::snap_t src_snap_id_end, librados::snap_t dst_snap_id_start, bool flatten, const librbd::deep_copy::ObjectNumber &object_number, - ContextWQ *work_queue, SnapSeqs *snap_seqs, deep_copy::Handler *handler, - Context *on_finish) { + librbd::asio::ContextWQ *work_queue, SnapSeqs *snap_seqs, + deep_copy::Handler *handler, Context *on_finish) { ceph_assert(s_instance != nullptr); s_instance->on_finish = on_finish; return s_instance; @@ -71,7 +71,7 @@ template <> struct Threads { ceph::mutex &timer_lock; SafeTimer *timer; - ContextWQ *work_queue; + librbd::asio::ContextWQ *work_queue; Threads(Threads *threads) : timer_lock(threads->timer_lock), timer(threads->timer), diff --git a/src/test/rbd_mirror/test_mock_InstanceWatcher.cc b/src/test/rbd_mirror/test_mock_InstanceWatcher.cc index 8e9b79e8d566b..7b06424b702b2 100644 --- a/src/test/rbd_mirror/test_mock_InstanceWatcher.cc +++ b/src/test/rbd_mirror/test_mock_InstanceWatcher.cc @@ -28,7 +28,8 @@ template <> struct ManagedLock { static ManagedLock* s_instance; - static ManagedLock *create(librados::IoCtx& ioctx, ContextWQ *work_queue, + static ManagedLock *create(librados::IoCtx& ioctx, + librbd::asio::ContextWQ *work_queue, const std::string& oid, librbd::Watcher *watcher, managed_lock::Mode mode, bool blacklist_on_break_lock, @@ -65,7 +66,7 @@ template <> struct Threads { ceph::mutex &timer_lock; SafeTimer *timer; - ContextWQ *work_queue; + librbd::asio::ContextWQ *work_queue; Threads(Threads *threads) : timer_lock(threads->timer_lock), timer(threads->timer), diff --git a/src/test/rbd_mirror/test_mock_LeaderWatcher.cc b/src/test/rbd_mirror/test_mock_LeaderWatcher.cc index ec64e668c159d..9365a9b431447 100644 --- a/src/test/rbd_mirror/test_mock_LeaderWatcher.cc +++ b/src/test/rbd_mirror/test_mock_LeaderWatcher.cc @@ -60,7 +60,7 @@ MockManagedLock *MockManagedLock::s_instance = nullptr; template <> struct ManagedLock { - ManagedLock(librados::IoCtx& ioctx, ContextWQ *work_queue, + ManagedLock(librados::IoCtx& ioctx, librbd::asio::ContextWQ *work_queue, const std::string& oid, librbd::Watcher *watcher, managed_lock::Mode mode, bool blacklist_on_break_lock, uint32_t blacklist_expire_seconds) @@ -72,7 +72,7 @@ struct ManagedLock { MockManagedLock::get_instance().destroy(); } - ContextWQ *m_work_queue; + librbd::asio::ContextWQ *m_work_queue; mutable ceph::mutex m_lock = ceph::make_mutex("ManagedLock::m_lock"); @@ -184,7 +184,7 @@ template <> struct Threads { ceph::mutex &timer_lock; SafeTimer *timer; - ContextWQ *work_queue; + librbd::asio::ContextWQ *work_queue; Threads(Threads *threads) : timer_lock(threads->timer_lock), timer(threads->timer), diff --git a/src/test/rbd_mirror/test_mock_NamespaceReplayer.cc b/src/test/rbd_mirror/test_mock_NamespaceReplayer.cc index da6436cc18de7..0470fb5efd8e2 100644 --- a/src/test/rbd_mirror/test_mock_NamespaceReplayer.cc +++ b/src/test/rbd_mirror/test_mock_NamespaceReplayer.cc @@ -132,7 +132,7 @@ struct InstanceWatcher { static InstanceWatcher* s_instance; static InstanceWatcher* create( - librados::IoCtx &ioctx, ContextWQ* work_queue, + librados::IoCtx &ioctx, librbd::asio::ContextWQ* work_queue, InstanceReplayer* instance_replayer, Throttler *image_sync_throttler) { ceph_assert(s_instance != nullptr); @@ -249,7 +249,7 @@ template <> struct Threads { ceph::mutex &timer_lock; SafeTimer *timer; - ContextWQ *work_queue; + librbd::asio::ContextWQ *work_queue; Threads(Threads *threads) : timer_lock(threads->timer_lock), timer(threads->timer), diff --git a/src/test/rbd_mirror/test_mock_fixture.h b/src/test/rbd_mirror/test_mock_fixture.h index 1f7dfb0319e7d..16b6dc6b8b1d9 100644 --- a/src/test/rbd_mirror/test_mock_fixture.h +++ b/src/test/rbd_mirror/test_mock_fixture.h @@ -7,6 +7,7 @@ #include "test/rbd_mirror/test_fixture.h" #include "test/librados_test_stub/LibradosTestStub.h" #include "common/WorkQueue.h" +#include "librbd/asio/ContextWQ.h" #include #include #include "include/ceph_assert.h" @@ -31,7 +32,7 @@ ACTION_P(CompleteContext, r) { } ACTION_P2(CompleteContext, wq, r) { - ContextWQ *context_wq = reinterpret_cast(wq); + auto context_wq = reinterpret_cast(wq); context_wq->queue(arg0, r); } diff --git a/src/tools/rbd_mirror/ImageDeleter.cc b/src/tools/rbd_mirror/ImageDeleter.cc index 0f3f516229765..b07b4333ac6cf 100644 --- a/src/tools/rbd_mirror/ImageDeleter.cc +++ b/src/tools/rbd_mirror/ImageDeleter.cc @@ -18,12 +18,12 @@ #include "common/debug.h" #include "common/errno.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "global/global_context.h" #include "librbd/internal.h" #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/Operations.h" +#include "librbd/asio/ContextWQ.h" #include "cls/rbd/cls_rbd_client.h" #include "cls/rbd/cls_rbd_types.h" #include "librbd/Utils.h" @@ -141,7 +141,8 @@ template void ImageDeleter::trash_move(librados::IoCtx& local_io_ctx, const std::string& global_image_id, bool resync, - ContextWQ* work_queue, Context* on_finish) { + librbd::asio::ContextWQ* work_queue, + Context* on_finish) { dout(10) << "global_image_id=" << global_image_id << ", " << "resync=" << resync << dendl; diff --git a/src/tools/rbd_mirror/ImageDeleter.h b/src/tools/rbd_mirror/ImageDeleter.h index 65cb3a83296bd..d9f4e14a7e2cc 100644 --- a/src/tools/rbd_mirror/ImageDeleter.h +++ b/src/tools/rbd_mirror/ImageDeleter.h @@ -29,9 +29,11 @@ class AdminSocketHook; class Context; -class ContextWQ; class SafeTimer; -namespace librbd { struct ImageCtx; } +namespace librbd { +struct ImageCtx; +namespace asio { struct ContextWQ; } +} // namespace librbd namespace rbd { namespace mirror { @@ -66,7 +68,8 @@ public: static void trash_move(librados::IoCtx& local_io_ctx, const std::string& global_image_id, bool resync, - ContextWQ* work_queue, Context* on_finish); + librbd::asio::ContextWQ* work_queue, + Context* on_finish); void init(Context* on_finish); void shut_down(Context* on_finish); diff --git a/src/tools/rbd_mirror/ImageMap.cc b/src/tools/rbd_mirror/ImageMap.cc index 6a308019f6934..4493e073b98bc 100644 --- a/src/tools/rbd_mirror/ImageMap.cc +++ b/src/tools/rbd_mirror/ImageMap.cc @@ -4,9 +4,9 @@ #include "common/debug.h" #include "common/errno.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "tools/rbd_mirror/Threads.h" #include "ImageMap.h" diff --git a/src/tools/rbd_mirror/ImageReplayer.cc b/src/tools/rbd_mirror/ImageReplayer.cc index 2d57a98d2f9c6..9289510e11d9e 100644 --- a/src/tools/rbd_mirror/ImageReplayer.cc +++ b/src/tools/rbd_mirror/ImageReplayer.cc @@ -9,7 +9,6 @@ #include "include/stringify.h" #include "cls/rbd/cls_rbd_client.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "global/global_context.h" #include "journal/Journaler.h" #include "librbd/ExclusiveLock.h" @@ -18,6 +17,7 @@ #include "librbd/Journal.h" #include "librbd/Operations.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "ImageDeleter.h" #include "ImageReplayer.h" #include "MirrorStatusUpdater.h" diff --git a/src/tools/rbd_mirror/ImageSync.cc b/src/tools/rbd_mirror/ImageSync.cc index a56723be2edad..43d0c66633865 100644 --- a/src/tools/rbd_mirror/ImageSync.cc +++ b/src/tools/rbd_mirror/ImageSync.cc @@ -12,6 +12,7 @@ #include "librbd/ImageState.h" #include "librbd/Utils.h" #include "librbd/internal.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/deep_copy/Handler.h" #include "tools/rbd_mirror/Threads.h" #include "tools/rbd_mirror/image_sync/SyncPointCreateRequest.h" diff --git a/src/tools/rbd_mirror/ImageSync.h b/src/tools/rbd_mirror/ImageSync.h index b1d88b857e3bc..b3389ce18fec8 100644 --- a/src/tools/rbd_mirror/ImageSync.h +++ b/src/tools/rbd_mirror/ImageSync.h @@ -12,7 +12,6 @@ #include "tools/rbd_mirror/image_sync/Types.h" class Context; -class ContextWQ; namespace journal { class Journaler; } namespace librbd { template class DeepCopyRequest; } diff --git a/src/tools/rbd_mirror/InstanceReplayer.cc b/src/tools/rbd_mirror/InstanceReplayer.cc index 4ef838fa43ebb..2def7ba03c76f 100644 --- a/src/tools/rbd_mirror/InstanceReplayer.cc +++ b/src/tools/rbd_mirror/InstanceReplayer.cc @@ -6,8 +6,8 @@ #include "common/Timer.h" #include "common/debug.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "ImageReplayer.h" #include "InstanceReplayer.h" #include "ServiceDaemon.h" diff --git a/src/tools/rbd_mirror/InstanceWatcher.cc b/src/tools/rbd_mirror/InstanceWatcher.cc index 58253c8c52acf..2ebce31e82e44 100644 --- a/src/tools/rbd_mirror/InstanceWatcher.cc +++ b/src/tools/rbd_mirror/InstanceWatcher.cc @@ -8,6 +8,7 @@ #include "cls/rbd/cls_rbd_client.h" #include "librbd/ManagedLock.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "InstanceReplayer.h" #include "Throttler.h" #include "common/Cond.h" @@ -57,7 +58,8 @@ struct C_RemoveInstanceRequest : public Context { InstanceWatcher instance_watcher; Context *on_finish; - C_RemoveInstanceRequest(librados::IoCtx &io_ctx, ContextWQ *work_queue, + C_RemoveInstanceRequest(librados::IoCtx &io_ctx, + librbd::asio::ContextWQ *work_queue, const std::string &instance_id, Context *on_finish) : instance_watcher(io_ctx, work_queue, nullptr, nullptr, instance_id), on_finish(on_finish) { @@ -301,7 +303,7 @@ void InstanceWatcher::get_instances(librados::IoCtx &io_ctx, template void InstanceWatcher::remove_instance(librados::IoCtx &io_ctx, - ContextWQ *work_queue, + librbd::asio::ContextWQ *work_queue, const std::string &instance_id, Context *on_finish) { auto req = new C_RemoveInstanceRequest(io_ctx, work_queue, instance_id, @@ -311,7 +313,7 @@ void InstanceWatcher::remove_instance(librados::IoCtx &io_ctx, template InstanceWatcher *InstanceWatcher::create( - librados::IoCtx &io_ctx, ContextWQ *work_queue, + librados::IoCtx &io_ctx, librbd::asio::ContextWQ *work_queue, InstanceReplayer *instance_replayer, Throttler *image_sync_throttler) { return new InstanceWatcher(io_ctx, work_queue, instance_replayer, @@ -321,7 +323,7 @@ InstanceWatcher *InstanceWatcher::create( template InstanceWatcher::InstanceWatcher(librados::IoCtx &io_ctx, - ContextWQ *work_queue, + librbd::asio::ContextWQ *work_queue, InstanceReplayer *instance_replayer, Throttler *image_sync_throttler, const std::string &instance_id) diff --git a/src/tools/rbd_mirror/InstanceWatcher.h b/src/tools/rbd_mirror/InstanceWatcher.h index bc459f3e4c068..c6d983c7e80dc 100644 --- a/src/tools/rbd_mirror/InstanceWatcher.h +++ b/src/tools/rbd_mirror/InstanceWatcher.h @@ -19,8 +19,9 @@ namespace librbd { class ImageCtx; template class ManagedLock; +namespace asio { struct ContextWQ; } -} +} // namespace librbd namespace rbd { namespace mirror { @@ -37,19 +38,19 @@ public: std::vector *instance_ids, Context *on_finish); static void remove_instance(librados::IoCtx &io_ctx, - ContextWQ *work_queue, + librbd::asio::ContextWQ *work_queue, const std::string &instance_id, Context *on_finish); static InstanceWatcher *create( - librados::IoCtx &io_ctx, ContextWQ *work_queue, + librados::IoCtx &io_ctx, librbd::asio::ContextWQ *work_queue, InstanceReplayer *instance_replayer, Throttler *image_sync_throttler); void destroy() { delete this; } - InstanceWatcher(librados::IoCtx &io_ctx, ContextWQ *work_queue, + InstanceWatcher(librados::IoCtx &io_ctx, librbd::asio::ContextWQ *work_queue, InstanceReplayer *instance_replayer, Throttler *image_sync_throttler, const std::string &instance_id); diff --git a/src/tools/rbd_mirror/Instances.cc b/src/tools/rbd_mirror/Instances.cc index c3643af2c0862..d5ac0614f0ee0 100644 --- a/src/tools/rbd_mirror/Instances.cc +++ b/src/tools/rbd_mirror/Instances.cc @@ -3,10 +3,10 @@ #include "include/stringify.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "common/debug.h" #include "common/errno.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "InstanceWatcher.h" #include "Instances.h" #include "Threads.h" diff --git a/src/tools/rbd_mirror/LeaderWatcher.cc b/src/tools/rbd_mirror/LeaderWatcher.cc index ae705e3c5e263..844d7c7811da3 100644 --- a/src/tools/rbd_mirror/LeaderWatcher.cc +++ b/src/tools/rbd_mirror/LeaderWatcher.cc @@ -9,6 +9,7 @@ #include "cls/rbd/cls_rbd_client.h" #include "include/stringify.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/watcher/Types.h" #include "Threads.h" diff --git a/src/tools/rbd_mirror/LeaderWatcher.h b/src/tools/rbd_mirror/LeaderWatcher.h index f4573a5b1d99d..60dbd20bd996a 100644 --- a/src/tools/rbd_mirror/LeaderWatcher.h +++ b/src/tools/rbd_mirror/LeaderWatcher.h @@ -17,7 +17,10 @@ #include "tools/rbd_mirror/instances/Types.h" #include "tools/rbd_mirror/leader_watcher/Types.h" -namespace librbd { class ImageCtx; } +namespace librbd { +class ImageCtx; +namespace asio { struct ContextWQ; } +} // namespace librbd namespace rbd { namespace mirror { @@ -116,7 +119,7 @@ private: public: typedef librbd::ManagedLock Parent; - LeaderLock(librados::IoCtx& ioctx, ContextWQ *work_queue, + LeaderLock(librados::IoCtx& ioctx, librbd::asio::ContextWQ *work_queue, const std::string& oid, LeaderWatcher *watcher, bool blacklist_on_break_lock, uint32_t blacklist_expire_seconds) diff --git a/src/tools/rbd_mirror/MirrorStatusUpdater.cc b/src/tools/rbd_mirror/MirrorStatusUpdater.cc index 9d27734c3d026..0530db601f3bc 100644 --- a/src/tools/rbd_mirror/MirrorStatusUpdater.cc +++ b/src/tools/rbd_mirror/MirrorStatusUpdater.cc @@ -7,9 +7,9 @@ #include "common/debug.h" #include "common/errno.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "tools/rbd_mirror/MirrorStatusWatcher.h" #include "tools/rbd_mirror/Threads.h" diff --git a/src/tools/rbd_mirror/MirrorStatusWatcher.cc b/src/tools/rbd_mirror/MirrorStatusWatcher.cc index 219f3e302a3d6..3e1564c5b7072 100644 --- a/src/tools/rbd_mirror/MirrorStatusWatcher.cc +++ b/src/tools/rbd_mirror/MirrorStatusWatcher.cc @@ -20,7 +20,7 @@ using librbd::util::create_rados_callback; template MirrorStatusWatcher::MirrorStatusWatcher(librados::IoCtx &io_ctx, - ContextWQ *work_queue) + librbd::asio::ContextWQ *work_queue) : Watcher(io_ctx, work_queue, RBD_MIRRORING) { } diff --git a/src/tools/rbd_mirror/MirrorStatusWatcher.h b/src/tools/rbd_mirror/MirrorStatusWatcher.h index 155f8cc8d05ad..3335e9e63ad6a 100644 --- a/src/tools/rbd_mirror/MirrorStatusWatcher.h +++ b/src/tools/rbd_mirror/MirrorStatusWatcher.h @@ -6,7 +6,10 @@ #include "librbd/Watcher.h" -namespace librbd { class ImageCtx; } +namespace librbd { +class ImageCtx; +namespace asio { struct ContextWQ; } +} // namespace librbd namespace rbd { namespace mirror { @@ -15,14 +18,15 @@ template class MirrorStatusWatcher : protected librbd::Watcher { public: static MirrorStatusWatcher *create(librados::IoCtx &io_ctx, - ContextWQ *work_queue) { + librbd::asio::ContextWQ *work_queue) { return new MirrorStatusWatcher(io_ctx, work_queue); } void destroy() { delete this; } - MirrorStatusWatcher(librados::IoCtx &io_ctx, ContextWQ *work_queue); + MirrorStatusWatcher(librados::IoCtx &io_ctx, + librbd::asio::ContextWQ *work_queue); ~MirrorStatusWatcher() override; void init(Context *on_finish); diff --git a/src/tools/rbd_mirror/NamespaceReplayer.cc b/src/tools/rbd_mirror/NamespaceReplayer.cc index 7d5a7a0cc38ab..10382c914b6e3 100644 --- a/src/tools/rbd_mirror/NamespaceReplayer.cc +++ b/src/tools/rbd_mirror/NamespaceReplayer.cc @@ -10,6 +10,7 @@ #include "librbd/Utils.h" #include "librbd/api/Config.h" #include "librbd/api/Mirror.h" +#include "librbd/asio/ContextWQ.h" #include "ServiceDaemon.h" #include "Threads.h" diff --git a/src/tools/rbd_mirror/NamespaceReplayer.h b/src/tools/rbd_mirror/NamespaceReplayer.h index 5396106e175b1..4e0756ee2aba2 100644 --- a/src/tools/rbd_mirror/NamespaceReplayer.h +++ b/src/tools/rbd_mirror/NamespaceReplayer.h @@ -5,7 +5,6 @@ #define CEPH_RBD_MIRROR_NAMESPACE_REPLAYER_H #include "common/AsyncOpTracker.h" -#include "common/WorkQueue.h" #include "common/ceph_mutex.h" #include "include/rados/librados.hpp" diff --git a/src/tools/rbd_mirror/PoolReplayer.h b/src/tools/rbd_mirror/PoolReplayer.h index 5ac84dd264569..21437451c1a60 100644 --- a/src/tools/rbd_mirror/PoolReplayer.h +++ b/src/tools/rbd_mirror/PoolReplayer.h @@ -5,10 +5,10 @@ #define CEPH_RBD_MIRROR_POOL_REPLAYER_H #include "common/Cond.h" -#include "common/WorkQueue.h" #include "common/ceph_mutex.h" #include "include/rados/librados.hpp" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "tools/rbd_mirror/LeaderWatcher.h" #include "tools/rbd_mirror/NamespaceReplayer.h" diff --git a/src/tools/rbd_mirror/PoolWatcher.cc b/src/tools/rbd_mirror/PoolWatcher.cc index 359ca95d53772..9fa8e88811d06 100644 --- a/src/tools/rbd_mirror/PoolWatcher.cc +++ b/src/tools/rbd_mirror/PoolWatcher.cc @@ -13,6 +13,7 @@ #include "librbd/Utils.h" #include "librbd/api/Image.h" #include "librbd/api/Mirror.h" +#include "librbd/asio/ContextWQ.h" #include "tools/rbd_mirror/Threads.h" #include "tools/rbd_mirror/pool_watcher/RefreshImagesRequest.h" #include diff --git a/src/tools/rbd_mirror/RemotePoolPoller.cc b/src/tools/rbd_mirror/RemotePoolPoller.cc index 52c64c2d2c1bb..4f5994f1da678 100644 --- a/src/tools/rbd_mirror/RemotePoolPoller.cc +++ b/src/tools/rbd_mirror/RemotePoolPoller.cc @@ -6,10 +6,10 @@ #include "common/debug.h" #include "common/errno.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "cls/rbd/cls_rbd_client.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "tools/rbd_mirror/Threads.h" #include "tools/rbd_mirror/Types.h" diff --git a/src/tools/rbd_mirror/Threads.cc b/src/tools/rbd_mirror/Threads.cc index 2ec0cf2a44d0f..702f26a0852d6 100644 --- a/src/tools/rbd_mirror/Threads.cc +++ b/src/tools/rbd_mirror/Threads.cc @@ -3,22 +3,17 @@ #include "tools/rbd_mirror/Threads.h" #include "common/Timer.h" -#include "common/WorkQueue.h" +#include "librbd/AsioEngine.h" #include "librbd/ImageCtx.h" +#include "librbd/asio/ContextWQ.h" namespace rbd { namespace mirror { template Threads::Threads(CephContext *cct) { - thread_pool = new ThreadPool(cct, "Journaler::thread_pool", "tp_journal", - cct->_conf.get_val("rbd_op_threads"), - "rbd_op_threads"); - thread_pool->start(); - - work_queue = new ContextWQ("Journaler::work_queue", - cct->_conf.get_val("rbd_op_thread_timeout"), - thread_pool); + asio_engine = new librbd::AsioEngine(cct); + work_queue = asio_engine->get_work_queue(); timer = new SafeTimer(cct, timer_lock, true); timer->init(); @@ -33,10 +28,7 @@ Threads::~Threads() { delete timer; work_queue->drain(); - delete work_queue; - - thread_pool->stop(); - delete thread_pool; + delete asio_engine; } } // namespace mirror diff --git a/src/tools/rbd_mirror/Threads.h b/src/tools/rbd_mirror/Threads.h index 04e1848b503b0..91c086b1e31e2 100644 --- a/src/tools/rbd_mirror/Threads.h +++ b/src/tools/rbd_mirror/Threads.h @@ -7,23 +7,28 @@ #include "include/common_fwd.h" #include "common/ceph_mutex.h" -class ContextWQ; class SafeTimer; class ThreadPool; -namespace librbd { struct ImageCtx; } +namespace librbd { +struct AsioEngine; +struct ImageCtx; +namespace asio { struct ContextWQ; } +} // namespace librbd namespace rbd { namespace mirror { template -struct Threads { - ThreadPool *thread_pool = nullptr; - ContextWQ *work_queue = nullptr; +class Threads { +private: + librbd::AsioEngine* asio_engine = nullptr; + +public: + librbd::asio::ContextWQ* work_queue = nullptr; SafeTimer *timer = nullptr; - ceph::mutex timer_lock = - ceph::make_mutex("Threads::timer_lock"); + ceph::mutex timer_lock = ceph::make_mutex("Threads::timer_lock"); explicit Threads(CephContext *cct); Threads(const Threads&) = delete; diff --git a/src/tools/rbd_mirror/image_deleter/TrashMoveRequest.cc b/src/tools/rbd_mirror/image_deleter/TrashMoveRequest.cc index 0eadca7bf2a86..243651bba0d46 100644 --- a/src/tools/rbd_mirror/image_deleter/TrashMoveRequest.cc +++ b/src/tools/rbd_mirror/image_deleter/TrashMoveRequest.cc @@ -6,12 +6,14 @@ #include "cls/rbd/cls_rbd_client.h" #include "common/debug.h" #include "common/errno.h" +#include "common/WorkQueue.h" #include "librbd/ExclusiveLock.h" #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/Journal.h" #include "librbd/TrashWatcher.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/journal/ResetRequest.h" #include "librbd/mirror/GetInfoRequest.h" #include "librbd/trash/MoveRequest.h" @@ -207,12 +209,17 @@ void TrashMoveRequest::reset_journal() { dout(10) << dendl; + // TODO use Journal thread pool for journal ops until converted to ASIO + ContextWQ* context_wq; + librbd::Journal<>::get_work_queue( + reinterpret_cast(m_io_ctx.cct()), &context_wq); + // ensure that if the image is recovered any peers will split-brain auto ctx = create_context_callback< TrashMoveRequest, &TrashMoveRequest::handle_reset_journal>(this); auto req = librbd::journal::ResetRequest::create( m_io_ctx, m_image_id, librbd::Journal<>::IMAGE_CLIENT_ID, - librbd::Journal<>::LOCAL_MIRROR_UUID, m_op_work_queue, ctx); + librbd::Journal<>::LOCAL_MIRROR_UUID, context_wq, ctx); req->send(); } diff --git a/src/tools/rbd_mirror/image_deleter/TrashMoveRequest.h b/src/tools/rbd_mirror/image_deleter/TrashMoveRequest.h index fa0d7daca1b3e..5b3f025194be8 100644 --- a/src/tools/rbd_mirror/image_deleter/TrashMoveRequest.h +++ b/src/tools/rbd_mirror/image_deleter/TrashMoveRequest.h @@ -11,8 +11,10 @@ #include struct Context; -class ContextWQ; -namespace librbd { struct ImageCtx; } +namespace librbd { +struct ImageCtx; +namespace asio { struct ContextWQ; } +} // namespace librbd namespace rbd { namespace mirror { @@ -23,14 +25,16 @@ class TrashMoveRequest { public: static TrashMoveRequest* create(librados::IoCtx& io_ctx, const std::string& global_image_id, - bool resync, ContextWQ* op_work_queue, + bool resync, + librbd::asio::ContextWQ* op_work_queue, Context* on_finish) { return new TrashMoveRequest(io_ctx, global_image_id, resync, op_work_queue, on_finish); } TrashMoveRequest(librados::IoCtx& io_ctx, const std::string& global_image_id, - bool resync, ContextWQ* op_work_queue, Context* on_finish) + bool resync, librbd::asio::ContextWQ* op_work_queue, + Context* on_finish) : m_io_ctx(io_ctx), m_global_image_id(global_image_id), m_resync(resync), m_op_work_queue(op_work_queue), m_on_finish(on_finish) { } @@ -82,7 +86,7 @@ private: librados::IoCtx &m_io_ctx; std::string m_global_image_id; bool m_resync; - ContextWQ *m_op_work_queue; + librbd::asio::ContextWQ *m_op_work_queue; Context *m_on_finish; ceph::bufferlist m_out_bl; diff --git a/src/tools/rbd_mirror/image_deleter/TrashRemoveRequest.cc b/src/tools/rbd_mirror/image_deleter/TrashRemoveRequest.cc index 2ffcdfa4bd0fa..4d7c1c9df200d 100644 --- a/src/tools/rbd_mirror/image_deleter/TrashRemoveRequest.cc +++ b/src/tools/rbd_mirror/image_deleter/TrashRemoveRequest.cc @@ -10,6 +10,7 @@ #include "librbd/ImageCtx.h" #include "librbd/TrashWatcher.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/trash/RemoveRequest.h" #include "tools/rbd_mirror/image_deleter/SnapshotPurgeRequest.h" diff --git a/src/tools/rbd_mirror/image_deleter/TrashRemoveRequest.h b/src/tools/rbd_mirror/image_deleter/TrashRemoveRequest.h index d2295e8ed2ab2..b99736b33327d 100644 --- a/src/tools/rbd_mirror/image_deleter/TrashRemoveRequest.h +++ b/src/tools/rbd_mirror/image_deleter/TrashRemoveRequest.h @@ -14,7 +14,10 @@ class Context; class ContextWQ; -namespace librbd { struct ImageCtx; } +namespace librbd { +struct ImageCtx; +namespace asio { struct ContextWQ; } +} // namespace librbd namespace rbd { namespace mirror { @@ -26,14 +29,15 @@ public: static TrashRemoveRequest* create(librados::IoCtx &io_ctx, const std::string &image_id, ErrorResult *error_result, - ContextWQ *op_work_queue, + librbd::asio::ContextWQ *op_work_queue, Context *on_finish) { return new TrashRemoveRequest(io_ctx, image_id, error_result, op_work_queue, on_finish); } TrashRemoveRequest(librados::IoCtx &io_ctx, const std::string &image_id, - ErrorResult *error_result, ContextWQ *op_work_queue, + ErrorResult *error_result, + librbd::asio::ContextWQ *op_work_queue, Context *on_finish) : m_io_ctx(io_ctx), m_image_id(image_id), m_error_result(error_result), m_op_work_queue(op_work_queue), m_on_finish(on_finish) { @@ -74,7 +78,7 @@ private: librados::IoCtx &m_io_ctx; std::string m_image_id; ErrorResult *m_error_result; - ContextWQ *m_op_work_queue; + librbd::asio::ContextWQ *m_op_work_queue; Context *m_on_finish; ceph::bufferlist m_out_bl; diff --git a/src/tools/rbd_mirror/image_deleter/TrashWatcher.cc b/src/tools/rbd_mirror/image_deleter/TrashWatcher.cc index e68cac9d5782d..7f5b8e34bd092 100644 --- a/src/tools/rbd_mirror/image_deleter/TrashWatcher.cc +++ b/src/tools/rbd_mirror/image_deleter/TrashWatcher.cc @@ -9,6 +9,7 @@ #include "common/Timer.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "tools/rbd_mirror/Threads.h" #include "tools/rbd_mirror/image_deleter/Types.h" diff --git a/src/tools/rbd_mirror/image_replayer/BootstrapRequest.cc b/src/tools/rbd_mirror/image_replayer/BootstrapRequest.cc index 7241618be2b9a..1671bb9f6a65b 100644 --- a/src/tools/rbd_mirror/image_replayer/BootstrapRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/BootstrapRequest.cc @@ -9,7 +9,6 @@ #include "common/debug.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "cls/rbd/cls_rbd_client.h" #include "journal/Journaler.h" #include "journal/Settings.h" @@ -18,6 +17,7 @@ #include "librbd/internal.h" #include "librbd/Journal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/journal/Types.h" #include "tools/rbd_mirror/BaseRequest.h" #include "tools/rbd_mirror/ImageSync.h" diff --git a/src/tools/rbd_mirror/image_replayer/BootstrapRequest.h b/src/tools/rbd_mirror/image_replayer/BootstrapRequest.h index cc15a91334b8a..3d17ae48bc2fd 100644 --- a/src/tools/rbd_mirror/image_replayer/BootstrapRequest.h +++ b/src/tools/rbd_mirror/image_replayer/BootstrapRequest.h @@ -14,7 +14,6 @@ #include class Context; -class ContextWQ; class SafeTimer; namespace journal { class CacheManagerHandler; } diff --git a/src/tools/rbd_mirror/image_replayer/CloseImageRequest.cc b/src/tools/rbd_mirror/image_replayer/CloseImageRequest.cc index 5b7548230dbb0..10ab661e27711 100644 --- a/src/tools/rbd_mirror/image_replayer/CloseImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/CloseImageRequest.cc @@ -4,7 +4,6 @@ #include "CloseImageRequest.h" #include "common/debug.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/Utils.h" diff --git a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc index 3cd57afc5f086..d7266b260ad23 100644 --- a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc @@ -6,12 +6,12 @@ #include "OpenImageRequest.h" #include "common/debug.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "cls/rbd/cls_rbd_client.h" #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/internal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/image/CreateRequest.h" #include "librbd/image/CloneRequest.h" #include "tools/rbd_mirror/PoolMetaCache.h" diff --git a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.h b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.h index eda12cdb3f989..2ff7794e81aec 100644 --- a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.h +++ b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.h @@ -12,7 +12,6 @@ #include class Context; -class ContextWQ; namespace librbd { class ImageCtx; } namespace librbd { class ImageOptions; } diff --git a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc index 2418cf3a9c750..8040cd214ba11 100644 --- a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc @@ -6,12 +6,12 @@ #include "OpenLocalImageRequest.h" #include "common/debug.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ExclusiveLock.h" #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/Journal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/exclusive_lock/Policy.h" #include "librbd/journal/Policy.h" #include "librbd/mirror/GetInfoRequest.h" @@ -73,9 +73,10 @@ struct MirrorExclusiveLockPolicy : public librbd::exclusive_lock::Policy { }; struct MirrorJournalPolicy : public librbd::journal::Policy { - ContextWQ *work_queue; + librbd::asio::ContextWQ *work_queue; - MirrorJournalPolicy(ContextWQ *work_queue) : work_queue(work_queue) { + MirrorJournalPolicy(librbd::asio::ContextWQ *work_queue) + : work_queue(work_queue) { } bool append_disabled() const override { @@ -95,11 +96,12 @@ struct MirrorJournalPolicy : public librbd::journal::Policy { } // anonymous namespace template -OpenLocalImageRequest::OpenLocalImageRequest(librados::IoCtx &local_io_ctx, - I **local_image_ctx, - const std::string &local_image_id, - ContextWQ *work_queue, - Context *on_finish) +OpenLocalImageRequest::OpenLocalImageRequest( + librados::IoCtx &local_io_ctx, + I **local_image_ctx, + const std::string &local_image_id, + librbd::asio::ContextWQ *work_queue, + Context *on_finish) : m_local_io_ctx(local_io_ctx), m_local_image_ctx(local_image_ctx), m_local_image_id(local_image_id), m_work_queue(work_queue), m_on_finish(on_finish) { diff --git a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.h b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.h index 31e7add957508..9a642bc39311c 100644 --- a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.h +++ b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.h @@ -11,8 +11,10 @@ #include class Context; -class ContextWQ; -namespace librbd { class ImageCtx; } +namespace librbd { +class ImageCtx; +namespace asio { struct ContextWQ; } +} // namespace librbd namespace rbd { namespace mirror { @@ -24,7 +26,7 @@ public: static OpenLocalImageRequest* create(librados::IoCtx &local_io_ctx, ImageCtxT **local_image_ctx, const std::string &local_image_id, - ContextWQ *work_queue, + librbd::asio::ContextWQ *work_queue, Context *on_finish) { return new OpenLocalImageRequest(local_io_ctx, local_image_ctx, local_image_id, work_queue, on_finish); @@ -33,7 +35,7 @@ public: OpenLocalImageRequest(librados::IoCtx &local_io_ctx, ImageCtxT **local_image_ctx, const std::string &local_image_id, - ContextWQ *m_work_queue, + librbd::asio::ContextWQ *work_queue, Context *on_finish); void send(); @@ -61,7 +63,7 @@ private: librados::IoCtx &m_local_io_ctx; ImageCtxT **m_local_image_ctx; std::string m_local_image_id; - ContextWQ *m_work_queue; + librbd::asio::ContextWQ *m_work_queue; Context *m_on_finish; cls::rbd::MirrorImage m_mirror_image; diff --git a/src/tools/rbd_mirror/image_replayer/PrepareLocalImageRequest.h b/src/tools/rbd_mirror/image_replayer/PrepareLocalImageRequest.h index 05473c204aed4..8285ca060b3e3 100644 --- a/src/tools/rbd_mirror/image_replayer/PrepareLocalImageRequest.h +++ b/src/tools/rbd_mirror/image_replayer/PrepareLocalImageRequest.h @@ -10,10 +10,12 @@ #include "librbd/mirror/Types.h" #include -namespace librbd { struct ImageCtx; } - struct Context; -struct ContextWQ; + +namespace librbd { +struct ImageCtx; +namespace asio { struct ContextWQ; } +} // namespace librbd namespace rbd { namespace mirror { @@ -29,7 +31,7 @@ public: const std::string &global_image_id, std::string *local_image_name, StateBuilder** state_builder, - ContextWQ *work_queue, + librbd::asio::ContextWQ *work_queue, Context *on_finish) { return new PrepareLocalImageRequest(io_ctx, global_image_id, local_image_name, state_builder, @@ -41,7 +43,7 @@ public: const std::string &global_image_id, std::string *local_image_name, StateBuilder** state_builder, - ContextWQ *work_queue, + librbd::asio::ContextWQ *work_queue, Context *on_finish) : m_io_ctx(io_ctx), m_global_image_id(global_image_id), m_local_image_name(local_image_name), m_state_builder(state_builder), @@ -75,7 +77,7 @@ private: std::string m_global_image_id; std::string *m_local_image_name; StateBuilder** m_state_builder; - ContextWQ *m_work_queue; + librbd::asio::ContextWQ *m_work_queue; Context *m_on_finish; bufferlist m_out_bl; diff --git a/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc b/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc index 3231d5fa02397..54a9dbf1650d5 100644 --- a/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc @@ -6,11 +6,12 @@ #include "cls/rbd/cls_rbd_client.h" #include "common/debug.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "journal/Journaler.h" #include "journal/Settings.h" #include "librbd/ImageCtx.h" +#include "librbd/Journal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/mirror/GetInfoRequest.h" #include "tools/rbd_mirror/Threads.h" #include "tools/rbd_mirror/image_replayer/GetMirrorImageIdRequest.h" @@ -149,8 +150,12 @@ void PrepareRemoteImageRequest::get_client() { journal_settings.commit_interval = cct->_conf.get_val( "rbd_mirror_journal_commit_age"); + // TODO use Journal thread pool for journal ops until converted to ASIO + ContextWQ* context_wq; + librbd::Journal<>::get_work_queue(cct, &context_wq); + ceph_assert(m_remote_journaler == nullptr); - m_remote_journaler = new Journaler(m_threads->work_queue, m_threads->timer, + m_remote_journaler = new Journaler(context_wq, m_threads->timer, &m_threads->timer_lock, m_remote_io_ctx, m_remote_image_id, m_local_mirror_uuid, journal_settings, m_cache_manager_handler); diff --git a/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.h b/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.h index 8006c50666a06..0d0129d55826b 100644 --- a/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.h +++ b/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.h @@ -20,7 +20,6 @@ namespace librbd { struct ImageCtx; } namespace librbd { namespace journal { struct MirrorPeerClientMeta; } } struct Context; -struct ContextWQ; namespace rbd { namespace mirror { diff --git a/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.cc b/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.cc index c1568073cf336..f5d49048e6d4e 100644 --- a/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.cc +++ b/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.cc @@ -5,11 +5,11 @@ #include "common/debug.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "journal/Journaler.h" #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/journal/Types.h" #include @@ -33,7 +33,7 @@ EventPreprocessor::EventPreprocessor(I &local_image_ctx, Journaler &remote_journaler, const std::string &local_mirror_uuid, MirrorPeerClientMeta *client_meta, - ContextWQ *work_queue) + librbd::asio::ContextWQ *work_queue) : m_local_image_ctx(local_image_ctx), m_remote_journaler(remote_journaler), m_local_mirror_uuid(local_mirror_uuid), m_client_meta(client_meta), m_work_queue(work_queue) { diff --git a/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.h b/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.h index 5844e6f748376..12f70eb9350a3 100644 --- a/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.h +++ b/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.h @@ -12,9 +12,11 @@ #include struct Context; -struct ContextWQ; namespace journal { class Journaler; } -namespace librbd { class ImageCtx; } +namespace librbd { +class ImageCtx; +namespace asio { struct ContextWQ; } +} // namespace librbd namespace rbd { namespace mirror { @@ -32,7 +34,7 @@ public: Journaler &remote_journaler, const std::string &local_mirror_uuid, MirrorPeerClientMeta *client_meta, - ContextWQ *work_queue) { + librbd::asio::ContextWQ *work_queue) { return new EventPreprocessor(local_image_ctx, remote_journaler, local_mirror_uuid, client_meta, work_queue); } @@ -43,7 +45,8 @@ public: EventPreprocessor(ImageCtxT &local_image_ctx, Journaler &remote_journaler, const std::string &local_mirror_uuid, - MirrorPeerClientMeta *client_meta, ContextWQ *work_queue); + MirrorPeerClientMeta *client_meta, + librbd::asio::ContextWQ *work_queue); ~EventPreprocessor(); bool is_required(const EventEntry &event_entry); @@ -90,7 +93,7 @@ private: Journaler &m_remote_journaler; std::string m_local_mirror_uuid; MirrorPeerClientMeta *m_client_meta; - ContextWQ *m_work_queue; + librbd::asio::ContextWQ *m_work_queue; bool m_in_progress = false; EventEntry *m_event_entry = nullptr; diff --git a/src/tools/rbd_mirror/image_replayer/journal/Replayer.cc b/src/tools/rbd_mirror/image_replayer/journal/Replayer.cc index 60b9a7e59319a..ea0f9093c3b7c 100644 --- a/src/tools/rbd_mirror/image_replayer/journal/Replayer.cc +++ b/src/tools/rbd_mirror/image_replayer/journal/Replayer.cc @@ -5,9 +5,9 @@ #include "common/debug.h" #include "common/errno.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "librbd/Journal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/journal/Replay.h" #include "journal/Journaler.h" #include "journal/JournalMetadataListener.h" diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc index 0f149f0d1d899..6c4d842f1fd5e 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc +++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc @@ -6,13 +6,13 @@ #include "common/errno.h" #include "include/stringify.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "cls/rbd/cls_rbd_client.h" #include "json_spirit/json_spirit.h" #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/Operations.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/deep_copy/Handler.h" #include "librbd/deep_copy/ImageCopyRequest.h" #include "librbd/deep_copy/SnapshotCopyRequest.h" -- 2.39.5