From bff80b3dc2431518f2a309f6c6e90271f38c743b Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 27 Aug 2020 00:12:56 -0700 Subject: [PATCH] test/crimson/.../test_transaction_manager: reset ephemeral segment_manager state on replay Signed-off-by: Samuel Just --- src/crimson/os/seastore/segment_manager/ephemeral.cc | 8 ++++++++ src/crimson/os/seastore/segment_manager/ephemeral.h | 2 ++ src/test/crimson/seastore/test_transaction_manager.cc | 4 ++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/crimson/os/seastore/segment_manager/ephemeral.cc b/src/crimson/os/seastore/segment_manager/ephemeral.cc index ee336a153ec..ee8e87e457f 100644 --- a/src/crimson/os/seastore/segment_manager/ephemeral.cc +++ b/src/crimson/os/seastore/segment_manager/ephemeral.cc @@ -116,6 +116,14 @@ EphemeralSegmentManager::~EphemeralSegmentManager() } } +void EphemeralSegmentManager::remount() +{ + for (auto &i : segment_state) { + if (i == Segment::segment_state_t::OPEN) + i = Segment::segment_state_t::CLOSED; + } +} + SegmentManager::open_ertr::future EphemeralSegmentManager::open( segment_id_t id) { diff --git a/src/crimson/os/seastore/segment_manager/ephemeral.h b/src/crimson/os/seastore/segment_manager/ephemeral.h index c5dd5a8485f..4b43883b112 100644 --- a/src/crimson/os/seastore/segment_manager/ephemeral.h +++ b/src/crimson/os/seastore/segment_manager/ephemeral.h @@ -72,6 +72,8 @@ public: return config.segment_size; } + void remount(); + // public so tests can bypass segment interface when simpler Segment::write_ertr::future<> segment_write( paddr_t addr, diff --git a/src/test/crimson/seastore/test_transaction_manager.cc b/src/test/crimson/seastore/test_transaction_manager.cc index e381e2007aa..96e35c793d6 100644 --- a/src/test/crimson/seastore/test_transaction_manager.cc +++ b/src/test/crimson/seastore/test_transaction_manager.cc @@ -8,6 +8,7 @@ #include "crimson/os/seastore/segment_cleaner.h" #include "crimson/os/seastore/cache.h" #include "crimson/os/seastore/transaction_manager.h" +#include "crimson/os/seastore/segment_manager/ephemeral.h" #include "crimson/os/seastore/segment_manager.h" #include "test/crimson/seastore/test_block.h" @@ -199,10 +200,9 @@ struct transaction_manager_test_t : public seastar_test_suite_t { void replay() { tm->close().unsafe_get(); - auto next = segment_cleaner->get_next(); destroy(); + static_cast(&*segment_manager)->remount(); init(); - segment_cleaner->set_next(next); tm->mount().unsafe_get(); } -- 2.39.5