]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/cache: get block-size from reader
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 25 Oct 2021 08:39:29 +0000 (16:39 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 27 Oct 2021 07:46:45 +0000 (15:46 +0800)
Cache cannot get the correct block size before SegmentManager is
mounted.

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/extent_reader.h
src/crimson/os/seastore/seastore.cc
src/crimson/tools/store_nbd/tm_driver.cc
src/test/crimson/seastore/test_btree_lba_manager.cc
src/test/crimson/seastore/test_randomblock_manager.cc
src/test/crimson/seastore/test_seastore_cache.cc
src/test/crimson/seastore/transaction_manager_test_state.h

index f0eb8370958c563d4dfdd49fb36d2b385c7cc28a..22c8af25d739d66a04303a732f9a7d480043ae70 100644 (file)
@@ -21,10 +21,8 @@ using std::string_view;
 namespace crimson::os::seastore {
 
 Cache::Cache(
-  ExtentReader &reader,
-  segment_off_t block_size)
-  : reader(reader),
-    block_size(block_size)
+  ExtentReader &reader)
+  : reader(reader)
 {
   register_metrics();
 }
@@ -1018,7 +1016,7 @@ record_t Cache::prepare_record(Transaction &t)
   record_header_fullness.ool_stats.total_bytes += ool_stats.header_bytes;
 
   auto record_size = get_encoded_record_length(
-      record, block_size);
+      record, reader.get_block_size());
   auto inline_overhead =
       record_size.mdlength + record_size.dlength - record.get_raw_data_size();
   efforts.inline_record_overhead_bytes += inline_overhead;
index 7ad1af4a8762294b740f11f5e7d4bb7cc3032d43..8d89423cacb756bc6a0e0ad94318304dd338aa7d 100644 (file)
@@ -90,7 +90,7 @@ public:
     crimson::ct_error::input_output_error>;
   using base_iertr = trans_iertr<base_ertr>;
 
-  Cache(ExtentReader &reader, segment_off_t block_size);
+  Cache(ExtentReader &reader);
   ~Cache();
 
   /// Creates empty transaction by source
@@ -614,8 +614,6 @@ public:
 
 private:
   ExtentReader &reader;                   ///< ref to extent reader
-  segment_off_t block_size;       ///< block size of the segment
-                                   ///< manager holding journal records
   RootBlockRef root;               ///< ref to current root
   ExtentIndex extents;             ///< set of live extents
 
index 66dd6db2b482b1c310e7825d41c1a6e2301c1068..a3f1dd53a6811ebf9152333125f1b89625181882 100644 (file)
@@ -14,6 +14,12 @@ class TransactionManager;
 
 class ExtentReader {
 public:
+  segment_off_t get_block_size() const {
+    assert(segment_managers.size());
+    // assume all segment managers have the same block size
+    return segment_managers[0]->get_block_size();
+  }
+
   using read_ertr = SegmentManager::read_ertr;
   ExtentReader() {
     segment_managers.resize(DEVICE_ID_MAX, nullptr);
index 3ccf0e099a5a77eaaf7b1d860c02d69405018b98..e12ac875153f7b100046d2817af6f0799af4644a 100644 (file)
@@ -1295,7 +1295,7 @@ std::unique_ptr<SeaStore> make_seastore(
     false /* detailed */);
 
   auto journal = std::make_unique<Journal>(*sm, scanner_ref);
-  auto cache = std::make_unique<Cache>(scanner_ref, sm->get_block_size());
+  auto cache = std::make_unique<Cache>(scanner_ref);
   auto lba_manager = lba_manager::create_lba_manager(*sm, *cache);
 
   auto epm = std::make_unique<ExtentPlacementManager>(*cache, *lba_manager);
index f83801730a7cf5b441142afb2c4ac6f32c06cb2b..dad672044289f539eeade0f652ff51ad9f1506ae 100644 (file)
@@ -137,7 +137,7 @@ void TMDriver::init()
   std::vector<SegmentManager*> sms;
   segment_cleaner->mount(segment_manager->get_device_id(), sms);
   auto journal = std::make_unique<Journal>(*segment_manager, scanner_ref);
-  auto cache = std::make_unique<Cache>(scanner_ref, segment_manager->get_block_size());
+  auto cache = std::make_unique<Cache>(scanner_ref);
   auto lba_manager = lba_manager::create_lba_manager(*segment_manager, *cache);
 
   auto epm = std::make_unique<ExtentPlacementManager>(*cache, *lba_manager);
index 34f0cd7c8d3ea952d52693134f3273f4617425ca..76cba8a752576a85823b584549b01ab7ec6a5064 100644 (file)
@@ -42,7 +42,7 @@ struct btree_test_base :
     : segment_manager(segment_manager::create_test_ephemeral()),
       scanner(new ExtentReader()),
       journal(*segment_manager, *scanner),
-      cache(*scanner, segment_manager->get_block_size()),
+      cache(*scanner),
       block_size(segment_manager->get_block_size()),
       next(segment_manager->get_device_id(), 0)
   {
index 223f54029398198fac3a1e75fb320481c652fcd5..a09daa5d06c1653f13bc5bfc9c3e94e573b66d92 100644 (file)
@@ -59,7 +59,7 @@ struct rbm_test_t : public  seastar_test_suite_t,
   rbm_test_t() :
       segment_manager(segment_manager::create_test_ephemeral()),
       reader(new ExtentReader()),
-      cache(*reader, segment_manager->get_block_size())
+      cache(*reader)
   {
     reader->add_segment_manager(segment_manager.get());
     device = new nvme_device::TestMemory(DEFAULT_TEST_SIZE);
index 8c8427aea389d3236e37f560bcfe03c0d3bcbdc4..355b0a4682a72f80af35039130176ca5ce009395 100644 (file)
@@ -29,7 +29,7 @@ struct cache_test_t : public seastar_test_suite_t {
   cache_test_t()
     : segment_manager(segment_manager::create_test_ephemeral()),
       reader(new ExtentReader()),
-      cache(*reader, segment_manager->get_block_size()),
+      cache(*reader),
       current(segment_id_t(segment_manager->get_device_id(), 0), 0) {
     reader->add_segment_manager(segment_manager.get());
   }
index 4e868e173b7e36d2bd734a74349415f6334c0d2e..47e2bb0b4354204947bb3a02ea23cbfe12c28f95 100644 (file)
@@ -78,7 +78,7 @@ auto get_transaction_manager(
     std::move(scanner),
     true);
   auto journal = std::make_unique<Journal>(segment_manager, scanner_ref);
-  auto cache = std::make_unique<Cache>(scanner_ref, segment_manager.get_block_size());
+  auto cache = std::make_unique<Cache>(scanner_ref);
   auto lba_manager = lba_manager::create_lba_manager(segment_manager, *cache);
 
   auto epm = std::make_unique<ExtentPlacementManager>(*cache, *lba_manager);