]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/seastore: adopt get_mapping(t, offset) interface 41582/head
authorYingxin Cheng <yingxin.cheng@intel.com>
Thu, 27 May 2021 15:33:25 +0000 (23:33 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 28 May 2021 07:05:53 +0000 (15:05 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/transaction_manager.cc
src/crimson/os/seastore/transaction_manager.h

index 84f748d6945ec100191279de58eb016bf1fc0aaf..105d3f040928f4799a09a1595240268f6dd1d8be 100644 (file)
@@ -321,20 +321,9 @@ TransactionManager::get_extent_if_live_ret TransactionManager::get_extent_if_liv
     }
 
     if (is_logical_type(type)) {
-      // TODO: switch to get_mapping()
-      return lba_manager->get_mappings(
+      return lba_manager->get_mapping(
        t,
-       laddr,
-       len).safe_then([=, &t](lba_pin_list_t pins) {
-         ceph_assert(pins.size() <= 1);
-         if (pins.empty()) {
-           return get_extent_if_live_ret(
-             get_extent_if_live_ertr::ready_future_marker{},
-             CachedExtentRef());
-         }
-
-         auto pin = std::move(pins.front());
-         pins.pop_front();
+       laddr).safe_then([=, &t] (LBAPinRef pin) {
          ceph_assert(pin->get_laddr() == laddr);
          ceph_assert(pin->get_length() == (extent_len_t)len);
          if (pin->get_paddr() == addr) {
@@ -365,7 +354,11 @@ TransactionManager::get_extent_if_live_ret TransactionManager::get_extent_if_liv
              get_extent_if_live_ertr::ready_future_marker{},
              CachedExtentRef());
          }
-       });
+       }).handle_error(crimson::ct_error::enoent::handle([] {
+         return get_extent_if_live_ret(
+           get_extent_if_live_ertr::ready_future_marker{},
+           CachedExtentRef());
+       }), crimson::ct_error::pass_further_all{});
     } else {
       DEBUGT("non-logical extent {}", t, addr);
       return lba_manager->get_physical_extent_if_live(
index 7e4997953aeac96713ca4849085a7e400ebb88f4..5a4cdb702e571f4051fd4febdd346c294af7b137 100644 (file)
@@ -121,6 +121,19 @@ public:
     return cache->create_weak_transaction();
   }
 
+  /**
+   * get_pin
+   *
+   * Get the logical pin at offset
+   */
+  using get_pin_ertr = LBAManager::get_mapping_ertr;
+  using get_pin_ret = LBAManager::get_mapping_ret;
+  get_pin_ret get_pin(
+    Transaction &t,
+    laddr_t offset) {
+    return lba_manager->get_mapping(t, offset);
+  }
+
   /**
    * get_pins
    *
@@ -141,7 +154,7 @@ public:
    *
    * Get extent mapped at pin.
    */
-  using pin_to_extent_ertr = get_pins_ertr::extend_ertr<
+  using pin_to_extent_ertr = get_pin_ertr::extend_ertr<
     SegmentManager::read_ertr>;
   template <typename T>
   using pin_to_extent_ret = pin_to_extent_ertr::future<
@@ -178,7 +191,7 @@ public:
    *
    * Read extent of type T at offset~length
    */
-  using read_extent_ertr = get_pins_ertr::extend_ertr<
+  using read_extent_ertr = get_pin_ertr::extend_ertr<
     SegmentManager::read_ertr>;
   template <typename T>
   using read_extent_ret = read_extent_ertr::future<
@@ -189,19 +202,15 @@ public:
     laddr_t offset,
     extent_len_t length) {
     LOG_PREFIX(TransactionManager::read_extent);
-    return get_pins(
-      t, offset, length
-    ).safe_then([this, FNAME, &t, offset, length](auto pins) {
-      if (pins.size() != 1 || !pins.front()->get_paddr().is_real()) {
-       ERRORT(
-         "offset {} len {} got {} extents:",
-         t, offset, length, pins.size());
-       for (auto &i: pins) {
-         ERRORT("\t{}", t, *i);
-       }
-       ceph_assert(0 == "Should be impossible");
+    return get_pin(
+      t, offset
+    ).safe_then([this, FNAME, &t, offset, length] (auto pin) {
+      if (length != pin->get_length() || !pin->get_paddr().is_real()) {
+        ERRORT("offset {} len {} got wrong pin {}",
+               t, offset, length, *pin);
+        ceph_assert(0 == "Should be impossible");
       }
-      return this->pin_to_extent<T>(t, std::move(pins.front()));
+      return this->pin_to_extent<T>(t, std::move(pin));
     });
   }