bool debug_log{false};
};
+template <>
+struct fmt::formatter<object_stat_sum_t> {
+ constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
+
+ template <typename FormatContext>
+ auto format(const object_stat_sum_t &stats, FormatContext& ctx) const
+ {
+#define FORMAT(FIELD) fmt::format_to(ctx.out(), #FIELD"={}, ", stats.FIELD);
+ fmt::format_to(ctx.out(), "object_stat_sum_t(");
+ FORMAT(num_bytes);
+ FORMAT(num_objects);
+ FORMAT(num_object_clones);
+ FORMAT(num_object_copies);
+ FORMAT(num_objects_missing_on_primary);
+ FORMAT(num_objects_missing);
+ FORMAT(num_objects_degraded);
+ FORMAT(num_objects_misplaced);
+ FORMAT(num_objects_unfound);
+ FORMAT(num_rd);
+ FORMAT(num_rd_kb);
+ FORMAT(num_wr);
+ FORMAT(num_wr_kb);
+ FORMAT(num_large_omap_objects);
+ FORMAT(num_objects_manifest);
+ FORMAT(num_omap_bytes);
+ FORMAT(num_omap_keys);
+ FORMAT(num_shallow_scrub_errors);
+ FORMAT(num_deep_scrub_errors);
+ FORMAT(num_scrub_errors);
+ FORMAT(num_objects_recovered);
+ FORMAT(num_bytes_recovered);
+ FORMAT(num_keys_recovered);
+ FORMAT(num_objects_dirty);
+ FORMAT(num_whiteouts);
+ FORMAT(num_objects_omap);
+ FORMAT(num_objects_hit_set_archive);
+ FORMAT(num_bytes_hit_set_archive);
+ FORMAT(num_flush);
+ FORMAT(num_flush_kb);
+ FORMAT(num_evict);
+ FORMAT(num_evict_kb);
+ FORMAT(num_promote);
+ FORMAT(num_flush_mode_high);
+ FORMAT(num_flush_mode_low);
+ FORMAT(num_evict_mode_some);
+ FORMAT(num_evict_mode_full);
+ FORMAT(num_objects_pinned);
+ FORMAT(num_legacy_snapsets);
+ return fmt::format_to(
+ ctx.out(), "num_objects_repaired={})",
+ stats.num_objects_repaired);
+#undef FORMAT
+ }
+};
+inline std::ostream &operator<<(std::ostream &lhs, const object_stat_sum_t &sum) {
+ return lhs << fmt::format("{}", sum);
+}
+
#if FMT_VERSION >= 90000
template <bool TrackChanges> struct fmt::formatter<pg_missing_set<TrackChanges>> : fmt::ostream_formatter {};
#endif