From a20fa150edda3c1dbb4e18d7e36f5b968479546d Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 11 Oct 2021 16:10:22 +0800 Subject: [PATCH] crimson/os/seastore: cleanup record_size_t Signed-off-by: Yingxin Cheng --- .../os/seastore/extent_placement_manager.cc | 19 +++++++++++-------- .../os/seastore/extent_placement_manager.h | 14 +++++++------- src/crimson/os/seastore/seastore_types.cc | 12 ++++++------ src/crimson/os/seastore/seastore_types.h | 5 ----- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index 32ff1e94360b0..4ed38a078a7c7 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -69,9 +69,13 @@ SegmentedAllocator::Writer::finish_write( SegmentedAllocator::Writer::write_iertr::future<> SegmentedAllocator::Writer::_write( Transaction& t, - ool_record_t& record) + ool_record_t& record, + const record_size_t& record_size) { - bufferlist bl = record.encode(current_segment->segment->get_segment_id(), 0); + bufferlist bl = record.encode( + record_size, + current_segment->segment->get_segment_id(), + 0); seastar::promise<> pr; current_segment->inflight_writes.emplace_back(pr.get_future()); LOG_PREFIX(SegmentedAllocator::Writer::_write); @@ -87,10 +91,8 @@ SegmentedAllocator::Writer::_write( // account transactional ool writes before write() auto& stats = t.get_ool_write_stats(); stats.extents.num += record.get_num_extents(); - auto extent_bytes = record.get_raw_data_size(); - stats.extents.bytes += extent_bytes; - assert(bl.length() > extent_bytes); - stats.header_bytes += (bl.length() - extent_bytes); + stats.extents.bytes += record_size.dlength; + stats.header_bytes += record_size.mdlength; stats.num_records += 1; return trans_intr::make_interruptible( @@ -162,8 +164,9 @@ SegmentedAllocator::Writer::write( num_extents, current_segment->segment->get_segment_id(), allocated_to); + auto rsize = record.get_encoded_record_length(); return (num_extents ? - _write(t, record) : + _write(t, record, rsize) : write_iertr::now() ).si_then([this]() mutable { return roll_segment(false); @@ -184,7 +187,7 @@ SegmentedAllocator::Writer::write( current_segment->segment->get_segment_id(), allocated_to); allocated_to += rsize.mdlength + rsize.dlength; - return _write(t, record); + return _write(t, record, rsize); } ).si_then([]() -> write_iertr::future { diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index b4b00ef491913..d9a15ea5577a8 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -48,6 +48,7 @@ class ool_record_t { public: ool_record_t(size_t block_size) : block_size(block_size) {} record_size_t get_encoded_record_length() { + assert(extents.size() == record.extents.size()); return crimson::os::seastore::get_encoded_record_length(record, block_size); } size_t get_wouldbe_encoded_record_length(LogicalCachedExtentRef& extent) { @@ -57,9 +58,10 @@ public: block_size); return wouldbe_mdlength + extent_buf_len + extent->get_bptr().length(); } - ceph::bufferlist encode(segment_id_t segment, segment_nonce_t nonce) { + ceph::bufferlist encode(const record_size_t& rsize, + segment_id_t segment, + segment_nonce_t nonce) { assert(extents.size() == record.extents.size()); - auto rsize = get_encoded_record_length(); segment_off_t extent_offset = base + rsize.mdlength; for (auto& extent : extents) { extent.set_ool_paddr( @@ -98,10 +100,7 @@ public: uint64_t get_num_extents() const { return extents.size(); } - uint64_t get_raw_data_size() const { - assert(extents.size() == record.extents.size()); - return record.get_raw_data_size(); - } + private: std::vector extents; record_t record; @@ -218,7 +217,8 @@ class SegmentedAllocator : public ExtentAllocator { write_iertr::future<> _write( Transaction& t, - ool_record_t& record); + ool_record_t& record, + const record_size_t& record_size); using roll_segment_ertr = crimson::errorator< crimson::ct_error::input_output_error>; diff --git a/src/crimson/os/seastore/seastore_types.cc b/src/crimson/os/seastore/seastore_types.cc index 6e5558be4c920..866798279608a 100644 --- a/src/crimson/os/seastore/seastore_types.cc +++ b/src/crimson/os/seastore/seastore_types.cc @@ -129,14 +129,15 @@ extent_len_t get_encoded_record_raw_mdlength( record_size_t get_encoded_record_length( const record_t &record, size_t block_size) { - extent_len_t metadata = + extent_len_t raw_mdlength = get_encoded_record_raw_mdlength(record, block_size); - extent_len_t data = 0; + extent_len_t mdlength = + p2roundup(raw_mdlength, (extent_len_t)block_size); + extent_len_t dlength = 0; for (const auto &i: record.extents) { - data += i.bl.length(); + dlength += i.bl.length(); } - metadata = p2roundup(metadata, (extent_len_t)block_size); - return record_size_t{metadata, data}; + return record_size_t{mdlength, dlength}; } ceph::bufferlist encode_record( @@ -177,7 +178,6 @@ ceph::bufferlist encode_record( } ceph_assert(bl.length() == rsize.mdlength); - auto bliter = bl.cbegin(); auto metadata_crc = bliter.crc32c( ceph::encoded_sizeof_bounded(), diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index 1f53cc5f18055..e4e5b77850376 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -838,11 +838,6 @@ std::ostream &operator<<(std::ostream &out, const extent_info_t &header); struct record_size_t { extent_len_t mdlength = 0; extent_len_t dlength = 0; - - record_size_t( - extent_len_t mdlength, - extent_len_t dlength) - : mdlength(mdlength), dlength(dlength) {} }; extent_len_t get_encoded_record_raw_mdlength( -- 2.39.5