From: Ronen Friedman Date: Mon, 15 Jun 2026 11:24:18 +0000 (+0000) Subject: crimson/os/seastore: fix laddr_t formatter and its use X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=620d9362f24360aca966a6ee0817122ea71b70e3;p=ceph.git crimson/os/seastore: fix laddr_t formatter and its use 'laddr_t' existing formatter did not support a ':x' format specifier (actually - the output was always hexadecomal). Here we remove the ':x', but also refactor the custom formatter to avoid using the streambuf mechanism. Note - SEASTORE_LADDR_USE_BOOST_U128 is no longer supported by the formatter. Fixes: https://tracker.ceph.com/issues/77399 Signed-off-by: Ronen Friedman --- diff --git a/src/crimson/os/seastore/object_data_handler.cc b/src/crimson/os/seastore/object_data_handler.cc index 531aaebd233..a586a606d68 100644 --- a/src/crimson/os/seastore/object_data_handler.cc +++ b/src/crimson/os/seastore/object_data_handler.cc @@ -1442,7 +1442,7 @@ ObjectDataHandler::clear_ret ObjectDataHandler::trim_data_reservation( context_t ctx, object_data_t &object_data, extent_len_t size) { LOG_PREFIX(ObjectDataHandler::trim_data_reservation); - DEBUGT("0x{:x}~0x{:x}, 0x{:x}", + DEBUGT("{}~0x{:x}, 0x{:x}", ctx.t, object_data.get_reserved_data_base(), object_data.get_reserved_data_len(), size); ceph_assert(!object_data.is_null()); diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index 6f29c9c9b70..082baeacea3 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -1487,6 +1487,7 @@ public: } friend std::ostream &operator<<(std::ostream &, const laddr_t &); + friend struct fmt::formatter; friend bool operator==(const laddr_t&, const laddr_t&) = default; friend bool operator==(const laddr_t &laddr, const laddr_offset_t &laddr_offset) { @@ -3622,7 +3623,6 @@ template <> struct fmt::formatter : fmt:: template <> struct fmt::formatter : fmt::ostream_formatter {}; template <> struct fmt::formatter : fmt::ostream_formatter {}; template <> struct fmt::formatter : fmt::ostream_formatter {}; -template <> struct fmt::formatter : fmt::ostream_formatter {}; template <> struct fmt::formatter : fmt::ostream_formatter {}; template <> struct fmt::formatter : fmt::ostream_formatter {}; template <> struct fmt::formatter : fmt::ostream_formatter {}; @@ -3652,6 +3652,42 @@ template <> struct fmt::formatter : fmt::ost template <> struct fmt::formatter : fmt::ostream_formatter {}; #endif +namespace fmt { +template <> +struct formatter { + constexpr auto + parse(format_parse_context& ctx) + { + return ctx.begin(); + } + + template + auto + format(const crimson::os::seastore::laddr_t& laddr, FormatContext& ctx) const + { + if (laddr == crimson::os::seastore::L_ADDR_NULL) { + return fmt::format_to(ctx.out(), "L_ADDR_NULL"); + } + + fmt::format_to(ctx.out(), "L0x{:x}", laddr.value); + if (!laddr.is_global_address()) { + fmt::format_to( + ctx.out(), "({:x},{:x},{:x}", static_cast(laddr.get_shard()), + laddr.get_pool(), laddr.get_reversed_hash()); + if (laddr.is_object_address()) { + fmt::format_to( + ctx.out(), ",{:x},{:x},{:x},{:x}", laddr.get_local_object_id(), + laddr.get_local_clone_id(), static_cast(laddr.is_metadata()), + laddr.get_offset_bytes()); + } + fmt::format_to(ctx.out(), ")"); + } + return ctx.out(); + } +}; + +} // namespace fmt + template <> struct std::hash { using Laddr = crimson::os::seastore::laddr_t;