]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: move ool segment seq allocator to EPM
authorZhang Song <zhangsong325@gmail.com>
Tue, 10 Jan 2023 08:49:22 +0000 (16:49 +0800)
committerMatan Breizman <mbreizma@redhat.com>
Tue, 23 May 2023 08:03:21 +0000 (08:03 +0000)
Signed-off-by: Zhang Song <zhangsong325@gmail.com>
(cherry picked from commit 944c1253bf52fb6f7d773b4bfeb5f7cc8f0ffebc)

src/crimson/os/seastore/async_cleaner.cc
src/crimson/os/seastore/async_cleaner.h
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/extent_placement_manager.h
src/crimson/os/seastore/transaction_manager.cc

index 6468beb43b4ead673eac130ca021ee97ef55eaa4..a993506e0ec3f5093bcf7bc783a7125447233edb 100644 (file)
@@ -830,13 +830,13 @@ SegmentCleaner::SegmentCleaner(
   config_t config,
   SegmentManagerGroupRef&& sm_group,
   BackrefManager &backref_manager,
+  SegmentSeqAllocator &segment_seq_allocator,
   bool detailed)
   : detailed(detailed),
     config(config),
     sm_group(std::move(sm_group)),
     backref_manager(backref_manager),
-    ool_segment_seq_allocator(
-      new SegmentSeqAllocator(segment_type_t::OOL))
+    ool_segment_seq_allocator(segment_seq_allocator)
 {
   config.validate();
 }
index 02e1df1d3d86fe8fcabc8f6b0e22994146645572..062f3883a9c4b195957ccf9abf7e3b91702e5bf0 100644 (file)
@@ -1210,12 +1210,9 @@ public:
     config_t config,
     SegmentManagerGroupRef&& sm_group,
     BackrefManager &backref_manager,
+    SegmentSeqAllocator &segment_seq_allocator,
     bool detailed);
 
-  SegmentSeqAllocator& get_ool_segment_seq_allocator() {
-    return *ool_segment_seq_allocator;
-  }
-
   void set_journal_trimmer(JournalTrimmer &_trimmer) {
     trimmer = &_trimmer;
   }
@@ -1224,9 +1221,10 @@ public:
       config_t config,
       SegmentManagerGroupRef&& sm_group,
       BackrefManager &backref_manager,
+      SegmentSeqAllocator &ool_seq_allocator,
       bool detailed) {
     return std::make_unique<SegmentCleaner>(
-        config, std::move(sm_group), backref_manager, detailed);
+        config, std::move(sm_group), backref_manager, ool_seq_allocator, detailed);
   }
 
   /*
@@ -1521,7 +1519,7 @@ private:
     auto new_usage = calc_utilization(segment);
     adjust_segment_util(old_usage, new_usage);
     if (s_type == segment_type_t::OOL) {
-      ool_segment_seq_allocator->set_next_segment_seq(seq);
+      ool_segment_seq_allocator.set_next_segment_seq(seq);
     }
   }
 
@@ -1574,7 +1572,7 @@ private:
   BackgroundListener *background_callback = nullptr;
 
   // TODO: drop once paddr->journal_seq_t is introduced
-  SegmentSeqAllocatorRef ool_segment_seq_allocator;
+  SegmentSeqAllocator &ool_segment_seq_allocator;
 };
 
 class RBMCleaner;
index b8fd2b18072a0a3a1c640d0ffd59abee311467e1..97a0d02a7ead42a0d3063a7e56902024e254ca6a 100644 (file)
@@ -190,7 +190,7 @@ void ExtentPlacementManager::init(
     for (rewrite_gen_t gen = OOL_GENERATION; gen < REWRITE_GENERATIONS; ++gen) {
       writer_refs.emplace_back(std::make_unique<SegmentedOolWriter>(
            data_category_t::DATA, gen, *segment_cleaner,
-           segment_cleaner->get_ool_segment_seq_allocator()));
+            *ool_segment_seq_allocator));
       data_writers_by_gen[generation_to_writer(gen)] = writer_refs.back().get();
     }
 
@@ -198,7 +198,7 @@ void ExtentPlacementManager::init(
     for (rewrite_gen_t gen = OOL_GENERATION; gen < REWRITE_GENERATIONS; ++gen) {
       writer_refs.emplace_back(std::make_unique<SegmentedOolWriter>(
            data_category_t::METADATA, gen, *segment_cleaner,
-           segment_cleaner->get_ool_segment_seq_allocator()));
+            *ool_segment_seq_allocator));
       md_writers_by_gen[generation_to_writer(gen)] = writer_refs.back().get();
     }
 
index d700a0b6c8b49a8c491c89b49aa25085dc329e3a..15eb592f57a9f95b5655f58575a45a0a67b350f8 100644 (file)
@@ -173,12 +173,19 @@ struct reserve_io_result_t {
 
 class ExtentPlacementManager {
 public:
-  ExtentPlacementManager() {
+  ExtentPlacementManager()
+    : ool_segment_seq_allocator(
+          std::make_unique<SegmentSeqAllocator>(segment_type_t::OOL))
+  {
     devices_by_id.resize(DEVICE_ID_MAX, nullptr);
   }
 
   void init(JournalTrimmerImplRef &&, AsyncCleanerRef &&);
 
+  SegmentSeqAllocator &get_ool_segment_seq_allocator() const {
+    return *ool_segment_seq_allocator;
+  }
+
   void set_primary_device(Device *device);
 
   void set_extent_callback(ExtentCallbackInterface *cb) {
@@ -645,6 +652,8 @@ private:
   std::size_t num_devices = 0;
 
   BackgroundProcess background_process;
+  // TODO: drop once paddr->journal_seq_t is introduced
+  SegmentSeqAllocatorRef ool_segment_seq_allocator;
 };
 
 using ExtentPlacementManagerRef = std::unique_ptr<ExtentPlacementManager>;
index 891a7f669bd768e8e4f62b5da34c1aabcb56ae6f..a42d5d7ff524f88471f93f910dfe2426d582572e 100644 (file)
@@ -709,6 +709,7 @@ TransactionManagerRef make_transaction_manager(
       cleaner_config,
       std::move(sms),
       *backref_manager,
+      epm->get_ool_segment_seq_allocator(),
       cleaner_is_detailed);
     auto segment_cleaner = static_cast<SegmentCleaner*>(cleaner.get());
     cache->set_segment_provider(*segment_cleaner);