Randomise initial polling intervals to spread out connection attempts.

This commit is contained in:
akwizgran
2013-04-25 14:57:32 +01:00
parent db475577c8
commit 6c4c0926c5

View File

@@ -36,14 +36,16 @@ class PollerImpl implements Poller, Runnable {
} }
public synchronized void start(Collection<Plugin> plugins) { public synchronized void start(Collection<Plugin> plugins) {
for(Plugin plugin : plugins) schedule(plugin); for(Plugin plugin : plugins) schedule(plugin, true);
new Thread(this, "Poller").start(); new Thread(this, "Poller").start();
} }
private synchronized void schedule(Plugin plugin) { private synchronized void schedule(Plugin plugin, boolean randomise) {
if(plugin.shouldPoll()) { if(plugin.shouldPoll()) {
long now = clock.currentTimeMillis(); long now = clock.currentTimeMillis();
long interval = plugin.getPollingInterval(); long interval = plugin.getPollingInterval();
// Randomise intervals at startup to spread out connection attempts
if(randomise) interval = (long) (interval * Math.random());
pollTimes.add(new PollTime(now + interval, plugin)); pollTimes.add(new PollTime(now + interval, plugin));
} }
} }
@@ -74,7 +76,7 @@ class PollerImpl implements Poller, Runnable {
p.plugin.poll(connected); p.plugin.poll(connected);
} }
}); });
schedule(p.plugin); schedule(p.plugin, false);
} else { } else {
try { try {
wait(p.time - now); wait(p.time - now);