*/
using close_ertr = crimson::errorator<
crimson::ct_error::input_output_error>;
- close_ertr::future<> close() { return close_ertr::now(); }
+ close_ertr::future<> close() {
+ return (
+ current_journal_segment ?
+ current_journal_segment->close() :
+ Segment::close_ertr::now()
+ ).handle_error(
+ close_ertr::pass_further{},
+ crimson::ct_error::assert_all{
+ "Error during Journal::close()"
+ }
+ ).finally([this] {
+ current_journal_segment.reset();
+ reset_soft_state();
+ return close_ertr::now();
+ });
+ }
/**
* submit_record
WritePipeline *write_pipeline = nullptr;
+ void reset_soft_state() {
+ next_journal_segment_seq = 0;
+ current_segment_nonce = 0;
+ written_to = 0;
+ committed_to = 0;
+ }
+
/// prepare segment for writes, writes out segment header
using initialize_segment_ertr = crimson::errorator<
crimson::ct_error::input_output_error>;