mirror of
https://github.com/ceph/ceph
synced 2025-02-24 11:37:37 +00:00
crimson/os/seastore/journal: add interface for trimming the journal
Signed-off-by: Samuel Just <sjust@redhat.com>
This commit is contained in:
parent
001bed8659
commit
272fd5ef8f
@ -28,18 +28,25 @@ Journal::Journal(SegmentManager &segment_manager)
|
||||
Journal::initialize_segment_ertr::future<> Journal::initialize_segment(
|
||||
Segment &segment)
|
||||
{
|
||||
logger().debug("initialize_segment {}", segment.get_segment_id());
|
||||
auto new_tail = segment_provider->get_journal_tail_target();
|
||||
logger().debug(
|
||||
"initialize_segment {} journal_tail_target {}",
|
||||
segment.get_segment_id(),
|
||||
new_tail);
|
||||
// write out header
|
||||
ceph_assert(segment.get_write_ptr() == 0);
|
||||
bufferlist bl;
|
||||
auto header = segment_header_t{
|
||||
current_journal_segment_seq++,
|
||||
segment.get_segment_id(),
|
||||
current_replay_point};
|
||||
segment_provider->get_journal_tail_target()};
|
||||
::encode(header, bl);
|
||||
|
||||
written_to = segment_manager.get_block_size();
|
||||
return segment.write(0, bl).handle_error(
|
||||
return segment.write(0, bl).safe_then(
|
||||
[=] {
|
||||
segment_provider->update_journal_tail_committed(new_tail);
|
||||
},
|
||||
init_ertr::pass_further{},
|
||||
crimson::ct_error::assert_all{ "TODO" });
|
||||
}
|
||||
@ -211,7 +218,7 @@ Journal::find_replay_segments_fut Journal::find_replay_segments()
|
||||
rt.second.journal_segment_seq;
|
||||
});
|
||||
|
||||
auto replay_from = segments.rbegin()->second.journal_tail;
|
||||
auto replay_from = segments.rbegin()->second.journal_tail.offset;
|
||||
auto from = segments.begin();
|
||||
if (replay_from != P_ADDR_NULL) {
|
||||
from = std::find_if(
|
||||
|
@ -35,7 +35,7 @@ struct segment_header_t {
|
||||
segment_seq_t journal_segment_seq;
|
||||
segment_id_t physical_segment_id; // debugging
|
||||
|
||||
paddr_t journal_tail;
|
||||
journal_seq_t journal_tail;
|
||||
|
||||
DENC(segment_header_t, v, p) {
|
||||
DENC_START(1, 1, p);
|
||||
@ -80,6 +80,9 @@ public:
|
||||
/* TODO: we'll want to use this to propogate information about segment contents */
|
||||
virtual void put_segment(segment_id_t segment) = 0;
|
||||
|
||||
virtual journal_seq_t get_journal_tail_target() const = 0;
|
||||
virtual void update_journal_tail_committed(journal_seq_t tail_committed) = 0;
|
||||
|
||||
virtual ~JournalSegmentProvider() {}
|
||||
};
|
||||
|
||||
@ -170,8 +173,6 @@ private:
|
||||
JournalSegmentProvider *segment_provider = nullptr;
|
||||
SegmentManager &segment_manager;
|
||||
|
||||
paddr_t current_replay_point;
|
||||
|
||||
segment_seq_t current_journal_segment_seq = 0;
|
||||
|
||||
SegmentRef current_journal_segment;
|
||||
|
@ -55,6 +55,14 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
journal_seq_t get_journal_tail_target() const final {
|
||||
// TODO -- part of gc
|
||||
return journal_seq_t{};
|
||||
}
|
||||
void update_journal_tail_committed(journal_seq_t committed) final {
|
||||
// TODO -- part of gc
|
||||
}
|
||||
|
||||
/// Writes initial metadata to disk
|
||||
using mkfs_ertr = crimson::errorator<
|
||||
crimson::ct_error::input_output_error
|
||||
|
@ -54,6 +54,9 @@ struct btree_lba_manager_test :
|
||||
return;
|
||||
}
|
||||
|
||||
journal_seq_t get_journal_tail_target() const final { return journal_seq_t{}; }
|
||||
void update_journal_tail_committed(journal_seq_t committed) final {}
|
||||
|
||||
auto submit_transaction(TransactionRef t)
|
||||
{
|
||||
auto record = cache.try_construct_record(*t);
|
||||
|
@ -89,6 +89,9 @@ struct journal_test_t : seastar_test_suite_t, JournalSegmentProvider {
|
||||
return;
|
||||
}
|
||||
|
||||
journal_seq_t get_journal_tail_target() const final { return journal_seq_t{}; }
|
||||
void update_journal_tail_committed(journal_seq_t paddr) final {}
|
||||
|
||||
seastar::future<> set_up_fut() final {
|
||||
journal.reset(new Journal(*segment_manager));
|
||||
journal->set_segment_provider(this);
|
||||
|
Loading…
Reference in New Issue
Block a user