]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/journal: maintain committed_to on each record
authorSamuel Just <sjust@redhat.com>
Thu, 19 Nov 2020 21:08:17 +0000 (13:08 -0800)
committerSamuel Just <sjust@redhat.com>
Fri, 11 Dec 2020 21:31:39 +0000 (13:31 -0800)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/journal.cc
src/crimson/os/seastore/journal.h

index 7c29143280305deb4c574013e25ea637b1d43c4a..06cc5a888df8673a13bbfee516741437e50b295b 100644 (file)
@@ -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{
index 07eb0cf96b9e03eade555fde7fc410c6ad7f7a63..b8fe1351a2b5c45dbabd0fb4a40451f01b762fad 100644 (file)
@@ -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};