From 77839d6252df169c0d6d1b805812bfe5e493b22c Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 28 Jun 2021 21:32:21 +0800 Subject: [PATCH 01/13] crimson/os/seastore/cache: invalidate transaction referencing retired extents Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 908600341a0..cb227e0cfe1 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -125,7 +125,8 @@ void Cache::retire_extent(CachedExtentRef ref) remove_from_dirty(ref); ref->dirty_from_or_retired_at = JOURNAL_SEQ_MAX; retired_extent_gate.add_extent(*ref); - ref->state = CachedExtent::extent_state_t::INVALID; + + invalidate(*ref); } void Cache::replace_extent(CachedExtentRef next, CachedExtentRef prev) From 43ddfe3f3a27dacef57fd42ec6e3dad0b1754998 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 28 Jun 2021 21:36:18 +0800 Subject: [PATCH 02/13] crimson/os/seastore/cache: retire PRESENT extents and add to retired-set Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index cb227e0cfe1..7c9d883c574 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -31,20 +31,27 @@ Cache::retire_extent_ret Cache::retire_extent_addr( Transaction &t, paddr_t addr, extent_len_t length) { LOG_PREFIX(Cache::retire_extent); - if (auto ext = t.write_set.find_offset(addr); ext != t.write_set.end()) { - DEBUGT("found {} in t.write_set", t, addr); + CachedExtentRef ext; + auto result = t.get_extent(addr, &ext); + if (result == Transaction::get_extent_ret::PRESENT) { + DEBUGT("found {} in t", t, addr); t.add_to_retired_set(CachedExtentRef(&*ext)); return retire_extent_iertr::now(); - } else if (auto iter = extents.find_offset(addr); - iter != extents.end()) { - auto ret = CachedExtentRef(&*iter); + } else if (result == Transaction::get_extent_ret::RETIRED) { + ERRORT("{} is already retired", t, addr); + ceph_abort(); + } + + // absent from transaction + result = query_cache_for_extent(addr, &ext); + if (result == Transaction::get_extent_ret::PRESENT) { return trans_intr::make_interruptible( - ret->wait_io() - ).then_interruptible([&t, ret=std::move(ret)]() mutable { - t.add_to_retired_set(ret); + ext->wait_io() + ).then_interruptible([&t, ext=std::move(ext)]() mutable { + t.add_to_retired_set(ext); return retire_extent_iertr::now(); }); - } else { + } else { // result == get_extent_ret::ABSENT t.add_to_retired_uncached(addr, length); return retire_extent_iertr::now(); } From e52d5469b7d1aecc40158a10ea85f42186fa508b Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 28 Jun 2021 21:38:49 +0800 Subject: [PATCH 03/13] crimson/onode-staged-tree: check invalid transaction only Signed-off-by: Yingxin Cheng --- .../onode_manager/staged-fltree/node_extent_manager/seastore.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h index f2d5a48a3db..deb873265e9 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h @@ -109,11 +109,12 @@ class SeastoreNodeExtentManager final: public TransactionManagerHandle { ).safe_then([addr, &t](auto&& e) -> read_ertr::future { TRACET("read {}B at {:#x} -- {}", t, e->get_length(), e->get_laddr(), *e); - if (!e->is_valid() || t.is_conflicted()) { + if (t.is_conflicted()) { ERRORT("transaction conflict detected on extent read {}", t, *e); assert(t.is_conflicted()); return crimson::ct_error::eagain::make(); } + assert(e->is_valid()); assert(e->get_laddr() == addr); std::ignore = addr; return read_ertr::make_ready_future(e); From 4c4405ee272bfccda1e6746d1093aefb6ea6e324 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 28 Jun 2021 22:12:46 +0800 Subject: [PATCH 04/13] crimson/os/seastore/cache: cleanup try_construct_record() optional return Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 4 ++-- src/crimson/os/seastore/cache.h | 7 ++---- .../os/seastore/transaction_manager.cc | 3 +-- .../seastore/test_btree_lba_manager.cc | 6 +---- .../crimson/seastore/test_seastore_cache.cc | 23 ++++++------------- 5 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 7c9d883c574..ce4df936045 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -235,7 +235,7 @@ CachedExtentRef Cache::duplicate_for_write( return ret; } -std::optional Cache::try_construct_record(Transaction &t) +record_t Cache::try_construct_record(Transaction &t) { LOG_PREFIX(Cache::try_construct_record); DEBUGT("enter", t); @@ -343,7 +343,7 @@ std::optional Cache::try_construct_record(Transaction &t) }); } - return std::make_optional(std::move(record)); + return record; } void Cache::complete_commit( diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 1a9998cc7f2..551f6e7d0a7 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -372,12 +372,9 @@ public: /** * try_construct_record * - * First checks for conflicts. If a racing write has mutated/retired - * an extent mutated by this transaction, nullopt will be returned. - * - * Otherwise, a record will be returned valid for use with Journal. + * Construct the record for Journal from transaction. */ - std::optional try_construct_record( + record_t try_construct_record( Transaction &t ///< [in, out] current transaction ); diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 8f34581eb44..688e3e80397 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -240,13 +240,12 @@ TransactionManager::submit_transaction_direct( ).then_interruptible([this, FNAME, &tref]() mutable -> submit_transaction_iertr::future<> { auto record = cache->try_construct_record(tref); - assert(record); // interruptible future would have already failed tref.get_handle().maybe_release_collection_lock(); DEBUGT("about to submit to journal", tref); - return journal->submit_record(std::move(*record), tref.get_handle() + return journal->submit_record(std::move(record), tref.get_handle() ).safe_then([this, FNAME, &tref](auto p) mutable { auto [addr, journal_seq] = p; DEBUGT("journal commit to {} seq {}", tref, addr, journal_seq); diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index a4b6d1db339..175ca86eaff 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -59,11 +59,7 @@ struct btree_lba_manager_test : seastar::future<> submit_transaction(TransactionRef t) { auto record = cache.try_construct_record(*t); - if (!record) { - ceph_assert(0 == "cannot fail"); - } - - return journal.submit_record(std::move(*record), t->get_handle()).safe_then( + return journal.submit_record(std::move(record), t->get_handle()).safe_then( [this, t=std::move(t)](auto p) mutable { auto [addr, seq] = p; cache.complete_commit(*t, addr, seq); diff --git a/src/test/crimson/seastore/test_seastore_cache.cc b/src/test/crimson/seastore/test_seastore_cache.cc index 31b77209090..09cf6dc0562 100644 --- a/src/test/crimson/seastore/test_seastore_cache.cc +++ b/src/test/crimson/seastore/test_seastore_cache.cc @@ -29,16 +29,12 @@ struct cache_test_t : public seastar_test_suite_t { : segment_manager(segment_manager::create_test_ephemeral()), cache(*segment_manager) {} - seastar::future> submit_transaction( + seastar::future submit_transaction( TransactionRef t) { auto record = cache.try_construct_record(*t); - if (!record) { - return seastar::make_ready_future>( - std::nullopt); - } bufferlist bl; - for (auto &&block : record->extents) { + for (auto &&block : record.extents) { bl.append(block.bl); } @@ -57,7 +53,7 @@ struct cache_test_t : public seastar_test_suite_t { ).safe_then( [this, prev, t=std::move(t)]() mutable { cache.complete_commit(*t, prev, seq /* TODO */); - return seastar::make_ready_future>(prev); + return prev; }, crimson::ct_error::all_same_way([](auto e) { ASSERT_FALSE("failed to submit"); @@ -90,9 +86,7 @@ struct cache_test_t : public seastar_test_suite_t { return cache.mkfs(*transaction).safe_then( [this, &transaction] { return submit_transaction(std::move(transaction)).then( - [](auto p) { - ASSERT_TRUE(p); - }); + [](auto p) {}); }); }); }).handle_error( @@ -120,8 +114,7 @@ TEST_F(cache_test_t, test_addr_fixup) TestBlockPhysical::SIZE); extent->set_contents('c'); csum = extent->get_crc32c(); - auto ret = submit_transaction(std::move(t)).get0(); - ASSERT_TRUE(ret); + submit_transaction(std::move(t)).get0(); addr = extent->get_paddr(); } { @@ -165,8 +158,7 @@ TEST_F(cache_test_t, test_dirty_extent) ASSERT_EQ(extent->get_version(), 0); ASSERT_EQ(csum, extent->get_crc32c()); } - auto ret = submit_transaction(std::move(t)).get0(); - ASSERT_TRUE(ret); + submit_transaction(std::move(t)).get0(); addr = extent->get_paddr(); } { @@ -222,8 +214,7 @@ TEST_F(cache_test_t, test_dirty_extent) ASSERT_EQ(csum2, extent->get_crc32c()); } // submit transaction - auto ret = submit_transaction(std::move(t)).get0(); - ASSERT_TRUE(ret); + submit_transaction(std::move(t)).get0(); ASSERT_TRUE(extent->is_dirty()); ASSERT_EQ(addr, extent->get_paddr()); ASSERT_EQ(extent->get_version(), 1); From 91e91e5dca228610b2ee100b32a887c0683b0fe4 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Tue, 29 Jun 2021 09:31:49 +0800 Subject: [PATCH 05/13] crimson/os/seastore: fix print_detail() of RetiredExtentPlaceholder Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cached_extent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 856791800b9..a5dde1a869e 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -740,7 +740,7 @@ public: } std::ostream &print_detail(std::ostream &out) const final { - return out << "RetiredExtentPlaceholder"; + return out << ", RetiredExtentPlaceholder"; } void on_delta_write(paddr_t record_block_offset) final { From a593927273bb50bcaec13db06903232daf230e25 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Tue, 29 Jun 2021 09:36:01 +0800 Subject: [PATCH 06/13] crimson/os/seastore/cache: remove retired extents from cache Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index ce4df936045..478d94d9404 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -134,6 +134,7 @@ void Cache::retire_extent(CachedExtentRef ref) retired_extent_gate.add_extent(*ref); invalidate(*ref); + extents.erase(*ref); } void Cache::replace_extent(CachedExtentRef next, CachedExtentRef prev) @@ -302,11 +303,6 @@ record_t Cache::try_construct_record(Transaction &t) // Transaction is now a go, set up in-memory cache state // invalidate now invalid blocks - for (auto &i: t.retired_set) { - DEBUGT("retiring {}", t, *i); - retire_extent(i); - } - for (auto &&i : t.retired_uncached) { CachedExtentRef to_retire; if (query_cache_for_extent(i.first, &to_retire) == @@ -315,12 +311,16 @@ record_t Cache::try_construct_record(Transaction &t) RetiredExtentPlaceholder >(i.second); to_retire->set_paddr(i.first); + to_retire->state = CachedExtent::extent_state_t::CLEAN; } t.retired_set.insert(to_retire); extents.insert(*to_retire); - to_retire->dirty_from_or_retired_at = JOURNAL_SEQ_MAX; - retired_extent_gate.add_extent(*to_retire); + } + + for (auto &i: t.retired_set) { + DEBUGT("retiring {}", t, *i); + retire_extent(i); } record.extents.reserve(t.fresh_block_list.size()); From 1445ba17a1a9b9e396368b115fa1d3a229c8b7e9 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Tue, 29 Jun 2021 09:39:10 +0800 Subject: [PATCH 07/13] crimson/os/seastore/cache: add absent extent to read-set before retire So that transaction can be invalidated if the retiring extent has conflict. Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 478d94d9404..49cb3a968ff 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -45,6 +45,7 @@ Cache::retire_extent_ret Cache::retire_extent_addr( // absent from transaction result = query_cache_for_extent(addr, &ext); if (result == Transaction::get_extent_ret::PRESENT) { + t.add_to_read_set(ext); return trans_intr::make_interruptible( ext->wait_io() ).then_interruptible([&t, ext=std::move(ext)]() mutable { @@ -52,6 +53,21 @@ Cache::retire_extent_ret Cache::retire_extent_addr( return retire_extent_iertr::now(); }); } else { // result == get_extent_ret::ABSENT + // FIXME this will cause incorrect transaction invalidation because t + // will not be notified if other transactions that modify the extent at + // this addr are committed. + // + // Say that we have transaction A and B, conflicting on extent E at laddr + // L: + // A: dec_ref(L) // cause uncached retirement + // B: read(L) -> E + // B: mutate(E) + // B: submit_transaction() // assume successful + // A: about to submit... + // + // A cannot be invalidated because E is not in A's read-set + // + // TODO: leverage RetiredExtentPlaceholder to fix the issue. t.add_to_retired_uncached(addr, length); return retire_extent_iertr::now(); } From 82203cd3538bfd514ca5c11c6ffc766c2db62536 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 30 Jun 2021 11:06:52 +0800 Subject: [PATCH 08/13] crimson/os/seastore/cache: fix get_extent_by_type(t) to use Transaction::get_extent() The original query_cache_for_extent() doesn't call wait_io() if the extent is pending. And the following get_extent_by_type() already covers the lookup to Cache::extents and also implements wait_io() correctly. Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 551f6e7d0a7..bbac701e034 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -308,7 +308,7 @@ public: laddr_t laddr, segment_off_t length) { CachedExtentRef ret; - auto status = query_cache_for_extent(t, offset, &ret); + auto status = t.get_extent(offset, &ret); if (status == Transaction::get_extent_ret::RETIRED) { return seastar::make_ready_future(); } else if (status == Transaction::get_extent_ret::PRESENT) { From 5cd2c7c15169e120f31b26d30906f759a53ac8a4 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 30 Jun 2021 11:44:56 +0800 Subject: [PATCH 09/13] crimson/os/seastore/cache: cleanup get_extent_if_cached() And remove the query_cache_for_extent(t). Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.h | 44 +++++++++++++++------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index bbac701e034..6c55c9b9133 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -231,18 +231,26 @@ public: get_extent_if_cached_ret get_extent_if_cached( Transaction &t, paddr_t offset) { - return seastar::do_with( - CachedExtentRef(), - [this, &t, offset](auto &ret) { - auto status = query_cache_for_extent(t, offset, &ret); - auto wait = seastar::now(); - if (status == Transaction::get_extent_ret::PRESENT) { - wait = ret->wait_io(); - } - return trans_intr::make_interruptible( - wait.then([ret] { return std::move(ret); }) - ); - }); + CachedExtentRef ret; + auto result = t.get_extent(offset, &ret); + if (result != Transaction::get_extent_ret::ABSENT) { + // including get_extent_ret::RETIRED + return get_extent_if_cached_iertr::make_ready_future< + CachedExtentRef>(ret); + } + + // get_extent_ret::PRESENT from transaction + result = query_cache_for_extent(offset, &ret); + if (result == Transaction::get_extent_ret::ABSENT) { + return get_extent_if_cached_iertr::make_ready_future< + CachedExtentRef>(); + } + + // get_extent_ret::PRESENT from cache + return ret->wait_io().then([ret] { + return get_extent_if_cached_iertr::make_ready_future< + CachedExtentRef>(ret); + }); } /** @@ -588,18 +596,6 @@ private: } } - Transaction::get_extent_ret query_cache_for_extent( - Transaction &t, - paddr_t offset, - CachedExtentRef *out) { - auto result = t.get_extent(offset, out); - if (result != Transaction::get_extent_ret::ABSENT) { - return result; - } else { - return query_cache_for_extent(offset, out); - } - } - }; using CacheRef = std::unique_ptr; From 054b2eda32750a6ce3ff42267fb70cc940fb5341 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 30 Jun 2021 11:47:50 +0800 Subject: [PATCH 10/13] crimson/os/seastore/cache: add missing add_to_read_set() Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 6c55c9b9133..5316804362b 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -247,6 +247,7 @@ public: } // get_extent_ret::PRESENT from cache + t.add_to_read_set(ret); return ret->wait_io().then([ret] { return get_extent_if_cached_iertr::make_ready_future< CachedExtentRef>(ret); From 2243b3d59380b914f4ced75494fdec09d2f97bc6 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 30 Jun 2021 11:55:39 +0800 Subject: [PATCH 11/13] crimson/os/seastore/cache: add the missing extent invalid check see 2bc257beb2ef1253e38c254745f42b3ac5db52de Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 5316804362b..071bc7e9c10 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -326,9 +326,14 @@ public: return trans_intr::make_interruptible( get_extent_by_type(type, offset, laddr, length) ).si_then([=, &t](CachedExtentRef ret) { - t.add_to_read_set(ret); - return get_extent_ertr::make_ready_future( - std::move(ret)); + if (!ret->is_valid()) { + t.conflicted = true; + return get_extent_ertr::make_ready_future(); + } else { + t.add_to_read_set(ret); + return get_extent_ertr::make_ready_future( + std::move(ret)); + } }); } } From b5762ca66bd445256530453ced9e0a351a528996 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 30 Jun 2021 13:22:07 +0800 Subject: [PATCH 12/13] crimson/os/seastore/cache: wait io when read from Cache::extents Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 49cb3a968ff..68782dfafcf 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -486,9 +486,12 @@ Cache::replay_delta( -> get_extent_ertr::future { auto retiter = extents.find_offset(addr); if (retiter != extents.end()) { - return seastar::make_ready_future(&*retiter); + CachedExtentRef ret = &*retiter; + return ret->wait_io().then([ret] { + return ret; + }); } else { - return seastar::make_ready_future(); + return seastar::make_ready_future(); } }; auto extent_fut = (delta.pversion == 0 ? From 29d9c3d58823088f1a6e5dab0aa9663e06bfba65 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 30 Jun 2021 14:03:29 +0800 Subject: [PATCH 13/13] crimson/os/seastore/cache: rename try_construct_record to prepare_record Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 4 ++-- src/crimson/os/seastore/cache.h | 4 ++-- src/crimson/os/seastore/transaction_manager.cc | 2 +- src/test/crimson/seastore/test_btree_lba_manager.cc | 2 +- src/test/crimson/seastore/test_seastore_cache.cc | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 68782dfafcf..e1e557baf40 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -252,9 +252,9 @@ CachedExtentRef Cache::duplicate_for_write( return ret; } -record_t Cache::try_construct_record(Transaction &t) +record_t Cache::prepare_record(Transaction &t) { - LOG_PREFIX(Cache::try_construct_record); + LOG_PREFIX(Cache::prepare_record); DEBUGT("enter", t); // Should be valid due to interruptible future diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 071bc7e9c10..943975963d4 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -384,11 +384,11 @@ public: ); /** - * try_construct_record + * prepare_record * * Construct the record for Journal from transaction. */ - record_t try_construct_record( + record_t prepare_record( Transaction &t ///< [in, out] current transaction ); diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 688e3e80397..603ffc49248 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -239,7 +239,7 @@ TransactionManager::submit_transaction_direct( tref.get_handle().enter(write_pipeline.prepare) ).then_interruptible([this, FNAME, &tref]() mutable -> submit_transaction_iertr::future<> { - auto record = cache->try_construct_record(tref); + auto record = cache->prepare_record(tref); tref.get_handle().maybe_release_collection_lock(); diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 175ca86eaff..596e8362f6b 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -58,7 +58,7 @@ struct btree_lba_manager_test : seastar::future<> submit_transaction(TransactionRef t) { - auto record = cache.try_construct_record(*t); + auto record = cache.prepare_record(*t); return journal.submit_record(std::move(record), t->get_handle()).safe_then( [this, t=std::move(t)](auto p) mutable { auto [addr, seq] = p; diff --git a/src/test/crimson/seastore/test_seastore_cache.cc b/src/test/crimson/seastore/test_seastore_cache.cc index 09cf6dc0562..42d285671e9 100644 --- a/src/test/crimson/seastore/test_seastore_cache.cc +++ b/src/test/crimson/seastore/test_seastore_cache.cc @@ -31,7 +31,7 @@ struct cache_test_t : public seastar_test_suite_t { seastar::future submit_transaction( TransactionRef t) { - auto record = cache.try_construct_record(*t); + auto record = cache.prepare_record(*t); bufferlist bl; for (auto &&block : record.extents) {