From: Jason Dillaman Date: Fri, 12 Jun 2020 02:07:15 +0000 (-0400) Subject: rbd-mirror: swapped ThreadPool/ContextWQ for AsioEngine X-Git-Tag: v16.1.0~2061^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F35557%2Fhead;p=ceph.git 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 --- 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 2630915115d0..ae481dce4e29 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 b9c5b1a2d743..43057cce0489 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 18304f67dd7d..3277f77f87aa 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 8175680ab6c8..53a69a84eefa 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 ab952269d3d2..2e10f28d6d8a 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 d2cb1afb6773..a53f01fd2c98 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 ae03f708c085..e49b40821821 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 7415fff2fa9a..6b9b2f7d4071 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 5b424718cb73..bd6a2907830e 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 8e9b79e8d566..7b06424b702b 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 ec64e668c159..9365a9b43144 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 da6436cc18de..0470fb5efd8e 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 1f7dfb0319e7..16b6dc6b8b1d 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 0f3f51622976..b07b4333ac6c 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 65cb3a83296b..d9f4e14a7e2c 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 6a308019f693..4493e073b98b 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 2d57a98d2f9c..9289510e11d9 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 a56723be2eda..43d0c6663386 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 b1d88b857e3b..b3389ce18fec 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 4ef838fa43eb..2def7ba03c76 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 58253c8c52ac..2ebce31e82e4 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 bc459f3e4c06..c6d983c7e80d 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 c3643af2c086..d5ac0614f0ee 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 ae705e3c5e26..844d7c7811da 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 f4573a5b1d99..60dbd20bd996 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 9d27734c3d02..0530db601f3b 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 219f3e302a3d..3e1564c5b707 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 155f8cc8d05a..3335e9e63ad6 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 7d5a7a0cc38a..10382c914b6e 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 5396106e175b..4e0756ee2aba 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 5ac84dd26456..21437451c1a6 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 359ca95d5377..9fa8e88811d0 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 52c64c2d2c1b..4f5994f1da67 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 2ec0cf2a44d0..702f26a0852d 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 04e1848b503b..91c086b1e31e 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 0eadca7bf2a8..243651bba0d4 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 fa0d7daca1b3..5b3f025194be 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 2ffcdfa4bd0f..4d7c1c9df200 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 d2295e8ed2ab..b99736b33327 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 e68cac9d5782..7f5b8e34bd09 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 7241618be2b9..1671bb9f6a65 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 cc15a91334b8..3d17ae48bc2f 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 5b7548230dbb..10ab661e2771 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 3cd57afc5f08..d7266b260ad2 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 eda12cdb3f98..2ff7794e81ae 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 2418cf3a9c75..8040cd214ba1 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 31e7add95750..9a642bc39311 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 05473c204aed..8285ca060b3e 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 3231d5fa0239..54a9dbf1650d 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 8006c50666a0..0d0129d55826 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 c1568073cf33..f5d49048e6d4 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 5844e6f74837..12f70eb9350a 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 60b9a7e59319..ea0f9093c3b7 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 0f149f0d1d89..6c4d842f1fd5 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"