From: Yingxin Cheng Date: Fri, 21 May 2021 06:42:50 +0000 (+0800) Subject: crimson/onode-staged-tree: detect errors from seastore backend X-Git-Tag: v17.1.0~1880^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=dd9de9db9f8d7be5fe1a526aa2271862dc62c475;p=ceph-ci.git crimson/onode-staged-tree: detect errors from seastore backend Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h index da5ed1cde13..3ca8e826325 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h @@ -107,7 +107,12 @@ class SeastoreNodeExtentManager final: public TransactionManagerHandle { } return tm.read_extent(t, addr, len ).safe_then([addr, len, &t](auto&& e) { - TRACET("read {}B at {:#x}", t, e->get_length(), e->get_laddr()); + TRACET("read {}B at {:#x} -- {}", + t, e->get_length(), e->get_laddr(), *e); + if (!e->is_valid()) { + ERRORT("read invalid extent: {}", t, *e); + ceph_abort("fatal error"); + } assert(e->get_laddr() == addr); assert(e->get_length() == len); std::ignore = addr; @@ -127,8 +132,13 @@ class SeastoreNodeExtentManager final: public TransactionManagerHandle { } return tm.alloc_extent(t, addr_min, len ).safe_then([len, &t](auto extent) { - DEBUGT("allocated {}B at {:#x}", - t, extent->get_length(), extent->get_laddr()); + DEBUGT("allocated {}B at {:#x} -- {}", + t, extent->get_length(), extent->get_laddr(), *extent); + if (!extent->is_initial_pending()) { + ERRORT("allocated {}B but got invalid extent: {}", + t, len, *extent); + ceph_abort("fatal error"); + } assert(extent->get_length() == len); std::ignore = len; return NodeExtentRef(extent); @@ -140,10 +150,12 @@ class SeastoreNodeExtentManager final: public TransactionManagerHandle { LogicalCachedExtentRef extent = _extent; auto addr = extent->get_laddr(); auto len = extent->get_length(); - DEBUGT("retiring {}B at {:#x} ...", t, len, addr); + DEBUGT("retiring {}B at {:#x} -- {} ...", + t, len, addr, *extent); if constexpr (INJECT_EAGAIN) { if (trigger_eagain()) { - DEBUGT("retiring {}B at {:#x}: trigger eagain", t, len, addr); + DEBUGT("retiring {}B at {:#x} -- {} : trigger eagain", + t, len, addr, *extent); return crimson::ct_error::eagain::make(); } }