From: Kefu Chai Date: Tue, 13 Jul 2021 11:22:57 +0000 (+0800) Subject: crimson/tools/store_nbd: call segment_manager->close() after tm->close() X-Git-Tag: v17.1.0~1426^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7094254c4a45b5d507cee45e767fdeb026f2b074;p=ceph.git crimson/tools/store_nbd: call segment_manager->close() after tm->close() 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 --- diff --git a/src/crimson/tools/store_nbd/tm_driver.cc b/src/crimson/tools/store_nbd/tm_driver.cc index 64271bc0ee20..083e0aaf0c30 100644 --- a/src/crimson/tools/store_nbd/tm_driver.cc +++ b/src/crimson/tools/store_nbd/tm_driver.cc @@ -214,12 +214,9 @@ seastar::future<> TMDriver::mount() 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"