]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/seastore_types: unify NULL/MAX/default values
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 14 Feb 2022 03:10:41 +0000 (11:10 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Mon, 21 Feb 2022 06:55:03 +0000 (14:55 +0800)
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 <yingxin.cheng@intel.com>
13 files changed:
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/cached_extent.h
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/extent_placement_manager.h
src/crimson/os/seastore/extent_reader.cc
src/crimson/os/seastore/journal/segmented_journal.cc
src/crimson/os/seastore/journal/segmented_journal.h
src/crimson/os/seastore/seastore_types.cc
src/crimson/os/seastore/seastore_types.h
src/crimson/os/seastore/segment_cleaner.cc
src/crimson/os/seastore/segment_cleaner.h
src/crimson/os/seastore/transaction.h

index b9d62693cc1e985206bb50d504c57e4ef5f8a0f9..b3566855f17be35b98033c6e756e6ff86268fbb8 100644 (file)
@@ -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) {
index cc6e48648af10956412e642e9e17553fd0dc400a..3379d8e64849306069696ee1650f8f5fffdacca9 100644 (file)
@@ -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;
index e15abc38ca79779246d85c65f714575984a07c5a..19dd03f13df316b48f231a2b007fd0fabafa6175 100644 (file)
@@ -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;
index 8d4f632ab6d30097cd5cd71ce4237158a442fb6d..c5331cf74b1aeb1ca5bc9d9a632e1aa5806d5dd3 100644 (file)
@@ -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();
index b0bbba49fced2ea5282c368961d22bc5fd252386..485ed4a069b8a4bc98c02ef73ea493278ae9e223 100644 (file)
@@ -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);
index 0baaa12c9445cf9213f70bf40a9aae5ba5a52c3d..cbb62933e3b10904aa64504d455415bac8946ee4 100644 (file)
@@ -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);
index 232b665c5d47f7228f6c3bef50acbbc28514d195..351ef6a2e1af73729ce86651e7c5681c36dfbd75 100644 (file)
@@ -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;
 }
index 79ca35919f112abc6e588621d7173aa12892524d..49091a65a6f57a0d831833b5c59e19ae98f2e337 100644 (file)
@@ -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
index 0dc3fe9a8cd4bd0e49910a17014a63a60259b475..966075f6d931bbf0bd68c573ec88991fc3695742 100644 (file)
@@ -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);
 }
 
index 7b982ef959159e0c36f4279ab29d657ffb80f455..b126820ca5517c6b80bb89380e0874f5d8548b8c 100644 (file)
 
 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<device_id_t>::max() >>
    (std::numeric_limits<device_id_t>::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<seastore_off_t>::max();
 constexpr seastore_off_t MAX_SEG_OFF =
   std::numeric_limits<seastore_off_t>::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<seastore_off_t>::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<objaddr_t>::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<laddr_t>::min();
 constexpr laddr_t L_ADDR_MAX = std::numeric_limits<laddr_t>::max();
-constexpr laddr_t L_ADDR_NULL = std::numeric_limits<laddr_t>::max();
-constexpr laddr_t L_ADDR_ROOT = std::numeric_limits<laddr_t>::max() - 1;
-constexpr laddr_t L_ADDR_LBAT = std::numeric_limits<laddr_t>::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;
 }
 
 }
index f0907b1cca664375521056765107731ee344ba9f..2f6a418fa1ff2faaa1cef0c9e1a3667e0cbb6ca9 100644 (file)
@@ -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(
index 6e0e774ea9de15a9ffefdcf55a7b5e43593afcfc..e170071f6f32597ef7be9d947493fe2fae4e2e9f 100644 (file)
@@ -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;
index d613261fa366a26990d99d22abe3ea7cc464f41f..bfda01b9ac35d09b5fb5d47c087aad02ce3b0cd4 100644 (file)
@@ -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&) {}
   );
 }