]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: rename is_valid_rep_op_reply to can_discard_replica_op
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 8 Sep 2020 04:35:14 +0000 (12:35 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Tue, 8 Sep 2020 04:35:14 +0000 (12:35 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/osd/pg.cc
src/crimson/osd/pg.h

index a2a4f528bb3e281ed8d1970da4e53a1550173475..f1358ce4dfdba931be5243da42ff4a63f441b4ed 100644 (file)
@@ -931,12 +931,13 @@ seastar::future<> PG::handle_rep_op(Ref<MOSDRepOp> req)
 void PG::handle_rep_op_reply(crimson::net::Connection* conn,
                             const MOSDRepOpReply& m)
 {
-  if (is_valid_rep_op_reply(m)) {
+  if (!can_discard_replica_op(m)) {
     backend->got_rep_op_reply(m);
   }
 }
 
-bool PG::is_valid_rep_op_reply(const MOSDRepOpReply& reply) const
+template <typename MsgType>
+bool PG::can_discard_replica_op(const MsgType& m) const
 {
   // if a repop is replied after a replica goes down in a new osdmap, and
   // before the pg advances to this new osdmap, the repop replies before this
@@ -945,27 +946,27 @@ bool PG::is_valid_rep_op_reply(const MOSDRepOpReply& reply) const
   // resets the messenger sesssion when the replica reconnects. to avoid the
   // out-of-order replies, the messages from that replica should be discarded.
   const auto osdmap = peering_state.get_osdmap();
-  const int from_osd = reply.get_source().num();
+  const int from_osd = m.get_source().num();
   if (osdmap->is_down(from_osd)) {
-    return false;
+    return true;
   }
   // Mostly, this overlaps with the old_peering_msg
   // condition.  An important exception is pushes
   // sent by replicas not in the acting set, since
   // if such a replica goes down it does not cause
   // a new interval.
-  if (osdmap->get_down_at(from_osd) >= reply.map_epoch) {
-    return false;
+  if (osdmap->get_down_at(from_osd) >= m.map_epoch) {
+    return true;
   }
   // same pg?
   //  if pg changes *at all*, we reset and repeer!
   if (epoch_t lpr = peering_state.get_last_peering_reset();
-      lpr > reply.map_epoch) {
+      lpr > m.map_epoch) {
     logger().debug("{}: pg changed {} after {}, dropping",
-                   __func__, get_info().history, reply.map_epoch);
-    return false;
+                   __func__, get_info().history, m.map_epoch);
+    return true;
   }
-  return true;
+  return false;
 }
 
 seastar::future<> PG::stop()
index 0b6579c04ab625c9ee79d28cc653cf9e04219aaa..7bfc477b0a298366b3b68777229ec79c18c653c7 100644 (file)
@@ -670,7 +670,8 @@ private:
     return seastar::make_ready_future<bool>(true);
   }
 
-  bool is_valid_rep_op_reply(const MOSDRepOpReply& reply) const;
+  template <typename MsgType>
+  bool can_discard_replica_op(const MsgType& m) const;
   bool is_missing_object(const hobject_t& soid) const {
     return peering_state.get_pg_log().get_missing().get_items().count(soid);
   }