]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: only forget peer epochs if they are down AND no longer heartbeat peers
authorSage Weil <sage.weil@dreamhost.com>
Fri, 20 May 2011 20:25:22 +0000 (13:25 -0700)
committerSage Weil <sage.weil@dreamhost.com>
Fri, 20 May 2011 22:15:12 +0000 (15:15 -0700)
If we forget the peer epoch when we see them go down, we won't share the
map later in update_heartbeat_peers() to tell them they're down.

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/osd/OSD.cc

index 992afba9bf298a5162a33049383f41732e4fd3f3..316e4ae152639b7dd566583db1bcfadd9a77b131 100644 (file)
@@ -1492,6 +1492,8 @@ void OSD::update_heartbeat_peers()
       heartbeat_messenger->mark_disposable(con);
       heartbeat_messenger->mark_down_on_empty(con);
       con->put();
+      if (!osdmap->is_up(p->first))
+       forget_peer_epoch(p->first, osdmap->get_epoch());
     }
   }
   for (map<int,epoch_t>::iterator p = old_from.begin();
@@ -1516,6 +1518,8 @@ void OSD::update_heartbeat_peers()
       heartbeat_messenger->mark_disposable(con);
       heartbeat_messenger->mark_down_on_empty(con);
       con->put();
+      if (!osdmap->is_up(p->first))
+       forget_peer_epoch(p->first, osdmap->get_epoch());
     }
   }
 
@@ -2439,12 +2443,12 @@ void OSD::_share_map_outgoing(const entity_inst_t& inst)
 
 bool OSD::heartbeat_dispatch(Message *m)
 {
-  dout(20) << "heartbeat_dispatch " << m << dendl;
+  dout(30) << "heartbeat_dispatch " << m << dendl;
 
   switch (m->get_type()) {
     
   case CEPH_MSG_PING:
-    dout(10) << "ping from " << m->get_source() << dendl;
+    dout(10) << "ping from " << m->get_source_inst() << dendl;
     m->put();
     break;
 
@@ -2886,8 +2890,6 @@ void OSD::note_down_osd(int peer)
 
   // note: update_heartbeat_peers will mark down the heartbeat connection.
 
-  forget_peer_epoch(peer, osdmap->get_epoch());
-
   failure_queue.erase(peer);
   failure_pending.erase(peer);