From 12c96d6d0bfe4654779eef73ff168d22670bb9d2 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Sat, 14 Sep 2019 00:43:57 +0200 Subject: [PATCH] crimson/osd: apply errorator along the read path, part 5. Signed-off-by: Radoslaw Zarzynski --- src/crimson/os/futurized_store.h | 12 +----------- src/crimson/osd/ops_executer.cc | 15 ++++++++++++++- src/crimson/osd/osd_meta.cc | 25 +++++++++++++++++++------ src/crimson/osd/pg_backend.cc | 1 + 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/crimson/os/futurized_store.h b/src/crimson/os/futurized_store.h index 10bf6874c253d..b7ac7d7dff7a5 100644 --- a/src/crimson/os/futurized_store.h +++ b/src/crimson/os/futurized_store.h @@ -42,17 +42,7 @@ public: virtual store_statfs_t stat() const = 0; using CollectionRef = boost::intrusive_ptr; - - // TODO: using read_errorator = ceph::errorator<...> - struct read_errorator : crimson::errorator { - // just for the makeshift period of switching to errorator - struct throw_as_runtime_error : discard_all { - auto operator()(const auto& e) { - throw std::runtime_error("legacy throwing"); - return discard_all::operator()(e); - } - }; - }; + using read_errorator = crimson::errorator; virtual read_errorator::future read( CollectionRef c, const ghobject_t& oid, diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 3e7519dfb6432..9fb66f543e63e 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -370,7 +370,20 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op) osd_op.rval = bl.length(); osd_op.outdata = std::move(bl); return seastar::now(); - }, PGBackend::read_errorator::discard_all{}); + }, + // TODO: move this error handling do PG::do_osd_ops(). + crimson::ct_error::input_output_error::handle([] { + throw ceph::osd::input_output_error{}; + }), + crimson::ct_error::object_corrupted::handle([] { + throw ceph::osd::object_corrupted{}; + }), + crimson::ct_error::enoent::handle([] { + throw ceph::osd::object_not_found{}; + }), + crimson::ct_error::enodata::handle([] { + throw ceph::osd::no_message_available{}; + })); }); case CEPH_OSD_OP_GETXATTR: return do_read_op([&osd_op] (auto& backend, const auto& os) { diff --git a/src/crimson/osd/osd_meta.cc b/src/crimson/osd/osd_meta.cc index 6baaf07d15438..c608c8d351220 100644 --- a/src/crimson/osd/osd_meta.cc +++ b/src/crimson/osd/osd_meta.cc @@ -1,6 +1,7 @@ #include "osd_meta.h" #include +#include #include "crimson/os/futurized_collection.h" #include "crimson/os/futurized_store.h" @@ -24,8 +25,14 @@ seastar::future OSDMeta::load_map(epoch_t e) return store->read(coll, osdmap_oid(e), 0, 0, CEPH_OSD_OP_FLAG_FADVISE_WILLNEED).safe_then( - [] (auto&& bl) { return bl; }, - read_errorator::throw_as_runtime_error{}); + [] (auto&& bl) { + // TODO: introduce `::handle_error()` to errorated futures + // to avoid lambas like this one. + return bl; + }, crimson::ct_error::enoent::handle([e] { + throw std::runtime_error(fmt::format("read gave enoent on {}", + osdmap_oid(e))); + })); } void OSDMeta::store_superblock(ceph::os::Transaction& t, @@ -38,13 +45,16 @@ void OSDMeta::store_superblock(ceph::os::Transaction& t, seastar::future OSDMeta::load_superblock() { - return store->read(coll, superblock_oid(), 0, 0) - .safe_then([this] (bufferlist&& bl) { + return store->read(coll, superblock_oid(), 0, 0).safe_then( + [this] (bufferlist&& bl) { auto p = bl.cbegin(); OSDSuperblock superblock; decode(superblock, p); return seastar::make_ready_future(std::move(superblock)); - }, read_errorator::throw_as_runtime_error{}); + }, crimson::ct_error::enoent::handle([] { + throw std::runtime_error(fmt::format("read gave enoent on {}", + superblock_oid())); + })); } seastar::future(std::move(pi), std::move(name), std::move(ec_profile)); - }, read_errorator::throw_as_runtime_error{}); + }, crimson::ct_error::enoent::handle([pool] { + throw std::runtime_error(fmt::format("read gave enoent on {}", + final_pool_info_oid(pool))); + })); } ghobject_t OSDMeta::osdmap_oid(epoch_t epoch) diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index dec2fb84b60f2..f15444fe4ec88 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -7,6 +7,7 @@ #include #include #include +#include #include #include -- 2.39.5