]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/journal: cleanup, move commit_to to RecordSubmitter
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 18 Feb 2022 02:41:14 +0000 (10:41 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 24 Feb 2022 12:43:15 +0000 (20:43 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/journal/segmented_journal.cc
src/crimson/os/seastore/journal/segmented_journal.h

index 2fbfa3560a28239011f6353083f346e3d7e9cc3f..851e6cc2182cf75c3596eb1d5ea3ac3a9cc6e10a 100644 (file)
@@ -66,7 +66,8 @@ SegmentedJournal::open_for_write_ret SegmentedJournal::open_for_write()
 SegmentedJournal::close_ertr::future<> SegmentedJournal::close()
 {
   LOG_PREFIX(Journal::close);
-  INFO("closing");
+  INFO("closing, committed_to={}",
+       record_submitter.get_committed_to());
   metrics.clear();
   return journal_segment_manager.close();
 }
@@ -387,12 +388,10 @@ SegmentedJournal::JournalSegmentManager::close()
 {
   LOG_PREFIX(JournalSegmentManager::close);
   if (current_journal_segment) {
-    INFO("segment_id={}, seq={}, "
-         "written_to={}, committed_to={}, nonce={}",
+    INFO("segment_id={}, seq={}, written_to={}, nonce={}",
          current_journal_segment->get_segment_id(),
          get_segment_seq(),
          written_to,
-         committed_to,
          current_segment_nonce);
   } else {
     INFO("no current journal segment");
@@ -420,12 +419,10 @@ SegmentedJournal::JournalSegmentManager::roll()
     current_journal_segment->get_segment_id() :
     NULL_SEG_ID;
   if (current_journal_segment) {
-    INFO("closing segment {}, seq={}, "
-         "written_to={}, committed_to={}, nonce={}",
+    INFO("closing segment {}, seq={}, written_to={}, nonce={}",
          old_segment_id,
          get_segment_seq(),
          written_to,
-         committed_to,
          current_segment_nonce);
   }
 
@@ -481,16 +478,6 @@ SegmentedJournal::JournalSegmentManager::write(ceph::bufferlist to_write)
   });
 }
 
-void SegmentedJournal::JournalSegmentManager::mark_committed(
-  const journal_seq_t& new_committed_to)
-{
-  LOG_PREFIX(JournalSegmentManager::mark_committed);
-  TRACE("{} => {}", committed_to, new_committed_to);
-  assert(committed_to == JOURNAL_SEQ_NULL ||
-         committed_to <= new_committed_to);
-  committed_to = new_committed_to;
-}
-
 SegmentedJournal::JournalSegmentManager::initialize_segment_ertr::future<>
 SegmentedJournal::JournalSegmentManager::initialize_segment(Segment& segment)
 {
@@ -767,11 +754,10 @@ void SegmentedJournal::RecordSubmitter::flush_current_batch()
 
   increment_io();
   auto num = p_batch->get_num_records();
-  auto committed_to = journal_segment_manager.get_committed_to();
   auto [to_write, sizes] = p_batch->encode_batch(
-    committed_to, journal_segment_manager.get_nonce());
+    journal_committed_to, journal_segment_manager.get_nonce());
   DEBUG("{} records, {}, committed_to={}, outstanding_io={} ...",
-        num, sizes, committed_to, num_outstanding_io);
+        num, sizes, journal_committed_to, num_outstanding_io);
   account_submission(num, sizes);
   std::ignore = journal_segment_manager.write(to_write
   ).safe_then([this, p_batch, FNAME, num, sizes=sizes](auto write_result) {
@@ -803,14 +789,13 @@ SegmentedJournal::RecordSubmitter::submit_pending(
     if (do_flush && p_current_batch->is_empty()) {
       // fast path with direct write
       increment_io();
-      auto committed_to = journal_segment_manager.get_committed_to();
       auto [to_write, sizes] = p_current_batch->submit_pending_fast(
         std::move(record),
         journal_segment_manager.get_block_size(),
-        committed_to,
+        journal_committed_to,
         journal_segment_manager.get_nonce());
       DEBUG("H{} fast submit {}, committed_to={}, outstanding_io={} ...",
-            (void*)&handle, sizes, committed_to, num_outstanding_io);
+            (void*)&handle, sizes, journal_committed_to, num_outstanding_io);
       account_submission(1, sizes);
       return journal_segment_manager.write(to_write
       ).safe_then([mdlength = sizes.get_mdlength()](auto write_result) {
@@ -844,8 +829,10 @@ SegmentedJournal::RecordSubmitter::submit_pending(
     return handle.enter(write_pipeline->finalize
     ).then([this, FNAME, submit_result, &handle] {
       DEBUG("H{} finish with {}", (void*)&handle, submit_result);
-      journal_segment_manager.mark_committed(
-          submit_result.write_result.get_end_seq());
+      auto new_committed_to = submit_result.write_result.get_end_seq();
+      assert(journal_committed_to == JOURNAL_SEQ_NULL ||
+             journal_committed_to <= new_committed_to);
+      journal_committed_to = new_committed_to;
       return submit_result;
     });
   });
index 49091a65a6f57a0d831833b5c59e19ae98f2e337..23e8dbb04719b9b9095f2af18fac738995f202a6 100644 (file)
@@ -86,10 +86,6 @@ private:
       return current_segment_nonce;
     }
 
-    journal_seq_t get_committed_to() const {
-      return committed_to;
-    }
-
     segment_seq_t get_segment_seq() const {
       return next_journal_segment_seq - 1;
     }
@@ -120,9 +116,6 @@ private:
     using write_ertr = base_ertr;
     using write_ret = write_ertr::future<write_result_t>;
     write_ret write(ceph::bufferlist to_write);
-
-    // mark write committed in order
-    void mark_committed(const journal_seq_t& new_committed_to);
     
   private:
     journal_seq_t get_current_write_seq() const {
@@ -139,7 +132,6 @@ private:
       current_segment_nonce = 0;
       current_journal_segment.reset();
       written_to = 0;
-      committed_to = JOURNAL_SEQ_NULL;
     }
 
     // prepare segment for writes, writes out segment header
@@ -154,8 +146,6 @@ private:
 
     SegmentRef current_journal_segment;
     seastore_off_t written_to;
-    // committed_to may be in a previous journal segment
-    journal_seq_t committed_to;
   };
 
   class RecordBatch {
@@ -322,6 +312,10 @@ private:
       return stats.record_group_data_bytes;
     }
 
+    journal_seq_t get_committed_to() const {
+      return journal_committed_to;
+    }
+
     void reset_stats() {
       stats = {};
     }
@@ -378,6 +372,9 @@ private:
 
     WritePipeline* write_pipeline = nullptr;
     JournalSegmentManager& journal_segment_manager;
+    // committed_to may be in a previous journal segment
+    journal_seq_t journal_committed_to = JOURNAL_SEQ_NULL;
+
     std::unique_ptr<RecordBatch[]> batches;
     std::size_t current_batch_index;
     // should not be nullptr after constructed