From: Radoslaw Zarzynski Date: Fri, 13 Sep 2019 16:01:59 +0000 (+0200) Subject: crimson/osd: apply errorator along the read path, part 2. X-Git-Tag: v15.1.0~801^2~45 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=850a2360095b455b389e1b70b71a2d04127f50f8;p=ceph.git crimson/osd: apply errorator along the read path, part 2. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/ec_backend.cc b/src/crimson/osd/ec_backend.cc index 5b4db3c1d9c8..911dc250e8a0 100644 --- a/src/crimson/osd/ec_backend.cc +++ b/src/crimson/osd/ec_backend.cc @@ -12,10 +12,11 @@ ECBackend::ECBackend(shard_id_t shard, // todo } -seastar::future ECBackend::_read(const hobject_t& hoid, - uint64_t off, - uint64_t len, - uint32_t flags) +ECBackend::ll_read_errorator::future +ECBackend::_read(const hobject_t& hoid, + const uint64_t off, + const uint64_t len, + const uint32_t flags) { // todo return seastar::make_ready_future(); diff --git a/src/crimson/osd/ec_backend.h b/src/crimson/osd/ec_backend.h index 31c39e93f779..c7548de0749a 100644 --- a/src/crimson/osd/ec_backend.h +++ b/src/crimson/osd/ec_backend.h @@ -18,10 +18,10 @@ public: const ec_profile_t& ec_profile, uint64_t stripe_width); private: - seastar::future _read(const hobject_t& hoid, - uint64_t off, - uint64_t len, - uint32_t flags) override; + ll_read_errorator::future _read(const hobject_t& hoid, + uint64_t off, + uint64_t len, + uint32_t flags) override; seastar::future _submit_transaction(std::set&& pg_shards, const hobject_t& hoid, diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 864bf77a57a1..43614732c292 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -249,14 +249,14 @@ seastar::future PGBackend::read(const object_info_t& oi, // read size was trimmed to zero and it is expected to do nothing, return seastar::make_ready_future(); } - return _read(oi.soid, offset, length, flags).then( + return _read(oi.soid, offset, length, flags).safe_then( [&oi](auto&& bl) { if (const bool is_fine = _read_verify_data(oi, bl); is_fine) { return seastar::make_ready_future(std::move(bl)); } else { throw crimson::osd::object_corrupted{}; } - }); + }, ll_read_errorator::throw_as_runtime_error{}); } seastar::future<> PGBackend::stat( diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index 6973236bcd89..09d8ca165a14 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -110,6 +110,8 @@ public: virtual void got_rep_op_reply(const MOSDRepOpReply&) {} protected: + // low-level read errorator + using ll_read_errorator = ceph::os::FuturizedStore::read_errorator; const shard_id_t shard; CollectionRef coll; crimson::os::FuturizedStore* store; @@ -120,10 +122,11 @@ private: seastar::future _load_ss(const hobject_t& oid); SharedLRU os_cache; seastar::future _load_os(const hobject_t& oid); - virtual seastar::future _read(const hobject_t& hoid, - size_t offset, - size_t length, - uint32_t flags) = 0; + virtual ll_read_errorator::future _read( + const hobject_t& hoid, + size_t offset, + size_t length, + uint32_t flags) = 0; bool maybe_create_new_object(ObjectState& os, ceph::os::Transaction& txn); virtual seastar::future _submit_transaction(std::set&& pg_shards, diff --git a/src/crimson/osd/replicated_backend.cc b/src/crimson/osd/replicated_backend.cc index 1955049bd4c4..71ae5165f575 100644 --- a/src/crimson/osd/replicated_backend.cc +++ b/src/crimson/osd/replicated_backend.cc @@ -23,15 +23,13 @@ ReplicatedBackend::ReplicatedBackend(pg_t pgid, shard_services{shard_services} {} -seastar::future ReplicatedBackend::_read(const hobject_t& hoid, - uint64_t off, - uint64_t len, - uint32_t flags) +ReplicatedBackend::ll_read_errorator::future +ReplicatedBackend::_read(const hobject_t& hoid, + const uint64_t off, + const uint64_t len, + const uint32_t flags) { - using read_errorator = ceph::os::FuturizedStore::read_errorator; - return store->read(coll, ghobject_t{hoid}, off, len, flags).safe_then( - [] (auto&& bl) { return bl; }, - read_errorator::throw_as_runtime_error{}); + return store->read(coll, ghobject_t{hoid}, off, len, flags); } seastar::future diff --git a/src/crimson/osd/replicated_backend.h b/src/crimson/osd/replicated_backend.h index 03f410c372aa..c61d2b88d0ef 100644 --- a/src/crimson/osd/replicated_backend.h +++ b/src/crimson/osd/replicated_backend.h @@ -23,10 +23,10 @@ public: crimson::osd::ShardServices& shard_services); void got_rep_op_reply(const MOSDRepOpReply& reply) final; private: - seastar::future _read(const hobject_t& hoid, - uint64_t off, - uint64_t len, - uint32_t flags) override; + ll_read_errorator::future _read(const hobject_t& hoid, + uint64_t off, + uint64_t len, + uint32_t flags) override; seastar::future _submit_transaction(std::set&& pg_shards, const hobject_t& hoid,