From c80bfeabc09b564920eb87dc295c9462fe8e55e8 Mon Sep 17 00:00:00 2001 From: Zhang Song Date: Tue, 10 Jan 2023 16:49:22 +0800 Subject: [PATCH] crimson/os/seastore: move ool segment seq allocator to EPM Signed-off-by: Zhang Song (cherry picked from commit 944c1253bf52fb6f7d773b4bfeb5f7cc8f0ffebc) --- src/crimson/os/seastore/async_cleaner.cc | 4 ++-- src/crimson/os/seastore/async_cleaner.h | 12 +++++------- src/crimson/os/seastore/extent_placement_manager.cc | 4 ++-- src/crimson/os/seastore/extent_placement_manager.h | 11 ++++++++++- src/crimson/os/seastore/transaction_manager.cc | 1 + 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/crimson/os/seastore/async_cleaner.cc b/src/crimson/os/seastore/async_cleaner.cc index 6468beb43b4ea..a993506e0ec3f 100644 --- a/src/crimson/os/seastore/async_cleaner.cc +++ b/src/crimson/os/seastore/async_cleaner.cc @@ -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(); } diff --git a/src/crimson/os/seastore/async_cleaner.h b/src/crimson/os/seastore/async_cleaner.h index 02e1df1d3d86f..062f3883a9c4b 100644 --- a/src/crimson/os/seastore/async_cleaner.h +++ b/src/crimson/os/seastore/async_cleaner.h @@ -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( - 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; diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index b8fd2b18072a0..97a0d02a7ead4 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -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( 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( 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(); } diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index d700a0b6c8b49..15eb592f57a9f 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -173,12 +173,19 @@ struct reserve_io_result_t { class ExtentPlacementManager { public: - ExtentPlacementManager() { + ExtentPlacementManager() + : ool_segment_seq_allocator( + std::make_unique(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; diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 891a7f669bd76..a42d5d7ff524f 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -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(cleaner.get()); cache->set_segment_provider(*segment_cleaner); -- 2.39.5