From 6bb3df896f5c9c6ebdecfaf51ecfa88762f2e749 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 25 Oct 2021 16:39:29 +0800 Subject: [PATCH] crimson/os/seastore/cache: get block-size from reader Cache cannot get the correct block size before SegmentManager is mounted. Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 8 +++----- src/crimson/os/seastore/cache.h | 4 +--- src/crimson/os/seastore/extent_reader.h | 6 ++++++ src/crimson/os/seastore/seastore.cc | 2 +- src/crimson/tools/store_nbd/tm_driver.cc | 2 +- src/test/crimson/seastore/test_btree_lba_manager.cc | 2 +- src/test/crimson/seastore/test_randomblock_manager.cc | 2 +- src/test/crimson/seastore/test_seastore_cache.cc | 2 +- .../crimson/seastore/transaction_manager_test_state.h | 2 +- 9 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index f0eb8370958..22c8af25d73 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -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; diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 7ad1af4a876..8d89423cacb 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -90,7 +90,7 @@ public: crimson::ct_error::input_output_error>; using base_iertr = trans_iertr; - 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 diff --git a/src/crimson/os/seastore/extent_reader.h b/src/crimson/os/seastore/extent_reader.h index 66dd6db2b48..a3f1dd53a68 100644 --- a/src/crimson/os/seastore/extent_reader.h +++ b/src/crimson/os/seastore/extent_reader.h @@ -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); diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index 3ccf0e099a5..e12ac875153 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -1295,7 +1295,7 @@ std::unique_ptr make_seastore( false /* detailed */); auto journal = std::make_unique(*sm, scanner_ref); - auto cache = std::make_unique(scanner_ref, sm->get_block_size()); + auto cache = std::make_unique(scanner_ref); auto lba_manager = lba_manager::create_lba_manager(*sm, *cache); auto epm = std::make_unique(*cache, *lba_manager); diff --git a/src/crimson/tools/store_nbd/tm_driver.cc b/src/crimson/tools/store_nbd/tm_driver.cc index f83801730a7..dad67204428 100644 --- a/src/crimson/tools/store_nbd/tm_driver.cc +++ b/src/crimson/tools/store_nbd/tm_driver.cc @@ -137,7 +137,7 @@ void TMDriver::init() std::vector sms; segment_cleaner->mount(segment_manager->get_device_id(), sms); auto journal = std::make_unique(*segment_manager, scanner_ref); - auto cache = std::make_unique(scanner_ref, segment_manager->get_block_size()); + auto cache = std::make_unique(scanner_ref); auto lba_manager = lba_manager::create_lba_manager(*segment_manager, *cache); auto epm = std::make_unique(*cache, *lba_manager); diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 34f0cd7c8d3..76cba8a7525 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -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) { diff --git a/src/test/crimson/seastore/test_randomblock_manager.cc b/src/test/crimson/seastore/test_randomblock_manager.cc index 223f5402939..a09daa5d06c 100644 --- a/src/test/crimson/seastore/test_randomblock_manager.cc +++ b/src/test/crimson/seastore/test_randomblock_manager.cc @@ -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); diff --git a/src/test/crimson/seastore/test_seastore_cache.cc b/src/test/crimson/seastore/test_seastore_cache.cc index 8c8427aea38..355b0a4682a 100644 --- a/src/test/crimson/seastore/test_seastore_cache.cc +++ b/src/test/crimson/seastore/test_seastore_cache.cc @@ -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()); } diff --git a/src/test/crimson/seastore/transaction_manager_test_state.h b/src/test/crimson/seastore/transaction_manager_test_state.h index 4e868e173b7..47e2bb0b435 100644 --- a/src/test/crimson/seastore/transaction_manager_test_state.h +++ b/src/test/crimson/seastore/transaction_manager_test_state.h @@ -78,7 +78,7 @@ auto get_transaction_manager( std::move(scanner), true); auto journal = std::make_unique(segment_manager, scanner_ref); - auto cache = std::make_unique(scanner_ref, segment_manager.get_block_size()); + auto cache = std::make_unique(scanner_ref); auto lba_manager = lba_manager::create_lba_manager(segment_manager, *cache); auto epm = std::make_unique(*cache, *lba_manager); -- 2.39.5