From: Samuel Just Date: Fri, 7 Aug 2020 22:08:18 +0000 (-0700) Subject: crimson/os/seastore/journal: add interface for trimming the journal X-Git-Tag: v17.0.0~1015^2~10 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=272fd5ef8f30ac0c743fae1e9c57a92d764b98a9;p=ceph.git crimson/os/seastore/journal: add interface for trimming the journal Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/journal.cc b/src/crimson/os/seastore/journal.cc index 26f894faf1e20..fe2594c311983 100644 --- a/src/crimson/os/seastore/journal.cc +++ b/src/crimson/os/seastore/journal.cc @@ -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( diff --git a/src/crimson/os/seastore/journal.h b/src/crimson/os/seastore/journal.h index 6556a4a8bebae..ab65f5f29e557 100644 --- a/src/crimson/os/seastore/journal.h +++ b/src/crimson/os/seastore/journal.h @@ -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; diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 5b6f03f115195..ea4a1cf0f9952 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -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 diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 4381ef557504b..71ddbb29c8754 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -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); diff --git a/src/test/crimson/seastore/test_seastore_journal.cc b/src/test/crimson/seastore/test_seastore_journal.cc index f54e8645292b3..ef5c1efa44b16 100644 --- a/src/test/crimson/seastore/test_seastore_journal.cc +++ b/src/test/crimson/seastore/test_seastore_journal.cc @@ -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);