virtual FuturizedStore::mkfs_ertr::future<> _mkfs() final {
return TMTestState::_mkfs(
).safe_then([this] {
- return tm->mount(
- ).safe_then([this] {
- return repeat_eagain([this] {
- return seastar::do_with(
- create_mutate_transaction(),
- [this](auto &ref_t) {
- return with_trans_intr(*ref_t, [&](auto &t) {
- return manager->mkfs(t
- ).si_then([this, &t] {
- return submit_transaction_fut2(t);
- });
- });
- });
- });
- }).safe_then([this] {
- return tm->close();
- }).handle_error(
- crimson::ct_error::assert_all{"Invalid error in _mkfs"}
- );
- });
+ return restart_fut();
+ }).safe_then([this] {
+ return repeat_eagain([this] {
+ return seastar::do_with(
+ create_mutate_transaction(),
+ [this](auto &ref_t)
+ {
+ return with_trans_intr(*ref_t, [&](auto &t) {
+ return manager->mkfs(t
+ ).si_then([this, &t] {
+ return submit_transaction_fut2(t);
+ });
+ });
+ });
+ });
+ }).handle_error(
+ crimson::ct_error::assert_all{"Invalid error in _mkfs"}
+ );
}
template <typename F>
}
virtual void _init() = 0;
- void init() {
- _init();
- }
virtual void _destroy() = 0;
- void destroy() {
- _destroy();
+ virtual seastar::future<> _teardown() = 0;
+ seastar::future<> teardown() {
+ return _teardown().then([this] {
+ _destroy();
+ });
}
- virtual seastar::future<> _teardown() = 0;
+
virtual FuturizedStore::mkfs_ertr::future<> _mkfs() = 0;
virtual FuturizedStore::mount_ertr::future<> _mount() = 0;
- void restart() {
- LOG_PREFIX(EphemeralTestState::restart);
+ seastar::future<> restart_fut() {
+ LOG_PREFIX(EphemeralTestState::restart_fut);
SUBINFO(test, "begin ...");
- _teardown().get0();
- destroy();
- segment_manager->remount();
- for (auto &sec_sm : secondary_segment_managers) {
- sec_sm->remount();
- }
- init();
- _mount().handle_error(crimson::ct_error::assert_all{}).get0();
- SUBINFO(test, "finish");
+ return teardown().then([this] {
+ segment_manager->remount();
+ for (auto &sec_sm : secondary_segment_managers) {
+ sec_sm->remount();
+ }
+ _init();
+ return _mount().handle_error(crimson::ct_error::assert_all{});
+ }).then([FNAME] {
+ SUBINFO(test, "finish");
+ });
}
+
+ void restart() {
+ restart_fut().get0();
+ }
+
seastar::future<> segment_setup()
{
LOG_PREFIX(EphemeralTestState::segment_setup);
segment_manager::get_ephemeral_device_config(cnt, get_num_devices()));
});
});
- }).safe_then([this, FNAME] {
- init();
- return _mkfs(
- ).safe_then([this] {
- return _teardown();
- }).safe_then([this] {
- destroy();
- segment_manager->remount();
- for (auto &sec_sm : secondary_segment_managers) {
- sec_sm->remount();
- }
- init();
- return _mount();
- }).handle_error(
- crimson::ct_error::assert_all{}
- ).then([FNAME] {
- SUBINFO(test, "finish");
- });
+ }).safe_then([this] {
+ _init();
+ return _mkfs();
+ }).safe_then([this] {
+ return restart_fut();
}).handle_error(
crimson::ct_error::assert_all{}
- );
+ ).then([FNAME] {
+ SUBINFO(test, "finish");
+ });
}
+
seastar::future<> randomblock_setup()
{
auto config =
seastar::future<> tm_teardown() {
LOG_PREFIX(EphemeralTestState::tm_teardown);
SUBINFO(test, "begin");
- return _teardown().then([this, FNAME] {
+ return teardown().then([this, FNAME] {
segment_manager.reset();
for (auto &sec_sm : secondary_segment_managers) {
sec_sm.reset();
virtual void _destroy() override {
epm = nullptr;
lba_manager = nullptr;
+ cache = nullptr;
tm.reset();
}
}
virtual seastar::future<> _teardown() final {
- return seastore->umount().then([this] {
- seastore.reset();
- });
+ return seastore->umount();
}
virtual FuturizedStore::mount_ertr::future<> _mount() final {