From: Ronen Friedman Date: Sun, 28 Jan 2024 07:25:38 +0000 (-0600) Subject: osd/scrub: add a general data-carrying event type to the FSM X-Git-Tag: testing/wip-batrick-testing-20240411.154038~524^2~6 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a4f10d329b6f457ad107e4a88bdc32a0fb7d9919;p=ceph-ci.git osd/scrub: add a general data-carrying event type to the FSM Based on Sam's Crimson FSM's 'value-event'. Co-authored-by: Sam Just Signed-off-by: Ronen Friedman --- diff --git a/src/osd/scrubber/scrub_machine.h b/src/osd/scrubber/scrub_machine.h index 9b2a800d188..6eadb109cd5 100644 --- a/src/osd/scrubber/scrub_machine.h +++ b/src/osd/scrubber/scrub_machine.h @@ -102,6 +102,39 @@ OP_EV(ReplicaReserveReq); /// explicit release request from the Primary OP_EV(ReplicaRelease); +template +struct value_event_t : sc::event { + const V value; + + template + value_event_t(Args&&... args) : value(std::forward(args)...) + { + on_event_creation(T::event_name); + } + + value_event_t(const value_event_t&) = default; + value_event_t(value_event_t&&) = default; + value_event_t& operator=(const value_event_t&) = default; + value_event_t& operator=(value_event_t&&) = default; + ~value_event_t() { on_event_discard(T::event_name); } + + template + auto fmt_print_ctx(FormatContext& ctx) const + { + return fmt::format_to(ctx.out(), "{}({})", T::event_name, value); + } +}; + +#define VALUE_EVENT(T, V) \ + struct T : value_event_t { \ + static constexpr const char* event_name = #T; \ + template \ + T(Args&&... args) : value_event_t(std::forward(args)...) \ + { \ + } \ + }; + + /// the async-reserver granted our reservation request OP_EV(ReserverGranted);