From b9aa10d984578cfcd3d034704a264a5ad6de3395 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sun, 29 Aug 2021 08:31:22 -0700 Subject: [PATCH] make server pings not block each other --- .../us/ajg0702/queue/common/QueueManagerImpl.java | 9 ++++++++- .../java/us/ajg0702/queue/common/TaskManager.java | 14 +++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java index b2dee1f..6ba1415 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -19,6 +19,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class QueueManagerImpl implements QueueManager { @@ -474,9 +476,14 @@ public class QueueManagerImpl implements QueueManager { @Override public void updateServers() { + ExecutorService pool = main.getTaskManager().getServersUpdateExecutor(); + if (pool instanceof ThreadPoolExecutor && main.getConfig().getBoolean("pinger-debug")) { + main.getLogger().info("[pinger] Server update thread pool has " + +((ThreadPoolExecutor) pool).getActiveCount()+" threads"); + } try { for(QueueServer server : servers) { - server.updatePing(); + pool.submit(server::updatePing); } } catch(Exception e) { e.printStackTrace(); diff --git a/common/src/main/java/us/ajg0702/queue/common/TaskManager.java b/common/src/main/java/us/ajg0702/queue/common/TaskManager.java index fd644e8..18fcbde 100644 --- a/common/src/main/java/us/ajg0702/queue/common/TaskManager.java +++ b/common/src/main/java/us/ajg0702/queue/common/TaskManager.java @@ -2,10 +2,7 @@ package us.ajg0702.queue.common; import java.util.Arrays; import java.util.List; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; public class TaskManager { @@ -13,6 +10,8 @@ public class TaskManager { final ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); final ScheduledExecutorService updateExecutor = Executors.newScheduledThreadPool(1); + final ExecutorService serversUpdateExecutor = Executors.newCachedThreadPool(); + final QueueMain main; public TaskManager(QueueMain main) { this.main = main; @@ -21,6 +20,11 @@ public class TaskManager { public void shutdown() { executor.shutdown(); updateExecutor.shutdown(); + serversUpdateExecutor.shutdown(); + } + + public ExecutorService getServersUpdateExecutor() { + return serversUpdateExecutor; } public String taskStatus() { @@ -52,7 +56,7 @@ public class TaskManager { updateTask = scheduleAtFixedRate(updateExecutor, main.getQueueManager()::updateServers, 500L, - (long) (Math.max(main.getTimeBetweenPlayers()/2, 2)*1000L), + (long) (Math.max(main.getTimeBetweenPlayers()/2, 1)*1000L), TimeUnit.MILLISECONDS );