]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
crimson: replace assert_all class with a format-safe function template 69137/head
authorKefu Chai <k.chai@proxmox.com>
Thu, 28 May 2026 02:25:19 +0000 (10:25 +0800)
committerKefu Chai <k.chai@proxmox.com>
Thu, 28 May 2026 06:22:55 +0000 (14:22 +0800)
commit5e0e156228b28e1f45324d108dd7b0b04ed3d05e
tree2fb4705a774d10f64a65e5eb9ed34b86119442b6
parent8023e9f5dfd63db8f9dee79ba366ffcdb066e2e6
crimson: replace assert_all class with a format-safe function template

27b232ecc058 relaxed `assert_all` to accept any `const char*` instead of
only array-ref literals, after which callers started passing
`fmt::format(...).c_str()`, which returns a pointer into a temporary
`std::string` that dies at the semicolon, leaving the stored pointer
dangling when an error eventually fires.

fmtlib solves the same problem with one `format()` function and
`fmt::format_string<T...>`, which validates the format string at compile
time and accepts only literals or `fmt::runtime()` at the call site, with
no `const char*` path at all.

apply the same approach here: replace the `assert_all` class in both the
errorator class template and the `ct_error` namespace with a
`static auto assert_all(fmt::format_string<Args...>, Args&&...)` function
template. the format string is validated at the call site; inside the
lambda the args are captured by value and `fmt::vformat` is used for
runtime dispatch, avoiding the consteval re-entry that `fmt::format` would
trigger. all 56 call sites are migrated from brace-init syntax to
function-call syntax, and format arguments can now be passed directly
instead of requiring a pre-formatted string.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
56 files changed:
src/crimson/common/errorator.h
src/crimson/os/cyanstore/cyan_store.cc
src/crimson/os/seastore/async_cleaner.cc
src/crimson/os/seastore/backref/btree_backref_manager.cc
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/journal/circular_bounded_journal.cc
src/crimson/os/seastore/journal/circular_journal_space.cc
src/crimson/os/seastore/journal/circular_journal_space.h
src/crimson/os/seastore/journal/segment_allocator.cc
src/crimson/os/seastore/journal/segmented_journal.cc
src/crimson/os/seastore/lba/btree_lba_manager.cc
src/crimson/os/seastore/lba/btree_lba_manager.h
src/crimson/os/seastore/object_data_handler.cc
src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc
src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc
src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.h
src/crimson/os/seastore/omap_manager/log/log_manager.cc
src/crimson/os/seastore/onode_manager/staged-fltree/node.cc
src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_accessor.h
src/crimson/os/seastore/random_block_manager/nvme_block_device.cc
src/crimson/os/seastore/random_block_manager/rbm_device.cc
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/segment_manager/block.cc
src/crimson/os/seastore/segment_manager/zbd.cc
src/crimson/os/seastore/segment_manager_group.cc
src/crimson/os/seastore/transaction_manager.cc
src/crimson/os/seastore/transaction_manager.h
src/crimson/osd/ec_backend.cc
src/crimson/osd/osd_meta.cc
src/crimson/osd/osd_operations/client_request.cc
src/crimson/osd/osd_operations/ecrep_request.cc
src/crimson/osd/osd_operations/internal_client_request.cc
src/crimson/osd/osd_operations/snaptrim_event.cc
src/crimson/osd/pg.cc
src/crimson/osd/pg_backend.cc
src/crimson/osd/pg_meta.cc
src/crimson/osd/recovery_backend.cc
src/crimson/osd/replicated_recovery_backend.cc
src/crimson/tools/objectstore/objectstore_tool.cc
src/crimson/tools/store_nbd/fs_driver.cc
src/crimson/tools/store_nbd/tm_driver.cc
src/osd/PGLog.cc
src/test/crimson/seastore/onode_tree/test_fltree_onode_manager.cc
src/test/crimson/seastore/onode_tree/test_staged_fltree.cc
src/test/crimson/seastore/test_btree_lba_manager.cc
src/test/crimson/seastore/test_cbjournal.cc
src/test/crimson/seastore/test_randomblock_manager.cc
src/test/crimson/seastore/test_seastore.cc
src/test/crimson/seastore/test_seastore_cache.cc
src/test/crimson/seastore/test_seastore_journal.cc
src/test/crimson/seastore/test_transaction_manager.cc
src/test/crimson/seastore/transaction_manager_test_state.h
src/test/crimson/test_alien_echo.cc
src/test/crimson/test_interruptible_future.cc