assert(ref->is_valid());
assert(ref->user_hint == PLACEMENT_HINT_NULL);
assert(ref->rewrite_generation == NULL_GENERATION);
+ assert(ref->get_paddr().is_absolute() ||
+ ref->get_paddr().is_root());
extents_index.insert(*ref);
}
void Cache::mark_dirty(CachedExtentRef ref)
{
+ assert(ref->get_paddr().is_absolute());
if (ref->is_dirty()) {
assert(ref->primary_ref_list_hook.is_linked());
return;
assert(!ref->primary_ref_list_hook.is_linked());
ceph_assert(ref->get_modify_time() != NULL_TIME);
assert(ref->is_fully_loaded());
+ assert(ref->get_paddr().is_absolute() ||
+ ref->get_paddr().is_root());
// Note: next might not be at extent_state_t::DIRTY,
// also see CachedExtent::is_stable_writting()
assert(ref->is_dirty());
ceph_assert(ref->primary_ref_list_hook.is_linked());
assert(ref->is_fully_loaded());
+ assert(ref->get_paddr().is_absolute() ||
+ ref->get_paddr().is_root());
auto extent_length = ref->get_length();
stats.dirty_bytes -= extent_length;
const Transaction::src_t* p_src)
{
assert(ref->is_valid());
+ assert(ref->get_paddr().is_absolute() ||
+ ref->get_paddr().is_root());
if (ref->is_dirty()) {
remove_from_dirty(ref, p_src);
} else if (!ref->is_placeholder()) {
+ assert(ref->get_paddr().is_absolute());
lru.remove_from_lru(*ref);
}
extents_index.erase(*ref);
CachedExtentRef prev)
{
assert(next->get_paddr() == prev->get_paddr());
+ assert(next->get_paddr().is_absolute() || next->get_paddr().is_root());
assert(next->version == prev->version + 1);
extents_index.replace(*next, *prev);
if (is_root_type(delta.type)) {
TRACE("replay root delta at {} {}, remove extent ... -- {}, prv_root={}",
journal_seq, record_base, delta, *root);
+ ceph_assert(delta.paddr.is_root());
remove_extent(root, nullptr);
root->apply_delta_and_adjust_crc(record_base, delta.bl);
root->dirty_from_or_retired_at = journal_seq;
return replay_delta_ertr::make_ready_future<std::pair<bool, CachedExtentRef>>(
std::make_pair(true, root));
} else {
+ ceph_assert(delta.paddr.is_absolute());
auto _get_extent_if_cached = [this](paddr_t addr)
-> get_extent_ertr::future<CachedExtentRef> {
// replay is not included by the cache hit metrics
});
}
+ assert(paddr.is_absolute());
// get_extent_ret::ABSENT from transaction
ret = query_cache(paddr);
if (!ret) {
// Interfaces only for tests.
public:
CachedExtentRef test_query_cache(paddr_t offset) {
+ assert(offset.is_absolute());
return query_cache(offset);
}
const Transaction::src_t* p_src
) {
LOG_PREFIX(Cache::do_get_caching_extent);
+ assert(offset.is_absolute());
auto cached = query_cache(offset);
if (!cached) {
// partial read
const Transaction::src_t* p_src,
cache_hint_t hint)
{
+ assert(ext.get_paddr().is_absolute());
if (hint == CACHE_HINT_NOCACHE && is_logical_type(ext.get_type())) {
return;
}
assert(!extent->is_range_loaded(offset, length));
assert(is_aligned(offset, get_block_size()));
assert(is_aligned(length, get_block_size()));
+ assert(extent->get_paddr().is_absolute());
extent->set_io_wait();
auto old_length = extent->get_loaded_length();
load_ranges_t to_read = extent->load_ranges(offset, length);
RETIRED
};
get_extent_ret get_extent(paddr_t addr, CachedExtentRef *out) {
+ assert(addr.is_real_location() || addr.is_root());
auto [result, ext] = do_get_extent(addr);
// placeholder in read-set must be in the retired-set
// at the same time, user should not see a placeholder.
}
void add_absent_to_retired_set(CachedExtentRef ref) {
+ assert(ref->get_paddr().is_absolute());
bool added = do_add_to_read_set(ref);
ceph_assert(added);
add_present_to_retired_set(ref);
}
void add_present_to_retired_set(CachedExtentRef ref) {
+ assert(ref->get_paddr().is_real_location());
assert(!is_weak());
#ifndef NDEBUG
auto [result, ext] = do_get_extent(ref->get_paddr());
// Returns true if added, false if already added or weak
bool maybe_add_to_read_set(CachedExtentRef ref) {
+ assert(ref->get_paddr().is_absolute());
if (is_weak()) {
return false;
}
}
void add_to_read_set(CachedExtentRef ref) {
+ assert(ref->get_paddr().is_absolute()
+ || ref->get_paddr().is_root());
if (is_weak()) {
return;
}
void add_fresh_extent(
CachedExtentRef ref) {
+ assert(ref->get_paddr().is_real_location());
ceph_assert(!is_weak());
if (ref->is_exist_clean()) {
existing_block_stats.inc(ref);
void add_mutated_extent(CachedExtentRef ref) {
ceph_assert(!is_weak());
+ assert(ref->get_paddr().is_absolute() ||
+ ref->get_paddr().is_root());
assert(ref->is_exist_mutation_pending() ||
read_set.count(ref->prior_instance->get_paddr()));
mutated_block_list.push_back(ref);
assert(!is_retired_placeholder_type(extent.get_type()));
assert(!is_root_type(extent.get_type()));
assert(extent.get_paddr() == placeholder.get_paddr());
+ assert(extent.get_paddr().is_absolute());
{
auto where = read_set.find(placeholder.get_paddr());
assert(where != read_set.end());
}
bool is_stable_extent_retired(paddr_t paddr, extent_len_t len) {
+ assert(paddr.is_absolute());
auto iter = retired_set.lower_bound(paddr);
if (iter == retired_set.end()) {
return false;