]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: add _should_share_map function
authorGreg Farnum <greg@inktank.com>
Thu, 20 Mar 2014 22:55:50 +0000 (15:55 -0700)
committerGreg Farnum <greg@inktank.com>
Mon, 5 May 2014 22:29:18 +0000 (15:29 -0700)
Just copy _share_map_incoming and rip out all the parts that actually
update data structures.

Signed-off-by: Greg Farnum <greg@inktank.com>
src/osd/OSD.cc
src/osd/OSD.h

index 24c2e877f3247e118a881321b2bc2f43790bd4b3..c83d94ad74718fd3fed527dfcddd721f6b69d3b0 100644 (file)
@@ -4637,6 +4637,45 @@ void OSD::forget_peer_epoch(int peer, epoch_t as_of)
   }
 }
 
+bool OSD::_should_share_map(entity_name_t name, Connection *con,
+                            epoch_t epoch, OSDMapRef& osdmap, Session *session)
+{
+  bool should_send = false;
+  dout(20) << "_should_share_map "
+           << name << " " << con->get_peer_addr()
+           << " " << epoch << dendl;
+
+  // does client have old map?
+  if (name.is_client()) {
+    bool message_sendmap = epoch < osdmap->get_epoch();
+    if (message_sendmap && session) {
+      dout(20) << "client session last_sent_epoch: "
+               << session->last_sent_epoch
+               << " versus osdmap epoch " << osdmap->get_epoch() << dendl;
+      if (session->last_sent_epoch < osdmap->get_epoch()) {
+        should_send = true;
+      } // else we don't need to send it out again
+    }
+  }
+
+  if (con->get_messenger() == cluster_messenger &&
+      osdmap->is_up(name.num()) &&
+      (osdmap->get_cluster_addr(name.num()) == con->get_peer_addr() ||
+       osdmap->get_hb_back_addr(name.num()) == con->get_peer_addr())) {
+    // remember
+    epoch_t has = get_peer_epoch(name.num());
+
+    // share?
+    if (has < osdmap->get_epoch()) {
+      dout(10) << name << " " << con->get_peer_addr()
+               << " has old map " << epoch << " < "
+               << osdmap->get_epoch() << dendl;
+      should_send = true;
+    }
+  }
+
+  return should_send;
+}
 
 bool OSD::_share_map_incoming(
   entity_name_t name,
index 2c0eb5ca55b54869203938ba4e1827864f78207d..6dfd1e8b30bebbf6e7585f83d64c888efb737ef0 100644 (file)
@@ -1337,6 +1337,8 @@ private:
   epoch_t note_peer_epoch(int p, epoch_t e);
   void forget_peer_epoch(int p, epoch_t e);
 
+  bool _should_share_map(entity_name_t name, Connection *con, epoch_t epoch,
+                         OSDMapRef& osdmap, Session *session);
   bool _share_map_incoming(entity_name_t name, Connection *con, epoch_t epoch,
                           OSDMapRef& osdmap, Session *session);
   void _share_map_outgoing(int peer, Connection *con,