From: Yingxin Cheng Date: Fri, 22 Jul 2022 09:18:52 +0000 (+0800) Subject: crimson/os/seastore/async_cleaner: clarify invariants X-Git-Tag: v18.0.0~426^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=caff72bf779c17fbcd6053a151616a86007529cb;p=ceph.git crimson/os/seastore/async_cleaner: clarify invariants Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/async_cleaner.cc b/src/crimson/os/seastore/async_cleaner.cc index c564e131ae82..938267066c8c 100644 --- a/src/crimson/os/seastore/async_cleaner.cc +++ b/src/crimson/os/seastore/async_cleaner.cc @@ -1034,6 +1034,7 @@ AsyncCleaner::mount_ret AsyncCleaner::mount() INFO("{} segment managers", sms.size()); init_complete = false; stats = {}; + journal_head = JOURNAL_SEQ_NULL; journal_alloc_tail = JOURNAL_SEQ_NULL; journal_dirty_tail = JOURNAL_SEQ_NULL; @@ -1218,6 +1219,8 @@ void AsyncCleaner::complete_init() INFO("done, start GC, time_bound={}", sea_time_point_printer_t{segments.get_time_bound()}); ceph_assert(journal_head != JOURNAL_SEQ_NULL); + ceph_assert(journal_alloc_tail != JOURNAL_SEQ_NULL); + ceph_assert(journal_dirty_tail != JOURNAL_SEQ_NULL); init_complete = true; gc_process.start(); } diff --git a/src/crimson/os/seastore/async_cleaner.h b/src/crimson/os/seastore/async_cleaner.h index 81b328d41c62..9af774e908c8 100644 --- a/src/crimson/os/seastore/async_cleaner.h +++ b/src/crimson/os/seastore/async_cleaner.h @@ -1126,14 +1126,11 @@ private: * Segments calculations */ std::size_t get_segments_in_journal() const { - if (!init_complete) { - return 0; - } auto journal_tail = get_journal_tail(); - if (journal_tail == JOURNAL_SEQ_NULL) { - return segments.get_num_type_journal(); + if (journal_tail == JOURNAL_SEQ_NULL || + journal_head == JOURNAL_SEQ_NULL) { + return 0; } - assert(journal_head != JOURNAL_SEQ_NULL); assert(journal_head.segment_seq >= journal_tail.segment_seq); return journal_head.segment_seq + 1 - journal_tail.segment_seq; }