From: Samuel Just Date: Wed, 28 Apr 2021 07:22:16 +0000 (-0700) Subject: crimson/os/seastore/journal: close open segment and reset soft state in close() X-Git-Tag: v17.1.0~2043^2~11 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=85b94ac5391e9601a8c0f3851266534b09055df9;p=ceph.git crimson/os/seastore/journal: close open segment and reset soft state in close() Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/journal.h b/src/crimson/os/seastore/journal.h index d2cfe1383f590..6804a47ca65f2 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>;