From: Xuehan Xu Date: Tue, 18 May 2021 07:27:05 +0000 (+0800) Subject: crimson/os/seastore: move JournalSegmentProvider to SegmentProvider X-Git-Tag: v17.1.0~919^2~16 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=59e77da56b3a99391bdf4d0870977ae7a97678b4;p=ceph.git crimson/os/seastore: move JournalSegmentProvider to SegmentProvider This provider will serve not only for the journal, but also the extent placement manager from now on. Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/journal.cc b/src/crimson/os/seastore/journal.cc index 84d587564d8da..974c908f2a38f 100644 --- a/src/crimson/os/seastore/journal.cc +++ b/src/crimson/os/seastore/journal.cc @@ -8,6 +8,7 @@ #include "crimson/os/seastore/journal.h" #include "include/intarith.h" +#include "crimson/os/seastore/segment_cleaner.h" #include "crimson/os/seastore/segment_manager.h" namespace { diff --git a/src/crimson/os/seastore/journal.h b/src/crimson/os/seastore/journal.h index 7b0bae2490c67..bf4103a2a0a68 100644 --- a/src/crimson/os/seastore/journal.h +++ b/src/crimson/os/seastore/journal.h @@ -23,6 +23,7 @@ namespace crimson::os::seastore { using segment_nonce_t = uint32_t; +class SegmentProvider; /** * Segment header @@ -94,33 +95,6 @@ struct extent_info_t { }; std::ostream &operator<<(std::ostream &out, const extent_info_t &header); -/** - * Callback interface for managing available segments - */ -class JournalSegmentProvider { -public: - using get_segment_ertr = crimson::errorator< - crimson::ct_error::input_output_error>; - using get_segment_ret = get_segment_ertr::future; - virtual get_segment_ret get_segment() = 0; - - virtual void close_segment(segment_id_t) {} - - virtual void set_journal_segment( - segment_id_t segment, - segment_seq_t seq) {} - - virtual journal_seq_t get_journal_tail_target() const = 0; - virtual void update_journal_tail_committed(journal_seq_t tail_committed) = 0; - - virtual void init_mark_segment_closed( - segment_id_t segment, segment_seq_t seq) {} - - virtual segment_seq_t get_seq(segment_id_t id) { return 0; } - - virtual ~JournalSegmentProvider() {} -}; - /** * Manages stream of atomically written records to a SegmentManager. */ @@ -129,7 +103,7 @@ public: Journal(SegmentManager &segment_manager); /** - * Sets the JournalSegmentProvider. + * Sets the SegmentProvider. * * Not provided in constructor to allow the provider to not own * or construct the Journal (TransactionManager). @@ -137,7 +111,7 @@ public: * Note, Journal does not own this ptr, user must ensure that * *provider outlives Journal. */ - void set_segment_provider(JournalSegmentProvider *provider) { + void set_segment_provider(SegmentProvider *provider) { segment_provider = provider; } @@ -258,7 +232,7 @@ public: } private: - JournalSegmentProvider *segment_provider = nullptr; + SegmentProvider *segment_provider = nullptr; SegmentManager &segment_manager; segment_seq_t next_journal_segment_seq = 0; diff --git a/src/crimson/os/seastore/segment_cleaner.h b/src/crimson/os/seastore/segment_cleaner.h index 474275d399f20..a94a133301f4b 100644 --- a/src/crimson/os/seastore/segment_cleaner.h +++ b/src/crimson/os/seastore/segment_cleaner.h @@ -43,6 +43,33 @@ struct segment_info_t { } }; +/** + * Callback interface for managing available segments + */ +class SegmentProvider { +public: + using get_segment_ertr = crimson::errorator< + crimson::ct_error::input_output_error>; + using get_segment_ret = get_segment_ertr::future; + virtual get_segment_ret get_segment() = 0; + + virtual void close_segment(segment_id_t) {} + + virtual void set_journal_segment( + segment_id_t segment, + segment_seq_t seq) {} + + virtual journal_seq_t get_journal_tail_target() const = 0; + virtual void update_journal_tail_committed(journal_seq_t tail_committed) = 0; + + virtual void init_mark_segment_closed( + segment_id_t segment, segment_seq_t seq) {} + + virtual segment_seq_t get_seq(segment_id_t id) { return 0; } + + virtual ~SegmentProvider() {} +}; + class SpaceTrackerI { public: virtual int64_t allocate( @@ -208,7 +235,7 @@ public: }; -class SegmentCleaner : public JournalSegmentProvider { +class SegmentCleaner : public SegmentProvider { public: /// Config struct config_t { diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 5ecd1640e0f8f..3c94f5226e522 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -25,7 +25,7 @@ using namespace crimson::os::seastore::lba_manager; using namespace crimson::os::seastore::lba_manager::btree; struct btree_lba_manager_test : - public seastar_test_suite_t, JournalSegmentProvider { + public seastar_test_suite_t, SegmentProvider { segment_manager::EphemeralSegmentManagerRef segment_manager; Journal journal; Cache cache; diff --git a/src/test/crimson/seastore/test_seastore_journal.cc b/src/test/crimson/seastore/test_seastore_journal.cc index fe824061552c7..2cc2439c7deaa 100644 --- a/src/test/crimson/seastore/test_seastore_journal.cc +++ b/src/test/crimson/seastore/test_seastore_journal.cc @@ -6,6 +6,7 @@ #include #include "crimson/common/log.h" +#include "crimson/os/seastore/segment_cleaner.h" #include "crimson/os/seastore/journal.h" #include "crimson/os/seastore/segment_manager/ephemeral.h" @@ -62,7 +63,7 @@ struct record_validator_t { } }; -struct journal_test_t : seastar_test_suite_t, JournalSegmentProvider { +struct journal_test_t : seastar_test_suite_t, SegmentProvider { segment_manager::EphemeralSegmentManagerRef segment_manager; WritePipeline pipeline; std::unique_ptr journal;