From 88a41c39226fd35d13c43b4e7625e6e1e36fdf2a Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Thu, 27 May 2021 23:33:25 +0800 Subject: [PATCH] crimson/seastore: adopt get_mapping(t, offset) interface Signed-off-by: Yingxin Cheng --- .../os/seastore/transaction_manager.cc | 21 ++++------- src/crimson/os/seastore/transaction_manager.h | 37 ++++++++++++------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 84f748d6945..105d3f04092 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -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( diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 7e4997953ae..5a4cdb702e5 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -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 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 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, std::move(pins.front())); + return this->pin_to_extent(t, std::move(pin)); }); } -- 2.39.5