From: Radoslaw Zarzynski Date: Sun, 15 Sep 2019 15:18:33 +0000 (+0200) Subject: crimson/osd: handle attr retrieval errors with all_same_way(). X-Git-Tag: v15.1.0~801^2~28 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1221b899b05929904f66703d85d339a7733acc22;p=ceph-ci.git crimson/osd: handle attr retrieval errors with all_same_way(). Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 9fb66f543e6..864d0e2f1a2 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -175,13 +175,8 @@ static seastar::future pgls_filter( val.push_back(std::move(bp)); const bool filtered = filter.filter(sobj, val); return seastar::make_ready_future(filtered ? sobj : hobject_t{}); - }, [&filter, sobj] (const auto& e) { - // TODO: sugar-coat error handling. Compile-time visitors require - // too much of fragile boilerplate. - using T = std::decay_t; - static_assert(std::is_same_v || - std::is_same_v); - logger().debug("pgls_filter: got enoent for obj={}", sobj); + }, PGBackend::get_attr_errorator::all_same_way([&filter, sobj] { + logger().debug("pgls_filter: got error for obj={}", sobj); if (filter.reject_empty_xattr()) { return seastar::make_ready_future(hobject_t{}); @@ -189,7 +184,7 @@ static seastar::future pgls_filter( ceph::bufferlist val; const bool filtered = filter.filter(sobj, val); return seastar::make_ready_future(filtered ? sobj : hobject_t{}); - }); + })); } else { ceph::bufferlist empty_lvalue_bl; const bool filtered = filter.filter(sobj, empty_lvalue_bl); diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index f15444fe4ec..2303ce075ad 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -125,13 +125,8 @@ PGBackend::_load_os(const hobject_t& oid) return seastar::make_ready_future( os_cache.insert(oid, std::make_unique(object_info_t{bl}, true /* exists */))); - }, - crimson::ct_error::enoent::handle([oid, this] { - return seastar::make_ready_future( - os_cache.insert(oid, - std::make_unique(object_info_t{oid}, false))); - }), - crimson::ct_error::enodata::handle([oid, this] { + }, crimson::errorator::all_same_way([oid, this] { return seastar::make_ready_future( os_cache.insert(oid, std::make_unique(object_info_t{oid}, false))); @@ -154,6 +149,7 @@ PGBackend::_load_ss(const hobject_t& oid) bl.push_back(std::move(bp)); return seastar::make_ready_future( ss_cache.insert(oid, std::make_unique(bl))); +<<<<<<< HEAD }, [oid, this] (const auto& e) { using T = std::decay_t; @@ -165,6 +161,17 @@ PGBackend::_load_ss(const hobject_t& oid) static_assert(always_false::value, "non-exhaustive visitor!"); } }); +======= + }, ceph::errorator::all_same_way([oid, this] { + // NOTE: the errors could have been handled by writing just: + // `get_attr_errorator::all_same_way(...)`. + // however, this way is more explicit and resilient to unexpected + // changes in the alias definition. + return seastar::make_ready_future( + ss_cache.insert(oid, std::make_unique())); + })); +>>>>>>> 72c0b99... crimson/osd: handle attr retrieval errors with all_same_way(). } seastar::future