summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-04-04 06:49:54 -0700
committerSage Weil <sage@newdream.net>2009-04-04 14:29:29 -0700
commit3ba1175e4c07283bef330fddb27b076d71a4ee72 (patch)
tree916f4769ba4eb660eb1ecdbed8f3d4b21567f8b2
parent95710f0e9d7691edcd99b9b17b76ae09490e5a60 (diff)
downloadceph-3ba1175e4c07283bef330fddb27b076d71a4ee72.tar.gz
objecter: only send one ping per laggy osd
-rw-r--r--src/osdc/Objecter.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc
index cbf3b7354b3..f1eeff58b96 100644
--- a/src/osdc/Objecter.cc
+++ b/src/osdc/Objecter.cc
@@ -315,6 +315,8 @@ void Objecter::tick()
{
dout(10) << "tick" << dendl;
+ set<int> ping;
+
// look for laggy pgs
utime_t cutoff = g_clock.now();
cutoff -= g_conf.objecter_timeout; // timeout
@@ -330,10 +332,13 @@ void Objecter::tick()
// send a ping to this osd, to ensure we detect any session resets
// (osd reply message policy is lossy)
if (i->second.acting.size())
- messenger->send_message(new MPing, osdmap->get_inst(i->second.acting[0]));
+ ping.insert(i->second.acting[0]);
}
}
+ for (set<int>::iterator p = ping.begin(); p != ping.end(); p++)
+ messenger->send_message(new MPing, osdmap->get_inst(*p));
+
// reschedule
timer.add_event_after(g_conf.objecter_tick_interval, new C_Tick(this));
}