From: Yingxin Cheng Date: Fri, 19 Jul 2024 02:02:47 +0000 (+0800) Subject: crimson/os/seastore/epm: SegmentedOolWriter to update ool paddr upon submitting writes X-Git-Tag: testing/wip-pdonnell-testing-20240813.125846-debug~33^2~5 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=48ff8f0e73ba851ab0dc822b0bab12277747cbbe;p=ceph-ci.git crimson/os/seastore/epm: SegmentedOolWriter to update ool paddr upon submitting writes In order to move the ool write futures out of the collection lock, which will be after the transaction prepare phase. Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index eaa3dd94a32..f4d2c021333 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -50,25 +50,27 @@ SegmentedOolWriter::write_record( auto ret = record_submitter.submit( std::move(record), with_atomic_roll_segment); + DEBUGT("{} start at {} with {} extents ...", + t, segment_allocator.get_name(), + ret.record_base_regardless_md, + extents.size()); + paddr_t extent_addr = ret.record_base_regardless_md.offset; + for (auto& extent : extents) { + TRACET("{} extent will be written at {} -- {}", + t, segment_allocator.get_name(), + extent_addr, *extent); + t.update_delayed_ool_extent_addr(extent, extent_addr); + extent_addr = extent_addr.as_seg_paddr().add_offset( + extent->get_length()); + } return std::move(ret.future ).safe_then([this, FNAME, &t, - record_base=ret.record_base_regardless_md, - extents=std::move(extents) - ](record_locator_t ret) mutable { - DEBUGT("{} finish with {}={} and {} extents", - t, segment_allocator.get_name(), - ret, record_base, extents.size()); - paddr_t extent_addr = ret.record_block_base; + record_base=ret.record_base_regardless_md + ](record_locator_t ret) { + TRACET("{} finish {}=={}", + t, segment_allocator.get_name(), ret, record_base); // ool won't write metadata, so the paddrs must be equal - assert(record_base.offset == extent_addr); - for (auto& extent : extents) { - TRACET("{} ool extent written at {} -- {}", - t, segment_allocator.get_name(), - extent_addr, *extent); - t.update_delayed_ool_extent_addr(extent, extent_addr); - extent_addr = extent_addr.as_seg_paddr().add_offset( - extent->get_length()); - } + assert(ret.record_block_base == record_base.offset); }); }