// absent from transaction
// retiring is not included by the cache hit metrics
- ext = query_cache(addr, nullptr);
+ ext = query_cache(addr);
if (ext) {
DEBUGT("retire {}~{} in cache -- {}", t, addr, length, *ext);
} else {
auto result = t.get_extent(addr, &ext);
assert(result != Transaction::get_extent_ret::PRESENT
&& result != Transaction::get_extent_ret::RETIRED);
- assert(!query_cache(addr, nullptr));
+ assert(!query_cache(addr));
#endif
LOG_PREFIX(Cache::retire_absent_extent_addr);
// add a new placeholder to Cache
auto _get_extent_if_cached = [this](paddr_t addr)
-> get_extent_ertr::future<CachedExtentRef> {
// replay is not included by the cache hit metrics
- auto ret = query_cache(addr, nullptr);
+ auto ret = query_cache(addr);
if (ret) {
// no retired-placeholder should be exist yet because no transaction
// has been created.
}
};
auto extent_fut = (delta.pversion == 0 ?
- // replay is not included by the cache hit metrics
do_get_caching_extent_by_type(
delta.type,
delta.paddr,
delta.laddr,
delta.length,
- nullptr,
[](CachedExtent &) {},
[this](CachedExtent &ext) {
+ // replay is not included by the cache hit metrics
touch_extent(ext, nullptr);
}) :
_get_extent_if_cached(
paddr_t offset,
laddr_t laddr,
extent_len_t length,
- const Transaction::src_t* p_src,
extent_init_func_t &&extent_init_func,
extent_init_func_t &&on_cache)
{
return [=, this, extent_init_func=std::move(extent_init_func)]() mutable {
- src_ext_t* p_metric_key = nullptr;
- src_ext_t metric_key;
- if (p_src) {
- metric_key = std::make_pair(*p_src, type);
- p_metric_key = &metric_key;
- }
-
switch (type) {
case extent_types_t::ROOT:
ceph_assert(0 == "ROOT is never directly read");
return get_extent_ertr::make_ready_future<CachedExtentRef>();
case extent_types_t::BACKREF_INTERNAL:
return do_get_caching_extent<backref::BackrefInternalNode>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
case extent_types_t::BACKREF_LEAF:
return do_get_caching_extent<backref::BackrefLeafNode>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
case extent_types_t::LADDR_INTERNAL:
return do_get_caching_extent<lba_manager::btree::LBAInternalNode>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
case extent_types_t::LADDR_LEAF:
return do_get_caching_extent<lba_manager::btree::LBALeafNode>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
case extent_types_t::OMAP_INNER:
return do_get_caching_extent<omap_manager::OMapInnerNode>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
case extent_types_t::OMAP_LEAF:
return do_get_caching_extent<omap_manager::OMapLeafNode>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
case extent_types_t::COLL_BLOCK:
return do_get_caching_extent<collection_manager::CollectionNode>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
case extent_types_t::ONODE_BLOCK_STAGED:
return do_get_caching_extent<onode::SeastoreNodeExtent>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
case extent_types_t::OBJECT_DATA_BLOCK:
return do_get_caching_extent<ObjectDataBlock>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
return get_extent_ertr::make_ready_future<CachedExtentRef>();
case extent_types_t::TEST_BLOCK:
return do_get_caching_extent<TestBlock>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
case extent_types_t::TEST_BLOCK_PHYSICAL:
return do_get_caching_extent<TestBlockPhysical>(
- offset, length, p_metric_key, std::move(extent_init_func), std::move(on_cache)
+ offset, length, std::move(extent_init_func), std::move(on_cache)
).safe_then([](auto extent) {
return CachedExtentRef(extent.detach(), false /* add_ref */);
});
}
// get_extent_ret::ABSENT from transaction
- auto metric_key = std::make_pair(t.get_src(), type);
- ret = query_cache(offset, &metric_key);
+ ret = query_cache(offset);
if (!ret) {
SUBDEBUGT(seastore_cache, "{} {} is absent", t, type, offset);
account_absent_access(t_src);
const auto t_src = t.get_src();
touch_extent(ext, &t_src);
};
- auto metric_key = std::make_pair(t.get_src(), T::TYPE);
return trans_intr::make_interruptible(
do_get_caching_extent<T>(
- offset, length, &metric_key,
- [](T &){}, std::move(f))
+ offset, length, [](T &){}, std::move(f))
);
}
}
t.add_to_read_set(CachedExtentRef(&ext));
touch_extent(ext, &t_src);
};
- auto metric_key = std::make_pair(t.get_src(), T::TYPE);
return trans_intr::make_interruptible(
do_get_caching_extent<T>(
- offset, length, &metric_key,
- std::forward<Func>(extent_init_func), std::move(f))
+ offset, length, std::forward<Func>(extent_init_func), std::move(f))
);
}
// Interfaces only for tests.
public:
CachedExtentRef test_query_cache(paddr_t offset) {
- return query_cache(offset, nullptr);
+ return query_cache(offset);
}
private:
read_extent_ret<T> do_get_caching_extent(
paddr_t offset, ///< [in] starting addr
extent_len_t length, ///< [in] length
- const src_ext_t* p_src_ext, ///< [in] cache query metric key
Func &&extent_init_func, ///< [in] init func for extent
OnCache &&on_cache
) {
LOG_PREFIX(Cache::do_get_caching_extent);
- auto cached = query_cache(offset, p_src_ext);
+ auto cached = query_cache(offset);
if (!cached) {
auto ret = CachedExtent::make_cached_extent_ref<T>(
alloc_cache_buf(length));
paddr_t offset,
laddr_t laddr,
extent_len_t length,
- const Transaction::src_t* p_src,
extent_init_func_t &&extent_init_func,
extent_init_func_t &&on_cache
);
const auto t_src = t.get_src();
touch_extent(ext, &t_src);
};
- auto src = t.get_src();
return trans_intr::make_interruptible(
do_get_caching_extent_by_type(
- type, offset, laddr, length, &src,
+ type, offset, laddr, length,
std::move(extent_init_func), std::move(f))
);
}
t.add_to_read_set(CachedExtentRef(&ext));
touch_extent(ext, &t_src);
};
- auto src = t.get_src();
return trans_intr::make_interruptible(
do_get_caching_extent_by_type(
- type, offset, laddr, length, &src,
+ type, offset, laddr, length,
std::move(extent_init_func), std::move(f))
);
}
counter_by_src_t<uint64_t> trans_created_by_src;
counter_by_src_t<commit_trans_efforts_t> committed_efforts_by_src;
counter_by_src_t<invalid_trans_efforts_t> invalidated_efforts_by_src;
- counter_by_src_t<query_counters_t> cache_query_by_src;
success_read_trans_efforts_t success_read_efforts;
uint64_t dirty_bytes = 0;
}
// Extents in cache may contain placeholders
- CachedExtentRef query_cache(
- paddr_t offset,
- const src_ext_t* p_metric_key) {
- query_counters_t* p_counters = nullptr;
- if (p_metric_key) {
- p_counters = &get_by_src(stats.cache_query_by_src, p_metric_key->first);
- ++p_counters->access;
- }
+ CachedExtentRef query_cache(paddr_t offset) {
if (auto iter = extents_index.find_offset(offset);
iter != extents_index.end()) {
- if (p_metric_key &&
- // retired_placeholder is not really cached yet
- !is_retired_placeholder_type(iter->get_type())) {
- ++p_counters->hit;
- }
assert(iter->is_stable());
return CachedExtentRef(&*iter);
} else {