From: Kefu Chai Date: Fri, 11 Jun 2021 06:18:22 +0000 (+0800) Subject: crimson/osd: specialize fmt::formatter<> for OpSequencer X-Git-Tag: v17.1.0~1679^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b0c5a6f0971acf69cf129d69b3d1ba810731ebd6;p=ceph.git crimson/osd: specialize fmt::formatter<> for OpSequencer so we can print it like fmt::format("{}", sequencer) Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/osd_operation_sequencer.h b/src/crimson/osd/osd_operation_sequencer.h index 78bf82f6fd8d..a83b9d1ccc80 100644 --- a/src/crimson/osd/osd_operation_sequencer.h +++ b/src/crimson/osd/osd_operation_sequencer.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include #include "crimson/common/operation.h" #include "osd/osd_types.h" @@ -103,8 +104,11 @@ private: // the id of last op which is completed uint64_t last_completed = 0; seastar::condition_variable unblocked; + + friend fmt::formatter; }; + class OpSequencers { public: OpSequencer& get(const spg_t& pgid) { @@ -118,3 +122,20 @@ private: std::map pg_ops; }; } // namespace crimson::osd + +template <> +struct fmt::formatter { + // ignore the format string + constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); } + + template + auto format(const crimson::osd::OpSequencer& sequencer, + FormatContext& ctx) + { + return fmt::format_to(ctx.out(), + "(last_completed={},last_unblocked={},last_issued={})", + sequencer.last_completed, + sequencer.last_unblocked, + sequencer.last_issued); + } +};