]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson: fix set_reply_versions missing 45403/head
authorChunmei Liu <chunmei.liu@intel.com>
Wed, 16 Mar 2022 03:35:58 +0000 (20:35 -0700)
committerChunmei Liu <chunmei.liu@intel.com>
Wed, 16 Mar 2022 03:35:58 +0000 (20:35 -0700)
Signed-off-by: Chunmei Liu <chunmei.liu@intel.com>
src/crimson/osd/pg.cc

index 736e512c3703321ee1cd7aeeb80173417e00078f..021d41b1cfefe8422498c0437c9e190daef4e1cb 100644 (file)
@@ -750,10 +750,10 @@ PG::do_osd_ops(
   }
   return do_osd_ops_execute<MURef<MOSDOpReply>>(
     seastar::make_lw_shared<OpsExecuter>(
-      Ref<PG>{this}, std::move(obc), op_info, *m),
+      Ref<PG>{this}, obc, op_info, *m),
     m->ops,
     op_info,
-    [this, m, rvec = op_info.allows_returnvec()] {
+    [this, m, obc, rvec = op_info.allows_returnvec()] {
       // TODO: should stop at the first op which returns a negative retval,
       //       cmpext uses it for returning the index of first unmatched byte
       int result = m->ops.empty() ? 0 : m->ops.back().rval.code;
@@ -770,6 +770,13 @@ PG::do_osd_ops(
         "do_osd_ops: {} - object {} sending reply",
         *m,
         m->get_hobj());
+      if (obc->obs.exists) {
+        reply->set_reply_versions(peering_state.get_info().last_update,
+          obc->obs.oi.user_version);
+      } else {
+        reply->set_reply_versions(peering_state.get_info().last_update,
+          peering_state.get_info().last_user_version);
+      }
       return do_osd_ops_iertr::make_ready_future<MURef<MOSDOpReply>>(
         std::move(reply));
     },
@@ -816,6 +823,9 @@ PG::interruptible_future<MURef<MOSDOpReply>> PG::do_pg_ops(Ref<MOSDOp> m)
     auto reply = crimson::make_message<MOSDOpReply>(m.get(), 0, get_osdmap_epoch(),
                                            CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK,
                                            false);
+    reply->claim_op_out_data(m->ops);
+    reply->set_reply_versions(peering_state.get_info().last_update,
+      peering_state.get_info().last_user_version);
     return seastar::make_ready_future<MURef<MOSDOpReply>>(std::move(reply));
   }).handle_exception_type_interruptible([=](const crimson::osd::error& e) {
     auto reply = crimson::make_message<MOSDOpReply>(