From aabfb76e51bf7dcd3338e630e98068ca868d7907 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 11 Jun 2020 18:06:19 -0400 Subject: [PATCH] librbd: swapped ThreadPool/ContextWQ for AsioEngine The majority of usage of ContextWQ has been switched to use the ASIO ContextWQ adapter class. The journal, RWL cache, and image update notifications remain the only remaining use of dedicated ThreadPools in librbd. Signed-off-by: Jason Dillaman --- src/librbd/AsyncObjectThrottle.cc | 2 +- src/librbd/AsyncRequest.cc | 2 +- src/librbd/DeepCopyRequest.cc | 3 +- src/librbd/DeepCopyRequest.h | 7 +- src/librbd/ExclusiveLock.cc | 1 + src/librbd/ImageCtx.cc | 40 ++--------- src/librbd/ImageCtx.h | 11 ++- src/librbd/ImageState.cc | 5 +- src/librbd/ImageWatcher.cc | 2 +- src/librbd/Journal.cc | 70 +++++++++++++------ src/librbd/Journal.h | 20 +++--- src/librbd/ManagedLock.cc | 4 +- src/librbd/ManagedLock.h | 10 +-- src/librbd/MirroringWatcher.cc | 2 +- src/librbd/MirroringWatcher.h | 3 +- src/librbd/ObjectMap.cc | 2 +- src/librbd/Operations.cc | 2 +- src/librbd/TrashWatcher.cc | 3 +- src/librbd/TrashWatcher.h | 3 +- src/librbd/Watcher.cc | 7 +- src/librbd/Watcher.h | 7 +- src/librbd/api/Image.cc | 8 +-- src/librbd/api/Migration.cc | 6 +- src/librbd/api/Mirror.cc | 6 +- src/librbd/api/Mirror.h | 7 +- src/librbd/api/Pool.cc | 2 +- src/librbd/api/Trash.cc | 4 +- .../cache/ObjectCacherObjectDispatch.cc | 2 +- src/librbd/cache/ObjectCacherWriteback.cc | 2 +- src/librbd/cache/ParentCacheObjectDispatch.cc | 3 +- src/librbd/cache/ReplicatedWriteLog.cc | 1 + src/librbd/cache/WriteAroundObjectDispatch.cc | 2 +- src/librbd/deep_copy/SnapshotCopyRequest.cc | 5 +- src/librbd/deep_copy/SnapshotCopyRequest.h | 11 +-- src/librbd/exclusive_lock/ImageDispatch.cc | 1 - .../exclusive_lock/PostAcquireRequest.cc | 1 - .../exclusive_lock/PreAcquireRequest.cc | 1 + src/librbd/image/AttachParentRequest.cc | 1 - src/librbd/image/CloneRequest.cc | 3 +- src/librbd/image/CloneRequest.h | 9 ++- src/librbd/image/CloseRequest.cc | 1 + src/librbd/image/CreateRequest.cc | 15 +++- src/librbd/image/CreateRequest.h | 11 +-- src/librbd/image/DetachChildRequest.cc | 2 +- src/librbd/image/DetachParentRequest.cc | 1 - src/librbd/image/RefreshParentRequest.cc | 2 +- src/librbd/image/RemoveRequest.cc | 6 +- src/librbd/image/RemoveRequest.h | 1 - src/librbd/image/TypeTraits.h | 7 +- src/librbd/image/ValidatePoolRequest.cc | 4 +- src/librbd/image/ValidatePoolRequest.h | 8 +-- src/librbd/internal.cc | 4 +- src/librbd/internal.h | 1 - src/librbd/io/AioCompletion.cc | 2 +- src/librbd/io/AsyncOperation.cc | 2 +- src/librbd/io/CopyupRequest.cc | 2 +- src/librbd/io/ImageDispatch.cc | 1 - src/librbd/io/ImageDispatcher.cc | 1 - src/librbd/io/ImageRequest.cc | 2 +- src/librbd/io/ObjectDispatch.cc | 2 +- src/librbd/io/ObjectDispatcher.cc | 2 +- src/librbd/io/ObjectRequest.cc | 2 +- src/librbd/io/QosImageDispatch.cc | 2 +- src/librbd/io/QueueImageDispatch.cc | 2 +- .../io/SimpleSchedulerObjectDispatch.cc | 2 +- src/librbd/io/WriteBlockImageDispatch.cc | 2 +- src/librbd/journal/CreateRequest.cc | 1 - src/librbd/journal/DemoteRequest.cc | 2 +- src/librbd/journal/ObjectDispatch.cc | 2 +- src/librbd/journal/OpenRequest.cc | 2 +- src/librbd/journal/PromoteRequest.cc | 2 +- src/librbd/journal/RemoveRequest.cc | 1 - src/librbd/journal/Replay.cc | 2 +- src/librbd/journal/StandardPolicy.cc | 2 +- src/librbd/journal/TypeTraits.h | 3 + src/librbd/managed_lock/AcquireRequest.cc | 9 +-- src/librbd/managed_lock/AcquireRequest.h | 9 +-- src/librbd/managed_lock/BreakRequest.cc | 5 +- src/librbd/managed_lock/BreakRequest.h | 8 ++- src/librbd/managed_lock/ReleaseRequest.cc | 15 ++-- src/librbd/managed_lock/ReleaseRequest.h | 5 +- src/librbd/mirror/DisableRequest.cc | 2 +- src/librbd/mirror/EnableRequest.cc | 3 +- src/librbd/mirror/EnableRequest.h | 11 +-- src/librbd/mirror/GetInfoRequest.cc | 2 +- src/librbd/mirror/GetInfoRequest.h | 8 +-- src/librbd/mirror/snapshot/PromoteRequest.cc | 1 + src/librbd/mirror/snapshot/PromoteRequest.h | 1 + .../operation/DisableFeaturesRequest.cc | 6 +- src/librbd/operation/EnableFeaturesRequest.cc | 6 +- src/librbd/operation/Request.cc | 2 +- src/librbd/trash/RemoveRequest.cc | 2 +- src/librbd/trash/RemoveRequest.h | 19 +++-- src/librbd/watcher/Notifier.cc | 5 +- src/librbd/watcher/Notifier.h | 7 +- .../deep_copy/test_mock_ImageCopyRequest.cc | 2 +- .../test_mock_MetadataCopyRequest.cc | 2 +- .../deep_copy/test_mock_ObjectCopyRequest.cc | 2 +- .../deep_copy/test_mock_SetHeadRequest.cc | 2 +- .../test_mock_SnapshotCopyRequest.cc | 2 +- .../test_mock_SnapshotCreateRequest.cc | 2 +- .../librbd/image/test_mock_CloneRequest.cc | 4 +- .../librbd/image/test_mock_RemoveRequest.cc | 16 +++++ .../librbd/journal/test_mock_OpenRequest.cc | 2 +- .../journal/test_mock_PromoteRequest.cc | 10 +-- .../librbd/journal/test_mock_ResetRequest.cc | 25 +++++-- .../managed_lock/test_mock_AcquireRequest.cc | 3 +- .../test_mock_DisableFeaturesRequest.cc | 13 ++++ .../test_mock_EnableFeaturesRequest.cc | 13 ++++ src/test/librbd/test_mock_DeepCopyRequest.cc | 5 +- src/test/librbd/test_mock_ExclusiveLock.cc | 6 +- src/test/librbd/test_mock_Journal.cc | 11 +-- src/test/librbd/test_mock_ManagedLock.cc | 21 +++--- src/test/librbd/test_mock_Watcher.cc | 2 +- src/test/librbd/test_mock_fixture.h | 5 +- 115 files changed, 379 insertions(+), 280 deletions(-) diff --git a/src/librbd/AsyncObjectThrottle.cc b/src/librbd/AsyncObjectThrottle.cc index c62c8453940..6adba21666e 100644 --- a/src/librbd/AsyncObjectThrottle.cc +++ b/src/librbd/AsyncObjectThrottle.cc @@ -2,10 +2,10 @@ // vim: ts=8 sw=2 smarttab #include "librbd/AsyncObjectThrottle.h" #include "common/RWLock.h" -#include "common/WorkQueue.h" #include "librbd/AsyncRequest.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" namespace librbd { diff --git a/src/librbd/AsyncRequest.cc b/src/librbd/AsyncRequest.cc index 67ea116a151..c189613d0b7 100644 --- a/src/librbd/AsyncRequest.cc +++ b/src/librbd/AsyncRequest.cc @@ -3,7 +3,7 @@ #include "librbd/AsyncRequest.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" -#include "common/WorkQueue.h" +#include "librbd/asio/ContextWQ.h" namespace librbd { diff --git a/src/librbd/DeepCopyRequest.cc b/src/librbd/DeepCopyRequest.cc index 33f1b245bef..af26ef0c9d7 100644 --- a/src/librbd/DeepCopyRequest.cc +++ b/src/librbd/DeepCopyRequest.cc @@ -32,7 +32,8 @@ DeepCopyRequest::DeepCopyRequest(I *src_image_ctx, I *dst_image_ctx, librados::snap_t dst_snap_id_start, bool flatten, const ObjectNumber &object_number, - ContextWQ *work_queue, SnapSeqs *snap_seqs, + asio::ContextWQ *work_queue, + SnapSeqs *snap_seqs, deep_copy::Handler *handler, Context *on_finish) : RefCountedObject(dst_image_ctx->cct), m_src_image_ctx(src_image_ctx), diff --git a/src/librbd/DeepCopyRequest.h b/src/librbd/DeepCopyRequest.h index 201c86f700f..c8bd022996f 100644 --- a/src/librbd/DeepCopyRequest.h +++ b/src/librbd/DeepCopyRequest.h @@ -19,6 +19,7 @@ class Context; namespace librbd { class ImageCtx; +namespace asio { struct ContextWQ; } namespace deep_copy { @@ -38,7 +39,7 @@ public: librados::snap_t dst_snap_id_start, bool flatten, const deep_copy::ObjectNumber &object_number, - ContextWQ *work_queue, + asio::ContextWQ *work_queue, SnapSeqs *snap_seqs, deep_copy::Handler *handler, Context *on_finish) { @@ -53,7 +54,7 @@ public: librados::snap_t src_snap_id_end, librados::snap_t dst_snap_id_start, bool flatten, const deep_copy::ObjectNumber &object_number, - ContextWQ *work_queue, SnapSeqs *snap_seqs, + asio::ContextWQ *work_queue, SnapSeqs *snap_seqs, deep_copy::Handler *handler, Context *on_finish); ~DeepCopyRequest(); @@ -97,7 +98,7 @@ private: librados::snap_t m_dst_snap_id_start; bool m_flatten; deep_copy::ObjectNumber m_object_number; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; SnapSeqs *m_snap_seqs; deep_copy::Handler *m_handler; Context *m_on_finish; diff --git a/src/librbd/ExclusiveLock.cc b/src/librbd/ExclusiveLock.cc index e3838538f4f..ebd3198c3d6 100644 --- a/src/librbd/ExclusiveLock.cc +++ b/src/librbd/ExclusiveLock.cc @@ -11,6 +11,7 @@ #include "librbd/exclusive_lock/PreReleaseRequest.h" #include "librbd/io/ImageDispatcherInterface.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "common/ceph_mutex.h" #include "common/dout.h" diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 07e96a053c9..c5746f66eff 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -8,7 +8,6 @@ #include "common/dout.h" #include "common/errno.h" #include "common/perf_counters.h" -#include "common/WorkQueue.h" #include "common/Timer.h" #include "librbd/AsioEngine.h" @@ -25,6 +24,7 @@ #include "librbd/PluginRegistry.h" #include "librbd/Types.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/exclusive_lock/AutomaticPolicy.h" #include "librbd/exclusive_lock/StandardPolicy.h" #include "librbd/io/AioCompletion.h" @@ -57,26 +57,6 @@ namespace librbd { namespace { -class ThreadPoolSingleton : public ThreadPool { -public: - ContextWQ *op_work_queue; - - explicit ThreadPoolSingleton(CephContext *cct) - : ThreadPool(cct, "librbd::thread_pool", "tp_librbd", 1, - "rbd_op_threads"), - op_work_queue(new ContextWQ("librbd::op_work_queue", - cct->_conf.get_val("rbd_op_thread_timeout"), - this)) { - start(); - } - ~ThreadPoolSingleton() override { - op_work_queue->drain(); - delete op_work_queue; - - stop(); - } -}; - class SafeTimerSingleton : public SafeTimer { public: ceph::mutex lock = ceph::make_mutex("librbd::SafeTimerSingleton::lock"); @@ -96,15 +76,6 @@ boost::asio::io_context& get_asio_engine_io_context(CephContext* cct) { return asio_engine_singleton->get_io_context(); } -void get_thread_pool_instance(CephContext *cct, ThreadPool **thread_pool, - ContextWQ **op_work_queue) { - auto thread_pool_singleton = - &cct->lookup_or_create_singleton_object( - "librbd::thread_pool", false, cct); - *thread_pool = thread_pool_singleton; - *op_work_queue = thread_pool_singleton->op_work_queue; -} - } // anonymous namespace const string ImageCtx::METADATA_CONF_PREFIX = "conf_"; @@ -154,8 +125,7 @@ void get_thread_pool_instance(CephContext *cct, ThreadPool **thread_pool, // FIPS zeroization audit 20191117: this memset is not security related. memset(&header, 0, sizeof(header)); - ThreadPool *thread_pool; - get_thread_pool_instance(cct, &thread_pool, &op_work_queue); + get_work_queue(cct, &op_work_queue); io_image_dispatcher = new io::ImageDispatcher(this); io_object_dispatcher = new io::ObjectDispatcher(this); @@ -935,10 +905,8 @@ void get_thread_pool_instance(CephContext *cct, ThreadPool **thread_pool, } void ImageCtx::get_work_queue(CephContext *cct, - ContextWQ **op_work_queue) { - - ThreadPool* thread_pool; - get_thread_pool_instance(cct, &thread_pool, op_work_queue); + asio::ContextWQ **op_work_queue) { + *op_work_queue = get_asio_engine(cct)->get_work_queue(); } void ImageCtx::get_timer_instance(CephContext *cct, SafeTimer **timer, diff --git a/src/librbd/ImageCtx.h b/src/librbd/ImageCtx.h index 45b80423b93..b134117dc2c 100644 --- a/src/librbd/ImageCtx.h +++ b/src/librbd/ImageCtx.h @@ -36,7 +36,6 @@ #include #include -class ContextWQ; class Finisher; class ThreadPool; class SafeTimer; @@ -53,9 +52,8 @@ namespace librbd { template class Operations; template class PluginRegistry; - namespace cache { - template class ImageCache; - } + namespace asio { struct ContextWQ; } + namespace cache { template class ImageCache; } namespace exclusive_lock { struct Policy; } namespace io { class AioCompletion; @@ -188,7 +186,7 @@ namespace librbd { io::ImageDispatcherInterface *io_image_dispatcher = nullptr; io::ObjectDispatcherInterface *io_object_dispatcher = nullptr; - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; PluginRegistry* plugin_registry; @@ -347,7 +345,8 @@ namespace librbd { void set_journal_policy(journal::Policy *policy); static AsioEngine* get_asio_engine(CephContext* cct); - static void get_work_queue(CephContext *cct, ContextWQ **op_work_queue); + static void get_work_queue(CephContext *cct, + asio::ContextWQ **op_work_queue); static void get_timer_instance(CephContext *cct, SafeTimer **timer, ceph::mutex **timer_lock); }; diff --git a/src/librbd/ImageState.cc b/src/librbd/ImageState.cc index d1d73e80b0b..4a9717e013d 100644 --- a/src/librbd/ImageState.cc +++ b/src/librbd/ImageState.cc @@ -9,6 +9,7 @@ #include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/image/CloseRequest.h" #include "librbd/image/OpenRequest.h" #include "librbd/image/RefreshRequest.h" @@ -216,7 +217,7 @@ private: auto& thread_pool = m_cct->lookup_or_create_singleton_object< ThreadPoolSingleton>("librbd::ImageUpdateWatchers::thread_pool", false, m_cct); - m_work_queue = new ContextWQ("librbd::ImageUpdateWatchers::op_work_queue", + m_work_queue = new ContextWQ("librbd::ImageUpdateWatchers::work_queue", m_cct->_conf.get_val("rbd_op_thread_timeout"), &thread_pool); } @@ -317,7 +318,7 @@ private: enum EventType {QUIESCE, UNQUIESCE}; CephContext *m_cct; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; ceph::mutex m_lock; std::map m_watchers; diff --git a/src/librbd/ImageWatcher.cc b/src/librbd/ImageWatcher.cc index a2acaf9d600..1a1f3f38099 100644 --- a/src/librbd/ImageWatcher.cc +++ b/src/librbd/ImageWatcher.cc @@ -10,12 +10,12 @@ #include "librbd/TaskFinisher.h" #include "librbd/Types.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/exclusive_lock/Policy.h" #include "librbd/image_watcher/NotifyLockOwner.h" #include "librbd/io/AioCompletion.h" #include "include/encoding.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include #define dout_subsys ceph_subsys_rbd diff --git a/src/librbd/Journal.cc b/src/librbd/Journal.cc index 3910b187357..4c530121045 100644 --- a/src/librbd/Journal.cc +++ b/src/librbd/Journal.cc @@ -14,6 +14,7 @@ #include "journal/Settings.h" #include "journal/Utils.h" #include "librbd/ImageCtx.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/ObjectDispatchSpec.h" #include "librbd/io/ObjectDispatcherInterface.h" #include "librbd/journal/CreateRequest.h" @@ -41,15 +42,23 @@ using journal::util::C_DecodeTags; namespace { -// TODO: once journaler is 100% async, remove separate threads and -// reuse ImageCtx's thread pool +// TODO: once journaler is 100% async and converted to ASIO, remove separate +// threads and reuse librbd's AsioEngine class ThreadPoolSingleton : public ThreadPool { public: + ContextWQ *work_queue; + explicit ThreadPoolSingleton(CephContext *cct) - : ThreadPool(cct, "librbd::Journal", "tp_librbd_journ", 1) { + : ThreadPool(cct, "librbd::Journal", "tp_librbd_journ", 1), + work_queue(new ContextWQ("librbd::journal::work_queue", + cct->_conf.get_val("rbd_op_thread_timeout"), + this)) { start(); } ~ThreadPoolSingleton() override { + work_queue->drain(); + delete work_queue; + stop(); } }; @@ -59,7 +68,7 @@ struct C_IsTagOwner : public Context { librados::IoCtx &io_ctx; std::string image_id; bool *is_tag_owner; - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; Context *on_finish; CephContext *cct = nullptr; @@ -70,7 +79,8 @@ struct C_IsTagOwner : public Context { journal::TagData tag_data; C_IsTagOwner(librados::IoCtx &io_ctx, const std::string &image_id, - bool *is_tag_owner, ContextWQ *op_work_queue, Context *on_finish) + bool *is_tag_owner, asio::ContextWQ *op_work_queue, + Context *on_finish) : io_ctx(io_ctx), image_id(image_id), is_tag_owner(is_tag_owner), op_work_queue(op_work_queue), on_finish(on_finish), cct(reinterpret_cast(io_ctx.cct())), @@ -323,6 +333,24 @@ std::ostream &operator<<(std::ostream &os, return os; } + +template +void Journal::MetadataListener::handle_update(::journal::JournalMetadata *) { + auto ctx = new LambdaContext([this](int r) { + journal->handle_metadata_updated(); + }); + journal->m_work_queue->queue(ctx, 0); +} + + +template +void Journal::get_work_queue(CephContext *cct, ContextWQ **work_queue) { + auto thread_pool_singleton = + &cct->lookup_or_create_singleton_object( + "librbd::journal::thread_pool", false, cct); + *work_queue = thread_pool_singleton->work_queue; +} + template Journal::Journal(I &image_ctx) : RefCountedObject(image_ctx.cct), @@ -336,12 +364,7 @@ Journal::Journal(I &image_ctx) CephContext *cct = m_image_ctx.cct; ldout(cct, 5) << this << ": ictx=" << &m_image_ctx << dendl; - auto thread_pool_singleton = - &cct->lookup_or_create_singleton_object( - "librbd::journal::thread_pool", false, cct); - m_work_queue = new ContextWQ("librbd::journal::work_queue", - cct->_conf.get_val("rbd_op_thread_timeout"), - thread_pool_singleton); + get_work_queue(cct, &m_work_queue); ImageCtx::get_timer_instance(cct, &m_timer, &m_timer_lock); } @@ -349,7 +372,6 @@ template Journal::~Journal() { if (m_work_queue != nullptr) { m_work_queue->drain(); - delete m_work_queue; } std::lock_guard locker{m_lock}; @@ -373,14 +395,14 @@ int Journal::create(librados::IoCtx &io_ctx, const std::string &image_id, CephContext *cct = reinterpret_cast(io_ctx.cct()); ldout(cct, 5) << __func__ << ": image=" << image_id << dendl; - ContextWQ *op_work_queue; - ImageCtx::get_work_queue(cct, &op_work_queue); + ContextWQ *work_queue; + get_work_queue(cct, &work_queue); C_SaferCond cond; journal::TagData tag_data(LOCAL_MIRROR_UUID); journal::CreateRequest *req = journal::CreateRequest::create( io_ctx, image_id, order, splay_width, object_pool, cls::journal::Tag::TAG_CLASS_NEW, - tag_data, IMAGE_CLIENT_ID, op_work_queue, &cond); + tag_data, IMAGE_CLIENT_ID, work_queue, &cond); req->send(); return cond.wait(); @@ -391,12 +413,12 @@ int Journal::remove(librados::IoCtx &io_ctx, const std::string &image_id) { CephContext *cct = reinterpret_cast(io_ctx.cct()); ldout(cct, 5) << __func__ << ": image=" << image_id << dendl; - ContextWQ *op_work_queue; - ImageCtx::get_work_queue(cct, &op_work_queue); + ContextWQ *work_queue; + get_work_queue(cct, &work_queue); C_SaferCond cond; journal::RemoveRequest *req = journal::RemoveRequest::create( - io_ctx, image_id, IMAGE_CLIENT_ID, op_work_queue, &cond); + io_ctx, image_id, IMAGE_CLIENT_ID, work_queue, &cond); req->send(); return cond.wait(); @@ -407,13 +429,13 @@ int Journal::reset(librados::IoCtx &io_ctx, const std::string &image_id) { CephContext *cct = reinterpret_cast(io_ctx.cct()); ldout(cct, 5) << __func__ << ": image=" << image_id << dendl; - ContextWQ *op_work_queue; - ImageCtx::get_work_queue(cct, &op_work_queue); + ContextWQ *work_queue; + get_work_queue(cct, &work_queue); C_SaferCond cond; auto req = journal::ResetRequest::create(io_ctx, image_id, IMAGE_CLIENT_ID, Journal<>::LOCAL_MIRROR_UUID, - op_work_queue, &cond); + work_queue, &cond); req->send(); return cond.wait(); @@ -428,7 +450,8 @@ void Journal::is_tag_owner(I *image_ctx, bool *owner, template void Journal::is_tag_owner(librados::IoCtx& io_ctx, std::string& image_id, - bool *is_tag_owner, ContextWQ *op_work_queue, + bool *is_tag_owner, + asio::ContextWQ *op_work_queue, Context *on_finish) { CephContext *cct = reinterpret_cast(io_ctx.cct()); ldout(cct, 20) << __func__ << dendl; @@ -443,7 +466,8 @@ void Journal::is_tag_owner(librados::IoCtx& io_ctx, std::string& image_id, template void Journal::get_tag_owner(IoCtx& io_ctx, std::string& image_id, std::string *mirror_uuid, - ContextWQ *op_work_queue, Context *on_finish) { + asio::ContextWQ *op_work_queue, + Context *on_finish) { CephContext *cct = static_cast(io_ctx.cct()); ldout(cct, 20) << __func__ << dendl; diff --git a/src/librbd/Journal.h b/src/librbd/Journal.h index 1554fed7905..64ea13fe23a 100644 --- a/src/librbd/Journal.h +++ b/src/librbd/Journal.h @@ -11,12 +11,12 @@ #include "common/AsyncOpTracker.h" #include "common/Cond.h" #include "common/RefCountedObj.h" -#include "common/WorkQueue.h" #include "journal/Future.h" #include "journal/JournalMetadataListener.h" #include "journal/ReplayEntry.h" #include "journal/ReplayHandler.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/journal/Types.h" #include "librbd/journal/TypeTraits.h" @@ -26,10 +26,9 @@ #include #include +class ContextWQ; class SafeTimer; -namespace journal { -class Journaler; -} +namespace journal { class Journaler; } namespace librbd { @@ -91,6 +90,8 @@ public: Journal(ImageCtxT &image_ctx); ~Journal(); + static void get_work_queue(CephContext *cct, ContextWQ **work_queue); + static bool is_journal_supported(ImageCtxT &image_ctx); static int create(librados::IoCtx &io_ctx, const std::string &image_id, uint8_t order, uint8_t splay_width, @@ -101,11 +102,11 @@ public: static void is_tag_owner(ImageCtxT *image_ctx, bool *is_tag_owner, Context *on_finish); static void is_tag_owner(librados::IoCtx& io_ctx, std::string& image_id, - bool *is_tag_owner, ContextWQ *op_work_queue, + bool *is_tag_owner, asio::ContextWQ *op_work_queue, Context *on_finish); static void get_tag_owner(librados::IoCtx& io_ctx, std::string& image_id, std::string *mirror_uuid, - ContextWQ *op_work_queue, Context *on_finish); + asio::ContextWQ *op_work_queue, Context *on_finish); static int request_resync(ImageCtxT *image_ctx); static void promote(ImageCtxT *image_ctx, Context *on_finish); static void demote(ImageCtxT *image_ctx, Context *on_finish); @@ -303,12 +304,7 @@ private: MetadataListener(Journal *journal) : journal(journal) { } - void handle_update(::journal::JournalMetadata *) override { - auto ctx = new LambdaContext([this](int r) { - journal->handle_metadata_updated(); - }); - journal->m_work_queue->queue(ctx, 0); - } + void handle_update(::journal::JournalMetadata *) override; } m_metadata_listener; typedef std::set Listeners; diff --git a/src/librbd/ManagedLock.cc b/src/librbd/ManagedLock.cc index 1d3aa2d0581..870139f761d 100644 --- a/src/librbd/ManagedLock.cc +++ b/src/librbd/ManagedLock.cc @@ -2,6 +2,7 @@ // vim: ts=8 sw=2 smarttab #include "librbd/ManagedLock.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/managed_lock/AcquireRequest.h" #include "librbd/managed_lock/BreakRequest.h" #include "librbd/managed_lock/GetLockerRequest.h" @@ -15,7 +16,6 @@ #include "common/dout.h" #include "common/errno.h" #include "common/Cond.h" -#include "common/WorkQueue.h" #include "librbd/Utils.h" #define dout_subsys ceph_subsys_rbd @@ -63,7 +63,7 @@ using managed_lock::util::decode_lock_cookie; using managed_lock::util::encode_lock_cookie; template -ManagedLock::ManagedLock(librados::IoCtx &ioctx, ContextWQ *work_queue, +ManagedLock::ManagedLock(librados::IoCtx &ioctx, asio::ContextWQ *work_queue, const string& oid, Watcher *watcher, Mode mode, bool blacklist_on_break_lock, uint32_t blacklist_expire_seconds) diff --git a/src/librbd/ManagedLock.h b/src/librbd/ManagedLock.h index 3e03d00ed2d..9bf38ec3026 100644 --- a/src/librbd/ManagedLock.h +++ b/src/librbd/ManagedLock.h @@ -15,12 +15,11 @@ #include #include -class ContextWQ; - namespace librbd { struct ImageCtx; +namespace asio { struct ContextWQ; } namespace managed_lock { struct Locker; } template @@ -30,7 +29,8 @@ private: typedef typename TypeTraits::Watcher Watcher; public: - static ManagedLock *create(librados::IoCtx& ioctx, ContextWQ *work_queue, + static ManagedLock *create(librados::IoCtx& ioctx, + asio::ContextWQ *work_queue, const std::string& oid, Watcher *watcher, managed_lock::Mode mode, bool blacklist_on_break_lock, @@ -42,7 +42,7 @@ public: delete this; } - ManagedLock(librados::IoCtx& ioctx, ContextWQ *work_queue, + ManagedLock(librados::IoCtx& ioctx, asio::ContextWQ *work_queue, const std::string& oid, Watcher *watcher, managed_lock::Mode mode, bool blacklist_on_break_lock, uint32_t blacklist_expire_seconds); @@ -211,7 +211,7 @@ private: librados::IoCtx& m_ioctx; CephContext *m_cct; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; std::string m_oid; Watcher *m_watcher; managed_lock::Mode m_mode; diff --git a/src/librbd/MirroringWatcher.cc b/src/librbd/MirroringWatcher.cc index f22dc149b6b..c0cda5fa16a 100644 --- a/src/librbd/MirroringWatcher.cc +++ b/src/librbd/MirroringWatcher.cc @@ -28,7 +28,7 @@ static const uint64_t NOTIFY_TIMEOUT_MS = 5000; template MirroringWatcher::MirroringWatcher(librados::IoCtx &io_ctx, - ContextWQ *work_queue) + asio::ContextWQ *work_queue) : Watcher(io_ctx, work_queue, RBD_MIRRORING) { } diff --git a/src/librbd/MirroringWatcher.h b/src/librbd/MirroringWatcher.h index 4c72080b9ee..e13762e9b3b 100644 --- a/src/librbd/MirroringWatcher.h +++ b/src/librbd/MirroringWatcher.h @@ -13,6 +13,7 @@ namespace librbd { +namespace asio { struct ContextWQ; } namespace watcher { namespace util { template struct HandlePayloadVisitor; @@ -24,7 +25,7 @@ class MirroringWatcher : public Watcher { friend struct watcher::util::HandlePayloadVisitor>; public: - MirroringWatcher(librados::IoCtx &io_ctx, ContextWQ *work_queue); + MirroringWatcher(librados::IoCtx &io_ctx, asio::ContextWQ *work_queue); static int notify_mode_updated(librados::IoCtx &io_ctx, cls::rbd::MirrorMode mirror_mode); diff --git a/src/librbd/ObjectMap.cc b/src/librbd/ObjectMap.cc index 0d60cc95f94..b0922c909f3 100644 --- a/src/librbd/ObjectMap.cc +++ b/src/librbd/ObjectMap.cc @@ -5,6 +5,7 @@ #include "librbd/BlockGuard.h" #include "librbd/ExclusiveLock.h" #include "librbd/ImageCtx.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/object_map/RefreshRequest.h" #include "librbd/object_map/ResizeRequest.h" #include "librbd/object_map/SnapshotCreateRequest.h" @@ -15,7 +16,6 @@ #include "librbd/Utils.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "include/rados/librados.hpp" diff --git a/src/librbd/Operations.cc b/src/librbd/Operations.cc index ee401bb61be..f87c9debdf0 100644 --- a/src/librbd/Operations.cc +++ b/src/librbd/Operations.cc @@ -6,7 +6,6 @@ #include "common/dout.h" #include "common/errno.h" #include "common/perf_counters.h" -#include "common/WorkQueue.h" #include "osdc/Striper.h" #include "librbd/ExclusiveLock.h" @@ -17,6 +16,7 @@ #include "librbd/Types.h" #include "librbd/Utils.h" #include "librbd/api/Config.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/journal/DisabledPolicy.h" #include "librbd/journal/StandardPolicy.h" #include "librbd/operation/DisableFeaturesRequest.h" diff --git a/src/librbd/TrashWatcher.cc b/src/librbd/TrashWatcher.cc index 74e12e485a2..75d58820548 100644 --- a/src/librbd/TrashWatcher.cc +++ b/src/librbd/TrashWatcher.cc @@ -26,7 +26,8 @@ static const uint64_t NOTIFY_TIMEOUT_MS = 5000; } // anonymous namespace template -TrashWatcher::TrashWatcher(librados::IoCtx &io_ctx, ContextWQ *work_queue) +TrashWatcher::TrashWatcher(librados::IoCtx &io_ctx, + asio::ContextWQ *work_queue) : Watcher(io_ctx, work_queue, RBD_TRASH) { } diff --git a/src/librbd/TrashWatcher.h b/src/librbd/TrashWatcher.h index 8f5fd1391c2..684eaf4f52c 100644 --- a/src/librbd/TrashWatcher.h +++ b/src/librbd/TrashWatcher.h @@ -13,6 +13,7 @@ namespace librbd { +namespace asio { struct ContextWQ; } namespace watcher { namespace util { template struct HandlePayloadVisitor; @@ -23,7 +24,7 @@ template class TrashWatcher : public Watcher { friend struct watcher::util::HandlePayloadVisitor>; public: - TrashWatcher(librados::IoCtx &io_ctx, ContextWQ *work_queue); + TrashWatcher(librados::IoCtx &io_ctx, asio::ContextWQ *work_queue); static void notify_image_added(librados::IoCtx &io_ctx, const std::string& image_id, diff --git a/src/librbd/Watcher.cc b/src/librbd/Watcher.cc index 3d9a85f1d27..89d90c6599b 100644 --- a/src/librbd/Watcher.cc +++ b/src/librbd/Watcher.cc @@ -5,9 +5,9 @@ #include "librbd/watcher/RewatchRequest.h" #include "librbd/Utils.h" #include "librbd/TaskFinisher.h" +#include "librbd/asio/ContextWQ.h" #include "include/encoding.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include // re-include our assert to clobber the system one; fix dout: @@ -87,11 +87,12 @@ void Watcher::C_NotifyAck::finish(int r) { #define dout_prefix *_dout << "librbd::Watcher: " << this << " " << __func__ \ << ": " -Watcher::Watcher(librados::IoCtx& ioctx, ContextWQ *work_queue, +Watcher::Watcher(librados::IoCtx& ioctx, asio::ContextWQ *work_queue, const string& oid) : m_ioctx(ioctx), m_work_queue(work_queue), m_oid(oid), m_cct(reinterpret_cast(ioctx.cct())), - m_watch_lock(ceph::make_shared_mutex(util::unique_lock_name("librbd::Watcher::m_watch_lock", this))), + m_watch_lock(ceph::make_shared_mutex( + util::unique_lock_name("librbd::Watcher::m_watch_lock", this))), m_watch_handle(0), m_notifier(work_queue, ioctx, oid), m_watch_state(WATCH_STATE_IDLE), m_watch_ctx(*this) { } diff --git a/src/librbd/Watcher.h b/src/librbd/Watcher.h index e2889605010..c3497ca88a9 100644 --- a/src/librbd/Watcher.h +++ b/src/librbd/Watcher.h @@ -13,10 +13,9 @@ #include #include -class ContextWQ; - namespace librbd { +namespace asio { struct ContextWQ; } namespace watcher { struct NotifyResponse; } class Watcher { @@ -32,7 +31,7 @@ public: void finish(int r) override; }; - Watcher(librados::IoCtx& ioctx, ContextWQ *work_queue, + Watcher(librados::IoCtx& ioctx, asio::ContextWQ *work_queue, const std::string& oid); virtual ~Watcher(); @@ -73,7 +72,7 @@ protected: }; librados::IoCtx& m_ioctx; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; std::string m_oid; CephContext *m_cct; mutable ceph::shared_mutex m_watch_lock; diff --git a/src/librbd/api/Image.cc b/src/librbd/api/Image.cc index 977a4894eaa..d714aef3db5 100644 --- a/src/librbd/api/Image.cc +++ b/src/librbd/api/Image.cc @@ -674,15 +674,15 @@ int Image::deep_copy(I *src, I *dest, bool flatten, snap_id_end = src->snap_id; } - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(cct, &op_work_queue); C_SaferCond cond; SnapSeqs snap_seqs; deep_copy::ProgressHandler progress_handler{&prog_ctx}; auto req = DeepCopyRequest::create( - src, dest, snap_id_start, snap_id_end, 0U, flatten, boost::none, op_work_queue, - &snap_seqs, &progress_handler, &cond); + src, dest, snap_id_start, snap_id_end, 0U, flatten, boost::none, + op_work_queue, &snap_seqs, &progress_handler, &cond); req->send(); int r = cond.wait(); if (r < 0) { @@ -824,7 +824,7 @@ int Image::remove(IoCtx& io_ctx, const std::string &image_name, // fall-through if trash isn't supported } - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(cct, &op_work_queue); // might be a V1 image format that cannot be moved to the trash diff --git a/src/librbd/api/Migration.cc b/src/librbd/api/Migration.cc index e097bad4a92..3d9d86020f1 100644 --- a/src/librbd/api/Migration.cc +++ b/src/librbd/api/Migration.cc @@ -835,7 +835,7 @@ int Migration::abort() { ceph_assert(dst_image_ctx->ignore_migrating); - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(m_cct, &op_work_queue); C_SaferCond on_remove; auto req = librbd::image::RemoveRequest<>::create( @@ -1218,7 +1218,7 @@ int Migration::create_dst_image() { } } - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(m_cct, &op_work_queue); ConfigProxy config{m_cct->_conf}; @@ -1759,7 +1759,7 @@ int Migration::remove_src_image() { ceph_assert(m_src_image_ctx->ignore_migrating); - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(m_cct, &op_work_queue); C_SaferCond on_remove; auto req = librbd::image::RemoveRequest::create( diff --git a/src/librbd/api/Mirror.cc b/src/librbd/api/Mirror.cc index ec125d2c499..3042b1e5e49 100644 --- a/src/librbd/api/Mirror.cc +++ b/src/librbd/api/Mirror.cc @@ -813,7 +813,7 @@ int Mirror::image_get_info(I *ictx, mirror_image_info_t *mirror_image_info) { template void Mirror::image_get_info(librados::IoCtx& io_ctx, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, const std::string &image_id, mirror_image_info_t *mirror_image_info, Context *on_finish) { @@ -831,7 +831,7 @@ void Mirror::image_get_info(librados::IoCtx& io_ctx, template int Mirror::image_get_info(librados::IoCtx& io_ctx, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, const std::string &image_id, mirror_image_info_t *mirror_image_info) { C_SaferCond ctx; @@ -1940,7 +1940,7 @@ int Mirror::image_info_list( break; } - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(cct, &op_work_queue); for (auto &it : images) { diff --git a/src/librbd/api/Mirror.h b/src/librbd/api/Mirror.h index b0dae99bc4a..8a4b4ab8dd9 100644 --- a/src/librbd/api/Mirror.h +++ b/src/librbd/api/Mirror.h @@ -9,13 +9,12 @@ #include #include -class ContextWQ; - struct Context; namespace librbd { struct ImageCtx; +namespace asio { struct ContextWQ; } namespace api { @@ -95,11 +94,11 @@ struct Mirror { mirror_image_info_t *mirror_image_info, Context *on_finish); static int image_get_info(librados::IoCtx& io_ctx, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, const std::string &image_id, mirror_image_info_t *mirror_image_info); static void image_get_info(librados::IoCtx& io_ctx, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, const std::string &image_id, mirror_image_info_t *mirror_image_info, Context *on_finish); diff --git a/src/librbd/api/Pool.cc b/src/librbd/api/Pool.cc index 9a2ef379ff9..75f2dd3b529 100644 --- a/src/librbd/api/Pool.cc +++ b/src/librbd/api/Pool.cc @@ -251,7 +251,7 @@ int Pool::init(librados::IoCtx& io_ctx, bool force) { return 0; } - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(cct, &op_work_queue); C_SaferCond ctx; diff --git a/src/librbd/api/Trash.cc b/src/librbd/api/Trash.cc index a5ba23306e9..38a270fb8be 100644 --- a/src/librbd/api/Trash.cc +++ b/src/librbd/api/Trash.cc @@ -90,7 +90,7 @@ int enable_mirroring(IoCtx &io_ctx, const std::string &image_id) { ldout(cct, 10) << dendl; - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(cct, &op_work_queue); C_SaferCond ctx; auto req = mirror::EnableRequest::create( @@ -534,7 +534,7 @@ int Trash::remove(IoCtx &io_ctx, const std::string &image_id, bool force, return -EBUSY; } - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(cct, &op_work_queue); C_SaferCond cond; diff --git a/src/librbd/cache/ObjectCacherObjectDispatch.cc b/src/librbd/cache/ObjectCacherObjectDispatch.cc index 9d304c54a05..8479ef06b87 100644 --- a/src/librbd/cache/ObjectCacherObjectDispatch.cc +++ b/src/librbd/cache/ObjectCacherObjectDispatch.cc @@ -3,10 +3,10 @@ #include "librbd/cache/ObjectCacherObjectDispatch.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Journal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/cache/ObjectCacherWriteback.h" #include "librbd/io/ObjectDispatchSpec.h" #include "librbd/io/ObjectDispatcherInterface.h" diff --git a/src/librbd/cache/ObjectCacherWriteback.cc b/src/librbd/cache/ObjectCacherWriteback.cc index 169b99a4ce0..c05d9e737f6 100644 --- a/src/librbd/cache/ObjectCacherWriteback.cc +++ b/src/librbd/cache/ObjectCacherWriteback.cc @@ -7,7 +7,6 @@ #include "common/ceph_context.h" #include "common/dout.h" #include "common/ceph_mutex.h" -#include "common/WorkQueue.h" #include "osdc/Striper.h" #include "include/Context.h" #include "include/rados/librados.hpp" @@ -19,6 +18,7 @@ #include "librbd/ObjectMap.h" #include "librbd/Journal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/ObjectDispatchSpec.h" #include "librbd/io/ObjectDispatcherInterface.h" diff --git a/src/librbd/cache/ParentCacheObjectDispatch.cc b/src/librbd/cache/ParentCacheObjectDispatch.cc index bf302acd3f7..088384b1525 100644 --- a/src/librbd/cache/ParentCacheObjectDispatch.cc +++ b/src/librbd/cache/ParentCacheObjectDispatch.cc @@ -1,10 +1,9 @@ // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" -#include "librbd/Journal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/ObjectDispatchSpec.h" #include "librbd/io/ObjectDispatcherInterface.h" #include "librbd/io/Utils.h" diff --git a/src/librbd/cache/ReplicatedWriteLog.cc b/src/librbd/cache/ReplicatedWriteLog.cc index a2c62bc43bd..38309723054 100644 --- a/src/librbd/cache/ReplicatedWriteLog.cc +++ b/src/librbd/cache/ReplicatedWriteLog.cc @@ -14,6 +14,7 @@ #include "common/Timer.h" #include "common/perf_counters.h" #include "librbd/ImageCtx.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/cache/rwl/ImageCacheState.h" #include "librbd/cache/rwl/LogEntry.h" #include "librbd/cache/rwl/Types.h" diff --git a/src/librbd/cache/WriteAroundObjectDispatch.cc b/src/librbd/cache/WriteAroundObjectDispatch.cc index cdd8ea27160..0d96d029659 100644 --- a/src/librbd/cache/WriteAroundObjectDispatch.cc +++ b/src/librbd/cache/WriteAroundObjectDispatch.cc @@ -4,9 +4,9 @@ #include "librbd/cache/WriteAroundObjectDispatch.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/ObjectDispatchSpec.h" #include "librbd/io/ObjectDispatcherInterface.h" diff --git a/src/librbd/deep_copy/SnapshotCopyRequest.cc b/src/librbd/deep_copy/SnapshotCopyRequest.cc index 8ac59308873..9ff02644de9 100644 --- a/src/librbd/deep_copy/SnapshotCopyRequest.cc +++ b/src/librbd/deep_copy/SnapshotCopyRequest.cc @@ -5,11 +5,11 @@ #include "SetHeadRequest.h" #include "SnapshotCreateRequest.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ExclusiveLock.h" #include "librbd/ObjectMap.h" #include "librbd/Operations.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "osdc/Striper.h" #define dout_subsys ceph_subsys_rbd @@ -48,7 +48,8 @@ SnapshotCopyRequest::SnapshotCopyRequest(I *src_image_ctx, librados::snap_t src_snap_id_start, librados::snap_t src_snap_id_end, librados::snap_t dst_snap_id_start, - bool flatten, ContextWQ *work_queue, + bool flatten, + asio::ContextWQ *work_queue, SnapSeqs *snap_seqs, Context *on_finish) : RefCountedObject(dst_image_ctx->cct), m_src_image_ctx(src_image_ctx), diff --git a/src/librbd/deep_copy/SnapshotCopyRequest.h b/src/librbd/deep_copy/SnapshotCopyRequest.h index a80f981336f..9c6abdf7327 100644 --- a/src/librbd/deep_copy/SnapshotCopyRequest.h +++ b/src/librbd/deep_copy/SnapshotCopyRequest.h @@ -18,6 +18,9 @@ class Context; namespace librbd { + +namespace asio { struct ContextWQ; } + namespace deep_copy { template @@ -28,7 +31,7 @@ public: librados::snap_t src_snap_id_start, librados::snap_t src_snap_id_end, librados::snap_t dst_snap_id_start, - bool flatten, ContextWQ *work_queue, + bool flatten, asio::ContextWQ *work_queue, SnapSeqs *snap_seqs, Context *on_finish) { return new SnapshotCopyRequest(src_image_ctx, dst_image_ctx, src_snap_id_start, src_snap_id_end, @@ -40,8 +43,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, ContextWQ *work_queue, SnapSeqs *snap_seqs, - Context *on_finish); + bool flatten, asio::ContextWQ *work_queue, + SnapSeqs *snap_seqs, Context *on_finish); void send(); void cancel(); @@ -92,7 +95,7 @@ private: librados::snap_t m_src_snap_id_end; librados::snap_t m_dst_snap_id_start; bool m_flatten; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; SnapSeqs *m_snap_seqs_result; SnapSeqs m_snap_seqs; Context *m_on_finish; diff --git a/src/librbd/exclusive_lock/ImageDispatch.cc b/src/librbd/exclusive_lock/ImageDispatch.cc index 7b411149d32..6f6cf231f80 100644 --- a/src/librbd/exclusive_lock/ImageDispatch.cc +++ b/src/librbd/exclusive_lock/ImageDispatch.cc @@ -5,7 +5,6 @@ #include "include/Context.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ExclusiveLock.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" diff --git a/src/librbd/exclusive_lock/PostAcquireRequest.cc b/src/librbd/exclusive_lock/PostAcquireRequest.cc index c194a46814a..7075090b55c 100644 --- a/src/librbd/exclusive_lock/PostAcquireRequest.cc +++ b/src/librbd/exclusive_lock/PostAcquireRequest.cc @@ -6,7 +6,6 @@ #include "cls/lock/cls_lock_types.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "include/stringify.h" #include "librbd/ExclusiveLock.h" #include "librbd/ImageCtx.h" diff --git a/src/librbd/exclusive_lock/PreAcquireRequest.cc b/src/librbd/exclusive_lock/PreAcquireRequest.cc index ba3da1a24ba..feb0913d715 100644 --- a/src/librbd/exclusive_lock/PreAcquireRequest.cc +++ b/src/librbd/exclusive_lock/PreAcquireRequest.cc @@ -8,6 +8,7 @@ #include "librbd/ImageCtx.h" #include "librbd/ImageWatcher.h" #include "librbd/ImageState.h" +#include "librbd/asio/ContextWQ.h" #define dout_subsys ceph_subsys_rbd #undef dout_prefix diff --git a/src/librbd/image/AttachParentRequest.cc b/src/librbd/image/AttachParentRequest.cc index 116ef7ffada..d0c35b6a91c 100644 --- a/src/librbd/image/AttachParentRequest.cc +++ b/src/librbd/image/AttachParentRequest.cc @@ -4,7 +4,6 @@ #include "librbd/image/AttachParentRequest.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "cls/rbd/cls_rbd_client.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" diff --git a/src/librbd/image/CloneRequest.cc b/src/librbd/image/CloneRequest.cc index b1809b59bc7..8db5ee0efc7 100644 --- a/src/librbd/image/CloneRequest.cc +++ b/src/librbd/image/CloneRequest.cc @@ -8,6 +8,7 @@ #include "include/ceph_assert.h" #include "librbd/ImageState.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/deep_copy/MetadataCopyRequest.h" #include "librbd/image/AttachChildRequest.h" #include "librbd/image/AttachParentRequest.h" @@ -46,7 +47,7 @@ CloneRequest::CloneRequest( cls::rbd::MirrorImageMode mirror_image_mode, const std::string &non_primary_global_image_id, const std::string &primary_mirror_uuid, - ContextWQ *op_work_queue, Context *on_finish) + asio::ContextWQ *op_work_queue, Context *on_finish) : m_config(config), m_parent_io_ctx(parent_io_ctx), m_parent_image_id(parent_image_id), m_parent_snap_name(parent_snap_name), m_parent_snap_namespace(parent_snap_namespace), diff --git a/src/librbd/image/CloneRequest.h b/src/librbd/image/CloneRequest.h index 1aa06d9c3c1..35d9cab17ed 100644 --- a/src/librbd/image/CloneRequest.h +++ b/src/librbd/image/CloneRequest.h @@ -14,6 +14,9 @@ class Context; using librados::IoCtx; namespace librbd { + +namespace asio { struct ContextWQ; } + namespace image { template @@ -30,7 +33,7 @@ public: cls::rbd::MirrorImageMode mirror_image_mode, const std::string &non_primary_global_image_id, const std::string &primary_mirror_uuid, - ContextWQ *op_work_queue, Context *on_finish) { + asio::ContextWQ *op_work_queue, Context *on_finish) { return new CloneRequest(config, parent_io_ctx, parent_image_id, parent_snap_name, parent_snap_namespace, parent_snap_id, c_ioctx, c_name, c_id, c_options, @@ -48,7 +51,7 @@ public: cls::rbd::MirrorImageMode mirror_image_mode, const std::string &non_primary_global_image_id, const std::string &primary_mirror_uuid, - ContextWQ *op_work_queue, Context *on_finish); + asio::ContextWQ *op_work_queue, Context *on_finish); void send(); @@ -116,7 +119,7 @@ private: const std::string m_non_primary_global_image_id; const std::string m_primary_mirror_uuid; NoOpProgressContext m_no_op; - ContextWQ *m_op_work_queue; + asio::ContextWQ *m_op_work_queue; Context *m_on_finish; CephContext *m_cct; diff --git a/src/librbd/image/CloseRequest.cc b/src/librbd/image/CloseRequest.cc index 5768b6ef7aa..95460268251 100644 --- a/src/librbd/image/CloseRequest.cc +++ b/src/librbd/image/CloseRequest.cc @@ -10,6 +10,7 @@ #include "librbd/ImageWatcher.h" #include "librbd/ObjectMap.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/ImageDispatcher.h" #include "librbd/io/ImageDispatchSpec.h" diff --git a/src/librbd/image/CreateRequest.cc b/src/librbd/image/CreateRequest.cc index 83c75141cc0..abf43492094 100644 --- a/src/librbd/image/CreateRequest.cc +++ b/src/librbd/image/CreateRequest.cc @@ -12,10 +12,12 @@ #include "librbd/Journal.h" #include "librbd/ObjectMap.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/image/Types.h" #include "librbd/image/ValidatePoolRequest.h" #include "librbd/journal/CreateRequest.h" #include "librbd/journal/RemoveRequest.h" +#include "librbd/journal/TypeTraits.h" #include "librbd/mirror/EnableRequest.h" #include "journal/Journaler.h" @@ -119,7 +121,8 @@ CreateRequest::CreateRequest(const ConfigProxy& config, IoCtx &ioctx, cls::rbd::MirrorImageMode mirror_image_mode, const std::string &non_primary_global_image_id, const std::string &primary_mirror_uuid, - ContextWQ *op_work_queue, Context *on_finish) + asio::ContextWQ *op_work_queue, + Context *on_finish) : m_config(config), m_image_name(image_name), m_image_id(image_id), m_size(size), m_create_flags(create_flags), m_mirror_image_mode(mirror_image_mode), @@ -613,10 +616,13 @@ void CreateRequest::journal_create() { tag_data.mirror_uuid = (use_primary_mirror_uuid ? m_primary_mirror_uuid : librbd::Journal::LOCAL_MIRROR_UUID); + typename journal::TypeTraits::ContextWQ* context_wq; + Journal<>::get_work_queue(m_cct, &context_wq); + auto req = librbd::journal::CreateRequest::create( m_io_ctx, m_image_id, m_journal_order, m_journal_splay_width, m_journal_pool, cls::journal::Tag::TAG_CLASS_NEW, tag_data, - librbd::Journal::IMAGE_CLIENT_ID, m_op_work_queue, ctx); + librbd::Journal::IMAGE_CLIENT_ID, context_wq, ctx); req->send(); } @@ -697,9 +703,12 @@ void CreateRequest::journal_remove() { Context *ctx = create_context_callback( this); + typename journal::TypeTraits::ContextWQ* context_wq; + Journal<>::get_work_queue(m_cct, &context_wq); + librbd::journal::RemoveRequest *req = librbd::journal::RemoveRequest::create( - m_io_ctx, m_image_id, librbd::Journal::IMAGE_CLIENT_ID, m_op_work_queue, + m_io_ctx, m_image_id, librbd::Journal::IMAGE_CLIENT_ID, context_wq, ctx); req->send(); } diff --git a/src/librbd/image/CreateRequest.h b/src/librbd/image/CreateRequest.h index ce924e34ae3..9cb0eec7c8d 100644 --- a/src/librbd/image/CreateRequest.h +++ b/src/librbd/image/CreateRequest.h @@ -13,13 +13,15 @@ #include "librbd/ImageCtx.h" class Context; -class ContextWQ; using librados::IoCtx; namespace journal { class Journaler; } namespace librbd { + +namespace asio { struct ContextWQ; } + namespace image { template @@ -33,7 +35,8 @@ public: cls::rbd::MirrorImageMode mirror_image_mode, const std::string &non_primary_global_image_id, const std::string &primary_mirror_uuid, - ContextWQ *op_work_queue, Context *on_finish) { + asio::ContextWQ *op_work_queue, + Context *on_finish) { return new CreateRequest(config, ioctx, image_name, image_id, size, image_options, create_flags, mirror_image_mode, non_primary_global_image_id, @@ -95,7 +98,7 @@ private: cls::rbd::MirrorImageMode mirror_image_mode, const std::string &non_primary_global_image_id, const std::string &primary_mirror_uuid, - ContextWQ *op_work_queue, Context *on_finish); + asio::ContextWQ *op_work_queue, Context *on_finish); const ConfigProxy& m_config; IoCtx m_io_ctx; @@ -118,7 +121,7 @@ private: const std::string m_primary_mirror_uuid; bool m_negotiate_features = false; - ContextWQ *m_op_work_queue; + asio::ContextWQ *m_op_work_queue; Context *m_on_finish; CephContext *m_cct; diff --git a/src/librbd/image/DetachChildRequest.cc b/src/librbd/image/DetachChildRequest.cc index d84a0edff11..6cd27932933 100644 --- a/src/librbd/image/DetachChildRequest.cc +++ b/src/librbd/image/DetachChildRequest.cc @@ -4,13 +4,13 @@ #include "librbd/image/DetachChildRequest.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "cls/rbd/cls_rbd_client.h" #include "librbd/ExclusiveLock.h" #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/Operations.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/journal/DisabledPolicy.h" #include "librbd/trash/RemoveRequest.h" #include diff --git a/src/librbd/image/DetachParentRequest.cc b/src/librbd/image/DetachParentRequest.cc index 40ff44b7a63..74b1b0f672f 100644 --- a/src/librbd/image/DetachParentRequest.cc +++ b/src/librbd/image/DetachParentRequest.cc @@ -4,7 +4,6 @@ #include "librbd/image/DetachParentRequest.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "cls/rbd/cls_rbd_client.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" diff --git a/src/librbd/image/RefreshParentRequest.cc b/src/librbd/image/RefreshParentRequest.cc index 2423c4c885b..8cc0cf949a0 100644 --- a/src/librbd/image/RefreshParentRequest.cc +++ b/src/librbd/image/RefreshParentRequest.cc @@ -5,9 +5,9 @@ #include "include/rados/librados.hpp" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/image/CloseRequest.h" #include "librbd/image/OpenRequest.h" #include "librbd/io/ObjectDispatcherInterface.h" diff --git a/src/librbd/image/RemoveRequest.cc b/src/librbd/image/RemoveRequest.cc index a708e9d62c4..3142b7e3928 100644 --- a/src/librbd/image/RemoveRequest.cc +++ b/src/librbd/image/RemoveRequest.cc @@ -11,6 +11,7 @@ #include "librbd/image/DetachChildRequest.h" #include "librbd/image/PreRemoveRequest.h" #include "librbd/journal/RemoveRequest.h" +#include "librbd/journal/TypeTraits.h" #include "librbd/mirror/DisableRequest.h" #include "librbd/operation/TrimRequest.h" @@ -322,8 +323,11 @@ void RemoveRequest::send_journal_remove() { Context *ctx = create_context_callback< klass, &klass::handle_journal_remove>(this); + typename journal::TypeTraits::ContextWQ* context_wq; + Journal::get_work_queue(m_cct, &context_wq); + journal::RemoveRequest *req = journal::RemoveRequest::create( - m_ioctx, m_image_id, Journal<>::IMAGE_CLIENT_ID, m_op_work_queue, ctx); + m_ioctx, m_image_id, Journal<>::IMAGE_CLIENT_ID, context_wq, ctx); req->send(); } diff --git a/src/librbd/image/RemoveRequest.h b/src/librbd/image/RemoveRequest.h index 98d597645a4..79512c932ce 100644 --- a/src/librbd/image/RemoveRequest.h +++ b/src/librbd/image/RemoveRequest.h @@ -11,7 +11,6 @@ #include class Context; -class ContextWQ; class SafeTimer; namespace librbd { diff --git a/src/librbd/image/TypeTraits.h b/src/librbd/image/TypeTraits.h index 17d84fc8e6b..2989e30b5c4 100644 --- a/src/librbd/image/TypeTraits.h +++ b/src/librbd/image/TypeTraits.h @@ -4,14 +4,15 @@ #ifndef CEPH_LIBRBD_IMAGE_TYPE_TRAITS_H #define CEPH_LIBRBD_IMAGE_TYPE_TRAITS_H -class ContextWQ; - namespace librbd { + +namespace asio { struct ContextWQ; } + namespace image { template struct TypeTraits { - typedef ::ContextWQ ContextWQ; + typedef asio::ContextWQ ContextWQ; }; } // namespace image diff --git a/src/librbd/image/ValidatePoolRequest.cc b/src/librbd/image/ValidatePoolRequest.cc index 9e4af7bf990..9e685dc477c 100644 --- a/src/librbd/image/ValidatePoolRequest.cc +++ b/src/librbd/image/ValidatePoolRequest.cc @@ -6,9 +6,9 @@ #include "include/ceph_assert.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #define dout_subsys ceph_subsys_rbd #undef dout_prefix @@ -31,7 +31,7 @@ using util::create_async_context_callback; template ValidatePoolRequest::ValidatePoolRequest(librados::IoCtx& io_ctx, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, Context *on_finish) : m_cct(reinterpret_cast(io_ctx.cct())), m_op_work_queue(op_work_queue), m_on_finish(on_finish) { diff --git a/src/librbd/image/ValidatePoolRequest.h b/src/librbd/image/ValidatePoolRequest.h index 38c4de7c69a..859bf4e13e3 100644 --- a/src/librbd/image/ValidatePoolRequest.h +++ b/src/librbd/image/ValidatePoolRequest.h @@ -9,11 +9,11 @@ #include "include/buffer.h" class Context; -class ContextWQ; namespace librbd { struct ImageCtx; +namespace asio { struct ContextWQ; } namespace image { @@ -21,12 +21,12 @@ template class ValidatePoolRequest { public: static ValidatePoolRequest* create(librados::IoCtx& io_ctx, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, Context *on_finish) { return new ValidatePoolRequest(io_ctx, op_work_queue, on_finish); } - ValidatePoolRequest(librados::IoCtx& io_ctx, ContextWQ *op_work_queue, + ValidatePoolRequest(librados::IoCtx& io_ctx, asio::ContextWQ *op_work_queue, Context *on_finish); void send(); @@ -62,7 +62,7 @@ private: librados::IoCtx m_io_ctx; CephContext* m_cct; - ContextWQ* m_op_work_queue; + asio::ContextWQ* m_op_work_queue; Context* m_on_finish; int m_ret_val = 0; diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index 31edcc57b60..62c911ae5f2 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -684,7 +684,7 @@ int validate_pool(IoCtx &io_ctx, CephContext *cct) { lderr(cct) << "Forced V1 image creation. " << dendl; r = create_v1(io_ctx, image_name.c_str(), size, order); } else { - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(cct, &op_work_queue); ConfigProxy config{cct->_conf}; @@ -789,7 +789,7 @@ int validate_pool(IoCtx &io_ctx, CephContext *cct) { ConfigProxy config{reinterpret_cast(c_ioctx.cct())->_conf}; api::Config<>::apply_pool_overrides(c_ioctx, &config); - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; ImageCtx::get_work_queue(cct, &op_work_queue); C_SaferCond cond; diff --git a/src/librbd/internal.h b/src/librbd/internal.h index 58801019d7f..9bd03228a54 100644 --- a/src/librbd/internal.h +++ b/src/librbd/internal.h @@ -14,7 +14,6 @@ #include "include/rbd/librbd.hpp" #include "include/rbd_types.h" #include "cls/rbd/cls_rbd_types.h" -#include "common/WorkQueue.h" #include "common/ceph_time.h" #include "librbd/Types.h" diff --git a/src/librbd/io/AioCompletion.cc b/src/librbd/io/AioCompletion.cc index 9ebb334a2b1..dc933a12084 100644 --- a/src/librbd/io/AioCompletion.cc +++ b/src/librbd/io/AioCompletion.cc @@ -8,12 +8,12 @@ #include "common/dout.h" #include "common/errno.h" #include "common/perf_counters.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/internal.h" #include "librbd/Journal.h" #include "librbd/Types.h" +#include "librbd/asio/ContextWQ.h" #ifdef WITH_LTTNG #include "tracing/librbd.h" diff --git a/src/librbd/io/AsyncOperation.cc b/src/librbd/io/AsyncOperation.cc index 2a00cd6699a..4c4d508e7d2 100644 --- a/src/librbd/io/AsyncOperation.cc +++ b/src/librbd/io/AsyncOperation.cc @@ -3,8 +3,8 @@ #include "librbd/io/AsyncOperation.h" #include "librbd/ImageCtx.h" +#include "librbd/asio/ContextWQ.h" #include "common/dout.h" -#include "common/WorkQueue.h" #include "include/ceph_assert.h" #define dout_subsys ceph_subsys_rbd diff --git a/src/librbd/io/CopyupRequest.cc b/src/librbd/io/CopyupRequest.cc index 94b80ecca1e..d41573d6931 100644 --- a/src/librbd/io/CopyupRequest.cc +++ b/src/librbd/io/CopyupRequest.cc @@ -6,12 +6,12 @@ #include "common/ceph_mutex.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/AsyncObjectThrottle.h" #include "librbd/ExclusiveLock.h" #include "librbd/ImageCtx.h" #include "librbd/ObjectMap.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/deep_copy/ObjectCopyRequest.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/ImageRequest.h" diff --git a/src/librbd/io/ImageDispatch.cc b/src/librbd/io/ImageDispatch.cc index 0191cabacd7..21262e591ff 100644 --- a/src/librbd/io/ImageDispatch.cc +++ b/src/librbd/io/ImageDispatch.cc @@ -3,7 +3,6 @@ #include "librbd/io/ImageDispatch.h" #include "common/dout.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/ImageRequest.h" diff --git a/src/librbd/io/ImageDispatcher.cc b/src/librbd/io/ImageDispatcher.cc index c6b8807935c..041265434aa 100644 --- a/src/librbd/io/ImageDispatcher.cc +++ b/src/librbd/io/ImageDispatcher.cc @@ -5,7 +5,6 @@ #include "include/Context.h" #include "common/AsyncOpTracker.h" #include "common/dout.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" #include "librbd/io/AsyncOperation.h" diff --git a/src/librbd/io/ImageRequest.cc b/src/librbd/io/ImageRequest.cc index 141f8f12740..d4a15645fb5 100644 --- a/src/librbd/io/ImageRequest.cc +++ b/src/librbd/io/ImageRequest.cc @@ -7,6 +7,7 @@ #include "librbd/Journal.h" #include "librbd/Types.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/cache/ImageCache.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/AsyncOperation.h" @@ -17,7 +18,6 @@ #include "librbd/journal/Types.h" #include "include/rados/librados.hpp" #include "common/perf_counters.h" -#include "common/WorkQueue.h" #include "osdc/Striper.h" #include #include diff --git a/src/librbd/io/ObjectDispatch.cc b/src/librbd/io/ObjectDispatch.cc index 4f3baa451f7..ecf9ae23d07 100644 --- a/src/librbd/io/ObjectDispatch.cc +++ b/src/librbd/io/ObjectDispatch.cc @@ -3,9 +3,9 @@ #include "librbd/io/ObjectDispatch.h" #include "common/dout.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/ObjectRequest.h" #define dout_subsys ceph_subsys_rbd diff --git a/src/librbd/io/ObjectDispatcher.cc b/src/librbd/io/ObjectDispatcher.cc index 25ed4989c3e..7c46fdff75d 100644 --- a/src/librbd/io/ObjectDispatcher.cc +++ b/src/librbd/io/ObjectDispatcher.cc @@ -5,9 +5,9 @@ #include "include/Context.h" #include "common/AsyncOpTracker.h" #include "common/dout.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/ObjectDispatch.h" #include "librbd/io/ObjectDispatchSpec.h" #include diff --git a/src/librbd/io/ObjectRequest.cc b/src/librbd/io/ObjectRequest.cc index 3966dd2e725..51efbae21ef 100644 --- a/src/librbd/io/ObjectRequest.cc +++ b/src/librbd/io/ObjectRequest.cc @@ -6,7 +6,6 @@ #include "common/dout.h" #include "common/errno.h" #include "common/ceph_mutex.h" -#include "common/WorkQueue.h" #include "include/Context.h" #include "include/err.h" #include "osd/osd_types.h" @@ -15,6 +14,7 @@ #include "librbd/ImageCtx.h" #include "librbd/ObjectMap.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/CopyupRequest.h" #include "librbd/io/ImageRequest.h" diff --git a/src/librbd/io/QosImageDispatch.cc b/src/librbd/io/QosImageDispatch.cc index 31293e1e589..f19471f8d73 100644 --- a/src/librbd/io/QosImageDispatch.cc +++ b/src/librbd/io/QosImageDispatch.cc @@ -3,8 +3,8 @@ #include "librbd/io/QosImageDispatch.h" #include "common/dout.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/FlushTracker.h" #include diff --git a/src/librbd/io/QueueImageDispatch.cc b/src/librbd/io/QueueImageDispatch.cc index 0114fefa098..d901d2ebbd0 100644 --- a/src/librbd/io/QueueImageDispatch.cc +++ b/src/librbd/io/QueueImageDispatch.cc @@ -4,9 +4,9 @@ #include "librbd/io/QueueImageDispatch.h" #include "common/dout.h" #include "common/Cond.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/ImageDispatchSpec.h" diff --git a/src/librbd/io/SimpleSchedulerObjectDispatch.cc b/src/librbd/io/SimpleSchedulerObjectDispatch.cc index bae5f204425..ec9c3b43408 100644 --- a/src/librbd/io/SimpleSchedulerObjectDispatch.cc +++ b/src/librbd/io/SimpleSchedulerObjectDispatch.cc @@ -3,10 +3,10 @@ #include "librbd/io/SimpleSchedulerObjectDispatch.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "common/errno.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/ObjectDispatchSpec.h" #include "librbd/io/ObjectDispatcher.h" #include "librbd/io/Utils.h" diff --git a/src/librbd/io/WriteBlockImageDispatch.cc b/src/librbd/io/WriteBlockImageDispatch.cc index ab69b3d85f3..d6672de6016 100644 --- a/src/librbd/io/WriteBlockImageDispatch.cc +++ b/src/librbd/io/WriteBlockImageDispatch.cc @@ -4,9 +4,9 @@ #include "librbd/io/WriteBlockImageDispatch.h" #include "common/dout.h" #include "common/Cond.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/ImageDispatchSpec.h" diff --git a/src/librbd/journal/CreateRequest.cc b/src/librbd/journal/CreateRequest.cc index 46f0d81d1b9..4f7a0f5bedd 100644 --- a/src/librbd/journal/CreateRequest.cc +++ b/src/librbd/journal/CreateRequest.cc @@ -6,7 +6,6 @@ #include "include/ceph_assert.h" #include "librbd/Utils.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "journal/Settings.h" #include "librbd/journal/CreateRequest.h" #include "librbd/journal/RemoveRequest.h" diff --git a/src/librbd/journal/DemoteRequest.cc b/src/librbd/journal/DemoteRequest.cc index 649388266b0..56439197895 100644 --- a/src/librbd/journal/DemoteRequest.cc +++ b/src/librbd/journal/DemoteRequest.cc @@ -4,12 +4,12 @@ #include "librbd/journal/DemoteRequest.h" #include "common/dout.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/journal/OpenRequest.h" #define dout_subsys ceph_subsys_rbd diff --git a/src/librbd/journal/ObjectDispatch.cc b/src/librbd/journal/ObjectDispatch.cc index b3db1008007..91dae20d761 100644 --- a/src/librbd/journal/ObjectDispatch.cc +++ b/src/librbd/journal/ObjectDispatch.cc @@ -3,11 +3,11 @@ #include "librbd/journal/ObjectDispatch.h" #include "common/dout.h" -#include "common/WorkQueue.h" #include "osdc/Striper.h" #include "librbd/ImageCtx.h" #include "librbd/Journal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/ObjectDispatchSpec.h" #include "librbd/io/ObjectDispatcherInterface.h" diff --git a/src/librbd/journal/OpenRequest.cc b/src/librbd/journal/OpenRequest.cc index e0cde38d0c3..eb01aa35a28 100644 --- a/src/librbd/journal/OpenRequest.cc +++ b/src/librbd/journal/OpenRequest.cc @@ -4,11 +4,11 @@ #include "librbd/journal/OpenRequest.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "journal/Journaler.h" #include "librbd/ImageCtx.h" #include "librbd/Journal.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/journal/Types.h" #include "librbd/journal/Utils.h" diff --git a/src/librbd/journal/PromoteRequest.cc b/src/librbd/journal/PromoteRequest.cc index 703a8a075bc..f7ae45a926c 100644 --- a/src/librbd/journal/PromoteRequest.cc +++ b/src/librbd/journal/PromoteRequest.cc @@ -4,12 +4,12 @@ #include "librbd/journal/PromoteRequest.h" #include "common/dout.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/journal/OpenRequest.h" #define dout_subsys ceph_subsys_rbd diff --git a/src/librbd/journal/RemoveRequest.cc b/src/librbd/journal/RemoveRequest.cc index 6bdabf40093..0f73a31bac0 100644 --- a/src/librbd/journal/RemoveRequest.cc +++ b/src/librbd/journal/RemoveRequest.cc @@ -4,7 +4,6 @@ #include "common/dout.h" #include "common/errno.h" #include "common/Timer.h" -#include "common/WorkQueue.h" #include "journal/Settings.h" #include "include/ceph_assert.h" #include "librbd/Utils.h" diff --git a/src/librbd/journal/Replay.cc b/src/librbd/journal/Replay.cc index 9efeeae0b11..e73b3709232 100644 --- a/src/librbd/journal/Replay.cc +++ b/src/librbd/journal/Replay.cc @@ -4,13 +4,13 @@ #include "librbd/journal/Replay.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ExclusiveLock.h" #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/internal.h" #include "librbd/Operations.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/ImageRequest.h" diff --git a/src/librbd/journal/StandardPolicy.cc b/src/librbd/journal/StandardPolicy.cc index 58631801703..7f124aeef7c 100644 --- a/src/librbd/journal/StandardPolicy.cc +++ b/src/librbd/journal/StandardPolicy.cc @@ -2,9 +2,9 @@ // vim: ts=8 sw=2 smarttab #include "librbd/journal/StandardPolicy.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Journal.h" +#include "librbd/asio/ContextWQ.h" #define dout_subsys ceph_subsys_rbd #undef dout_prefix diff --git a/src/librbd/journal/TypeTraits.h b/src/librbd/journal/TypeTraits.h index d6dde690d85..51b025f6d57 100644 --- a/src/librbd/journal/TypeTraits.h +++ b/src/librbd/journal/TypeTraits.h @@ -4,6 +4,8 @@ #ifndef CEPH_LIBRBD_JOURNAL_TYPE_TRAITS_H #define CEPH_LIBRBD_JOURNAL_TYPE_TRAITS_H +struct ContextWQ; + namespace journal { class Future; class Journaler; @@ -18,6 +20,7 @@ struct TypeTraits { typedef ::journal::Journaler Journaler; typedef ::journal::Future Future; typedef ::journal::ReplayEntry ReplayEntry; + typedef ::ContextWQ ContextWQ; }; } // namespace journal diff --git a/src/librbd/managed_lock/AcquireRequest.cc b/src/librbd/managed_lock/AcquireRequest.cc index 9b3e5e8776c..f1c2bbd50a2 100644 --- a/src/librbd/managed_lock/AcquireRequest.cc +++ b/src/librbd/managed_lock/AcquireRequest.cc @@ -7,10 +7,10 @@ #include "cls/lock/cls_lock_types.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "include/stringify.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/managed_lock/BreakRequest.h" #include "librbd/managed_lock/GetLockerRequest.h" #include "librbd/managed_lock/Utils.h" @@ -33,7 +33,7 @@ namespace managed_lock { template AcquireRequest* AcquireRequest::create(librados::IoCtx& ioctx, Watcher *watcher, - ContextWQ *work_queue, + asio::ContextWQ *work_queue, const string& oid, const string& cookie, bool exclusive, @@ -47,7 +47,8 @@ AcquireRequest* AcquireRequest::create(librados::IoCtx& ioctx, template AcquireRequest::AcquireRequest(librados::IoCtx& ioctx, Watcher *watcher, - ContextWQ *work_queue, const string& oid, + asio::ContextWQ *work_queue, + const string& oid, const string& cookie, bool exclusive, bool blacklist_on_break_lock, uint32_t blacklist_expire_seconds, @@ -58,7 +59,7 @@ AcquireRequest::AcquireRequest(librados::IoCtx& ioctx, Watcher *watcher, m_exclusive(exclusive), m_blacklist_on_break_lock(blacklist_on_break_lock), m_blacklist_expire_seconds(blacklist_expire_seconds), - m_on_finish(new C_AsyncCallback(work_queue, on_finish)) { + m_on_finish(new C_AsyncCallback(work_queue, on_finish)) { } template diff --git a/src/librbd/managed_lock/AcquireRequest.h b/src/librbd/managed_lock/AcquireRequest.h index 20af0693349..56e85bfb733 100644 --- a/src/librbd/managed_lock/AcquireRequest.h +++ b/src/librbd/managed_lock/AcquireRequest.h @@ -13,11 +13,11 @@ #include class Context; -class ContextWQ; namespace librbd { class Watcher; +namespace asio { struct ContextWQ; } namespace managed_lock { @@ -29,7 +29,8 @@ private: public: static AcquireRequest* create(librados::IoCtx& ioctx, Watcher *watcher, - ContextWQ *work_queue, const std::string& oid, + asio::ContextWQ *work_queue, + const std::string& oid, const std::string& cookie, bool exclusive, bool blacklist_on_break_lock, @@ -63,7 +64,7 @@ private: */ AcquireRequest(librados::IoCtx& ioctx, Watcher *watcher, - ContextWQ *work_queue, const std::string& oid, + asio::ContextWQ *work_queue, const std::string& oid, const std::string& cookie, bool exclusive, bool blacklist_on_break_lock, uint32_t blacklist_expire_seconds, Context *on_finish); @@ -71,7 +72,7 @@ private: librados::IoCtx& m_ioctx; Watcher *m_watcher; CephContext *m_cct; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; std::string m_oid; std::string m_cookie; bool m_exclusive; diff --git a/src/librbd/managed_lock/BreakRequest.cc b/src/librbd/managed_lock/BreakRequest.cc index 8caaea6ff96..d007380e3ae 100644 --- a/src/librbd/managed_lock/BreakRequest.cc +++ b/src/librbd/managed_lock/BreakRequest.cc @@ -4,12 +4,12 @@ #include "librbd/managed_lock/BreakRequest.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "include/stringify.h" #include "cls/lock/cls_lock_client.h" #include "cls/lock/cls_lock_types.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/managed_lock/GetLockerRequest.h" #define dout_subsys ceph_subsys_rbd @@ -47,7 +47,8 @@ struct C_BlacklistClient : public Context { } // anonymous namespace template -BreakRequest::BreakRequest(librados::IoCtx& ioctx, ContextWQ *work_queue, +BreakRequest::BreakRequest(librados::IoCtx& ioctx, + asio::ContextWQ *work_queue, const std::string& oid, const Locker &locker, bool exclusive, bool blacklist_locker, uint32_t blacklist_expire_seconds, diff --git a/src/librbd/managed_lock/BreakRequest.h b/src/librbd/managed_lock/BreakRequest.h index 4531a3c575e..50bc0b0cb85 100644 --- a/src/librbd/managed_lock/BreakRequest.h +++ b/src/librbd/managed_lock/BreakRequest.h @@ -21,13 +21,15 @@ namespace librbd { class ImageCtx; template class Journal; +namespace asio { struct ContextWQ; } namespace managed_lock { template class BreakRequest { public: - static BreakRequest* create(librados::IoCtx& ioctx, ContextWQ *work_queue, + static BreakRequest* create(librados::IoCtx& ioctx, + asio::ContextWQ *work_queue, const std::string& oid, const Locker &locker, bool exclusive, bool blacklist_locker, uint32_t blacklist_expire_seconds, @@ -65,7 +67,7 @@ private: librados::IoCtx &m_ioctx; CephContext *m_cct; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; std::string m_oid; Locker m_locker; bool m_exclusive; @@ -81,7 +83,7 @@ private: Locker m_refreshed_locker; - BreakRequest(librados::IoCtx& ioctx, ContextWQ *work_queue, + BreakRequest(librados::IoCtx& ioctx, asio::ContextWQ *work_queue, const std::string& oid, const Locker &locker, bool exclusive, bool blacklist_locker, uint32_t blacklist_expire_seconds, bool force_break_lock, diff --git a/src/librbd/managed_lock/ReleaseRequest.cc b/src/librbd/managed_lock/ReleaseRequest.cc index d74e1462522..598ececab05 100644 --- a/src/librbd/managed_lock/ReleaseRequest.cc +++ b/src/librbd/managed_lock/ReleaseRequest.cc @@ -2,14 +2,14 @@ // vim: ts=8 sw=2 smarttab #include "librbd/managed_lock/ReleaseRequest.h" -#include "librbd/Watcher.h" #include "cls/lock/cls_lock_client.h" #include "cls/lock/cls_lock_types.h" #include "common/dout.h" #include "common/errno.h" -#include "librbd/Utils.h" - #include "librbd/ImageCtx.h" +#include "librbd/Utils.h" +#include "librbd/Watcher.h" +#include "librbd/asio/ContextWQ.h" #define dout_subsys ceph_subsys_rbd #undef dout_prefix @@ -26,7 +26,7 @@ using util::create_rados_callback; template ReleaseRequest* ReleaseRequest::create(librados::IoCtx& ioctx, Watcher *watcher, - ContextWQ *work_queue, + asio::ContextWQ *work_queue, const string& oid, const string& cookie, Context *on_finish) { @@ -36,10 +36,11 @@ ReleaseRequest* ReleaseRequest::create(librados::IoCtx& ioctx, template ReleaseRequest::ReleaseRequest(librados::IoCtx& ioctx, Watcher *watcher, - ContextWQ *work_queue, const string& oid, - const string& cookie, Context *on_finish) + asio::ContextWQ *work_queue, + const string& oid, const string& cookie, + Context *on_finish) : m_ioctx(ioctx), m_watcher(watcher), m_oid(oid), m_cookie(cookie), - m_on_finish(new C_AsyncCallback(work_queue, on_finish)) { + m_on_finish(new C_AsyncCallback(work_queue, on_finish)) { } template diff --git a/src/librbd/managed_lock/ReleaseRequest.h b/src/librbd/managed_lock/ReleaseRequest.h index 89205136ecf..91d9222821c 100644 --- a/src/librbd/managed_lock/ReleaseRequest.h +++ b/src/librbd/managed_lock/ReleaseRequest.h @@ -14,6 +14,7 @@ class ContextWQ; namespace librbd { class Watcher; +namespace asio { struct ContextWQ; } namespace managed_lock { @@ -25,7 +26,7 @@ private: public: static ReleaseRequest* create(librados::IoCtx& ioctx, Watcher *watcher, - ContextWQ *work_queue, + asio::ContextWQ *work_queue, const std::string& oid, const std::string& cookie, Context *on_finish); @@ -49,7 +50,7 @@ private: */ ReleaseRequest(librados::IoCtx& ioctx, Watcher *watcher, - ContextWQ *work_queue, const std::string& oid, + asio::ContextWQ *work_queue, const std::string& oid, const std::string& cookie, Context *on_finish); librados::IoCtx& m_ioctx; diff --git a/src/librbd/mirror/DisableRequest.cc b/src/librbd/mirror/DisableRequest.cc index 05652d1c9dd..09378ce58b8 100644 --- a/src/librbd/mirror/DisableRequest.cc +++ b/src/librbd/mirror/DisableRequest.cc @@ -2,7 +2,6 @@ // vim: ts=8 sw=2 smarttab #include "librbd/mirror/DisableRequest.h" -#include "common/WorkQueue.h" #include "common/dout.h" #include "common/errno.h" #include "cls/journal/cls_journal_client.h" @@ -12,6 +11,7 @@ #include "librbd/Journal.h" #include "librbd/Operations.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/journal/PromoteRequest.h" #include "librbd/mirror/GetInfoRequest.h" #include "librbd/mirror/ImageRemoveRequest.h" diff --git a/src/librbd/mirror/EnableRequest.cc b/src/librbd/mirror/EnableRequest.cc index cd276fdfe85..d81dd9201a3 100644 --- a/src/librbd/mirror/EnableRequest.cc +++ b/src/librbd/mirror/EnableRequest.cc @@ -28,7 +28,8 @@ EnableRequest::EnableRequest(librados::IoCtx &io_ctx, I* image_ctx, cls::rbd::MirrorImageMode mode, const std::string &non_primary_global_image_id, - bool image_clean, ContextWQ *op_work_queue, + bool image_clean, + asio::ContextWQ *op_work_queue, Context *on_finish) : m_io_ctx(io_ctx), m_image_id(image_id), m_image_ctx(image_ctx), m_mode(mode), m_non_primary_global_image_id(non_primary_global_image_id), diff --git a/src/librbd/mirror/EnableRequest.h b/src/librbd/mirror/EnableRequest.h index 574dfe2bc03..64f410a8e06 100644 --- a/src/librbd/mirror/EnableRequest.h +++ b/src/librbd/mirror/EnableRequest.h @@ -14,9 +14,11 @@ #include class Context; -class ContextWQ; namespace librbd { + +namespace asio { struct ContextWQ; } + namespace mirror { template @@ -34,7 +36,7 @@ public: const std::string &image_id, cls::rbd::MirrorImageMode mode, const std::string &non_primary_global_image_id, - bool image_clean, ContextWQ *op_work_queue, + bool image_clean, asio::ContextWQ *op_work_queue, Context *on_finish) { return new EnableRequest(io_ctx, image_id, nullptr, mode, non_primary_global_image_id, image_clean, @@ -79,7 +81,8 @@ private: EnableRequest(librados::IoCtx &io_ctx, const std::string &image_id, ImageCtxT* image_ctx, cls::rbd::MirrorImageMode mode, const std::string &non_primary_global_image_id, - bool image_clean, ContextWQ *op_work_queue, Context *on_finish); + bool image_clean, asio::ContextWQ *op_work_queue, + Context *on_finish); librados::IoCtx &m_io_ctx; std::string m_image_id; @@ -87,7 +90,7 @@ private: cls::rbd::MirrorImageMode m_mode; std::string m_non_primary_global_image_id; bool m_image_clean; - ContextWQ *m_op_work_queue; + asio::ContextWQ *m_op_work_queue; Context *m_on_finish; CephContext *m_cct = nullptr; diff --git a/src/librbd/mirror/GetInfoRequest.cc b/src/librbd/mirror/GetInfoRequest.cc index 4ec529ba898..a7ee6456704 100644 --- a/src/librbd/mirror/GetInfoRequest.cc +++ b/src/librbd/mirror/GetInfoRequest.cc @@ -23,7 +23,7 @@ using librbd::util::create_rados_callback; template GetInfoRequest::GetInfoRequest(librados::IoCtx& io_ctx, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, const std::string &image_id, cls::rbd::MirrorImage *mirror_image, PromotionState *promotion_state, diff --git a/src/librbd/mirror/GetInfoRequest.h b/src/librbd/mirror/GetInfoRequest.h index def31a4264a..dcc6da7da97 100644 --- a/src/librbd/mirror/GetInfoRequest.h +++ b/src/librbd/mirror/GetInfoRequest.h @@ -12,7 +12,6 @@ #include "librbd/mirror/Types.h" #include -class ContextWQ; struct Context; namespace cls { namespace rbd { struct MirrorImage; } } @@ -20,6 +19,7 @@ namespace cls { namespace rbd { struct MirrorImage; } } namespace librbd { struct ImageCtx; +namespace asio { struct ContextWQ; } namespace mirror { @@ -27,7 +27,7 @@ template class GetInfoRequest { public: static GetInfoRequest *create(librados::IoCtx &io_ctx, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, const std::string &image_id, cls::rbd::MirrorImage *mirror_image, PromotionState *promotion_state, @@ -45,7 +45,7 @@ public: primary_mirror_uuid, on_finish); } - GetInfoRequest(librados::IoCtx& io_ctx, ContextWQ *op_work_queue, + GetInfoRequest(librados::IoCtx& io_ctx, asio::ContextWQ *op_work_queue, const std::string &image_id, cls::rbd::MirrorImage *mirror_image, PromotionState *promotion_state, @@ -83,7 +83,7 @@ private: ImageCtxT *m_image_ctx = nullptr; librados::IoCtx &m_io_ctx; - ContextWQ *m_op_work_queue; + asio::ContextWQ *m_op_work_queue; std::string m_image_id; cls::rbd::MirrorImage *m_mirror_image; PromotionState *m_promotion_state; diff --git a/src/librbd/mirror/snapshot/PromoteRequest.cc b/src/librbd/mirror/snapshot/PromoteRequest.cc index f9cf4b5b973..a9e2fb95ccf 100644 --- a/src/librbd/mirror/snapshot/PromoteRequest.cc +++ b/src/librbd/mirror/snapshot/PromoteRequest.cc @@ -11,6 +11,7 @@ #include "librbd/ImageState.h" #include "librbd/Operations.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/image/ListWatchersRequest.h" #include "librbd/mirror/snapshot/CreateNonPrimaryRequest.h" #include "librbd/mirror/snapshot/CreatePrimaryRequest.h" diff --git a/src/librbd/mirror/snapshot/PromoteRequest.h b/src/librbd/mirror/snapshot/PromoteRequest.h index f24138ff338..9fdd5ed71a5 100644 --- a/src/librbd/mirror/snapshot/PromoteRequest.h +++ b/src/librbd/mirror/snapshot/PromoteRequest.h @@ -6,6 +6,7 @@ #include "include/buffer.h" #include "include/rbd/librbd.hpp" +#include "common/ceph_mutex.h" #include "librbd/internal.h" #include diff --git a/src/librbd/operation/DisableFeaturesRequest.cc b/src/librbd/operation/DisableFeaturesRequest.cc index d93da2acd45..dafbf422c8d 100644 --- a/src/librbd/operation/DisableFeaturesRequest.cc +++ b/src/librbd/operation/DisableFeaturesRequest.cc @@ -13,6 +13,7 @@ #include "librbd/image/SetFlagsRequest.h" #include "librbd/io/ImageDispatcherInterface.h" #include "librbd/journal/RemoveRequest.h" +#include "librbd/journal/TypeTraits.h" #include "librbd/mirror/DisableRequest.h" #include "librbd/object_map/RemoveRequest.h" @@ -401,9 +402,12 @@ void DisableFeaturesRequest::send_remove_journal() { DisableFeaturesRequest, &DisableFeaturesRequest::handle_remove_journal>(this); + typename journal::TypeTraits::ContextWQ* context_wq; + Journal::get_work_queue(cct, &context_wq); + journal::RemoveRequest *req = journal::RemoveRequest::create( image_ctx.md_ctx, image_ctx.id, librbd::Journal<>::IMAGE_CLIENT_ID, - image_ctx.op_work_queue, ctx); + context_wq, ctx); req->send(); } diff --git a/src/librbd/operation/EnableFeaturesRequest.cc b/src/librbd/operation/EnableFeaturesRequest.cc index ee180107102..8e3dad94b67 100644 --- a/src/librbd/operation/EnableFeaturesRequest.cc +++ b/src/librbd/operation/EnableFeaturesRequest.cc @@ -12,6 +12,7 @@ #include "librbd/image/SetFlagsRequest.h" #include "librbd/io/ImageDispatcherInterface.h" #include "librbd/journal/CreateRequest.h" +#include "librbd/journal/TypeTraits.h" #include "librbd/mirror/EnableRequest.h" #include "librbd/object_map/CreateRequest.h" @@ -235,13 +236,16 @@ void EnableFeaturesRequest::send_create_journal() { EnableFeaturesRequest, &EnableFeaturesRequest::handle_create_journal>(this); + typename journal::TypeTraits::ContextWQ* context_wq; + Journal::get_work_queue(cct, &context_wq); + journal::CreateRequest *req = journal::CreateRequest::create( image_ctx.md_ctx, image_ctx.id, image_ctx.config.template get_val("rbd_journal_order"), image_ctx.config.template get_val("rbd_journal_splay_width"), image_ctx.config.template get_val("rbd_journal_pool"), cls::journal::Tag::TAG_CLASS_NEW, tag_data, - librbd::Journal<>::IMAGE_CLIENT_ID, image_ctx.op_work_queue, ctx); + librbd::Journal<>::IMAGE_CLIENT_ID, context_wq, ctx); req->send(); } diff --git a/src/librbd/operation/Request.cc b/src/librbd/operation/Request.cc index 631d8dd5b20..269c8a4f999 100644 --- a/src/librbd/operation/Request.cc +++ b/src/librbd/operation/Request.cc @@ -4,8 +4,8 @@ #include "librbd/operation/Request.h" #include "common/dout.h" #include "common/errno.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" +#include "librbd/asio/ContextWQ.h" #define dout_subsys ceph_subsys_rbd #undef dout_prefix diff --git a/src/librbd/trash/RemoveRequest.cc b/src/librbd/trash/RemoveRequest.cc index 77cbfd81b41..bff30df6cec 100644 --- a/src/librbd/trash/RemoveRequest.cc +++ b/src/librbd/trash/RemoveRequest.cc @@ -2,7 +2,6 @@ // vim: ts=8 sw=2 smarttab #include "librbd/trash/RemoveRequest.h" -#include "common/WorkQueue.h" #include "common/dout.h" #include "common/errno.h" #include "cls/rbd/cls_rbd_client.h" @@ -10,6 +9,7 @@ #include "librbd/ImageCtx.h" #include "librbd/ImageState.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/image/RemoveRequest.h" #define dout_subsys ceph_subsys_rbd diff --git a/src/librbd/trash/RemoveRequest.h b/src/librbd/trash/RemoveRequest.h index f9ac0fdb945..86082ca4936 100644 --- a/src/librbd/trash/RemoveRequest.h +++ b/src/librbd/trash/RemoveRequest.h @@ -11,13 +11,12 @@ #include class Context; -class ContextWQ; namespace librbd { -class ProgressContext; - struct ImageCtx; +class ProgressContext; +namespace asio { struct ContextWQ; } namespace trash { @@ -26,14 +25,14 @@ class RemoveRequest { public: static RemoveRequest* create(librados::IoCtx &io_ctx, const std::string &image_id, - ContextWQ *op_work_queue, bool force, + asio::ContextWQ *op_work_queue, bool force, ProgressContext &prog_ctx, Context *on_finish) { return new RemoveRequest(io_ctx, image_id, op_work_queue, force, prog_ctx, on_finish); } static RemoveRequest* create(librados::IoCtx &io_ctx, ImageCtxT *image_ctx, - ContextWQ *op_work_queue, bool force, + asio::ContextWQ *op_work_queue, bool force, ProgressContext &prog_ctx, Context *on_finish) { return new RemoveRequest(io_ctx, image_ctx, op_work_queue, force, prog_ctx, on_finish); @@ -41,16 +40,16 @@ public: RemoveRequest(librados::IoCtx &io_ctx, const std::string &image_id, - ContextWQ *op_work_queue, bool force, ProgressContext &prog_ctx, - Context *on_finish) + asio::ContextWQ *op_work_queue, bool force, + ProgressContext &prog_ctx, Context *on_finish) : m_io_ctx(io_ctx), m_image_id(image_id), m_op_work_queue(op_work_queue), m_force(force), m_prog_ctx(prog_ctx), m_on_finish(on_finish), m_cct(reinterpret_cast(io_ctx.cct())) { } RemoveRequest(librados::IoCtx &io_ctx, ImageCtxT *image_ctx, - ContextWQ *op_work_queue, bool force, ProgressContext &prog_ctx, - Context *on_finish) + asio::ContextWQ *op_work_queue, bool force, + ProgressContext &prog_ctx, Context *on_finish) : m_io_ctx(io_ctx), m_image_ctx(image_ctx), m_image_id(m_image_ctx->id), m_op_work_queue(op_work_queue), m_force(force), m_prog_ctx(prog_ctx), m_on_finish(on_finish), @@ -83,7 +82,7 @@ private: librados::IoCtx &m_io_ctx; ImageCtxT *m_image_ctx = nullptr; std::string m_image_id; - ContextWQ *m_op_work_queue; + asio::ContextWQ *m_op_work_queue; bool m_force; ProgressContext &m_prog_ctx; Context *m_on_finish; diff --git a/src/librbd/watcher/Notifier.cc b/src/librbd/watcher/Notifier.cc index 2715f259262..9a413440297 100644 --- a/src/librbd/watcher/Notifier.cc +++ b/src/librbd/watcher/Notifier.cc @@ -2,9 +2,9 @@ // vim: ts=8 sw=2 smarttab #include "librbd/watcher/Notifier.h" -#include "common/WorkQueue.h" #include "librbd/ImageCtx.h" #include "librbd/Utils.h" +#include "librbd/asio/ContextWQ.h" #include "librbd/watcher/Types.h" #define dout_subsys ceph_subsys_rbd @@ -36,7 +36,8 @@ void Notifier::C_AioNotify::finish(int r) { notifier->handle_notify(r, on_finish); } -Notifier::Notifier(ContextWQ *work_queue, IoCtx &ioctx, const std::string &oid) +Notifier::Notifier(asio::ContextWQ *work_queue, IoCtx &ioctx, + const std::string &oid) : m_work_queue(work_queue), m_ioctx(ioctx), m_oid(oid), m_aio_notify_lock(ceph::make_mutex(util::unique_lock_name( "librbd::object_watcher::Notifier::m_aio_notify_lock", this))) { diff --git a/src/librbd/watcher/Notifier.h b/src/librbd/watcher/Notifier.h index 5bfb1039903..79546b50527 100644 --- a/src/librbd/watcher/Notifier.h +++ b/src/librbd/watcher/Notifier.h @@ -9,11 +9,12 @@ #include "include/Context.h" #include "include/rados/librados.hpp" #include "common/ceph_mutex.h" -#include "common/WorkQueue.h" #include namespace librbd { +namespace asio { struct ContextWQ; } + namespace watcher { struct NotifyResponse; @@ -22,7 +23,7 @@ class Notifier { public: static const uint64_t NOTIFY_TIMEOUT; - Notifier(ContextWQ *work_queue, librados::IoCtx &ioctx, + Notifier(asio::ContextWQ *work_queue, librados::IoCtx &ioctx, const std::string &oid); ~Notifier(); @@ -44,7 +45,7 @@ private: void finish(int r) override; }; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; librados::IoCtx &m_ioctx; CephContext *m_cct; std::string m_oid; diff --git a/src/test/librbd/deep_copy/test_mock_ImageCopyRequest.cc b/src/test/librbd/deep_copy/test_mock_ImageCopyRequest.cc index a7d68a624e2..64a4173abd8 100644 --- a/src/test/librbd/deep_copy/test_mock_ImageCopyRequest.cc +++ b/src/test/librbd/deep_copy/test_mock_ImageCopyRequest.cc @@ -174,7 +174,7 @@ public: librbd::ImageCtx *m_src_image_ctx; librbd::ImageCtx *m_dst_image_ctx; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; librbd::SnapSeqs m_snap_seqs; SnapMap m_snap_map; diff --git a/src/test/librbd/deep_copy/test_mock_MetadataCopyRequest.cc b/src/test/librbd/deep_copy/test_mock_MetadataCopyRequest.cc index 8d6fcd3ad8d..a44cd4cda3e 100644 --- a/src/test/librbd/deep_copy/test_mock_MetadataCopyRequest.cc +++ b/src/test/librbd/deep_copy/test_mock_MetadataCopyRequest.cc @@ -79,7 +79,7 @@ public: librbd::ImageCtx *m_src_image_ctx; librbd::ImageCtx *m_dst_image_ctx; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; void SetUp() override { TestMockFixture::SetUp(); diff --git a/src/test/librbd/deep_copy/test_mock_ObjectCopyRequest.cc b/src/test/librbd/deep_copy/test_mock_ObjectCopyRequest.cc index 7d61bb84716..acd1a12693b 100644 --- a/src/test/librbd/deep_copy/test_mock_ObjectCopyRequest.cc +++ b/src/test/librbd/deep_copy/test_mock_ObjectCopyRequest.cc @@ -112,7 +112,7 @@ public: librbd::ImageCtx *m_src_image_ctx; librbd::ImageCtx *m_dst_image_ctx; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; SnapMap m_snap_map; std::vector m_src_snap_ids; diff --git a/src/test/librbd/deep_copy/test_mock_SetHeadRequest.cc b/src/test/librbd/deep_copy/test_mock_SetHeadRequest.cc index 3eceb4daff2..f044f55e0c7 100644 --- a/src/test/librbd/deep_copy/test_mock_SetHeadRequest.cc +++ b/src/test/librbd/deep_copy/test_mock_SetHeadRequest.cc @@ -97,7 +97,7 @@ public: typedef image::DetachParentRequest MockDetachParentRequest; librbd::ImageCtx *m_image_ctx; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; void SetUp() override { TestMockFixture::SetUp(); diff --git a/src/test/librbd/deep_copy/test_mock_SnapshotCopyRequest.cc b/src/test/librbd/deep_copy/test_mock_SnapshotCopyRequest.cc index e17782c189f..308b552ec0f 100644 --- a/src/test/librbd/deep_copy/test_mock_SnapshotCopyRequest.cc +++ b/src/test/librbd/deep_copy/test_mock_SnapshotCopyRequest.cc @@ -106,7 +106,7 @@ public: librbd::ImageCtx *m_src_image_ctx; librbd::ImageCtx *m_dst_image_ctx; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; librbd::SnapSeqs m_snap_seqs; diff --git a/src/test/librbd/deep_copy/test_mock_SnapshotCreateRequest.cc b/src/test/librbd/deep_copy/test_mock_SnapshotCreateRequest.cc index 571820edad8..204328177cf 100644 --- a/src/test/librbd/deep_copy/test_mock_SnapshotCreateRequest.cc +++ b/src/test/librbd/deep_copy/test_mock_SnapshotCreateRequest.cc @@ -76,7 +76,7 @@ public: typedef SnapshotCreateRequest MockSnapshotCreateRequest; librbd::ImageCtx *m_image_ctx; - ContextWQ *m_work_queue; + asio::ContextWQ *m_work_queue; void SetUp() override { TestMockFixture::SetUp(); diff --git a/src/test/librbd/image/test_mock_CloneRequest.cc b/src/test/librbd/image/test_mock_CloneRequest.cc index 4c118ec3544..1ba69bed6e8 100644 --- a/src/test/librbd/image/test_mock_CloneRequest.cc +++ b/src/test/librbd/image/test_mock_CloneRequest.cc @@ -137,7 +137,7 @@ struct CreateRequest { cls::rbd::MirrorImageMode mode, const std::string &non_primary_global_image_id, const std::string &primary_mirror_uuid, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, Context *on_finish) { ceph_assert(s_instance != nullptr); s_instance->on_finish = on_finish; @@ -162,7 +162,7 @@ struct RemoveRequest { const std::string &image_id, bool force, bool from_trash_remove, ProgressContext &prog_ctx, - ContextWQ *op_work_queue, + asio::ContextWQ *op_work_queue, Context *on_finish) { ceph_assert(s_instance != nullptr); s_instance->on_finish = on_finish; diff --git a/src/test/librbd/image/test_mock_RemoveRequest.cc b/src/test/librbd/image/test_mock_RemoveRequest.cc index 05f4a546fe3..d6359ff3274 100644 --- a/src/test/librbd/image/test_mock_RemoveRequest.cc +++ b/src/test/librbd/image/test_mock_RemoveRequest.cc @@ -14,6 +14,7 @@ #include "librbd/image/PreRemoveRequest.h" #include "librbd/image/RemoveRequest.h" #include "librbd/journal/RemoveRequest.h" +#include "librbd/journal/TypeTraits.h" #include "librbd/mirror/DisableRequest.h" #include "librbd/operation/TrimRequest.h" #include "gmock/gmock.h" @@ -44,6 +45,12 @@ MockTestImageCtx* MockTestImageCtx::s_instance = nullptr; } // anonymous namespace +template<> +struct Journal { + static void get_work_queue(CephContext*, MockContextWQ**) { + } +}; + namespace image { template <> @@ -97,6 +104,15 @@ PreRemoveRequest *PreRemoveRequest::s_instan } // namespace image +namespace journal { + +template <> +struct TypeTraits { + typedef librbd::MockContextWQ ContextWQ; +}; + +} // namespace journal + namespace operation { template <> diff --git a/src/test/librbd/journal/test_mock_OpenRequest.cc b/src/test/librbd/journal/test_mock_OpenRequest.cc index bb07c77afad..0d86f20e966 100644 --- a/src/test/librbd/journal/test_mock_OpenRequest.cc +++ b/src/test/librbd/journal/test_mock_OpenRequest.cc @@ -53,7 +53,7 @@ public: void expect_init_journaler(::journal::MockJournaler &mock_journaler, int r) { EXPECT_CALL(mock_journaler, init(_)) - .WillOnce(CompleteContext(r, static_cast(NULL))); + .WillOnce(CompleteContext(r, static_cast(NULL))); } void expect_get_journaler_cached_client(::journal::MockJournaler &mock_journaler, diff --git a/src/test/librbd/journal/test_mock_PromoteRequest.cc b/src/test/librbd/journal/test_mock_PromoteRequest.cc index 345bcdcb1a7..c4e7ed9dc32 100644 --- a/src/test/librbd/journal/test_mock_PromoteRequest.cc +++ b/src/test/librbd/journal/test_mock_PromoteRequest.cc @@ -96,7 +96,7 @@ public: EXPECT_CALL(mock_journaler, allocate_tag(456, ContentsEqual(tag_data_bl), _, _)) - .WillOnce(WithArg<3>(CompleteContext(r, static_cast(NULL)))); + .WillOnce(WithArg<3>(CompleteContext(r, static_cast(NULL)))); } void expect_append_journaler(::journal::MockJournaler &mock_journaler) { @@ -106,7 +106,7 @@ public: void expect_future_flush(::journal::MockFuture &mock_future, int r) { EXPECT_CALL(mock_future, flush(_)) - .WillOnce(CompleteContext(r, static_cast(NULL))); + .WillOnce(CompleteContext(r, static_cast(NULL))); } void expect_future_committed(::journal::MockJournaler &mock_journaler) { @@ -116,7 +116,7 @@ public: void expect_flush_commit_position(::journal::MockJournaler &mock_journaler, int r) { EXPECT_CALL(mock_journaler, flush_commit_position(_)) - .WillOnce(CompleteContext(r, static_cast(NULL))); + .WillOnce(CompleteContext(r, static_cast(NULL))); } void expect_start_append(::journal::MockJournaler &mock_journaler) { @@ -125,13 +125,13 @@ public: void expect_stop_append(::journal::MockJournaler &mock_journaler, int r) { EXPECT_CALL(mock_journaler, stop_append(_)) - .WillOnce(CompleteContext(r, static_cast(NULL))); + .WillOnce(CompleteContext(r, static_cast(NULL))); } void expect_shut_down_journaler(::journal::MockJournaler &mock_journaler, int r) { EXPECT_CALL(mock_journaler, shut_down(_)) - .WillOnce(CompleteContext(r, static_cast(NULL))); + .WillOnce(CompleteContext(r, static_cast(NULL))); } }; diff --git a/src/test/librbd/journal/test_mock_ResetRequest.cc b/src/test/librbd/journal/test_mock_ResetRequest.cc index 57c0583eb11..2c722558cd5 100644 --- a/src/test/librbd/journal/test_mock_ResetRequest.cc +++ b/src/test/librbd/journal/test_mock_ResetRequest.cc @@ -154,11 +154,14 @@ TEST_F(TestMockJournalResetRequest, Success) { MockCreateRequest mock_create_request; expect_create(mock_create_request, 0); + ContextWQ* context_wq; + Journal<>::get_work_queue(ictx->cct, &context_wq); + C_SaferCond ctx; auto req = MockResetRequest::create(m_ioctx, "image id", Journal<>::IMAGE_CLIENT_ID, Journal<>::LOCAL_MIRROR_UUID, - ictx->op_work_queue , &ctx); + context_wq, &ctx); req->send(); ASSERT_EQ(0, ctx.wait()); } @@ -175,11 +178,14 @@ TEST_F(TestMockJournalResetRequest, InitError) { expect_init_journaler(mock_journaler, -EINVAL); expect_shut_down_journaler(mock_journaler, 0); + ContextWQ* context_wq; + Journal<>::get_work_queue(ictx->cct, &context_wq); + C_SaferCond ctx; auto req = MockResetRequest::create(m_ioctx, "image id", Journal<>::IMAGE_CLIENT_ID, Journal<>::LOCAL_MIRROR_UUID, - ictx->op_work_queue , &ctx); + context_wq, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -197,11 +203,14 @@ TEST_F(TestMockJournalResetRequest, ShutDownError) { expect_get_metadata(mock_journaler); expect_shut_down_journaler(mock_journaler, -EINVAL); + ContextWQ* context_wq; + Journal<>::get_work_queue(ictx->cct, &context_wq); + C_SaferCond ctx; auto req = MockResetRequest::create(m_ioctx, "image id", Journal<>::IMAGE_CLIENT_ID, Journal<>::LOCAL_MIRROR_UUID, - ictx->op_work_queue , &ctx); + context_wq, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -222,11 +231,14 @@ TEST_F(TestMockJournalResetRequest, RemoveError) { MockRemoveRequest mock_remove_request; expect_remove(mock_remove_request, -EINVAL); + ContextWQ* context_wq; + Journal<>::get_work_queue(ictx->cct, &context_wq); + C_SaferCond ctx; auto req = MockResetRequest::create(m_ioctx, "image id", Journal<>::IMAGE_CLIENT_ID, Journal<>::LOCAL_MIRROR_UUID, - ictx->op_work_queue , &ctx); + context_wq, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -250,11 +262,14 @@ TEST_F(TestMockJournalResetRequest, CreateError) { MockCreateRequest mock_create_request; expect_create(mock_create_request, -EINVAL); + ContextWQ* context_wq; + Journal<>::get_work_queue(ictx->cct, &context_wq); + C_SaferCond ctx; auto req = MockResetRequest::create(m_ioctx, "image id", Journal<>::IMAGE_CLIENT_ID, Journal<>::LOCAL_MIRROR_UUID, - ictx->op_work_queue , &ctx); + context_wq, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } diff --git a/src/test/librbd/managed_lock/test_mock_AcquireRequest.cc b/src/test/librbd/managed_lock/test_mock_AcquireRequest.cc index 5218fa96d34..279a8182631 100644 --- a/src/test/librbd/managed_lock/test_mock_AcquireRequest.cc +++ b/src/test/librbd/managed_lock/test_mock_AcquireRequest.cc @@ -28,7 +28,8 @@ template<> struct BreakRequest { Context *on_finish = nullptr; static BreakRequest *s_instance; - static BreakRequest* create(librados::IoCtx& ioctx, ContextWQ *work_queue, + static BreakRequest* create(librados::IoCtx& ioctx, + asio::ContextWQ *work_queue, const std::string& oid, const Locker &locker, bool exclusive, bool blacklist_locker, uint32_t blacklist_expire_seconds, diff --git a/src/test/librbd/operation/test_mock_DisableFeaturesRequest.cc b/src/test/librbd/operation/test_mock_DisableFeaturesRequest.cc index 85298eeb3d0..171ac41a71a 100644 --- a/src/test/librbd/operation/test_mock_DisableFeaturesRequest.cc +++ b/src/test/librbd/operation/test_mock_DisableFeaturesRequest.cc @@ -7,12 +7,14 @@ #include "test/librbd/mock/MockJournalPolicy.h" #include "cls/rbd/cls_rbd_client.h" #include "librbd/internal.h" +#include "librbd/Journal.h" #include "librbd/image/SetFlagsRequest.h" #include "librbd/io/AioCompletion.h" #include "librbd/mirror/DisableRequest.h" #include "librbd/journal/RemoveRequest.h" #include "librbd/journal/StandardPolicy.h" #include "librbd/journal/Types.h" +#include "librbd/journal/TypeTraits.h" #include "librbd/object_map/RemoveRequest.h" #include "librbd/operation/DisableFeaturesRequest.h" #include "gmock/gmock.h" @@ -29,6 +31,12 @@ struct MockOperationImageCtx : public MockImageCtx { } // anonymous namespace +template<> +struct Journal { + static void get_work_queue(CephContext*, MockContextWQ**) { + } +}; + namespace image { template<> @@ -88,6 +96,11 @@ public: } }; +template <> +struct TypeTraits { + typedef librbd::MockContextWQ ContextWQ; +}; + } // namespace journal namespace mirror { diff --git a/src/test/librbd/operation/test_mock_EnableFeaturesRequest.cc b/src/test/librbd/operation/test_mock_EnableFeaturesRequest.cc index 1e99489aaaf..b7bf7d1781d 100644 --- a/src/test/librbd/operation/test_mock_EnableFeaturesRequest.cc +++ b/src/test/librbd/operation/test_mock_EnableFeaturesRequest.cc @@ -7,11 +7,13 @@ #include "cls/rbd/cls_rbd_client.h" #include "librbd/Operations.h" #include "librbd/internal.h" +#include "librbd/Journal.h" #include "librbd/image/SetFlagsRequest.h" #include "librbd/io/AioCompletion.h" #include "librbd/mirror/EnableRequest.h" #include "librbd/journal/CreateRequest.h" #include "librbd/journal/Types.h" +#include "librbd/journal/TypeTraits.h" #include "librbd/object_map/CreateRequest.h" #include "librbd/operation/EnableFeaturesRequest.h" #include "gmock/gmock.h" @@ -29,6 +31,12 @@ struct MockOperationImageCtx : public MockImageCtx { } // anonymous namespace +template<> +struct Journal { + static void get_work_queue(CephContext*, MockContextWQ**) { + } +}; + namespace image { template<> @@ -84,6 +92,11 @@ public: CreateRequest *CreateRequest::s_instance = nullptr; +template <> +struct TypeTraits { + typedef librbd::MockContextWQ ContextWQ; +}; + } // namespace journal namespace mirror { diff --git a/src/test/librbd/test_mock_DeepCopyRequest.cc b/src/test/librbd/test_mock_DeepCopyRequest.cc index c6ec8d6ace8..93f37909fee 100644 --- a/src/test/librbd/test_mock_DeepCopyRequest.cc +++ b/src/test/librbd/test_mock_DeepCopyRequest.cc @@ -100,7 +100,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, ContextWQ *work_queue, + bool flatten, + librbd::asio::ContextWQ *work_queue, SnapSeqs *snap_seqs, Context *on_finish) { ceph_assert(s_instance != nullptr); s_instance->on_finish = on_finish; @@ -149,7 +150,7 @@ public: librbd::ImageCtx *m_src_image_ctx; librbd::ImageCtx *m_dst_image_ctx; - ContextWQ *m_work_queue; + librbd::asio::ContextWQ *m_work_queue; void SetUp() override { TestMockFixture::SetUp(); diff --git a/src/test/librbd/test_mock_ExclusiveLock.cc b/src/test/librbd/test_mock_ExclusiveLock.cc index 19b28722cca..34ae8c5a6ef 100644 --- a/src/test/librbd/test_mock_ExclusiveLock.cc +++ b/src/test/librbd/test_mock_ExclusiveLock.cc @@ -22,7 +22,7 @@ namespace librbd { namespace { struct MockExclusiveLockImageCtx : public MockImageCtx { - ContextWQ *op_work_queue; + asio::ContextWQ *op_work_queue; MockExclusiveLockImageCtx(ImageCtx &image_ctx) : MockImageCtx(image_ctx) { op_work_queue = image_ctx.op_work_queue; @@ -40,7 +40,7 @@ struct Traits { template <> struct ManagedLock { - ManagedLock(librados::IoCtx& ioctx, ContextWQ *work_queue, + ManagedLock(librados::IoCtx& ioctx, asio::ContextWQ *work_queue, const std::string& oid, librbd::MockImageWatcher *watcher, managed_lock::Mode mode, bool blacklist_on_break_lock, uint32_t blacklist_expire_seconds) @@ -341,7 +341,7 @@ public: void expect_shut_down(MockManagedLock *managed_lock) { EXPECT_CALL(*managed_lock, shut_down(_)) - .WillOnce(CompleteContext(0, static_cast(nullptr))); + .WillOnce(CompleteContext(0, static_cast(nullptr))); } void expect_accept_blocked_request( diff --git a/src/test/librbd/test_mock_Journal.cc b/src/test/librbd/test_mock_Journal.cc index bab068be063..b57c66e8907 100644 --- a/src/test/librbd/test_mock_Journal.cc +++ b/src/test/librbd/test_mock_Journal.cc @@ -9,6 +9,7 @@ #include "test/librbd/mock/io/MockObjectDispatch.h" #include "common/Cond.h" #include "common/ceph_mutex.h" +#include "common/WorkQueue.h" #include "cls/journal/cls_journal_types.h" #include "journal/Journaler.h" #include "librbd/Journal.h" @@ -297,7 +298,7 @@ public: void expect_shut_down_journaler(::journal::MockJournaler &mock_journaler) { EXPECT_CALL(mock_journaler, remove_listener(_)); EXPECT_CALL(mock_journaler, shut_down(_)) - .WillOnce(CompleteContext(0, static_cast(NULL))); + .WillOnce(CompleteContext(0, static_cast(NULL))); } void expect_register_dispatch(MockImageCtx& mock_image_ctx, @@ -353,7 +354,7 @@ public: void expect_stop_replay(::journal::MockJournaler &mock_journaler) { EXPECT_CALL(mock_journaler, stop_replay(_)) - .WillOnce(CompleteContext(0, static_cast(NULL))); + .WillOnce(CompleteContext(0, static_cast(NULL))); } void expect_shut_down_replay(MockJournalImageCtx &mock_image_ctx, @@ -389,7 +390,7 @@ public: EXPECT_CALL(mock_journal_replay, decode(_, _)) .WillOnce(Return(0)); EXPECT_CALL(mock_journal_replay, process(_, _, _)) - .WillOnce(DoAll(WithArg<1>(CompleteContext(0, static_cast(NULL))), + .WillOnce(DoAll(WithArg<1>(CompleteContext(0, static_cast(NULL))), WithArg<2>(Invoke(this, &TestMockJournal::save_commit_context)))); } @@ -408,7 +409,7 @@ public: void expect_stop_append(::journal::MockJournaler &mock_journaler, int r) { EXPECT_CALL(mock_journaler, stop_append(_)) - .WillOnce(CompleteContext(r, static_cast(NULL))); + .WillOnce(CompleteContext(r, static_cast(NULL))); } void expect_committed(::journal::MockJournaler &mock_journaler, @@ -438,7 +439,7 @@ public: void expect_flush_commit_position(::journal::MockJournaler &mock_journaler) { EXPECT_CALL(mock_journaler, flush_commit_position(_)) - .WillOnce(CompleteContext(0, static_cast(NULL))); + .WillOnce(CompleteContext(0, static_cast(NULL))); } int when_open(MockJournal *mock_journal) { diff --git a/src/test/librbd/test_mock_ManagedLock.cc b/src/test/librbd/test_mock_ManagedLock.cc index 921d9f50442..bfad7422405 100644 --- a/src/test/librbd/test_mock_ManagedLock.cc +++ b/src/test/librbd/test_mock_ManagedLock.cc @@ -27,7 +27,7 @@ struct Traits { } struct MockMockManagedLock : public ManagedLock { - MockMockManagedLock(librados::IoCtx& ioctx, ContextWQ *work_queue, + MockMockManagedLock(librados::IoCtx& ioctx, asio::ContextWQ *work_queue, const std::string& oid, librbd::MockImageWatcher *watcher, managed_lock::Mode mode, bool blacklist_on_break_lock, uint32_t blacklist_expire_seconds) @@ -50,7 +50,7 @@ struct BaseRequest { Context *on_finish = nullptr; static T* create(librados::IoCtx& ioctx, MockImageWatcher *watcher, - ContextWQ *work_queue, const std::string& oid, + asio::ContextWQ *work_queue, const std::string& oid, const std::string& cookie, Context *on_finish) { ceph_assert(!s_requests.empty()); T* req = s_requests.front(); @@ -71,7 +71,8 @@ template <> struct AcquireRequest : public BaseRequest > { static AcquireRequest* create(librados::IoCtx& ioctx, MockImageWatcher *watcher, - ContextWQ *work_queue, const std::string& oid, + asio::ContextWQ *work_queue, + const std::string& oid, const std::string& cookie, bool exclusive, bool blacklist_on_break_lock, uint32_t blacklist_expire_seconds, @@ -97,7 +98,8 @@ struct ReacquireRequest : public BaseRequest struct ReleaseRequest : public BaseRequest > { static ReleaseRequest* create(librados::IoCtx& ioctx, MockImageWatcher *watcher, - ContextWQ *work_queue, const std::string& oid, + asio::ContextWQ *work_queue, + const std::string& oid, const std::string& cookie, Context *on_finish) { return BaseRequest::create(ioctx, watcher, work_queue, oid, cookie, on_finish); @@ -120,7 +122,8 @@ struct GetLockerRequest { template <> struct BreakRequest { - static BreakRequest* create(librados::IoCtx& ioctx, ContextWQ *work_queue, + static BreakRequest* create(librados::IoCtx& ioctx, + asio::ContextWQ *work_queue, const std::string& oid, const Locker &locker, bool exclusive, bool blacklist_locker, uint32_t blacklist_expire_seconds, @@ -182,21 +185,21 @@ public: } void expect_acquire_lock(MockImageWatcher &watcher, - ContextWQ *work_queue, + asio::ContextWQ *work_queue, MockAcquireRequest &acquire_request, int r) { expect_get_watch_handle(watcher); EXPECT_CALL(acquire_request, send()) .WillOnce(QueueRequest(&acquire_request, r, work_queue)); } - void expect_release_lock(ContextWQ *work_queue, + void expect_release_lock(asio::ContextWQ *work_queue, MockReleaseRequest &release_request, int r) { EXPECT_CALL(release_request, send()) .WillOnce(QueueRequest(&release_request, r, work_queue)); } void expect_reacquire_lock(MockImageWatcher& watcher, - ContextWQ *work_queue, + asio::ContextWQ *work_queue, MockReacquireRequest &mock_reacquire_request, int r) { EXPECT_CALL(mock_reacquire_request, send()) @@ -205,7 +208,7 @@ public: void expect_flush_notifies(MockImageWatcher *mock_watcher) { EXPECT_CALL(*mock_watcher, flush(_)) - .WillOnce(CompleteContext(0, (ContextWQ *)nullptr)); + .WillOnce(CompleteContext(0, (asio::ContextWQ *)nullptr)); } void expect_post_reacquired_lock_handler(MockImageWatcher& watcher, diff --git a/src/test/librbd/test_mock_Watcher.cc b/src/test/librbd/test_mock_Watcher.cc index b36ec3e31f2..23a0e2aa9e4 100644 --- a/src/test/librbd/test_mock_Watcher.cc +++ b/src/test/librbd/test_mock_Watcher.cc @@ -22,7 +22,7 @@ namespace { struct MockWatcher : public Watcher { std::string oid; - MockWatcher(librados::IoCtx& ioctx, ContextWQ *work_queue, + MockWatcher(librados::IoCtx& ioctx, asio::ContextWQ *work_queue, const std::string& oid) : Watcher(ioctx, work_queue, oid) { } diff --git a/src/test/librbd/test_mock_fixture.h b/src/test/librbd/test_mock_fixture.h index 408c1b7fd12..4e96d955f75 100644 --- a/src/test/librbd/test_mock_fixture.h +++ b/src/test/librbd/test_mock_fixture.h @@ -7,7 +7,7 @@ #include "test/librbd/test_fixture.h" #include "test/librbd/mock/MockImageCtx.h" #include "test/librados_test_stub/LibradosTestStub.h" -#include "common/WorkQueue.h" +#include "librbd/asio/ContextWQ.h" #include #include @@ -26,7 +26,8 @@ ACTION_P(CopyInBufferlist, str) { } ACTION_P2(CompleteContext, r, wq) { - ContextWQ *context_wq = reinterpret_cast(wq); + librbd::asio::ContextWQ *context_wq = reinterpret_cast< + librbd::asio::ContextWQ *>(wq); if (context_wq != NULL) { context_wq->queue(arg0, r); } else { -- 2.39.5