From: Yingxin Cheng Date: Mon, 14 Feb 2022 03:10:41 +0000 (+0800) Subject: crimson/os/seastore/seastore_types: unify NULL/MAX/default values X-Git-Tag: v18.0.0~1342^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c49bb67e2b8af509e169feddc607393f33a11650;p=ceph.git crimson/os/seastore/seastore_types: unify NULL/MAX/default values Mostly for paddr_t and journal_seq_t, and use P_ADDR_NULL and JOURNAL_SEQ_NULL where possible, with related cleanups. Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index b9d62693cc1e..b3566855f17b 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -977,7 +977,7 @@ record_t Cache::prepare_record(Transaction &t) record.push_back( delta_info_t{ extent_types_t::ROOT, - paddr_t{}, + P_ADDR_NULL, L_ADDR_NULL, 0, 0, @@ -1103,7 +1103,7 @@ record_t Cache::prepare_record(Transaction &t) "{} delta, {} retire, {}(md={}B, data={}B, fill={}) ool-records, " "{}B md, {}B data", t, (void*)&t.get_handle(), - get_oldest_dirty_from().value_or(journal_seq_t{}), + get_oldest_dirty_from().value_or(JOURNAL_SEQ_NULL), read_stat, fresh_stat, fresh_invalid_stat, @@ -1253,7 +1253,7 @@ Cache::close_ertr::future<> Cache::close() INFO("close with {}({}B) dirty from {}, {}({}B) lru, totally {}({}B) indexed extents", dirty.size(), stats.dirty_bytes, - get_oldest_dirty_from().value_or(journal_seq_t{}), + get_oldest_dirty_from().value_or(JOURNAL_SEQ_NULL), lru.get_current_contents_extents(), lru.get_current_contents_bytes(), extents.size(), @@ -1371,7 +1371,7 @@ Cache::get_next_dirty_extents_ret Cache::get_next_dirty_extents( i != dirty.end() && bytes_so_far < max_bytes; ++i) { auto dirty_from = i->get_dirty_from(); - ceph_assert(dirty_from != journal_seq_t() && + ceph_assert(dirty_from != JOURNAL_SEQ_NULL && dirty_from != JOURNAL_SEQ_MAX && dirty_from != NO_DELTAS); if (dirty_from < seq) { diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index cc6e48648af1..3379d8e64849 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -619,7 +619,7 @@ public: extents.size(), extents.get_bytes(), dirty.size(), - get_oldest_dirty_from().value_or(journal_seq_t{})); + get_oldest_dirty_from().value_or(JOURNAL_SEQ_NULL)); // journal replay should has been finished at this point, // Cache::root should have been inserted to the dirty list @@ -660,7 +660,7 @@ public: extents.size(), extents.get_bytes(), dirty.size(), - get_oldest_dirty_from().value_or(journal_seq_t{})); + get_oldest_dirty_from().value_or(JOURNAL_SEQ_NULL)); }); } @@ -724,7 +724,7 @@ public: return std::nullopt; } else { auto oldest = dirty.begin()->get_dirty_from(); - if (oldest == journal_seq_t()) { + if (oldest == JOURNAL_SEQ_NULL) { return std::nullopt; } else { return oldest; diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index e15abc38ca79..19dd03f13df3 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -388,7 +388,7 @@ private: ceph::bufferptr ptr; /// number of deltas since initial write - extent_version_t version = EXTENT_VERSION_NULL; + extent_version_t version = 0; /// address of original block -- relative iff is_pending() and is_clean() paddr_t poffset; diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index 8d4f632ab6d3..c5331cf74b1a 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -86,7 +86,7 @@ SegmentedAllocator::Writer::_write( auto& lextent = ool_extent.get_lextent(); auto paddr = ool_extent.get_ool_paddr(); TRACET("ool extent written at {} -- {}", t, *lextent, paddr); - lextent->hint = {}; + lextent->hint = placement_hint_t::NUM_HINTS; // invalidate hint t.mark_delayed_extent_ool(lextent, paddr); } record.clear(); diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index b0bbba49fced..485ed4a069b8 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -69,7 +69,7 @@ public: } assert(extent_offset == (seastore_off_t)(base + record_group.size.get_encoded_length())); - return encode_records(record_group, journal_seq_t(), nonce); + return encode_records(record_group, JOURNAL_SEQ_NULL, nonce); } void add_extent(LogicalCachedExtentRef& extent) { extents.emplace_back(extent); diff --git a/src/crimson/os/seastore/extent_reader.cc b/src/crimson/os/seastore/extent_reader.cc index 0baaa12c9445..cbb62933e3b1 100644 --- a/src/crimson/os/seastore/extent_reader.cc +++ b/src/crimson/os/seastore/extent_reader.cc @@ -162,7 +162,7 @@ ExtentReader::scan_valid_records_ret ExtentReader::scan_valid_records( } auto &next = cursor.pending_record_groups.front(); journal_seq_t next_seq = {cursor.seq.segment_seq, next.offset}; - if (cursor.last_committed == journal_seq_t() || + if (cursor.last_committed == JOURNAL_SEQ_NULL || next_seq > cursor.last_committed) { return scan_valid_records_ertr::make_ready_future< seastar::stop_iteration>(seastar::stop_iteration::yes); @@ -239,7 +239,7 @@ ExtentReader::read_validate_record_metadata( if (header.mdlength < block_size || header.mdlength % block_size != 0 || header.dlength % block_size != 0 || - (header.committed_to != journal_seq_t() && + (header.committed_to != JOURNAL_SEQ_NULL && header.committed_to.offset.as_seg_paddr().get_segment_off() % block_size != 0) || (seg_addr.get_segment_off() + header.mdlength + header.dlength > segment_size)) { ERROR("failed, invalid record group header {}", start); diff --git a/src/crimson/os/seastore/journal/segmented_journal.cc b/src/crimson/os/seastore/journal/segmented_journal.cc index 232b665c5d47..351ef6a2e1af 100644 --- a/src/crimson/os/seastore/journal/segmented_journal.cc +++ b/src/crimson/os/seastore/journal/segmented_journal.cc @@ -487,7 +487,7 @@ void SegmentedJournal::JournalSegmentManager::mark_committed( { LOG_PREFIX(JournalSegmentManager::mark_committed); TRACE("{} => {}", committed_to, new_committed_to); - assert(committed_to == journal_seq_t() || + assert(committed_to == JOURNAL_SEQ_NULL || committed_to <= new_committed_to); committed_to = new_committed_to; } diff --git a/src/crimson/os/seastore/journal/segmented_journal.h b/src/crimson/os/seastore/journal/segmented_journal.h index 79ca35919f11..49091a65a6f5 100644 --- a/src/crimson/os/seastore/journal/segmented_journal.h +++ b/src/crimson/os/seastore/journal/segmented_journal.h @@ -139,7 +139,7 @@ private: current_segment_nonce = 0; current_journal_segment.reset(); written_to = 0; - committed_to = {}; + committed_to = JOURNAL_SEQ_NULL; } // prepare segment for writes, writes out segment header diff --git a/src/crimson/os/seastore/seastore_types.cc b/src/crimson/os/seastore/seastore_types.cc index 0dc3fe9a8cd4..966075f6d931 100644 --- a/src/crimson/os/seastore/seastore_types.cc +++ b/src/crimson/os/seastore/seastore_types.cc @@ -622,7 +622,7 @@ void scan_valid_records_cursor::emplace_record_group( const record_group_header_t& header, ceph::bufferlist&& md_bl) { auto new_committed_to = header.committed_to; - ceph_assert(last_committed == journal_seq_t() || + ceph_assert(last_committed == JOURNAL_SEQ_NULL || last_committed <= new_committed_to); last_committed = new_committed_to; pending_record_groups.emplace_back( @@ -630,7 +630,7 @@ void scan_valid_records_cursor::emplace_record_group( header, std::move(md_bl)); increment_seq(header.dlength + header.mdlength); - ceph_assert(new_committed_to == journal_seq_t() || + ceph_assert(new_committed_to == JOURNAL_SEQ_NULL || new_committed_to < seq); } diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index 7b982ef95915..b126820ca551 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -19,6 +19,10 @@ namespace crimson::os::seastore { +/* + * Note: NULL value is usually the default and max value. + */ + using depth_t = uint32_t; using depth_le_t = ceph_le32; @@ -59,13 +63,13 @@ using device_segment_id_t = uint32_t; constexpr device_id_t DEVICE_ID_MAX = (std::numeric_limits::max() >> (std::numeric_limits::digits - DEVICE_ID_LEN_BITS + 1)); +constexpr device_id_t DEVICE_ID_NULL = DEVICE_ID_MAX; constexpr device_id_t DEVICE_ID_RECORD_RELATIVE = DEVICE_ID_MAX - 1; constexpr device_id_t DEVICE_ID_BLOCK_RELATIVE = DEVICE_ID_MAX - 2; constexpr device_id_t DEVICE_ID_DELAYED = DEVICE_ID_MAX - 3; -constexpr device_id_t DEVICE_ID_NULL = DEVICE_ID_MAX - 4; -constexpr device_id_t DEVICE_ID_FAKE = DEVICE_ID_MAX - 5; -constexpr device_id_t DEVICE_ID_ZERO = DEVICE_ID_MAX - 6; -constexpr device_id_t DEVICE_ID_MAX_VALID = DEVICE_ID_MAX - 7; +constexpr device_id_t DEVICE_ID_FAKE = DEVICE_ID_MAX - 4; +constexpr device_id_t DEVICE_ID_ZERO = DEVICE_ID_MAX - 5; +constexpr device_id_t DEVICE_ID_MAX_VALID = DEVICE_ID_MAX - 6; constexpr device_segment_id_t DEVICE_SEGMENT_ID_MAX = (1 << SEGMENT_ID_LEN_BITS) - 1; @@ -166,12 +170,13 @@ struct __attribute((packed)) segment_id_le_t { } }; +constexpr segment_id_t MIN_SEG_ID = segment_id_t(0, 0); constexpr segment_id_t MAX_SEG_ID = segment_id_t( DEVICE_ID_MAX, DEVICE_SEGMENT_ID_MAX ); // for tests which generate fake paddrs -constexpr segment_id_t NULL_SEG_ID = segment_id_t(DEVICE_ID_NULL, 0); +constexpr segment_id_t NULL_SEG_ID = MAX_SEG_ID; constexpr segment_id_t FAKE_SEG_ID = segment_id_t(DEVICE_ID_FAKE, 0); std::ostream &operator<<(std::ostream &out, const segment_id_t&); @@ -182,10 +187,9 @@ std::ostream &segment_to_stream(std::ostream &, const segment_id_t &t); // Offset within a segment on disk, see SegmentManager // may be negative for relative offsets using seastore_off_t = int32_t; -constexpr seastore_off_t NULL_SEG_OFF = - std::numeric_limits::max(); constexpr seastore_off_t MAX_SEG_OFF = std::numeric_limits::max(); +constexpr seastore_off_t NULL_SEG_OFF = MAX_SEG_OFF; std::ostream &offset_to_stream(std::ostream &, const seastore_off_t &t); @@ -462,7 +466,8 @@ public: seastore_off_t offset) { return paddr_t(segment_id_t(device, seg), offset); } - constexpr paddr_t() : paddr_t(NULL_SEG_ID, 0) {} + // P_ADDR_MAX == P_ADDR_NULL == paddr_t{} + constexpr paddr_t() : paddr_t(NULL_SEG_ID, NULL_SEG_OFF) {} static constexpr paddr_t make_blk_paddr( device_id_t device, block_off_t offset) { @@ -667,11 +672,9 @@ private: } }; -constexpr paddr_t P_ADDR_NULL = paddr_t{}; -constexpr paddr_t P_ADDR_MIN = paddr_t::make_seg_paddr(segment_id_t(0, 0), 0); -constexpr paddr_t P_ADDR_MAX = paddr_t::make_seg_paddr( - segment_id_t(DEVICE_ID_MAX, DEVICE_SEGMENT_ID_MAX), - std::numeric_limits::max()); +constexpr paddr_t P_ADDR_MIN = paddr_t::make_seg_paddr(MIN_SEG_ID, 0); +constexpr paddr_t P_ADDR_MAX = paddr_t::make_seg_paddr(MAX_SEG_ID, MAX_SEG_OFF); +constexpr paddr_t P_ADDR_NULL = paddr_t{}; // P_ADDR_MAX == P_ADDR_NULL == paddr_t{} constexpr paddr_t P_ADDR_ZERO = paddr_t::make_seg_paddr( DEVICE_ID_ZERO, 0, 0); @@ -710,7 +713,7 @@ std::ostream &operator<<(std::ostream &out, const paddr_t &rhs); using objaddr_t = uint32_t; constexpr objaddr_t OBJ_ADDR_MAX = std::numeric_limits::max(); -constexpr objaddr_t OBJ_ADDR_NULL = OBJ_ADDR_MAX - 1; +constexpr objaddr_t OBJ_ADDR_NULL = OBJ_ADDR_MAX; enum class placement_hint_t { HOT = 0, // Most of the metadata @@ -737,9 +740,10 @@ device_type_t string_to_device_type(std::string type); /* Monotonically increasing identifier for the location of a * journal_record. */ +// JOURNAL_SEQ_NULL == JOURNAL_SEQ_MAX == journal_seq_t{} struct journal_seq_t { - segment_seq_t segment_seq = 0; - paddr_t offset; + segment_seq_t segment_seq = NULL_SEG_SEQ; + paddr_t offset = P_ADDR_NULL; journal_seq_t add_offset(seastore_off_t o) const { return {segment_seq, offset.add_offset(o)}; @@ -760,27 +764,28 @@ WRITE_CMP_OPERATORS_2(journal_seq_t, segment_seq, offset) WRITE_EQ_OPERATORS_2(journal_seq_t, segment_seq, offset) constexpr journal_seq_t JOURNAL_SEQ_MIN{ 0, - paddr_t::make_seg_paddr(NULL_SEG_ID, 0) + P_ADDR_MIN }; constexpr journal_seq_t JOURNAL_SEQ_MAX{ MAX_SEG_SEQ, P_ADDR_MAX }; - -std::ostream &operator<<(std::ostream &out, const journal_seq_t &seq); - -static constexpr journal_seq_t NO_DELTAS = journal_seq_t{ +// JOURNAL_SEQ_NULL == JOURNAL_SEQ_MAX == journal_seq_t{} +constexpr journal_seq_t JOURNAL_SEQ_NULL = JOURNAL_SEQ_MAX; +constexpr journal_seq_t NO_DELTAS = journal_seq_t{ NULL_SEG_SEQ, - P_ADDR_NULL + P_ADDR_ZERO }; +std::ostream &operator<<(std::ostream &out, const journal_seq_t &seq); + // logical addr, see LBAManager, TransactionManager using laddr_t = uint64_t; constexpr laddr_t L_ADDR_MIN = std::numeric_limits::min(); constexpr laddr_t L_ADDR_MAX = std::numeric_limits::max(); -constexpr laddr_t L_ADDR_NULL = std::numeric_limits::max(); -constexpr laddr_t L_ADDR_ROOT = std::numeric_limits::max() - 1; -constexpr laddr_t L_ADDR_LBAT = std::numeric_limits::max() - 2; +constexpr laddr_t L_ADDR_NULL = L_ADDR_MAX; +constexpr laddr_t L_ADDR_ROOT = L_ADDR_MAX - 1; +constexpr laddr_t L_ADDR_LBAT = L_ADDR_MAX - 2; struct __attribute((packed)) laddr_le_t { ceph_le64 laddr = ceph_le64(L_ADDR_NULL); @@ -877,7 +882,6 @@ struct extent_t { }; using extent_version_t = uint32_t; -constexpr extent_version_t EXTENT_VERSION_NULL = 0; /* description of a mutation to a physical extent */ struct delta_info_t { @@ -1597,7 +1601,7 @@ inline paddr_t paddr_t::operator-(paddr_t rhs) const { return seg_addr - rhs; } ceph_assert(0 == "not supported type"); - return paddr_t{}; + return P_ADDR_NULL; } #define PADDR_OPERATION(a_type, base, func) \ @@ -1609,31 +1613,31 @@ inline paddr_t paddr_t::add_offset(int32_t o) const { PADDR_OPERATION(addr_types_t::SEGMENT, seg_paddr_t, add_offset(o)) PADDR_OPERATION(addr_types_t::RANDOM_BLOCK, blk_paddr_t, add_offset(o)) ceph_assert(0 == "not supported type"); - return paddr_t{}; + return P_ADDR_NULL; } inline paddr_t paddr_t::add_relative(paddr_t o) const { PADDR_OPERATION(addr_types_t::SEGMENT, seg_paddr_t, add_relative(o)) ceph_assert(0 == "not supported type"); - return paddr_t{}; + return P_ADDR_NULL; } inline paddr_t paddr_t::add_block_relative(paddr_t o) const { PADDR_OPERATION(addr_types_t::SEGMENT, seg_paddr_t, add_block_relative(o)) ceph_assert(0 == "not supported type"); - return paddr_t{}; + return P_ADDR_NULL; } inline paddr_t paddr_t::add_record_relative(paddr_t o) const { PADDR_OPERATION(addr_types_t::SEGMENT, seg_paddr_t, add_record_relative(o)) ceph_assert(0 == "not supported type"); - return paddr_t{}; + return P_ADDR_NULL; } inline paddr_t paddr_t::maybe_relative_to(paddr_t o) const { PADDR_OPERATION(addr_types_t::SEGMENT, seg_paddr_t, maybe_relative_to(o)) ceph_assert(0 == "not supported type"); - return paddr_t{}; + return P_ADDR_NULL; } } diff --git a/src/crimson/os/seastore/segment_cleaner.cc b/src/crimson/os/seastore/segment_cleaner.cc index f0907b1cca66..2f6a418fa1ff 100644 --- a/src/crimson/os/seastore/segment_cleaner.cc +++ b/src/crimson/os/seastore/segment_cleaner.cc @@ -238,8 +238,8 @@ void SegmentCleaner::update_journal_tail_target(journal_seq_t target) __func__, target, journal_tail_target); - assert(journal_tail_target == journal_seq_t() || target >= journal_tail_target); - if (journal_tail_target == journal_seq_t() || target > journal_tail_target) { + assert(journal_tail_target == JOURNAL_SEQ_NULL || target >= journal_tail_target); + if (journal_tail_target == JOURNAL_SEQ_NULL || target > journal_tail_target) { journal_tail_target = target; } gc_process.maybe_wake_on_space_used(); @@ -248,7 +248,7 @@ void SegmentCleaner::update_journal_tail_target(journal_seq_t target) void SegmentCleaner::update_journal_tail_committed(journal_seq_t committed) { - if (journal_tail_committed == journal_seq_t() || + if (journal_tail_committed == JOURNAL_SEQ_NULL || committed > journal_tail_committed) { logger().debug( "{}: update journal_tail_committed {}", @@ -256,7 +256,7 @@ void SegmentCleaner::update_journal_tail_committed(journal_seq_t committed) committed); journal_tail_committed = committed; } - if (journal_tail_target == journal_seq_t() || + if (journal_tail_target == JOURNAL_SEQ_NULL || committed > journal_tail_target) { logger().debug( "{}: update journal_tail_target {}", @@ -356,7 +356,7 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space() { if (!scan_cursor) { journal_seq_t next = get_next_gc_target(); - if (next == journal_seq_t()) { + if (next == JOURNAL_SEQ_NULL) { logger().debug( "SegmentCleaner::do_gc: no segments to gc"); return seastar::now(); @@ -440,9 +440,9 @@ SegmentCleaner::mount_ret SegmentCleaner::mount( "SegmentCleaner::mount: {} segment managers", sms.size()); init_complete = false; stats = {}; - journal_tail_target = journal_seq_t{}; - journal_tail_committed = journal_seq_t{}; - journal_head = journal_seq_t{}; + journal_tail_target = JOURNAL_SEQ_NULL; + journal_tail_committed = JOURNAL_SEQ_NULL; + journal_head = JOURNAL_SEQ_NULL; journal_device_id = pdevice_id; space_tracker.reset( diff --git a/src/crimson/os/seastore/segment_cleaner.h b/src/crimson/os/seastore/segment_cleaner.h index 6e0e774ea9de..e170071f6f32 100644 --- a/src/crimson/os/seastore/segment_cleaner.h +++ b/src/crimson/os/seastore/segment_cleaner.h @@ -701,7 +701,7 @@ public: } void set_journal_head(journal_seq_t head) { - assert(journal_head == journal_seq_t() || head >= journal_head); + assert(journal_head == JOURNAL_SEQ_NULL || head >= journal_head); journal_head = head; segments.update_segment_avail_bytes(head.offset); gc_process.maybe_wake_on_space_used(); @@ -836,7 +836,7 @@ private: seq); return journal_seq_t{seq, paddr_t::make_seg_paddr(id, 0)}; } else { - return journal_seq_t(); + return JOURNAL_SEQ_NULL; } } @@ -1019,7 +1019,7 @@ private: /// Return bytes contained in segments in journal size_t get_journal_segment_bytes() const { - if (journal_head == journal_seq_t()) { + if (journal_head == JOURNAL_SEQ_NULL) { // this for calculating journal bytes in the journal // replay phase in which journal_head is not set return segments.get_journal_segments() * segments[journal_device_id]->segment_size; diff --git a/src/crimson/os/seastore/transaction.h b/src/crimson/os/seastore/transaction.h index d613261fa366..bfda01b9ac35 100644 --- a/src/crimson/os/seastore/transaction.h +++ b/src/crimson/os/seastore/transaction.h @@ -458,7 +458,7 @@ inline TransactionRef make_test_transaction() { get_dummy_ordering_handle(), false, Transaction::src_t::MUTATE, - journal_seq_t{}, + JOURNAL_SEQ_NULL, [](Transaction&) {} ); }