From 8b255efb4c1cbe82514471ec56db908d60e961a4 Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Fri, 6 May 2022 13:29:40 +0900 Subject: [PATCH] seastore: add disable_trim parameter to segment_cleaner for cbjournal testing Signed-off-by: Myoungwon Oh --- src/crimson/os/seastore/segment_cleaner.cc | 11 ++++++++--- src/crimson/os/seastore/segment_cleaner.h | 18 ++++++++++++++++-- src/crimson/os/seastore/transaction_manager.cc | 1 + 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/crimson/os/seastore/segment_cleaner.cc b/src/crimson/os/seastore/segment_cleaner.cc index c337f490b14..22de1829951 100644 --- a/src/crimson/os/seastore/segment_cleaner.cc +++ b/src/crimson/os/seastore/segment_cleaner.cc @@ -586,9 +586,9 @@ void SegmentCleaner::update_journal_tail_target( journal_seq_t alloc_replay_from) { LOG_PREFIX(SegmentCleaner::update_journal_tail_target); - if (dirty_replay_from.offset.get_addr_type() == addr_types_t::RANDOM_BLOCK) { - return; - } + if (disable_trim) return; + assert(dirty_replay_from.offset.get_addr_type() != addr_types_t::RANDOM_BLOCK); + assert(alloc_replay_from.offset.get_addr_type() != addr_types_t::RANDOM_BLOCK); if (dirty_extents_replay_from == JOURNAL_SEQ_NULL || dirty_replay_from > dirty_extents_replay_from) { DEBUG("dirty_extents_replay_from={} => {}", @@ -627,6 +627,7 @@ void SegmentCleaner::update_alloc_info_replay_from( void SegmentCleaner::update_journal_tail_committed(journal_seq_t committed) { LOG_PREFIX(SegmentCleaner::update_journal_tail_committed); + assert(committed.offset.get_addr_type() != addr_types_t::RANDOM_BLOCK); if (committed == JOURNAL_SEQ_NULL) { return; } @@ -1220,6 +1221,10 @@ SegmentCleaner::maybe_release_segment(Transaction &t) void SegmentCleaner::complete_init() { LOG_PREFIX(SegmentCleaner::complete_init); + if (disable_trim) { + init_complete = true; + return; + } INFO("done, start GC"); ceph_assert(segments.get_journal_head() != JOURNAL_SEQ_NULL); init_complete = true; diff --git a/src/crimson/os/seastore/segment_cleaner.h b/src/crimson/os/seastore/segment_cleaner.h index 748b3e9d3c6..7271e562e4f 100644 --- a/src/crimson/os/seastore/segment_cleaner.h +++ b/src/crimson/os/seastore/segment_cleaner.h @@ -690,6 +690,7 @@ private: SegmentSeqAllocatorRef ool_segment_seq_allocator; + bool disable_trim = false; // for test public: SegmentCleaner( config_t config, @@ -751,7 +752,7 @@ public: void init_mkfs() { auto journal_head = segments.get_journal_head(); - ceph_assert(journal_head != JOURNAL_SEQ_NULL); + ceph_assert(disable_trim || journal_head != JOURNAL_SEQ_NULL); journal_tail_target = journal_head; journal_tail_committed = journal_head; } @@ -878,6 +879,10 @@ public: return space_tracker->equals(tracker); } + void set_disable_trim(bool val){ + disable_trim = val; + } + using work_ertr = ExtentCallbackInterface::extent_mapping_ertr; using work_iertr = ExtentCallbackInterface::extent_mapping_iertr; @@ -1222,10 +1227,12 @@ private: * Encapsulates whether block pending gc. */ bool should_block_on_trim() const { + if (disable_trim) return false; return get_dirty_tail_limit() > journal_tail_target; } bool should_block_on_reclaim() const { + if (disable_trim) return false; if (get_segments_reclaimable() == 0) { return false; } @@ -1244,7 +1251,8 @@ private: void log_gc_state(const char *caller) const { auto &logger = crimson::get_logger(ceph_subsys_seastore_cleaner); - if (logger.is_enabled(seastar::log_level::debug)) { + if (logger.is_enabled(seastar::log_level::debug) && + !disable_trim) { logger.debug( "SegmentCleaner::log_gc_state({}): " "empty {}, " @@ -1292,6 +1300,9 @@ private: public: seastar::future<> reserve_projected_usage(size_t projected_usage) { + if (disable_trim) { + return seastar::now(); + } ceph_assert(init_complete); // The pipeline configuration prevents another IO from entering // prepare until the prior one exits and clears this. @@ -1333,6 +1344,7 @@ public: } void release_projected_usage(size_t projected_usage) { + if (disable_trim) return; ceph_assert(init_complete); ceph_assert(stats.projected_used_bytes >= projected_usage); stats.projected_used_bytes -= projected_usage; @@ -1364,6 +1376,7 @@ private: * Encapsulates logic for whether gc should be reclaiming segment space. */ bool gc_should_reclaim_space() const { + if (disable_trim) return false; if (get_segments_reclaimable() == 0) { return false; } @@ -1391,6 +1404,7 @@ private: * True if gc should be running. */ bool gc_should_run() const { + if (disable_trim) return false; ceph_assert(init_complete); return gc_should_reclaim_space() || gc_should_trim_journal(); } diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 884d4c5e85f..7812e915c14 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -653,6 +653,7 @@ TransactionManagerRef make_transaction_manager(bool detailed, bool cbjournal) } else { journal = journal::make_circularbounded( nullptr, ""); + segment_cleaner->set_disable_trim(true); } epm->init_ool_writers( *segment_cleaner, -- 2.39.5