[#1034] sane handling of large delay options

This commit is contained in:
Rsl1122 2019-05-09 15:39:22 +03:00
parent 290cb4d66b
commit 4d261ce6e8
9 changed files with 48 additions and 29 deletions

View File

@ -90,9 +90,12 @@ public class BukkitTaskSystem extends ServerTaskSystem {
public void enable() { public void enable() {
super.enable(); super.enable();
try { try {
Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
if (pingDelay < TimeUnit.HOURS.toMillis(1L)) {
plugin.registerListener(pingCountTimer); plugin.registerListener(pingCountTimer);
long startDelay = TimeAmount.toTicks(config.get(TimeSettings.PING_SERVER_ENABLE_DELAY), TimeUnit.MILLISECONDS); long startDelay = TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS);
registerTask(pingCountTimer).runTaskTimer(startDelay, 40L); registerTask(pingCountTimer).runTaskTimer(startDelay, 40L);
}
} catch (ExceptionInInitializerError | NoClassDefFoundError ignore) { } catch (ExceptionInInitializerError | NoClassDefFoundError ignore) {
// Running CraftBukkit // Running CraftBukkit
} }

View File

@ -64,7 +64,6 @@ public class PingCountTimerBukkit extends AbsRunnable implements Listener {
//the server is pinging the client every 40 Ticks (2 sec) - so check it then //the server is pinging the client every 40 Ticks (2 sec) - so check it then
//https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/PlayerConnection.java#L178 //https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/PlayerConnection.java#L178
public static final int PING_INTERVAL = 2 * 20;
private static final boolean PING_METHOD_AVAILABLE; private static final boolean PING_METHOD_AVAILABLE;
@ -196,6 +195,10 @@ public class PingCountTimerBukkit extends AbsRunnable implements Listener {
@EventHandler @EventHandler
public void onPlayerJoin(PlayerJoinEvent joinEvent) { public void onPlayerJoin(PlayerJoinEvent joinEvent) {
Player player = joinEvent.getPlayer(); Player player = joinEvent.getPlayer();
Long pingDelay = config.get(TimeSettings.PING_PLAYER_LOGIN_DELAY);
if (pingDelay >= TimeUnit.HOURS.toMillis(2L)) {
return;
}
runnableFactory.create("Add Player to Ping list", new AbsRunnable() { runnableFactory.create("Add Player to Ping list", new AbsRunnable() {
@Override @Override
public void run() { public void run() {
@ -203,7 +206,7 @@ public class PingCountTimerBukkit extends AbsRunnable implements Listener {
addPlayer(player); addPlayer(player);
} }
} }
}).runTaskLater(TimeAmount.toTicks(config.get(TimeSettings.PING_PLAYER_LOGIN_DELAY), TimeUnit.MILLISECONDS)); }).runTaskLater(TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS));
} }
@EventHandler @EventHandler

View File

@ -87,9 +87,12 @@ public class BungeeTaskSystem extends TaskSystem {
registerTask(networkPageRefreshTask).runTaskTimerAsynchronously(1500, TimeAmount.toTicks(5L, TimeUnit.MINUTES)); registerTask(networkPageRefreshTask).runTaskTimerAsynchronously(1500, TimeAmount.toTicks(5L, TimeUnit.MINUTES));
registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS)); registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS));
Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
if (pingDelay < TimeUnit.HOURS.toMillis(1L)) {
plugin.registerListener(pingCountTimer); plugin.registerListener(pingCountTimer);
long startDelay = TimeAmount.toTicks(config.get(TimeSettings.PING_SERVER_ENABLE_DELAY), TimeUnit.MILLISECONDS); long startDelay = TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS);
registerTask(pingCountTimer).runTaskTimer(startDelay, PingCountTimerBungee.PING_INTERVAL); registerTask(pingCountTimer).runTaskTimer(startDelay, 40L);
}
registerTask(playersPageRefreshTask) registerTask(playersPageRefreshTask)
.runTaskTimerAsynchronously(TimeAmount.toTicks(5L, TimeUnit.MINUTES), TimeAmount.toTicks(5L, TimeUnit.MINUTES)); .runTaskTimerAsynchronously(TimeAmount.toTicks(5L, TimeUnit.MINUTES), TimeAmount.toTicks(5L, TimeUnit.MINUTES));

View File

@ -52,10 +52,6 @@ import java.util.concurrent.TimeUnit;
@Singleton @Singleton
public class PingCountTimerBungee extends AbsRunnable implements Listener { public class PingCountTimerBungee extends AbsRunnable implements Listener {
//the server is pinging the client every 40 Ticks (2 sec) - so check it then
//https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/PlayerConnection.java#L178
public static final int PING_INTERVAL = 2 * 20;
private final Map<UUID, List<DateObj<Integer>>> playerHistory; private final Map<UUID, List<DateObj<Integer>>> playerHistory;
private final PlanConfig config; private final PlanConfig config;
@ -121,6 +117,10 @@ public class PingCountTimerBungee extends AbsRunnable implements Listener {
@EventHandler @EventHandler
public void onPlayerJoin(ServerConnectedEvent joinEvent) { public void onPlayerJoin(ServerConnectedEvent joinEvent) {
ProxiedPlayer player = joinEvent.getPlayer(); ProxiedPlayer player = joinEvent.getPlayer();
Long pingDelay = config.get(TimeSettings.PING_PLAYER_LOGIN_DELAY);
if (pingDelay >= TimeUnit.HOURS.toMillis(2L)) {
return;
}
runnableFactory.create("Add Player to Ping list", new AbsRunnable() { runnableFactory.create("Add Player to Ping list", new AbsRunnable() {
@Override @Override
public void run() { public void run() {
@ -128,7 +128,7 @@ public class PingCountTimerBungee extends AbsRunnable implements Listener {
addPlayer(player); addPlayer(player);
} }
} }
}).runTaskLater(TimeAmount.toTicks(config.get(TimeSettings.PING_PLAYER_LOGIN_DELAY), TimeUnit.MILLISECONDS)); }).runTaskLater(TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS));
} }
@EventHandler @EventHandler

View File

@ -115,6 +115,10 @@ public abstract class SQLDB extends AbstractDatabase {
transactionExecutor.shutdown(); transactionExecutor.shutdown();
try { try {
Long waitMs = config.getOrDefault(TimeSettings.DB_TRANSACTION_FINISH_WAIT_DELAY, TimeUnit.SECONDS.toMillis(20L)); Long waitMs = config.getOrDefault(TimeSettings.DB_TRANSACTION_FINISH_WAIT_DELAY, TimeUnit.SECONDS.toMillis(20L));
if (waitMs > TimeUnit.MINUTES.toMillis(5L)) {
logger.warn(TimeSettings.DB_TRANSACTION_FINISH_WAIT_DELAY.getPath() + " was set to over 5 minutes, using 5 min instead.");
waitMs = TimeUnit.MINUTES.toMillis(5L);
}
if (!transactionExecutor.awaitTermination(waitMs, TimeUnit.MILLISECONDS)) { if (!transactionExecutor.awaitTermination(waitMs, TimeUnit.MILLISECONDS)) {
List<Runnable> unfinished = transactionExecutor.shutdownNow(); List<Runnable> unfinished = transactionExecutor.shutdownNow();
int unfinishedCount = unfinished.size(); int unfinishedCount = unfinished.size();

View File

@ -82,9 +82,12 @@ public class SpongeTaskSystem extends ServerTaskSystem {
public void enable() { public void enable() {
super.enable(); super.enable();
Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
if (pingDelay < TimeUnit.HOURS.toMillis(1L)) {
plugin.registerListener(pingCountTimer); plugin.registerListener(pingCountTimer);
long startDelay = TimeAmount.toTicks(config.get(TimeSettings.PING_SERVER_ENABLE_DELAY), TimeUnit.MILLISECONDS); long startDelay = TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS);
registerTask(pingCountTimer).runTaskTimer(startDelay, PingCountTimerSponge.PING_INTERVAL); registerTask(pingCountTimer).runTaskTimer(startDelay, 40L);
}
// +40 ticks / 2 seconds so that update check task runs first. // +40 ticks / 2 seconds so that update check task runs first.
long storeDelay = TimeAmount.toTicks(config.get(TimeSettings.CONFIG_UPDATE_INTERVAL), TimeUnit.MILLISECONDS) + 40; long storeDelay = TimeAmount.toTicks(config.get(TimeSettings.CONFIG_UPDATE_INTERVAL), TimeUnit.MILLISECONDS) + 40;

View File

@ -48,10 +48,6 @@ import java.util.concurrent.TimeUnit;
*/ */
public class PingCountTimerSponge extends AbsRunnable { public class PingCountTimerSponge extends AbsRunnable {
//the server is pinging the client every 40 Ticks (2 sec) - so check it then
//https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/PlayerConnection.java#L178
public static final int PING_INTERVAL = 2 * 20;
private final Map<UUID, List<DateObj<Integer>>> playerHistory; private final Map<UUID, List<DateObj<Integer>>> playerHistory;
private final PlanConfig config; private final PlanConfig config;
@ -117,6 +113,10 @@ public class PingCountTimerSponge extends AbsRunnable {
@Listener @Listener
public void onPlayerJoin(ClientConnectionEvent.Join joinEvent) { public void onPlayerJoin(ClientConnectionEvent.Join joinEvent) {
Player player = joinEvent.getTargetEntity(); Player player = joinEvent.getTargetEntity();
Long pingDelay = config.get(TimeSettings.PING_PLAYER_LOGIN_DELAY);
if (pingDelay >= TimeUnit.HOURS.toMillis(2L)) {
return;
}
runnableFactory.create("Add Player to Ping list", new AbsRunnable() { runnableFactory.create("Add Player to Ping list", new AbsRunnable() {
@Override @Override
public void run() { public void run() {
@ -124,7 +124,7 @@ public class PingCountTimerSponge extends AbsRunnable {
addPlayer(player); addPlayer(player);
} }
} }
}).runTaskLater(TimeAmount.toTicks(config.get(TimeSettings.PING_PLAYER_LOGIN_DELAY), TimeUnit.MILLISECONDS)); }).runTaskLater(TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS));
} }
@Listener @Listener

View File

@ -87,9 +87,12 @@ public class VelocityTaskSystem extends TaskSystem {
registerTask(networkPageRefreshTask).runTaskTimerAsynchronously(1500, TimeAmount.toTicks(5L, TimeUnit.MINUTES)); registerTask(networkPageRefreshTask).runTaskTimerAsynchronously(1500, TimeAmount.toTicks(5L, TimeUnit.MINUTES));
registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS)); registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS));
Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
if (pingDelay < TimeUnit.HOURS.toMillis(1L)) {
plugin.registerListener(pingCountTimer); plugin.registerListener(pingCountTimer);
long startDelay = TimeAmount.toTicks(config.get(TimeSettings.PING_SERVER_ENABLE_DELAY), TimeUnit.MILLISECONDS); long startDelay = TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS);
registerTask(pingCountTimer).runTaskTimer(startDelay, PingCountTimerVelocity.PING_INTERVAL); registerTask(pingCountTimer).runTaskTimer(startDelay, 40L);
}
registerTask(playersPageRefreshTask).runTaskTimerAsynchronously(TimeAmount.toTicks(5L, TimeUnit.MINUTES), TimeAmount.toTicks(5L, TimeUnit.MINUTES)); registerTask(playersPageRefreshTask).runTaskTimerAsynchronously(TimeAmount.toTicks(5L, TimeUnit.MINUTES), TimeAmount.toTicks(5L, TimeUnit.MINUTES));

View File

@ -53,10 +53,6 @@ import java.util.concurrent.TimeUnit;
@Singleton @Singleton
public class PingCountTimerVelocity extends AbsRunnable { public class PingCountTimerVelocity extends AbsRunnable {
//the server is pinging the client every 40 Ticks (2 sec) - so check it then
//https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/PlayerConnection.java#L178
public static final int PING_INTERVAL = 2 * 20;
final Map<UUID, List<DateObj<Integer>>> playerHistory; final Map<UUID, List<DateObj<Integer>>> playerHistory;
private final PlanVelocity plugin; private final PlanVelocity plugin;
@ -125,6 +121,10 @@ public class PingCountTimerVelocity extends AbsRunnable {
@Subscribe @Subscribe
public void onPlayerJoin(ServerConnectedEvent joinEvent) { public void onPlayerJoin(ServerConnectedEvent joinEvent) {
Player player = joinEvent.getPlayer(); Player player = joinEvent.getPlayer();
Long pingDelay = config.get(TimeSettings.PING_PLAYER_LOGIN_DELAY);
if (pingDelay >= TimeUnit.HOURS.toMillis(2L)) {
return;
}
runnableFactory.create("Add Player to Ping list", new AbsRunnable() { runnableFactory.create("Add Player to Ping list", new AbsRunnable() {
@Override @Override
public void run() { public void run() {
@ -132,7 +132,7 @@ public class PingCountTimerVelocity extends AbsRunnable {
addPlayer(player); addPlayer(player);
} }
} }
}).runTaskLater(TimeAmount.toTicks(config.get(TimeSettings.PING_PLAYER_LOGIN_DELAY), TimeUnit.MILLISECONDS)); }).runTaskLater(TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS));
} }
@Subscribe @Subscribe