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);
(uint32_t)record.deltas.size(),
(uint32_t)record.extents.size(),
current_segment_nonce,
+ committed_to,
data_bl.crc32c(-1)
};
encode(header, bl);
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{
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
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);
}
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};