From: Samuel Just Date: Thu, 19 Nov 2020 21:08:17 +0000 (-0800) Subject: crimson/os/seastore/journal: maintain committed_to on each record X-Git-Tag: v17.0.0~316^2~10 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=6cd52cb0e602bdc558ef6797cdcd3107ff8b1a48;p=ceph.git crimson/os/seastore/journal: maintain committed_to on each record Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/journal.cc b/src/crimson/os/seastore/journal.cc index 7c29143280305..06cc5a888df86 100644 --- a/src/crimson/os/seastore/journal.cc +++ b/src/crimson/os/seastore/journal.cc @@ -79,6 +79,7 @@ Journal::initialize_segment(Segment &segment) bl.append(bp); written_to = segment_manager.get_block_size(); + committed_to = 0; return segment.write(0, bl).safe_then( [=] { segment_provider->update_journal_tail_committed(new_tail); @@ -104,6 +105,7 @@ ceph::bufferlist Journal::encode_record( (uint32_t)record.deltas.size(), (uint32_t)record.extents.size(), current_segment_nonce, + committed_to, data_bl.crc32c(-1) }; encode(header, bl); @@ -175,6 +177,7 @@ Journal::write_record_ret Journal::write_record( return current_journal_segment->write(target, to_write).handle_error( write_record_ertr::pass_further{}, crimson::ct_error::assert_all{ "TODO" }).safe_then([this, target] { + committed_to = target; return write_record_ret( write_record_ertr::ready_future_marker{}, paddr_t{ diff --git a/src/crimson/os/seastore/journal.h b/src/crimson/os/seastore/journal.h index 07eb0cf96b9e0..b8fe1351a2b5c 100644 --- a/src/crimson/os/seastore/journal.h +++ b/src/crimson/os/seastore/journal.h @@ -55,6 +55,8 @@ struct record_header_t { uint32_t deltas; // number of deltas uint32_t extents; // number of extents segment_nonce_t segment_nonce;// nonce of containing segment + segment_off_t committed_to; // records in this segment prior to committed_to + // have been fully written checksum_t data_crc; // crc of data payload @@ -65,6 +67,7 @@ struct record_header_t { denc(v.deltas, p); denc(v.extents, p); denc(v.segment_nonce, p); + denc(v.committed_to, p); denc(v.data_crc, p); DENC_FINISH(p); } @@ -235,6 +238,7 @@ private: SegmentRef current_journal_segment; segment_off_t written_to = 0; + segment_off_t committed_to = 0; journal_seq_t get_journal_seq(paddr_t addr) { return journal_seq_t{next_journal_segment_seq-1, addr};