]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: move JournalSegmentProvider to SegmentProvider
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 18 May 2021 07:27:05 +0000 (15:27 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Wed, 8 Sep 2021 03:03:00 +0000 (11:03 +0800)
This provider will serve not only for the journal, but also the extent placement
manager from now on.

Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/os/seastore/journal.cc
src/crimson/os/seastore/journal.h
src/crimson/os/seastore/segment_cleaner.h
src/test/crimson/seastore/test_btree_lba_manager.cc
src/test/crimson/seastore/test_seastore_journal.cc

index 84d587564d8da29318528fed7b6966c0d57250dc..974c908f2a38f6fff22ba62f16a0126710002c3a 100644 (file)
@@ -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 {
index 7b0bae2490c67c4c2370a666c64342a8757d5c44..bf4103a2a0a68e2e13879169de7c5c3cfbc26f00 100644 (file)
@@ -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<segment_id_t>;
-  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;
index 474275d399f20d1def4c7a9aa1c29d20c733544f..a94a133301f4b60b4461a46939c9ef13e21c9c6a 100644 (file)
@@ -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<segment_id_t>;
+  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 {
index 5ecd1640e0f8f9d3d23fac376aecd2f6a9e4d43b..3c94f5226e522c5dca2a0a6a00e4c1e143dece9b 100644 (file)
@@ -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;
index fe824061552c74f44178f0993fd57a26a409f1d7..2cc2439c7deaad3316b00606be7098a1436e2b44 100644 (file)
@@ -6,6 +6,7 @@
 #include <random>
 
 #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> journal;