]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/pg: log_reply() into seperate method
authorMatan Breizman <mbreizma@redhat.com>
Thu, 19 Oct 2023 11:24:03 +0000 (11:24 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Thu, 19 Oct 2023 12:13:15 +0000 (12:13 +0000)
Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/crimson/osd/pg.cc
src/crimson/osd/pg.h

index a64530e801e65f8f11573c908e8e34c9e82f19f2..3f9a9e0f7a2f1c27faa875160fe859adab4fc964 100644 (file)
@@ -1047,31 +1047,9 @@ PG::do_osd_ops(
         fut = submit_error_log(m, op_info, obc, e, rep_tid, version);
       }
       return fut.then([m, e, epoch, &op_info, rep_tid, &version, last_complete,  this] {
-        auto log_reply = [m, e, this] {
-          auto reply = crimson::make_message<MOSDOpReply>(
-            m.get(), -e.value(), get_osdmap_epoch(), 0, false);
-          if (m->ops.empty() ? 0 :
-            m->ops.back().op.flags & CEPH_OSD_OP_FLAG_FAILOK) {
-            reply->set_result(0);
-          }
-          // For all ops except for CMPEXT, the correct error value is encoded
-          // in e.value(). For CMPEXT, osdop.rval has the actual error value.
-          if (e.value() == ct_error::cmp_fail_error_value) {
-            assert(!m->ops.empty());
-            for (auto &osdop : m->ops) {
-              if (osdop.rval < 0) {
-                reply->set_result(osdop.rval);
-                break;
-              }
-            }
-          }
-          reply->set_enoent_reply_versions(
-          peering_state.get_info().last_update,
-          peering_state.get_info().last_user_version);
-          reply->add_flags(CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK);
-          return do_osd_ops_iertr::make_ready_future<MURef<MOSDOpReply>>(
-            std::move(reply));
-       };
+        auto log_reply_fut = [m, e, this] {
+          return log_reply(m, e);
+        };
 
         if (!peering_state.pg_has_reset_since(epoch) && op_info.may_write()) {
           auto it = log_entry_update_waiting_on.find(rep_tid);
@@ -1087,20 +1065,50 @@ PG::do_osd_ops(
             }
           } else {
             return it->second.all_committed.get_shared_future()
-              .then([this, &version, last_complete, log_reply = std::move(log_reply)] {
+              .then([this, &version, last_complete, log_reply_fut = std::move(log_reply_fut)] {
               if (version != eversion_t()) {
                 peering_state.complete_write(version, last_complete);
               }
-              return log_reply();
+              return log_reply_fut();
             });
           }
         }
-        return log_reply();
+        return log_reply_fut();
       });
     });
   });
 }
 
+PG::do_osd_ops_iertr::future<MURef<MOSDOpReply>>
+PG::log_reply(
+  Ref<MOSDOp> m,
+  const std::error_code& e)
+{
+  auto reply = crimson::make_message<MOSDOpReply>(
+    m.get(), -e.value(), get_osdmap_epoch(), 0, false);
+  if (m->ops.empty() ? 0 :
+    m->ops.back().op.flags & CEPH_OSD_OP_FLAG_FAILOK) {
+      reply->set_result(0);
+    }
+  // For all ops except for CMPEXT, the correct error value is encoded
+  // in e.value(). For CMPEXT, osdop.rval has the actual error value.
+  if (e.value() == ct_error::cmp_fail_error_value) {
+    assert(!m->ops.empty());
+    for (auto &osdop : m->ops) {
+      if (osdop.rval < 0) {
+        reply->set_result(osdop.rval);
+        break;
+      }
+    }
+  }
+  reply->set_enoent_reply_versions(
+    peering_state.get_info().last_update,
+    peering_state.get_info().last_user_version);
+  reply->add_flags(CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK);
+  return do_osd_ops_iertr::make_ready_future<MURef<MOSDOpReply>>(
+    std::move(reply));
+}
+
 PG::do_osd_ops_iertr::future<PG::pg_rep_op_fut_t<>>
 PG::do_osd_ops(
   ObjectContextRef obc,
index 380820e8250d414aaf7c465e9599ad2089850555..6a0231e452f60f2b8cc06228ed2f046b47fc9b12 100644 (file)
@@ -576,6 +576,9 @@ private:
   using do_osd_ops_failure_func_t =
     std::function<do_osd_ops_iertr::future<>(const std::error_code&)>;
   struct do_osd_ops_params_t;
+  do_osd_ops_iertr::future<MURef<MOSDOpReply>> log_reply(
+    Ref<MOSDOp> m,
+    const std::error_code& e);
   do_osd_ops_iertr::future<pg_rep_op_fut_t<>> do_osd_ops(
     ObjectContextRef obc,
     std::vector<OSDOp>& ops,