From 85b94ac5391e9601a8c0f3851266534b09055df9 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 28 Apr 2021 00:22:16 -0700 Subject: [PATCH] crimson/os/seastore/journal: close open segment and reset soft state in close() Signed-off-by: Samuel Just --- src/crimson/os/seastore/journal.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/crimson/os/seastore/journal.h b/src/crimson/os/seastore/journal.h index d2cfe1383f5..6804a47ca65 100644 --- a/src/crimson/os/seastore/journal.h +++ b/src/crimson/os/seastore/journal.h @@ -159,7 +159,22 @@ public: */ 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 @@ -256,6 +271,13 @@ private: 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>; -- 2.39.5