]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
seastore: add disable_trim parameter to segment_cleaner for cbjournal testing
authormyoungwon oh <ohmyoungwon@gmail.com>
Fri, 6 May 2022 04:29:40 +0000 (13:29 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Thu, 19 May 2022 00:34:52 +0000 (09:34 +0900)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
src/crimson/os/seastore/segment_cleaner.cc
src/crimson/os/seastore/segment_cleaner.h
src/crimson/os/seastore/transaction_manager.cc

index c337f490b1411edba3c4a4fdf4d3d3165f9f5c66..22de1829951c705e53b44d059a40b7fe0505c83c 100644 (file)
@@ -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;
index 748b3e9d3c6fcfd42ea8a671b24344fbb820cde5..7271e562e4f67ee6bd8b5ebe29e8e1dd88222f33 100644 (file)
@@ -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();
   }
index 884d4c5e85feb0d2e331f539f1af47f76f313373..7812e915c140707cf58318a766b9c9249667dbf6 100644 (file)
@@ -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,