[BREAKING] Use nanoTime() for heartbeat checks

This improves Windows and timezone-related support by using a time reference that is more-or-less fixed. You will need to update your network if you update.
This commit is contained in:
Tux 2015-04-17 16:34:18 -04:00
parent c6c73cf731
commit 7c76b245d4
1 changed files with 4 additions and 4 deletions

View File

@ -101,10 +101,10 @@ public final class RedisBungee extends Plugin {
for (Map.Entry<String, String> entry : heartbeats.entrySet()) {
try {
long stamp = Long.parseLong(entry.getValue());
if (System.currentTimeMillis() < stamp + 30000)
if (System.nanoTime() < stamp + TimeUnit.SECONDS.toNanos(30)) {
servers.add(entry.getKey());
else if (nag <= 0) {
getLogger().severe(entry.getKey() + " is " + (System.currentTimeMillis() - stamp) + "ms behind! (Time not synchronized or server down?)");
} else if (nag <= 0) {
getLogger().severe(entry.getKey() + " is " + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - stamp) + "ms behind! (Time not synchronized or server down?)");
}
} catch (NumberFormatException ignored) {
}
@ -247,7 +247,7 @@ public final class RedisBungee extends Plugin {
public void run() {
Jedis rsc = pool.getResource();
try {
rsc.hset("heartbeats", serverId, String.valueOf(System.currentTimeMillis()));
rsc.hset("heartbeats", serverId, String.valueOf(System.nanoTime()));
} catch (JedisConnectionException e) {
// Redis server has disappeared!
getLogger().log(Level.SEVERE, "Unable to update heartbeat - did your Redis server go away?", e);