]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: don't print detail if the extent is not ready 44041/head
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 22 Nov 2021 02:55:22 +0000 (10:55 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 9 Dec 2021 01:39:06 +0000 (09:39 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/cached_extent.cc
src/crimson/os/seastore/cached_extent.h

index eed53d48e09fdef66deb8a510ed6748a55e21778..81908a42f9fd1dd40bdac6e3eb7ef97faf4e2b2b 100644 (file)
@@ -207,7 +207,7 @@ public:
       auto ret = CachedExtent::make_cached_extent_ref<T>(
         alloc_cache_buf(length));
       ret->set_paddr(offset);
-      ret->state = CachedExtent::extent_state_t::CLEAN;
+      ret->state = CachedExtent::extent_state_t::CLEAN_PENDING;
       add_extent(ret);
       return read_extent<T>(
        std::move(ret), std::forward<Func>(extent_init_func));
@@ -218,7 +218,7 @@ public:
       auto ret = CachedExtent::make_cached_extent_ref<T>(
         alloc_cache_buf(length));
       ret->set_paddr(offset);
-      ret->state = CachedExtent::extent_state_t::CLEAN;
+      ret->state = CachedExtent::extent_state_t::CLEAN_PENDING;
       extents.replace(*ret, *cached);
 
       // replace placeholder in transactions
@@ -911,6 +911,7 @@ private:
     TCachedExtentRef<T>&& extent,
     Func &&func
   ) {
+    assert(extent->state == CachedExtent::extent_state_t::CLEAN_PENDING);
     extent->set_io_wait();
     return reader.read(
       extent->get_paddr(),
@@ -918,6 +919,7 @@ private:
       extent->get_bptr()
     ).safe_then(
       [extent=std::move(extent), func=std::forward<Func>(func)]() mutable {
+        extent->state = CachedExtent::extent_state_t::CLEAN;
         /* TODO: crc should be checked against LBA manager */
         extent->last_committed_crc = extent->get_crc32c();
 
index 86d128621da72d69f83013b644ca2640a4f3e738..fbfd8dad04963fc97066541b679a075f826fc292 100644 (file)
@@ -42,6 +42,8 @@ std::ostream &operator<<(std::ostream &out, CachedExtent::extent_state_t state)
     return out << "INITIAL_WRITE_PENDING";
   case CachedExtent::extent_state_t::MUTATION_PENDING:
     return out << "MUTATION_PENDING";
+  case CachedExtent::extent_state_t::CLEAN_PENDING:
+    return out << "CLEAN_PENDING";
   case CachedExtent::extent_state_t::CLEAN:
     return out << "CLEAN";
   case CachedExtent::extent_state_t::DIRTY:
index 921323f84c13f0a025a6363670f17fb5736a55f0..ad54b540ce9942170c0cc917b52422e8161ff58b 100644 (file)
@@ -83,6 +83,7 @@ class CachedExtent : public boost::intrusive_ref_counter<
   enum class extent_state_t : uint8_t {
     INITIAL_WRITE_PENDING, // In Transaction::write_set and fresh_block_list
     MUTATION_PENDING,      // In Transaction::write_set and mutated_block_list
+    CLEAN_PENDING,         // CLEAN, but not yet read out
     CLEAN,                 // In Cache::extent_index, Transaction::read_set
                            //  during write, contents match disk, version == 0
     DIRTY,                 // Same as CLEAN, but contents do not match disk,
@@ -174,7 +175,10 @@ public:
        << ", state=" << state
        << ", last_committed_crc=" << last_committed_crc
        << ", refcount=" << use_count();
-    print_detail(out);
+    if (state != extent_state_t::INVALID &&
+        state != extent_state_t::CLEAN_PENDING) {
+      print_detail(out);
+    }
     return out << ")";
   }
 
@@ -253,7 +257,8 @@ public:
   bool is_clean() const {
     ceph_assert(is_valid());
     return state == extent_state_t::INITIAL_WRITE_PENDING ||
-      state == extent_state_t::CLEAN;
+           state == extent_state_t::CLEAN ||
+           state == extent_state_t::CLEAN_PENDING;
   }
 
   /// Returns true if extent is dirty (has deltas on disk)