From: myoungwon oh Date: Fri, 17 Jun 2022 05:25:10 +0000 (+0900) Subject: crimson/os/seastore/cbjournal: make cbjournal to store alloc_tail X-Git-Tag: v18.0.0~230^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=41469d628ea5fc123243f7d7d855058d1fde44a4;p=ceph.git crimson/os/seastore/cbjournal: make cbjournal to store alloc_tail Signed-off-by: Myoungwon Oh --- diff --git a/src/crimson/os/seastore/journal/circular_bounded_journal.cc b/src/crimson/os/seastore/journal/circular_bounded_journal.cc index 07d13f69a5216..b8adef9bd4d4f 100644 --- a/src/crimson/os/seastore/journal/circular_bounded_journal.cc +++ b/src/crimson/os/seastore/journal/circular_bounded_journal.cc @@ -47,6 +47,7 @@ CircularBoundedJournal::mkfs(const mkfs_config_t& config) convert_abs_addr_to_paddr( device->get_block_size(), config.device_id)}; + head.alloc_tail = head.journal_tail; head.device_id = config.device_id; encode(head, bl); header = head; @@ -272,10 +273,12 @@ Journal::replay_ret CircularBoundedJournal::replay( DEBUG("header : {}", header); initialized = true; written_to.segment_seq = NULL_SEG_SEQ; - set_written_to(get_journal_tail()); + auto tail = get_journal_tail() <= get_alloc_tail() ? + get_journal_tail() : get_alloc_tail(); + set_written_to(tail); return seastar::do_with( bool(false), - rbm_abs_addr(get_rbm_addr(get_journal_tail())), + rbm_abs_addr(get_rbm_addr(tail)), std::move(delta_handler), segment_seq_t(NULL_SEG_SEQ), [this, FNAME](auto &is_rolled, auto &cursor_addr, auto &d_handler, auto &expected_seq) { @@ -338,12 +341,14 @@ Journal::replay_ret CircularBoundedJournal::replay( journal_seq_t{expected_seq, addr}); return seastar::do_with( std::move(*maybe_record_deltas_list), - [write_result, + [this, + write_result, &d_handler, FNAME](auto& record_deltas_list) { return crimson::do_for_each( record_deltas_list, - [write_result, + [this, + write_result, &d_handler, FNAME](record_deltas_t& record_deltas) { auto locator = record_locator_t{ record_deltas.record_block_base, @@ -354,15 +359,16 @@ Journal::replay_ret CircularBoundedJournal::replay( locator); return crimson::do_for_each( record_deltas.deltas, - [locator, + [this, + locator, &d_handler](auto& p) { auto& modify_time = p.first; auto& delta = p.second; return d_handler( locator, delta, - locator.write_result.start_seq, - locator.write_result.start_seq, + header.journal_tail, + header.alloc_tail, modify_time).discard_result(); }); }).safe_then([]() { diff --git a/src/crimson/os/seastore/journal/circular_bounded_journal.h b/src/crimson/os/seastore/journal/circular_bounded_journal.h index 09c28b1a2f79b..02cda0f413126 100644 --- a/src/crimson/os/seastore/journal/circular_bounded_journal.h +++ b/src/crimson/os/seastore/journal/circular_bounded_journal.h @@ -201,6 +201,7 @@ public: // start offset of CircularBoundedJournal in the device journal_seq_t journal_tail; + journal_seq_t alloc_tail; device_id_t device_id; @@ -212,6 +213,7 @@ public: denc(v.size, p); denc(v.journal_tail, p); + denc(v.alloc_tail, p); denc(v.device_id, p); @@ -248,13 +250,19 @@ public: return get_total_size() - get_used_size(); } - write_ertr::future<> update_journal_tail(journal_seq_t seq) { + write_ertr::future<> update_journal_tail( + journal_seq_t seq, + journal_seq_t alloc_info) { header.journal_tail = seq; + header.alloc_tail = alloc_info; return write_header(); } journal_seq_t get_journal_tail() const { return header.journal_tail; } + journal_seq_t get_alloc_tail() const { + return header.alloc_tail; + } write_ertr::future<> write_header(); diff --git a/src/test/crimson/seastore/test_cbjournal.cc b/src/test/crimson/seastore/test_cbjournal.cc index 808ae71f098e1..4fab32d066140 100644 --- a/src/test/crimson/seastore/test_cbjournal.cc +++ b/src/test/crimson/seastore/test_cbjournal.cc @@ -284,11 +284,15 @@ struct cbjournal_test_t : public seastar_test_suite_t, JournalTrimmer return cbj->get_used_size(); } void update_journal_tail(rbm_abs_addr addr, uint32_t len) { - cbj->update_journal_tail( - journal_seq_t{0, - convert_abs_addr_to_paddr( + paddr_t paddr = + convert_abs_addr_to_paddr( addr + len, - cbj->get_device_id())}).unsafe_get0(); + cbj->get_device_id()); + journal_seq_t seq = {0, paddr}; + cbj->update_journal_tail( + seq, + seq + ).unsafe_get0(); } void set_written_to(journal_seq_t seq) { cbj->set_written_to(seq);