From: Kefu Chai Date: Sun, 20 Dec 2020 14:47:11 +0000 (+0800) Subject: crimson/osd: erroratorize FuturizedStore::omap_get_header() X-Git-Tag: v16.1.0~146^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=945101f062393d0830e2135c03eb2613dc86a7b4;p=ceph.git crimson/osd: erroratorize FuturizedStore::omap_get_header() Signed-off-by: Kefu Chai --- diff --git a/src/crimson/os/alienstore/alien_store.cc b/src/crimson/os/alienstore/alien_store.cc index 51548d874f5..8b9955156b6 100644 --- a/src/crimson/os/alienstore/alien_store.cc +++ b/src/crimson/os/alienstore/alien_store.cc @@ -451,16 +451,23 @@ seastar::future AlienStore::stat( }); } -seastar::future AlienStore::omap_get_header( - CollectionRef ch, - const ghobject_t& oid) +auto AlienStore::omap_get_header(CollectionRef ch, + const ghobject_t& oid) + -> read_errorator::future { return seastar::do_with(ceph::bufferlist(), [=](auto& bl) { return tp->submit([=, &bl] { auto c = static_cast(ch.get()); return store->omap_get_header(c->collection, oid, &bl); - }).then([&bl] (int i) { - return seastar::make_ready_future(std::move(bl)); + }).then([&bl] (int r) -> read_errorator::future { + if (r == -ENOENT) { + return crimson::ct_error::enoent::make(); + } else if (r < 0) { + logger().error("omap_get_header: {}", r); + return crimson::ct_error::input_output_error::make(); + } else { + return read_errorator::make_ready_future(std::move(bl)); + } }); }); } diff --git a/src/crimson/os/alienstore/alien_store.h b/src/crimson/os/alienstore/alien_store.h index fde0c1757bc..92739340e78 100644 --- a/src/crimson/os/alienstore/alien_store.h +++ b/src/crimson/os/alienstore/alien_store.h @@ -99,7 +99,7 @@ public: seastar::future stat( CollectionRef, const ghobject_t&) final; - seastar::future omap_get_header( + read_errorator::future omap_get_header( CollectionRef, const ghobject_t&) final; seastar::future> fiemap( diff --git a/src/crimson/os/cyanstore/cyan_store.cc b/src/crimson/os/cyanstore/cyan_store.cc index 645a75340b0..eb93d72ec58 100644 --- a/src/crimson/os/cyanstore/cyan_store.cc +++ b/src/crimson/os/cyanstore/cyan_store.cc @@ -295,18 +295,19 @@ CyanStore::omap_get_values(CollectionRef ch, std::make_tuple(true, std::move(values))); } -seastar::future -CyanStore::omap_get_header( - CollectionRef ch, - const ghobject_t& oid - ) { +auto +CyanStore::omap_get_header(CollectionRef ch, + const ghobject_t& oid) + -> read_errorator::future +{ auto c = static_cast(ch.get()); auto o = c->get_object(oid); if (!o) { - throw std::runtime_error(fmt::format("object does not exist: {}", oid)); + return crimson::ct_error::enoent::make(); } - return seastar::make_ready_future(o->omap_header); + return read_errorator::make_ready_future( + o->omap_header); } seastar::future<> CyanStore::do_transaction(CollectionRef ch, diff --git a/src/crimson/os/cyanstore/cyan_store.h b/src/crimson/os/cyanstore/cyan_store.h index 65e031ff556..07a8ff29e7e 100644 --- a/src/crimson/os/cyanstore/cyan_store.h +++ b/src/crimson/os/cyanstore/cyan_store.h @@ -118,7 +118,7 @@ public: const ghobject_t& end, uint64_t limit) const final; - seastar::future omap_get_header( + read_errorator::future omap_get_header( CollectionRef c, const ghobject_t& oid) final; diff --git a/src/crimson/os/futurized_store.h b/src/crimson/os/futurized_store.h index e81bc8f175b..bb173056b9d 100644 --- a/src/crimson/os/futurized_store.h +++ b/src/crimson/os/futurized_store.h @@ -124,7 +124,7 @@ public: const std::optional &start ///< [in] start, empty for begin ) = 0; ///< @return values.empty() iff done - virtual seastar::future omap_get_header( + virtual read_errorator::future omap_get_header( CollectionRef c, const ghobject_t& oid) = 0; diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index 7cd2193debe..50c148cea11 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -170,9 +170,11 @@ seastar::future SeaStore::stat( return seastar::make_ready_future(st); } -seastar::future omap_get_header( +auto +SeaStore::omap_get_header( CollectionRef c, const ghobject_t& oid) + -> read_errorator::future { return seastar::make_ready_future(); } diff --git a/src/crimson/os/seastore/seastore.h b/src/crimson/os/seastore/seastore.h index 1db5773edf1..798442c3488 100644 --- a/src/crimson/os/seastore/seastore.h +++ b/src/crimson/os/seastore/seastore.h @@ -82,7 +82,7 @@ public: const std::optional &start ///< [in] start, empty for begin ) final; ///< @return values.empty() iff done - seastar::future omap_get_header( + read_errorator::future omap_get_header( CollectionRef c, const ghobject_t& oid) final; diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 4ba0a403ed1..44242cea042 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -881,18 +881,20 @@ maybe_get_omap_vals( } } -seastar::future PGBackend::omap_get_header( +PGBackend::ll_read_errorator::future +PGBackend::omap_get_header( const crimson::os::CollectionRef& c, const ghobject_t& oid) const { return store->omap_get_header(c, oid); } -seastar::future<> PGBackend::omap_get_header( +PGBackend::ll_read_errorator::future<> +PGBackend::omap_get_header( const ObjectState& os, OSDOp& osd_op) const { - return omap_get_header(coll, ghobject_t{os.oi.soid}).then( + return omap_get_header(coll, ghobject_t{os.oi.soid}).safe_then( [&osd_op] (ceph::bufferlist&& header) { osd_op.outdata = std::move(header); return seastar::now(); diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index cd2fe897d27..6ea0ef81b33 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -173,10 +173,10 @@ public: OSDOp& osd_op, ceph::os::Transaction& trans, osd_op_params_t& osd_op_params); - seastar::future omap_get_header( + ll_read_errorator::future omap_get_header( const crimson::os::CollectionRef& c, const ghobject_t& oid) const; - seastar::future<> omap_get_header( + ll_read_errorator::future<> omap_get_header( const ObjectState& os, OSDOp& osd_op) const; seastar::future<> omap_set_header( diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc index 0ed5cf9a060..b0fbe097d01 100644 --- a/src/crimson/osd/replicated_recovery_backend.cc +++ b/src/crimson/osd/replicated_recovery_backend.cc @@ -362,8 +362,8 @@ seastar::future ReplicatedRecoveryBackend::build_push_op( return [this, &recovery_info, &progress, &new_progress, &oi, &v, pop=&pop] { v = recovery_info.version; if (progress.first) { - return backend->omap_get_header(coll, ghobject_t(recovery_info.soid)) - .then([this, &recovery_info, pop](auto bl) { + return backend->omap_get_header(coll, ghobject_t(recovery_info.soid)).safe_then( + [this, &recovery_info, pop](auto bl) { pop->omap_header.claim_append(bl); return store->get_attrs(coll, ghobject_t(recovery_info.soid)); }).safe_then([&oi, pop, &new_progress, &v](auto attrs) mutable { @@ -377,7 +377,7 @@ seastar::future ReplicatedRecoveryBackend::build_push_op( v = oi.version; } return seastar::make_ready_future<>(); - }, crimson::os::FuturizedStore::get_attrs_ertr::all_same_way( + }, crimson::os::FuturizedStore::read_errorator::all_same_way( [] (const std::error_code& e) { return seastar::make_exception_future<>(e); })