TransactionManager::close() calls into journal->close(), which in turn
calls BlockSegmentManager::segment_close(). and
SegmentStateTracker::write_out() is then called by
BlockSegmentManager::segment_close().
but BlockSegmentManager::close() closes the underlying seastar::file,
we are not able to write to the file after closing it.
in this change, to ensure that we can close a segment correctly in
TMDriver::close(), tm->close() is called before
segment_manager->close().
Signed-off-by: Kefu Chai <kchai@redhat.com>
seastar::future<> TMDriver::close()
{
- return segment_manager->close(
- ).safe_then([this] {
- return tm->close();
- }).safe_then([this] {
+ return tm->close().safe_then([this] {
clear();
- return seastar::now();
+ return segment_manager->close();
}).handle_error(
crimson::ct_error::assert_all{
"Invalid errror during TMDriver::close"