From 945101f062393d0830e2135c03eb2613dc86a7b4 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sun, 20 Dec 2020 22:47:11 +0800 Subject: [PATCH] crimson/osd: erroratorize FuturizedStore::omap_get_header() Signed-off-by: Kefu Chai --- src/crimson/os/alienstore/alien_store.cc | 17 ++++++++++++----- src/crimson/os/alienstore/alien_store.h | 2 +- src/crimson/os/cyanstore/cyan_store.cc | 15 ++++++++------- src/crimson/os/cyanstore/cyan_store.h | 2 +- src/crimson/os/futurized_store.h | 2 +- src/crimson/os/seastore/seastore.cc | 4 +++- src/crimson/os/seastore/seastore.h | 2 +- src/crimson/osd/pg_backend.cc | 8 +++++--- src/crimson/osd/pg_backend.h | 4 ++-- src/crimson/osd/replicated_recovery_backend.cc | 6 +++--- 10 files changed, 37 insertions(+), 25 deletions(-) diff --git a/src/crimson/os/alienstore/alien_store.cc b/src/crimson/os/alienstore/alien_store.cc index 51548d874f5bf..8b9955156b679 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 fde0c1757bca4..92739340e782c 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 645a75340b086..eb93d72ec58ad 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 65e031ff556e0..07a8ff29e7e83 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 e81bc8f175b70..bb173056b9de4 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 7cd2193debe69..50c148cea111f 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 1db5773edf128..798442c348881 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 4ba0a403ed1cf..44242cea042ef 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 cd2fe897d27c9..6ea0ef81b33c0 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 0ed5cf9a060f3..b0fbe097d0162 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); }) -- 2.39.5