From e723f6d2aadf41071b8acd47debc6f0ca4733af4 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Fri, 3 Nov 2023 17:00:07 +0800 Subject: [PATCH] crimson/os/seastore: cleanup, be explicit about stable and stable_written Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/btree/fixed_kv_btree.h | 2 +- src/crimson/os/seastore/btree/fixed_kv_node.h | 13 ++++--------- src/crimson/os/seastore/cached_extent.h | 11 +++++++++-- .../crimson/seastore/test_transaction_manager.cc | 2 +- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index 4133be627c10..a2a97e30a503 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -513,7 +513,7 @@ public: &child_node); } if (ret == Transaction::get_extent_ret::PRESENT) { - if (child_node->is_stable()) { + if (child_node->is_stable_written()) { assert(child_node->is_valid()); auto cnode = child_node->template cast(); assert(cnode->has_parent_tracker()); diff --git a/src/crimson/os/seastore/btree/fixed_kv_node.h b/src/crimson/os/seastore/btree/fixed_kv_node.h index 0ae23b2f4dea..4d32475ee24d 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_node.h +++ b/src/crimson/os/seastore/btree/fixed_kv_node.h @@ -992,16 +992,13 @@ struct FixedKVLeafNode } // children are considered stable if any of the following case is true: - // 1. Not in memory - // 2. being stable - // 3. being mutation pending and under-io + // 1. The child extent is absent in cache + // 2. The child extent is stable bool is_child_stable(uint16_t pos) const final { auto child = this->children[pos]; if (is_valid_child_ptr(child)) { ceph_assert(child->is_logical()); - return child->is_stable() || - (child->is_mutation_pending() && - child->is_pending_io()); + return child->is_stable(); } else if (this->is_pending()) { auto key = this->iter_idx(pos).get_key(); auto &sparent = this->get_stable_for_key(key); @@ -1009,9 +1006,7 @@ struct FixedKVLeafNode auto child = sparent.children[spos]; if (is_valid_child_ptr(child)) { ceph_assert(child->is_logical()); - return child->is_stable() || - (child->is_mutation_pending() && - child->is_pending_io()); + return child->is_stable(); } else { return true; } diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index c73839cf1fe8..6ab19282637f 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -416,13 +416,20 @@ public: return is_mutable() || state == extent_state_t::EXIST_CLEAN; } - /// Returns true if extent is stable and shared among transactions - bool is_stable() const { + /// Returns true if extent is stable, written and shared among transactions + bool is_stable_written() const { return state == extent_state_t::CLEAN_PENDING || state == extent_state_t::CLEAN || state == extent_state_t::DIRTY; } + /// Returns true if extent is stable and shared among transactions + bool is_stable() const { + return is_stable_written() || + (is_mutation_pending() && + is_pending_io()); + } + /// Returns true if extent has a pending delta bool is_mutation_pending() const { return state == extent_state_t::MUTATION_PENDING; diff --git a/src/test/crimson/seastore/test_transaction_manager.cc b/src/test/crimson/seastore/test_transaction_manager.cc index 54bd27b8c181..dfe599177056 100644 --- a/src/test/crimson/seastore/test_transaction_manager.cc +++ b/src/test/crimson/seastore/test_transaction_manager.cc @@ -1077,7 +1077,7 @@ struct transaction_manager_test_t : test_mappings.alloced(pin->get_key(), *extent, t.mapping_delta); EXPECT_TRUE(extent->is_exist_clean()); } else { - EXPECT_TRUE(extent->is_stable()); + EXPECT_TRUE(extent->is_stable_written()); } } else { ceph_assert(t.t->is_conflicted()); -- 2.47.3