]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: don't report peers down if hbclient_messenger is backed up
authorSamuel Just <sam.just@inktank.com>
Mon, 22 Apr 2013 21:50:09 +0000 (14:50 -0700)
committerSamuel Just <sam.just@inktank.com>
Wed, 24 Apr 2013 01:27:28 +0000 (18:27 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc

index 0d8f9700a4df6a63bab269528edc2a20344e6aa4..dc05415dbd4644b04e1036c07ef2674f5521771c 100644 (file)
@@ -2334,9 +2334,15 @@ void OSD::heartbeat_entry()
 void OSD::heartbeat_check()
 {
   assert(heartbeat_lock.is_locked());
+  utime_t now = ceph_clock_now(g_ceph_context);
+  double age = hbclient_messenger->get_dispatch_queue_max_age(now);
+  if (age > (g_conf->osd_heartbeat_grace / 2)) {
+    derr << "skipping heartbeat_check, hbqueue max age: " << age << dendl;
+    return; // hb dispatch is too backed up for our hb status to be meaningful
+  }
 
   // check for incoming heartbeats (move me elsewhere?)
-  utime_t cutoff = ceph_clock_now(g_ceph_context);
+  utime_t cutoff = now;
   cutoff -= g_conf->osd_heartbeat_grace;
   for (map<int,HeartbeatInfo>::iterator p = heartbeat_peers.begin();
        p != heartbeat_peers.end();