]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: refactor ClientRequest::do_process()
authorKefu Chai <kchai@redhat.com>
Mon, 8 Feb 2021 05:11:37 +0000 (13:11 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 9 Feb 2021 03:38:22 +0000 (11:38 +0800)
instead of using a local lambda which tries to have a single point
for handling both the happy path and failure path, it'd be simpler
to just early return if we fail to handle a request,

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/osd_operations/client_request.cc

index 6729ad735e10869f1657cd98df508642f26687d0..cab167374d7c4211a7fbc1a2d426b4da3ce34103 100644 (file)
@@ -161,30 +161,22 @@ seastar::future<> ClientRequest::do_recover_missing(Ref<PG>& pg)
 seastar::future<>
 ClientRequest::do_process(Ref<PG>& pg, crimson::osd::ObjectContextRef obc)
 {
-  using do_ops_return_t =
-    crimson::errorator<crimson::ct_error::eagain>::future<Ref<MOSDOpReply>>;
-  return [&pg, obc]() -> do_ops_return_t {
-    if (!pg->is_primary()) {
-      // primary can handle both normal ops and balanced reads
-      if (is_misdirected(*pg)) {
-        logger().trace("process_op: dropping misdirected op");
-        return seastar::make_ready_future<Ref<MOSDOpReply>>();
-     } else if (const hobject_t& hoid = m->get_hobj();
-                !pg->get_peering_state().can_serve_replica_read(hoid)) {
-       auto reply = make_message<MOSDOpReply>(
-         m.get(), -EAGAIN, pg->get_osdmap_epoch(),
-         m->get_flags() & (CEPH_OSD_FLAG_ACK|CEPH_OSD_FLAG_ONDISK),
-         !m->has_flag(CEPH_OSD_FLAG_RETURNVEC));
-       return seastar::make_ready_future<Ref<MOSDOpReply>>(std::move(reply));
-      }
-    }
-    return pg->do_osd_ops(m, obc, op_info);
-  }().safe_then([this](Ref<MOSDOpReply> reply) {
-    if (reply) {
-      return conn->send(std::move(reply));
-    } else {
+  if (!pg->is_primary()) {
+    // primary can handle both normal ops and balanced reads
+    if (is_misdirected(*pg)) {
+      logger().trace("process_op: dropping misdirected op");
       return seastar::now();
+    } else if (const hobject_t& hoid = m->get_hobj();
+               !pg->get_peering_state().can_serve_replica_read(hoid)) {
+      auto reply = make_message<MOSDOpReply>(
+       m.get(), -EAGAIN, pg->get_osdmap_epoch(),
+       m->get_flags() & (CEPH_OSD_FLAG_ACK|CEPH_OSD_FLAG_ONDISK),
+       !m->has_flag(CEPH_OSD_FLAG_RETURNVEC));
+      return conn->send(std::move(reply));
     }
+  }
+  return pg->do_osd_ops(m, obc, op_info).safe_then([this](Ref<MOSDOpReply> reply) {
+    return conn->send(std::move(reply));
   }, crimson::ct_error::eagain::handle([this, &pg] {
     return process_op(pg);
   }));