}
}
+void Cache::dump_contents()
+{
+ LOG_PREFIX(Cache::dump_contents);
+ DEBUG("enter");
+ for (auto &&i: extents) {
+ DEBUG("live {}", i);
+ }
+ DEBUG("exit");
+}
+
void Cache::add_extent(CachedExtentRef ref)
{
LOG_PREFIX(Cache::add_extent);
}
}
+ /// Dump live extents
+ void dump_contents();
+
private:
SegmentManager &segment_manager; ///< ref to segment_manager
RootBlockRef root; ///< ref to current root
});
}
+BtreeLBAManager::~BtreeLBAManager()
+{
+ pin_set.scan([](auto &i) {
+ logger().error("Found {} {} has_ref={}", i, i.get_extent(), i.has_ref());
+ });
+}
+
}
bpin->parent = nullptr;
}
+ ~BtreeLBAManager();
private:
SegmentManager &segment_manager;
Cache &cache;
extent = nextent;
}
+ CachedExtent &get_extent() {
+ assert(extent);
+ return *extent;
+ }
+
+ bool has_ref() {
+ return !!ref;
+ }
+
void take_pin(btree_range_pin_t &other);
friend bool operator<(
void retire(btree_range_pin_t &pin);
void check_parent(btree_range_pin_t &pin);
+ template <typename F>
+ void scan(F &&f) {
+ for (auto &i : pins) {
+ std::invoke(f, i);
+ }
+ }
+
~btree_pin_set_t() {
ceph_assert(pins.empty());
}
}
TransactionManager::close_ertr::future<> TransactionManager::close() {
+ LOG_PREFIX(TransactionManager::close);
+ DEBUG("enter");
return segment_cleaner->stop(
).then([this] {
return cache->close();
}).safe_then([this] {
+ cache->dump_contents();
return journal->close();
+ }).safe_then([this, FNAME] {
+ DEBUG("completed");
+ return seastar::now();
});
}