From: Xuehan Xu Date: Tue, 27 Jul 2021 13:00:31 +0000 (+0800) Subject: crimson/os/seastore: exclude ool extents from the judgement is_in_journal X-Git-Tag: v17.1.0~919^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=32f3232e88e346dc1cda1fcd9f3e4662711a90fc;p=ceph.git crimson/os/seastore: exclude ool extents from the judgement is_in_journal Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/journal.cc b/src/crimson/os/seastore/journal.cc index e8cface69039..8c9a81c027b6 100644 --- a/src/crimson/os/seastore/journal.cc +++ b/src/crimson/os/seastore/journal.cc @@ -58,10 +58,6 @@ Journal::initialize_segment_ertr::future 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; diff --git a/src/crimson/os/seastore/segment_cleaner.cc b/src/crimson/os/seastore/segment_cleaner.cc index 82bf2d22fc4b..a912bfbb7752 100644 --- a/src/crimson/os/seastore/segment_cleaner.cc +++ b/src/crimson/os/seastore/segment_cleaner.cc @@ -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))); diff --git a/src/crimson/os/seastore/segment_cleaner.h b/src/crimson/os/seastore/segment_cleaner.h index f79dee67751a..d3cb62859903 100644 --- a/src/crimson/os/seastore/segment_cleaner.h +++ b/src/crimson/os/seastore/segment_cleaner.h @@ -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()