extent_types_t type,
laddr_t laddr)
{
- if (paddr.get_addr_type() == paddr_types_t::SEGMENT) {
+ if (paddr.is_absolute_segmented()) {
if (is_backref_node(type)) {
assert(laddr == L_ADDR_NULL);
assert(backref_key.is_absolute_segmented()
assert(background_callback->get_state() >= state_t::SCAN_SPACE);
assert(len);
// TODO: drop
- if (addr.get_addr_type() != paddr_types_t::SEGMENT) {
+ if (!addr.is_absolute_segmented()) {
return;
}
assert(background_callback->get_state() >= state_t::SCAN_SPACE);
assert(len);
// TODO: drop
- if (addr.get_addr_type() != paddr_types_t::SEGMENT) {
+ if (!addr.is_absolute_segmented()) {
return;
}
extent_len_t len)
{
LOG_PREFIX(RBMCleaner::mark_space_used);
- assert(addr.get_addr_type() == paddr_types_t::RANDOM_BLOCK);
+ assert(addr.is_absolute_random_block());
auto rbms = rb_group->get_rb_managers();
for (auto rbm : rbms) {
if (addr.get_device_id() == rbm->get_device_id()) {
extent_len_t len)
{
LOG_PREFIX(RBMCleaner::mark_space_free);
- assert(addr.get_addr_type() == paddr_types_t::RANDOM_BLOCK);
+ assert(addr.is_absolute_random_block());
auto rbms = rb_group->get_rb_managers();
for (auto rbm : rbms) {
if (addr.get_device_id() == rbm->get_device_id()) {
{
ceph_assert(
is_aligned(
- key.get_addr_type() == paddr_types_t::SEGMENT ?
+ key.is_absolute_segmented() ?
key.as_seg_paddr().get_segment_off() :
key.as_blk_paddr().get_device_off(),
cache.get_block_size()));
assert(can_inplace_rewrite(i->prior_instance->get_type()));
assert(i->prior_instance->dirty_from_or_retired_at == JOURNAL_SEQ_MIN);
assert(i->prior_instance->state == CachedExtent::extent_state_t::CLEAN);
- assert(i->prior_instance->get_paddr().get_addr_type() ==
- paddr_types_t::RANDOM_BLOCK);
+ assert(i->prior_instance->get_paddr().is_absolute_random_block());
i->version = 1;
}
auto stype = segment_type_t::NULL_SEG;
// FIXME: This is specific to the segmented implementation
- if (i->get_paddr().get_addr_type() == paddr_types_t::SEGMENT) {
+ if (i->get_paddr().is_absolute_segmented()) {
auto sid = i->get_paddr().as_seg_paddr().get_segment_id();
auto sinfo = get_segment_info(sid);
if (sinfo) {
DEBUG("replay extent delta at {} {} ... -- {}, prv_extent={}",
journal_seq, record_base, delta, *extent);
- if (delta.paddr.get_addr_type() == paddr_types_t::SEGMENT ||
+ if (delta.paddr.is_absolute_segmented() ||
!can_inplace_rewrite(delta.type)) {
ceph_assert_always(extent->last_committed_crc == delta.prev_crc);
assert(extent->version == delta.pversion);
extent->set_modify_time(modify_time);
ceph_assert_always(extent->last_committed_crc == delta.final_crc);
} else {
- assert(delta.paddr.get_addr_type() == paddr_types_t::RANDOM_BLOCK);
+ assert(delta.paddr.is_absolute_random_block());
// see prepare_record(), inplace rewrite might cause version mismatch
extent->apply_delta_and_adjust_crc(record_base, delta.bl);
extent->set_modify_time(modify_time);
); ///< @return used budget
device_off_t get_segment_off(paddr_t addr) const {
- if (addr.get_addr_type() == paddr_types_t::SEGMENT) {
+ if (addr.is_absolute_segmented()) {
auto& seg_addr = addr.as_seg_paddr();
return seg_addr.get_segment_off();
}
- assert(addr.get_addr_type() == paddr_types_t::RANDOM_BLOCK);
+ assert(addr.is_absolute_random_block());
auto& blk_addr = addr.as_blk_paddr();
return blk_addr.get_device_off();
}
out << device_id_printer_t{id}
<< ",0x"
<< std::hex << s.get_device_off() << std::dec;
- } else if (rhs.get_addr_type() == paddr_types_t::SEGMENT) {
+ } else if (rhs.is_absolute_segmented()) {
auto &s = rhs.as_seg_paddr();
out << s.get_segment_id()
<< ",0x"
<< std::hex << s.get_segment_off() << std::dec;
- } else if (rhs.get_addr_type() == paddr_types_t::RANDOM_BLOCK) {
+ } else if (rhs.is_absolute_random_block()) {
auto &s = rhs.as_blk_paddr();
out << device_id_printer_t{s.get_device_id()}
<< ",0x"
return static_cast<device_id_t>(internal_paddr >> DEVICE_OFF_BITS);
}
- paddr_types_t get_addr_type() const {
- return device_id_to_paddr_type(get_device_id());
- }
-
paddr_t add_offset(device_off_t o) const;
paddr_t add_relative(paddr_t o) const;
encode_device_off(offset)) {
assert(offset >= DEVICE_OFF_MIN);
assert(offset <= DEVICE_OFF_MAX);
- assert(get_addr_type() != paddr_types_t::SEGMENT);
+ assert(!is_absolute_segmented());
}
paddr_t(internal_paddr_t val);
: internal_paddr((static_cast<internal_paddr_t>(d_id) << DEVICE_OFF_BITS) |
static_cast<u_device_off_t>(offset)) {}
+ paddr_types_t get_addr_type() const {
+ return device_id_to_paddr_type(get_device_id());
+ }
+
friend struct paddr_le_t;
friend struct pladdr_le_t;
}
inline const seg_paddr_t& paddr_t::as_seg_paddr() const {
- assert(get_addr_type() == paddr_types_t::SEGMENT);
+ assert(is_absolute_segmented());
return *static_cast<const seg_paddr_t*>(this);
}
inline seg_paddr_t& paddr_t::as_seg_paddr() {
- assert(get_addr_type() == paddr_types_t::SEGMENT);
+ assert(is_absolute_segmented());
return *static_cast<seg_paddr_t*>(this);
}
inline const blk_paddr_t& paddr_t::as_blk_paddr() const {
- assert(get_addr_type() == paddr_types_t::RANDOM_BLOCK);
+ assert(is_absolute_random_block());
return *static_cast<const blk_paddr_t*>(this);
}
inline blk_paddr_t& paddr_t::as_blk_paddr() {
- assert(get_addr_type() == paddr_types_t::RANDOM_BLOCK);
+ assert(is_absolute_random_block());
return *static_cast<blk_paddr_t*>(this);
}
}
using ret_t = std::pair<device_off_t, segment_id_t>;
auto to_pair = [](const paddr_t &addr) -> ret_t {
- if (addr.get_addr_type() == paddr_types_t::SEGMENT) {
+ if (addr.is_absolute_segmented()) {
auto &seg_addr = addr.as_seg_paddr();
return ret_t(seg_addr.get_segment_off(), seg_addr.get_segment_id());
- } else if (addr.get_addr_type() == paddr_types_t::RANDOM_BLOCK) {
+ } else if (addr.is_absolute_random_block()) {
auto &blk_addr = addr.as_blk_paddr();
return ret_t(blk_addr.get_device_off(), MAX_SEG_ID);
- } else if (addr.get_addr_type() == paddr_types_t::RESERVED) {
+ } else {
auto &res_addr = addr.as_res_paddr();
return ret_t(res_addr.get_device_off(), MAX_SEG_ID);
- } else {
- assert(0 == "impossible");
- return ret_t(0, MAX_SEG_ID);
}
};
auto left = to_pair(offset);
// This only works with segments to check if alive,
// as parallel transactions may split the extent at the same time.
- ceph_assert(paddr.get_addr_type() == paddr_types_t::SEGMENT);
+ ceph_assert(paddr.is_absolute_segmented());
return cache->get_extent_if_cached(t, paddr, len, type
).si_then([this, FNAME, type, paddr, laddr, len, &t](auto extent)
{
DEBUGT("got pin, try read in parallel ... -- {}", t, *pin);
auto pin_paddr = pin->get_val();
- if (pin_paddr.get_addr_type() != paddr_types_t::SEGMENT) {
+ if (!pin_paddr.is_absolute_segmented()) {
return seastar::now();
}
auto &pin_seg_paddr = pin_paddr.as_seg_paddr();