#include <seastar/core/sleep.hh>
#include "include/buffer_raw.h"
+#include "crimson/os/seastore/logging.h"
-#include "crimson/common/log.h"
#include "crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h"
/**
~DummySuper() override = default;
protected:
laddr_t get_root_laddr() const override { return *p_root_laddr; }
- void write_root_laddr(context_t, laddr_t addr) override {
- logger().info("OTree::Dummy: update root {:#x} ...", addr);
+ void write_root_laddr(context_t c, laddr_t addr) override {
+ LOG_PREFIX(OTree::Dummy);
+ SUBDEBUGT(seastore_onode, "update root {:#x} ...", c.t, addr);
*p_root_laddr = addr;
}
private:
- static seastar::logger& logger() {
- return crimson::get_logger(ceph_subsys_filestore);
- }
laddr_t* p_root_laddr;
};
DummyNodeExtent(ceph::bufferptr &&ptr) : NodeExtent(std::move(ptr)) {
state = extent_state_t::INITIAL_WRITE_PENDING;
}
+ DummyNodeExtent(const DummyNodeExtent& other) = delete;
~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"); }
static constexpr size_t ALIGNMENT = 4096;
public:
~DummyNodeExtentManager() override = default;
+ std::size_t size() const { return allocate_map.size(); }
+
protected:
bool is_read_isolated() const override { return false; }
- tm_future<NodeExtentRef> read_extent(
- Transaction& t, laddr_t addr, extent_len_t len) override {
- logger().trace("OTree::Dummy: reading {}B at {:#x} ...", len, addr);
+ read_iertr::future<NodeExtentRef> read_extent(
+ Transaction& t, laddr_t addr) override {
+ SUBTRACET(seastore_onode, "reading at {:#x} ...", t, addr);
if constexpr (SYNC) {
- return read_extent_sync(t, addr, len);
+ return read_extent_sync(t, addr);
} else {
using namespace std::chrono_literals;
- return seastar::sleep(1us).then([this, &t, addr, len] {
- return read_extent_sync(t, addr, len);
+ return seastar::sleep(1us).then([this, &t, addr] {
+ return read_extent_sync(t, addr);
});
}
}
- tm_future<NodeExtentRef> alloc_extent(
- Transaction& t, extent_len_t len) override {
- logger().trace("OTree::Dummy: allocating {}B ...", len);
+ alloc_iertr::future<NodeExtentRef> alloc_extent(
+ Transaction& t, laddr_t hint, extent_len_t len) override {
+ SUBTRACET(seastore_onode, "allocating {}B with hint {:#x} ...", t, len, hint);
if constexpr (SYNC) {
return alloc_extent_sync(t, len);
} else {
}
}
- tm_future<Super::URef> get_super(
+ retire_iertr::future<> retire_extent(
+ Transaction& t, NodeExtentRef extent) override {
+ SUBTRACET(seastore_onode,
+ "retiring {}B at {:#x} -- {} ...",
+ t, extent->get_length(), extent->get_laddr(), *extent);
+ 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);
+ });
+ }
+ }
+
+ getsuper_iertr::future<Super::URef> get_super(
Transaction& t, RootNodeTracker& tracker) override {
- logger().trace("OTree::Dummy: get root ...");
+ SUBTRACET(seastore_onode, "get root ...", t);
if constexpr (SYNC) {
return get_super_sync(t, tracker);
} else {
}
private:
- tm_future<NodeExtentRef> read_extent_sync(
- Transaction& t, laddr_t addr, extent_len_t len) {
+ read_iertr::future<NodeExtentRef> read_extent_sync(
+ Transaction& t, laddr_t addr) {
auto iter = allocate_map.find(addr);
assert(iter != allocate_map.end());
auto extent = iter->second;
- logger().trace("OTree::Dummy: read {}B at {:#x}",
- extent->get_length(), extent->get_laddr());
+ SUBTRACET(seastore_onode,
+ "read {}B at {:#x} -- {}",
+ t, extent->get_length(), extent->get_laddr(), *extent);
assert(extent->get_laddr() == addr);
- assert(extent->get_length() == len);
- return tm_ertr::make_ready_future<NodeExtentRef>(extent);
+ return read_iertr::make_ready_future<NodeExtentRef>(extent);
}
- tm_future<NodeExtentRef> alloc_extent_sync(
+ alloc_iertr::future<NodeExtentRef> alloc_extent_sync(
Transaction& t, extent_len_t len) {
assert(len % ALIGNMENT == 0);
auto r = ceph::buffer::create_aligned(len, ALIGNMENT);
extent->set_laddr(addr);
assert(allocate_map.find(extent->get_laddr()) == allocate_map.end());
allocate_map.insert({extent->get_laddr(), extent});
- logger().debug("OTree::Dummy: allocated {}B at {:#x}",
- extent->get_length(), extent->get_laddr());
+ SUBDEBUGT(seastore_onode,
+ "allocated {}B at {:#x} -- {}",
+ t, extent->get_length(), extent->get_laddr(), *extent);
assert(extent->get_length() == len);
- return tm_ertr::make_ready_future<NodeExtentRef>(extent);
+ return alloc_iertr::make_ready_future<NodeExtentRef>(extent);
}
- tm_future<Super::URef> get_super_sync(
+ retire_iertr::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);
+ SUBDEBUGT(seastore_onode, "retired {}B at {:#x}", t, len, addr);
+ return retire_iertr::now();
+ }
+
+ getsuper_iertr::future<Super::URef> get_super_sync(
Transaction& t, RootNodeTracker& tracker) {
- logger().debug("OTree::Dummy: got root {:#x}", root_laddr);
- return tm_ertr::make_ready_future<Super::URef>(
+ SUBTRACET(seastore_onode, "got root {:#x}", t, root_laddr);
+ return getsuper_iertr::make_ready_future<Super::URef>(
Super::URef(new DummySuper(t, tracker, &root_laddr)));
}
- static seastar::logger& logger() {
- return crimson::get_logger(ceph_subsys_filestore);
- }
+ static LOG_PREFIX(OTree::Dummy);
std::map<laddr_t, Ref<DummyNodeExtent>> allocate_map;
laddr_t root_laddr = L_ADDR_NULL;