using segment_nonce_t = uint32_t;
+class SegmentProvider;
/**
* Segment header
};
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.
*/
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).
* 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;
}
}
private:
- JournalSegmentProvider *segment_provider = nullptr;
+ SegmentProvider *segment_provider = nullptr;
SegmentManager &segment_manager;
segment_seq_t next_journal_segment_seq = 0;
}
};
+/**
+ * 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(
};
-class SegmentCleaner : public JournalSegmentProvider {
+class SegmentCleaner : public SegmentProvider {
public:
/// Config
struct config_t {
#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"
}
};
-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;