]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/tools/store_nbd: call segment_manager->close() after tm->close()
authorKefu Chai <kchai@redhat.com>
Tue, 13 Jul 2021 11:22:57 +0000 (19:22 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 13 Jul 2021 11:43:42 +0000 (19:43 +0800)
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>
src/crimson/tools/store_nbd/tm_driver.cc

index 64271bc0ee204d15e4d9dca868737ccee2cea4a9..083e0aaf0c30f77dece606c2124d1cf2cb48b833 100644 (file)
@@ -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"