mirror of
https://github.com/ceph/ceph
synced 2025-02-21 18:17:42 +00:00
crimson/onode-staged-tree: implement NodeExtentManager::retire_extent()
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
This commit is contained in:
parent
776390d249
commit
5d41bda16e
@ -72,6 +72,7 @@ class NodeExtentManager {
|
||||
virtual tm_future<NodeExtentRef> read_extent(
|
||||
Transaction&, laddr_t, extent_len_t) = 0;
|
||||
virtual tm_future<NodeExtentRef> alloc_extent(Transaction&, extent_len_t) = 0;
|
||||
virtual tm_future<> retire_extent(Transaction&, NodeExtentRef) = 0;
|
||||
virtual tm_future<Super::URef> get_super(Transaction&, RootNodeTracker&) = 0;
|
||||
virtual std::ostream& print(std::ostream& os) const = 0;
|
||||
|
||||
|
@ -43,6 +43,14 @@ class DummyNodeExtent final: public NodeExtent {
|
||||
state = extent_state_t::INITIAL_WRITE_PENDING;
|
||||
}
|
||||
~DummyNodeExtent() override = default;
|
||||
|
||||
void retire() {
|
||||
assert(state == extent_state_t::INITIAL_WRITE_PENDING);
|
||||
state = extent_state_t::INVALID;
|
||||
bufferptr empty_bptr;
|
||||
get_bptr().swap(empty_bptr);
|
||||
}
|
||||
|
||||
protected:
|
||||
NodeExtentRef mutate(context_t, DeltaRecorderURef&&) override {
|
||||
ceph_abort("impossible path"); }
|
||||
@ -92,6 +100,20 @@ class DummyNodeExtentManager final: public NodeExtentManager {
|
||||
}
|
||||
}
|
||||
|
||||
tm_future<> retire_extent(
|
||||
Transaction& t, NodeExtentRef extent) override {
|
||||
logger().trace("OTree::Dummy: retiring {}B at {:#x} ...",
|
||||
extent->get_length(), extent->get_laddr());
|
||||
if constexpr (SYNC) {
|
||||
return retire_extent_sync(t, extent);
|
||||
} else {
|
||||
using namespace std::chrono_literals;
|
||||
return seastar::sleep(1us).then([this, &t, extent] {
|
||||
return retire_extent_sync(t, extent);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
tm_future<Super::URef> get_super(
|
||||
Transaction& t, RootNodeTracker& tracker) override {
|
||||
logger().trace("OTree::Dummy: get root ...");
|
||||
@ -138,6 +160,19 @@ class DummyNodeExtentManager final: public NodeExtentManager {
|
||||
return tm_ertr::make_ready_future<NodeExtentRef>(extent);
|
||||
}
|
||||
|
||||
tm_future<> retire_extent_sync(
|
||||
Transaction& t, NodeExtentRef _extent) {
|
||||
auto& extent = static_cast<DummyNodeExtent&>(*_extent.get());
|
||||
auto addr = extent.get_laddr();
|
||||
auto len = extent.get_length();
|
||||
extent.retire();
|
||||
auto iter = allocate_map.find(addr);
|
||||
assert(iter != allocate_map.end());
|
||||
allocate_map.erase(iter);
|
||||
logger().debug("OTree::Dummy: retired {}B at {:#x}", len, addr);
|
||||
return tm_ertr::now();
|
||||
}
|
||||
|
||||
tm_future<Super::URef> get_super_sync(
|
||||
Transaction& t, RootNodeTracker& tracker) {
|
||||
logger().debug("OTree::Dummy: got root {:#x}", root_laddr);
|
||||
|
@ -100,6 +100,18 @@ class SeastoreNodeExtentManager final: public NodeExtentManager {
|
||||
});
|
||||
}
|
||||
|
||||
tm_future<> retire_extent(
|
||||
Transaction& t, NodeExtentRef _extent) override {
|
||||
LogicalCachedExtentRef extent = _extent;
|
||||
auto addr = extent->get_laddr();
|
||||
auto len = extent->get_length();
|
||||
logger().debug("OTree::Seastore: retiring {}B at {:#x} ...", len, addr);
|
||||
return tm.dec_ref(t, extent).safe_then([addr, len] (unsigned cnt) {
|
||||
assert(cnt == 0);
|
||||
logger().trace("OTree::Seastore: retired {}B at {:#x} ...", len, addr);
|
||||
});
|
||||
}
|
||||
|
||||
tm_future<Super::URef> get_super(
|
||||
Transaction& t, RootNodeTracker& tracker) override {
|
||||
logger().trace("OTree::Seastore: get root ...");
|
||||
|
Loading…
Reference in New Issue
Block a user