]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: cleanup record_size_t
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 11 Oct 2021 08:10:22 +0000 (16:10 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Mon, 11 Oct 2021 08:14:01 +0000 (16:14 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/extent_placement_manager.h
src/crimson/os/seastore/seastore_types.cc
src/crimson/os/seastore/seastore_types.h

index 32ff1e94360b02b59e2d6bcfe98b86fb68926c98..4ed38a078a7c7ff499b611d08b3838cd1e694890 100644 (file)
@@ -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<seastar::stop_iteration> {
index b4b00ef491913b4f21d213a711bfd6688f3bde6c..d9a15ea5577a8e5e0c997a0ffbf0b009b44e7186 100644 (file)
@@ -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<OolExtent> 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>;
index 6e5558be4c9200110cc22be827d9edb780c62406..866798279608a95ab149ffb306a7cffaeac8d921 100644 (file)
@@ -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<record_header_t>(),
index 1f53cc5f180552c8ac902d10da3b1df8ff520053..e4e5b77850376823b42d5835ad065f4dc72658db 100644 (file)
@@ -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(