From 7285f13da26424aba8ae9c39e1a8d7d309168bd1 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sun, 7 Apr 2024 22:35:19 +0400 Subject: [PATCH] server: fixed that new users can't connect to long living server (if it works too long without restarts, #11285); --- Mage.Server/src/main/java/mage/server/Main.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Mage.Server/src/main/java/mage/server/Main.java b/Mage.Server/src/main/java/mage/server/Main.java index 6d900146e40..f6748d91506 100644 --- a/Mage.Server/src/main/java/mage/server/Main.java +++ b/Mage.Server/src/main/java/mage/server/Main.java @@ -55,6 +55,16 @@ public final class Main { private static final Logger logger = Logger.getLogger(Main.class); private static final MageVersion version = new MageVersion(Main.class); + // Server threads: + // - worker threads: creates for each connection, controls by maxPoolSize; + // - acceptor threads: processing requests to start a new connection, controls by numAcceptThreads; + // - backlog threads: processing waiting queue if maxPoolSize reached, controls by backlogSize; + // Usage hints: + // - if maxPoolSize reached then new clients will freeze in connection dialog until backlog queue overflow; + // - so for active server must increase maxPoolSize to big value like "max online * 10" or enable worker idle timeout + // - worker idle time will free unused worker thread, so new client can connect; + private static final int SERVER_WORKER_THREAD_IDLE_TIMEOUT_SECS = 5 * 60; // no needs to config, must be enabled for all + // arg settings can be setup by run script or IDE's program arguments like -xxx=yyy // prop settings can be setup by -Dxxx=yyy in the launcher // priority: default setting -> prop setting -> arg setting @@ -432,6 +442,7 @@ public final class Main { ((BisocketServerInvoker) invoker).setSecondaryBindPort(managerFactory.configSettings().getSecondaryBindPort()); ((BisocketServerInvoker) invoker).setBacklog(managerFactory.configSettings().getBacklogSize()); ((BisocketServerInvoker) invoker).setNumAcceptThreads(managerFactory.configSettings().getNumAcceptThreads()); + ((BisocketServerInvoker) invoker).setIdleTimeout(SERVER_WORKER_THREAD_IDLE_TIMEOUT_SECS); } @Override