]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/segment_cleaner: fix journal tail calculations
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 29 Apr 2022 08:17:46 +0000 (16:17 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 13 May 2022 07:51:19 +0000 (15:51 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/seastore_types.h
src/crimson/os/seastore/segment_cleaner.h

index 31a503a7863de8c1581711d5c3ce8f0dd8b400dc..7e8eece8bd4c5de6c58d7ce5bf9a851b2e0c4332 100644 (file)
@@ -772,9 +772,36 @@ struct journal_seq_t {
     denc(v.offset, p);
     DENC_FINISH(p);
   }
+
+  bool operator==(const journal_seq_t &o) const { return cmp(o) == 0; }
+  bool operator!=(const journal_seq_t &o) const { return cmp(o) != 0; }
+  bool operator<(const journal_seq_t &o) const { return cmp(o) < 0; }
+  bool operator<=(const journal_seq_t &o) const { return cmp(o) <= 0; }
+  bool operator>(const journal_seq_t &o) const { return cmp(o) > 0; }
+  bool operator>=(const journal_seq_t &o) const { return cmp(o) >= 0; }
+
+private:
+  int cmp(const journal_seq_t &other) const {
+    if (segment_seq > other.segment_seq) {
+      return 1;
+    } else if (segment_seq < other.segment_seq) {
+      return -1;
+    }
+    auto &seg_paddr = offset.as_seg_paddr();
+    auto &o_seg_paddr = other.offset.as_seg_paddr();
+    if (seg_paddr.get_segment_off() > o_seg_paddr.get_segment_off()) {
+      return 1;
+    } else if (seg_paddr.get_segment_off() < o_seg_paddr.get_segment_off()) {
+      return -1;
+    }
+    if (seg_paddr.get_segment_id() > o_seg_paddr.get_segment_id()) {
+      return 1;
+    } else if (seg_paddr.get_segment_id() < o_seg_paddr.get_segment_id()) {
+      return -1;
+    }
+    return 0;
+  }
 };
-WRITE_CMP_OPERATORS_2(journal_seq_t, segment_seq, offset)
-WRITE_EQ_OPERATORS_2(journal_seq_t, segment_seq, offset)
 
 std::ostream &operator<<(std::ostream &out, const journal_seq_t &seq);
 
index 6a55f8ebb06958e123e73ea01fe5e6682765550b..dc66de43e9c4edd7f7abe03f03144e47baa85a41 100644 (file)
@@ -883,17 +883,23 @@ private:
 
   journal_seq_t get_dirty_tail() const {
     auto ret = journal_head;
-    ret.segment_seq -= std::min(
-      static_cast<size_t>(ret.segment_seq),
-      config.target_journal_segments);
+    if (ret.segment_seq >= config.target_journal_segments) {
+      ret.segment_seq -= config.target_journal_segments;
+    } else {
+      ret.segment_seq = 0;
+      ret.offset = P_ADDR_MIN;
+    }
     return ret;
   }
 
   journal_seq_t get_dirty_tail_limit() const {
     auto ret = journal_head;
-    ret.segment_seq -= std::min(
-      static_cast<size_t>(ret.segment_seq),
-      config.max_journal_segments);
+    if (ret.segment_seq >= config.max_journal_segments) {
+      ret.segment_seq -= config.max_journal_segments;
+    } else {
+      ret.segment_seq = 0;
+      ret.offset = P_ADDR_MIN;
+    }
     return ret;
   }