Transaction &t,
CachedExtentRef i) {
LOG_PREFIX(Cache::duplicate_for_write);
+ ceph_assert(i->is_valid());
assert(i->is_fully_loaded());
#ifndef NDEBUG
//
// TODO(implement fine-grained-wait)
assert(!extent->is_range_loaded(partial_off, partial_len));
- assert(!extent->is_mutable());
+ assert(extent->is_data_stable());
if (extent->is_pending_io()) {
std::optional<Transaction::src_t> src;
if (p_src) {
CachedExtent &extent,
extent_len_t increased_length,
const Transaction::src_t* p_src) {
- assert(!extent.is_mutable());
+ assert(extent.is_data_stable());
if (extent.primary_ref_list_hook.is_linked()) {
assert(extent.is_stable_clean() && !extent.is_placeholder());
return TCachedExtentRef<const T>(static_cast<const T*>(this));
}
- /// Returns true if extent can be mutated in an open transaction
+ /// Returns true if extent can be mutated in an open transaction,
+ /// normally equivalent to !is_data_stable.
bool is_mutable() const {
return state == extent_state_t::INITIAL_WRITE_PENDING ||
state == extent_state_t::MUTATION_PENDING ||
return is_stable_written() || is_stable_writting();
}
+ /// Returns true if extent can not be mutated,
+ /// normally equivalent to !is_mutable.
bool is_data_stable() const {
return is_stable() || is_exist_clean();
}
assert(p_recorder->node_type() == NODE_TYPE);
assert(p_recorder->field_type() == FIELD_TYPE);
recorder = static_cast<recorder_t*>(p_recorder);
- } else if (!extent->is_mutable() && extent->is_valid()) {
+ } else if (extent->is_stable()) {
state = nextent_state_t::READ_ONLY;
// mut is empty
assert(extent->get_recorder() == nullptr ||
void prepare_mutate(context_t c) {
assert(!is_retired());
if (state == nextent_state_t::READ_ONLY) {
- assert(!extent->is_mutable());
+ assert(extent->is_stable());
auto ref_recorder = recorder_t::create_for_encode(c.vb);
recorder = static_cast<recorder_t*>(ref_recorder.get());
extent = extent->mutate(c, std::move(ref_recorder));
std::optional<ceph::bufferptr> original_bptr;
// TODO: preserve the bufferspace if partially loaded
if (ext && ext->is_fully_loaded()) {
- ceph_assert(!ext->is_mutable());
+ ceph_assert(ext->is_data_stable());
ceph_assert(ext->get_length() >= original_len);
ceph_assert(ext->get_paddr() == original_paddr);
original_bptr = ext->get_bptr();