]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: count consumed records in cursor with cleanups
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 12 Jan 2022 04:59:07 +0000 (12:59 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 14 Jan 2022 15:06:43 +0000 (23:06 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/extent_reader.cc
src/crimson/os/seastore/seastore_types.cc
src/crimson/os/seastore/seastore_types.h

index e60296b408bc538ba559b51181c07d33d8853abe..9ae0fcebf989645393c3cb8b1464ebdce6a0ac7a 100644 (file)
@@ -113,7 +113,7 @@ ExtentReader::scan_valid_records_ret ExtentReader::scan_valid_records(
   auto& segment_manager =
     *segment_managers[cursor.get_segment_id().device_id()];
   if (cursor.get_segment_offset() == 0) {
-    cursor.increment(segment_manager.get_block_size());
+    cursor.increment_seq(segment_manager.get_block_size());
   }
   auto retref = std::make_unique<size_t>(0);
   auto &budget_used = *retref;
@@ -135,16 +135,7 @@ ExtentReader::scan_valid_records_ret ExtentReader::scan_valid_records(
              auto new_committed_to = header.committed_to;
              DEBUG("valid record read at {}, now committed at {}",
                    cursor.seq, new_committed_to);
-             ceph_assert(cursor.last_committed == journal_seq_t() ||
-                         cursor.last_committed <= new_committed_to);
-             cursor.last_committed = new_committed_to;
-             cursor.pending_record_groups.emplace_back(
-               cursor.seq.offset,
-               header,
-               std::move(md_bl));
-             cursor.increment(header.dlength + header.mdlength);
-             ceph_assert(new_committed_to == journal_seq_t() ||
-                         new_committed_to < cursor.seq);
+             cursor.emplace_record_group(header, std::move(md_bl));
              return scan_valid_records_ertr::now();
            }
          }).safe_then([=, &cursor, &budget_used, &handler] {
@@ -318,7 +309,7 @@ ExtentReader::consume_next_records(
     next.header,
     next.mdbuffer
   ).safe_then([&cursor] {
-    cursor.pending_record_groups.pop_front();
+    cursor.pop_record_group();
   });
 }
 
index 21650e8fc4c60574287851e184f8287e3154a154..a68aa4de8be2ff922d1d47e01a09ccb8e84dfd32 100644 (file)
@@ -516,5 +516,20 @@ blk_paddr_t convert_paddr_to_blk_paddr(paddr_t addr, size_t block_size,
          (block_size * blocks_per_segment) + s.get_segment_off());
 }
 
+void scan_valid_records_cursor::emplace_record_group(
+    const record_group_header_t& header, ceph::bufferlist&& md_bl)
+{
+  auto new_committed_to = header.committed_to;
+  ceph_assert(last_committed == journal_seq_t() ||
+              last_committed <= new_committed_to);
+  last_committed = new_committed_to;
+  pending_record_groups.emplace_back(
+    seq.offset,
+    header,
+    std::move(md_bl));
+  increment_seq(header.dlength + header.mdlength);
+  ceph_assert(new_committed_to == journal_seq_t() ||
+              new_committed_to < seq);
+}
 
 }
index 01bfecc6010dd2a4faa43c263a4c16abf816905b..165419ef1f18b2e18645be6d87d16953aba8d21a 100644 (file)
@@ -1446,6 +1446,7 @@ struct scan_valid_records_cursor {
   bool last_valid_header_found = false;
   journal_seq_t seq;
   journal_seq_t last_committed;
+  std::size_t num_consumed_records = 0;
 
   struct found_record_group_t {
     paddr_t offset;
@@ -1472,12 +1473,20 @@ struct scan_valid_records_cursor {
     return seq.offset.as_seg_paddr().get_segment_off();
   }
 
-  void increment(segment_off_t off) {
+  void increment_seq(segment_off_t off) {
     auto& seg_addr = seq.offset.as_seg_paddr();
     seg_addr.set_segment_off(
       seg_addr.get_segment_off() + off);
   }
 
+  void emplace_record_group(const record_group_header_t&, ceph::bufferlist&&);
+
+  void pop_record_group() {
+    assert(!pending_record_groups.empty());
+    ++num_consumed_records;
+    pending_record_groups.pop_front();
+  }
+
   scan_valid_records_cursor(
     journal_seq_t seq)
     : seq(seq) {}