From d78c795288f1b29d7cd5f7a1f577bc28690cdb42 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Thu, 20 Oct 2022 13:48:31 -0700 Subject: [PATCH] Fixed offline servers sometimes not being marked as offline on velocity --- .../java/us/ajg0702/queue/api/AjQueueAPI.java | 4 +++ .../us/ajg0702/queue/common/QueueMain.java | 6 +++++ .../bungeecord/server/BungeeServer.java | 22 ++++++++-------- .../velocity/server/VelocityServer.java | 25 ++++++++++++------- 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/api/src/main/java/us/ajg0702/queue/api/AjQueueAPI.java b/api/src/main/java/us/ajg0702/queue/api/AjQueueAPI.java index ce7fc5f0..2f54b523 100644 --- a/api/src/main/java/us/ajg0702/queue/api/AjQueueAPI.java +++ b/api/src/main/java/us/ajg0702/queue/api/AjQueueAPI.java @@ -6,6 +6,8 @@ import us.ajg0702.utils.common.Config; import us.ajg0702.utils.common.Messages; +import java.util.concurrent.ExecutorService; + public abstract class AjQueueAPI { public static AjQueueAPI INSTANCE; @@ -106,4 +108,6 @@ public static AjQueueAPI getInstance() { * Tells ajQueue to shut down. */ public abstract void shutdown(); + + public abstract ExecutorService getServersUpdateExecutor(); } diff --git a/common/src/main/java/us/ajg0702/queue/common/QueueMain.java b/common/src/main/java/us/ajg0702/queue/common/QueueMain.java index 2b528778..0973e5a0 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueMain.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueMain.java @@ -13,6 +13,7 @@ import java.io.File; import java.util.LinkedHashMap; +import java.util.concurrent.ExecutorService; import java.util.regex.Pattern; public class QueueMain extends AjQueueAPI { @@ -123,6 +124,11 @@ public void shutdown() { updater.shutdown(); } + @Override + public ExecutorService getServersUpdateExecutor() { + return taskManager.getServersUpdateExecutor(); + } + private final File dataFolder; diff --git a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/server/BungeeServer.java b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/server/BungeeServer.java index 085faffb..a76567a4 100644 --- a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/server/BungeeServer.java +++ b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/server/BungeeServer.java @@ -52,16 +52,7 @@ public CompletableFuture ping(boolean debug, QueueLogger logg handle.ping((pp, error) -> { if(error != null) { - - long lastOnline = lastSuccessfullPing == null ? 0 : lastSuccessfullPing.getFetchedTime(); - offlineTime = (int) Math.min(sent - lastOnline, Integer.MAX_VALUE); - - lastOffline = sent; - - future.completeExceptionally(error); - lastPing = null; - if(debug) logger.info("[pinger] [" + getName() + "] offline:", error); - return; + markOffline(debug, logger, future, sent, error); } offlineTime = 0; @@ -80,6 +71,17 @@ public CompletableFuture ping(boolean debug, QueueLogger logg return future; } + private void markOffline(boolean debug, QueueLogger logger, CompletableFuture future, long sent, Throwable e) { + long lastOnline = lastSuccessfullPing == null ? 0 : lastSuccessfullPing.getFetchedTime(); + offlineTime = (int) Math.min(sent - lastOnline, Integer.MAX_VALUE); + + lastOffline = sent; + + future.completeExceptionally(e); + lastPing = null; + if(debug) logger.info("[pinger] [" + getName() + "] offline:", e); + } + @Override public Optional getLastPing() { return Optional.ofNullable(lastPing); diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java index 0b81b978..54f99859 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java @@ -53,19 +53,12 @@ public CompletableFuture ping(boolean debug, QueueLogger logg if(debug) logger.info("[pinger] [" + getName() + "] sending ping"); serverPing.thenRunAsync(() -> { + System.out.println("thenRunAsync " + getName()); VelocityServerPing ping; try { ping = new VelocityServerPing(serverPing.get(), sent); } catch (Throwable e) { - - long lastOnline = lastSuccessfullPing == null ? 0 : lastSuccessfullPing.getFetchedTime(); - offlineTime = (int) Math.min(sent - lastOnline, Integer.MAX_VALUE); - - lastOffline = sent; - - future.completeExceptionally(e); - lastPing = null; - if(debug) logger.info("[pinger] [" + getName() + "] offline:", e); + markOffline(debug, logger, future, sent, e); return; } @@ -79,10 +72,24 @@ public CompletableFuture ping(boolean debug, QueueLogger logg future.complete(ping); lastPing = ping; + }).exceptionally(e -> { + markOffline(debug, logger, future, sent, e); + return null; }); return future; } + private void markOffline(boolean debug, QueueLogger logger, CompletableFuture future, long sent, Throwable e) { + long lastOnline = lastSuccessfullPing == null ? 0 : lastSuccessfullPing.getFetchedTime(); + offlineTime = (int) Math.min(sent - lastOnline, Integer.MAX_VALUE); + + lastOffline = sent; + + future.completeExceptionally(e); + lastPing = null; + if(debug) logger.info("[pinger] [" + getName() + "] offline:", e); + } + @Override public Optional getLastPing() { return Optional.ofNullable(lastPing);