ret->cast<T>());
});
} else {
- touch_extent(*ret);
+ assert(!ret->is_mutable());
+ touch_extent(*ret);
SUBDEBUGT(seastore_cache, "{} {}~{} is present on t without been \
fully loaded, reading ...", t, T::TYPE, offset, length);
auto bp = alloc_cache_buf(ret->get_length());
// user should not see RETIRED_PLACEHOLDER extents
ceph_assert(p_extent->get_type() != extent_types_t::RETIRED_PLACEHOLDER);
if (!p_extent->is_fully_loaded()) {
+ assert(!p_extent->is_mutable());
touch_extent(*p_extent);
LOG_PREFIX(Cache::get_extent_viewable_by_trans);
SUBDEBUG(seastore_cache,
return seastar::make_ready_future<CachedExtentRef>(ret);
});
} else {
- touch_extent(*ret);
+ assert(!ret->is_mutable());
+ touch_extent(*ret);
SUBDEBUGT(seastore_cache, "{} {}~{} {} is present on t without been \
fully loaded, reading ...", t, type, offset, length, laddr);
auto bp = alloc_cache_buf(ret->get_length());
{
if (p_src && is_background_transaction(*p_src))
return;
- if (ext.is_clean() && !ext.is_placeholder()) {
+ if (ext.is_stable_clean() && !ext.is_placeholder()) {
lru.move_to_top(ext);
}
}
state == extent_state_t::EXIST_CLEAN;
}
+ // Returs true if extent is stable and clean
+ bool is_stable_clean() const {
+ ceph_assert(is_valid());
+ return state == extent_state_t::CLEAN ||
+ state == extent_state_t::CLEAN_PENDING;
+ }
+
/// Ruturns true if data is persisted while metadata isn't
bool is_exist_clean() const {
return state == extent_state_t::EXIST_CLEAN;