From: Radosław Zarzyński Date: Wed, 27 Apr 2022 14:51:35 +0000 (+0200) Subject: crimson/osd: strip blokcing_future from OperationT X-Git-Tag: v18.0.0~947^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=fe66dc3a3ba1c892ffad35971154d3e0ccb27602;p=ceph-ci.git crimson/osd: strip blokcing_future from OperationT Signed-off-by: Radosław Zarzyński --- diff --git a/src/crimson/osd/osd_operation.h b/src/crimson/osd/osd_operation.h index 054d6e37424..6fc3071f54d 100644 --- a/src/crimson/osd/osd_operation.h +++ b/src/crimson/osd/osd_operation.h @@ -56,66 +56,7 @@ struct InterruptibleOperation : Operation { }; template -class OperationT : public InterruptibleOperation { - std::vector blockers; - - void add_blocker(Blocker *b) { - blockers.push_back(b); - } - - void clear_blocker(Blocker *b) { - auto iter = std::find(blockers.begin(), blockers.end(), b); - if (iter != blockers.end()) { - blockers.erase(iter); - } - } - -public: - template - seastar::future with_blocking_future(blocking_future &&f) { - if (f.fut.available()) { - return std::move(f.fut); - } - assert(f.blocker); - add_blocker(f.blocker); - return std::move(f.fut).then_wrapped([this, blocker=f.blocker](auto &&arg) { - clear_blocker(blocker); - return std::move(arg); - }); - } - - template - ::crimson::interruptible::interruptible_future - with_blocking_future_interruptible(blocking_future &&f) { - if (f.fut.available()) { - return std::move(f.fut); - } - assert(f.blocker); - add_blocker(f.blocker); - auto fut = std::move(f.fut).then_wrapped([this, blocker=f.blocker](auto &&arg) { - clear_blocker(blocker); - return std::move(arg); - }); - return ::crimson::interruptible::interruptible_future< - InterruptCond, U>(std::move(fut)); - } - - template - ::crimson::interruptible::interruptible_future - with_blocking_future_interruptible( - blocking_interruptible_future &&f) { - if (f.fut.available()) { - return std::move(f.fut); - } - assert(f.blocker); - add_blocker(f.blocker); - return std::move(f.fut).template then_wrapped_interruptible( - [this, blocker=f.blocker](auto &&arg) { - clear_blocker(blocker); - return std::move(arg); - }); - } - +struct OperationT : InterruptibleOperation { static constexpr const char *type_name = OP_NAMES[static_cast(T::type)]; using IRef = boost::intrusive_ptr;