]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/store_nbd: involve the extent placement manager and the scanner
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 10 Aug 2021 04:47:12 +0000 (12:47 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Wed, 8 Sep 2021 03:03:01 +0000 (11:03 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/tools/store_nbd/tm_driver.cc

index c6182de0320c158b14df3585132ac01676020eed..c933448675e6ea7dbc82c151c0a7e0dbf1b061bf 100644 (file)
@@ -127,14 +127,28 @@ seastar::future<bufferlist> TMDriver::read(
 
 void TMDriver::init()
 {
+  auto scanner = std::make_unique<Scanner>(*segment_manager);
+  auto& scanner_ref = *scanner.get();
   auto segment_cleaner = std::make_unique<SegmentCleaner>(
     SegmentCleaner::config_t::get_default(),
+    std::move(scanner),
     false /* detailed */);
   segment_cleaner->mount(*segment_manager);
-  auto journal = std::make_unique<Journal>(*segment_manager);
+  auto journal = std::make_unique<Journal>(*segment_manager, scanner_ref);
   auto cache = std::make_unique<Cache>(*segment_manager);
   auto lba_manager = lba_manager::create_lba_manager(*segment_manager, *cache);
 
+  auto epm = std::make_unique<ExtentPlacementManager>(*cache, *lba_manager);
+
+  epm->add_allocator(
+    device_type_t::SEGMENTED,
+    std::make_unique<SegmentedAllocator>(
+      *segment_cleaner,
+      *segment_manager,
+      *lba_manager,
+      *journal,
+      *cache));
+
   journal->set_segment_provider(&*segment_cleaner);
 
   tm = std::make_unique<TransactionManager>(
@@ -142,7 +156,8 @@ void TMDriver::init()
     std::move(segment_cleaner),
     std::move(journal),
     std::move(cache),
-    std::move(lba_manager));
+    std::move(lba_manager),
+    std::move(epm));
 }
 
 void TMDriver::clear()