]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: exclude ool extents from the judgement is_in_journal
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 27 Jul 2021 13:00:31 +0000 (21:00 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Wed, 8 Sep 2021 03:03:01 +0000 (11:03 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/os/seastore/journal.cc
src/crimson/os/seastore/segment_cleaner.cc
src/crimson/os/seastore/segment_cleaner.h

index e8cface690390fd8c5166d67d7ad731e6d45fd84..8c9a81c027b67ebdd7269a4f59fe124e4b02685f 100644 (file)
@@ -58,10 +58,6 @@ Journal::initialize_segment_ertr::future<segment_seq_t>
 Journal::initialize_segment(Segment &segment)
 {
   auto new_tail = segment_provider->get_journal_tail_target();
-  logger().debug(
-    "initialize_segment {} journal_tail_target {}",
-    segment.get_segment_id(),
-    new_tail);
   // write out header
   ceph_assert(segment.get_write_ptr() == 0);
   bufferlist bl;
@@ -75,6 +71,11 @@ Journal::initialize_segment(Segment &segment)
     segment_provider->get_journal_tail_target(),
     current_segment_nonce,
     false};
+  logger().debug(
+    "initialize_segment {} journal_tail_target {}, header {}",
+    segment.get_segment_id(),
+    new_tail,
+    header);
   encode(header, bl);
 
   bufferptr bp(
@@ -226,7 +227,8 @@ Journal::prep_replay_segments(
     [this](auto &seg) {
       segment_provider->init_mark_segment_closed(
        seg.first,
-       seg.second.journal_segment_seq);
+       seg.second.journal_segment_seq,
+       false);
     });
 
   auto journal_tail = segments.rbegin()->second.journal_tail;
index 82bf2d22fc4b0a22e2ed04d0c689bd18b155d159..a912bfbb77526b9bfa7f6cbb6afba9422c37287c 100644 (file)
@@ -185,9 +185,10 @@ SegmentCleaner::get_segment_ret SegmentCleaner::get_segment()
 void SegmentCleaner::update_journal_tail_target(journal_seq_t target)
 {
   logger().debug(
-    "{}: {}",
+    "{}: {}, current tail target {}",
     __func__,
-    target);
+    target,
+    journal_tail_target);
   assert(journal_tail_target == journal_seq_t() || target >= journal_tail_target);
   if (journal_tail_target == journal_seq_t() || target > journal_tail_target) {
     journal_tail_target = target;
@@ -390,7 +391,8 @@ SegmentCleaner::init_segments_ret SegmentCleaner::init_segments() {
          logger().debug("Scanner::init_segments: out-of-line segment {}", segment_id);
          init_mark_segment_closed(
            segment_id,
-           header.journal_segment_seq);
+           header.journal_segment_seq,
+           true);
        } else {
          logger().debug("Scanner::init_segments: journal segment {}", segment_id);
          segments.emplace_back(std::make_pair(segment_id, std::move(header)));
index f79dee67751aba7771d9a23e40d9ec26fb340efc..d3cb6285990338a3c9f3773b82100f83faef422e 100644 (file)
@@ -25,8 +25,11 @@ struct segment_info_t {
   segment_seq_t journal_segment_seq = NULL_SEG_SEQ;
 
 
+  bool out_of_line = false;
+
   bool is_in_journal(journal_seq_t tail_committed) const {
-    return journal_segment_seq != NULL_SEG_SEQ &&
+    return !out_of_line &&
+      journal_segment_seq != NULL_SEG_SEQ &&
       tail_committed.segment_seq <= journal_segment_seq;
   }
 
@@ -63,7 +66,9 @@ public:
   virtual void update_journal_tail_committed(journal_seq_t tail_committed) = 0;
 
   virtual void init_mark_segment_closed(
-    segment_id_t segment, segment_seq_t seq) {}
+    segment_id_t segment,
+    segment_seq_t seq,
+    bool out_of_line) {}
 
   virtual segment_seq_t get_seq(segment_id_t id) { return 0; }
 
@@ -483,13 +488,18 @@ public:
     return journal_head;
   }
 
-  void init_mark_segment_closed(segment_id_t segment, segment_seq_t seq) final {
+  void init_mark_segment_closed(
+    segment_id_t segment,
+    segment_seq_t seq,
+    bool out_of_line) final
+  {
     crimson::get_logger(ceph_subsys_seastore).debug(
       "SegmentCleaner::init_mark_segment_closed: segment {}, seq {}",
       segment,
       seq);
     mark_closed(segment);
     segments[segment].journal_segment_seq = seq;
+    segments[segment].out_of_line = out_of_line;
   }
 
   segment_seq_t get_seq(segment_id_t id) final {
@@ -839,6 +849,7 @@ private:
        "gc_should_reclaim_space {}, "
        "journal_head {}, "
        "journal_tail_target {}, "
+       "journal_tail_commit {}, "
        "dirty_tail {}, "
        "dirty_tail_limit {}, "
        "gc_should_trim_journal {}, ",
@@ -854,6 +865,7 @@ private:
        gc_should_reclaim_space(),
        journal_head,
        journal_tail_target,
+       journal_tail_committed,
        get_dirty_tail(),
        get_dirty_tail_limit(),
        gc_should_trim_journal()