]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson: unify error handling paths in PG::do_osd_ops().
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 20 Nov 2020 14:20:42 +0000 (15:20 +0100)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 1 Dec 2020 14:08:52 +0000 (15:08 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/pg.cc
src/crimson/osd/pg.h

index 7598326379c77cd8dd6a4553a084a32e3c67d9e5..8893b6f43eb487ec1fc705058dd652331274e6fc 100644 (file)
@@ -612,6 +612,26 @@ osd_op_params_t&& PG::fill_op_params_bump_pg_version(
   return std::move(osd_op_p);
 }
 
+seastar::future<Ref<MOSDOpReply>> 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<MOSDOpReply>(
+    &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<Ref<MOSDOpReply>>(std::move(reply));
+}
+
 seastar::future<Ref<MOSDOpReply>> PG::do_osd_ops(
   Ref<MOSDOp> m,
   ObjectContextRef obc,
@@ -689,31 +709,11 @@ seastar::future<Ref<MOSDOpReply>> PG::do_osd_ops(
       obc->obs.oi.soid);
     return seastar::make_ready_future<Ref<MOSDOpReply>>(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<MOSDOpReply>(
-      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<Ref<MOSDOpReply>>(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<MOSDOpReply>(
-      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<Ref<MOSDOpReply>>(std::move(reply));
+    logger().debug("encountered the legacy error handling path!");
+    return handle_failed_op(e.code(), obc, *m);
   });
 }
 
index bccb74b198a09c9b5255de445ee4ffb1526ed4fa..12244dcd6531ab511833f2c04c405cf0a54b9df2 100644 (file)
@@ -535,6 +535,10 @@ private:
     osd_op_params_t&& osd_op_p,
     Ref<MOSDOp> m,
     const bool user_modify);
+  seastar::future<Ref<MOSDOpReply>> handle_failed_op(
+    const std::error_code& e,
+    ObjectContextRef obc,
+    const MOSDOp& m) const;
   seastar::future<Ref<MOSDOpReply>> do_osd_ops(
     Ref<MOSDOp> m,
     ObjectContextRef obc,