From: Radoslaw Zarzynski Date: Fri, 20 Nov 2020 14:20:42 +0000 (+0100) Subject: crimson: unify error handling paths in PG::do_osd_ops(). X-Git-Tag: v17.0.0~461^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=61ca0c12717511f3195b7cdedae8369215251698;p=ceph-ci.git crimson: unify error handling paths in PG::do_osd_ops(). Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 7598326379c..8893b6f43eb 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -612,6 +612,26 @@ osd_op_params_t&& PG::fill_op_params_bump_pg_version( return std::move(osd_op_p); } +seastar::future> PG::handle_failed_op( + const std::error_code& e, + ObjectContextRef obc, + const MOSDOp& m) const +{ + assert(e.value() > 0); + logger().debug( + "{}: {} - object {} got error code {}, {}", + __func__, + m, + obc->obs.oi.soid, + e.value(), + e.message()); + auto reply = make_message( + &m, -e.value(), get_osdmap_epoch(), 0, false); + reply->set_enoent_reply_versions(peering_state.get_info().last_update, + peering_state.get_info().last_user_version); + return seastar::make_ready_future>(std::move(reply)); +} + seastar::future> PG::do_osd_ops( Ref m, ObjectContextRef obc, @@ -689,31 +709,11 @@ seastar::future> PG::do_osd_ops( obc->obs.oi.soid); return seastar::make_ready_future>(std::move(reply)); }, OpsExecuter::osd_op_errorator::all_same_way([=] (const std::error_code& e) { - assert(e.value() > 0); - logger().debug( - "do_osd_ops: {} - object {} got error code {}, {}", - *m, - obc->obs.oi.soid, - e.value(), - e.message()); - auto reply = make_message( - m.get(), -e.value(), get_osdmap_epoch(), 0, false); - reply->set_enoent_reply_versions(peering_state.get_info().last_update, - peering_state.get_info().last_user_version); - return seastar::make_ready_future>(std::move(reply)); + return handle_failed_op(e, obc, *m); })).handle_exception_type([=](const crimson::osd::error& e) { // we need this handler because throwing path which aren't errorated yet. - logger().debug( - "do_osd_ops: {} - object {} got unhandled exception {} ({})", - *m, - obc->obs.oi.soid, - e.code(), - e.what()); - auto reply = make_message( - m.get(), -e.code().value(), get_osdmap_epoch(), 0, false); - reply->set_enoent_reply_versions(peering_state.get_info().last_update, - peering_state.get_info().last_user_version); - return seastar::make_ready_future>(std::move(reply)); + logger().debug("encountered the legacy error handling path!"); + return handle_failed_op(e.code(), obc, *m); }); } diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index bccb74b198a..12244dcd653 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -535,6 +535,10 @@ private: osd_op_params_t&& osd_op_p, Ref m, const bool user_modify); + seastar::future> handle_failed_op( + const std::error_code& e, + ObjectContextRef obc, + const MOSDOp& m) const; seastar::future> do_osd_ops( Ref m, ObjectContextRef obc,