From 66070e2b38553439a57b9c4bb315b761586030d1 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Fri, 3 Aug 2018 14:20:55 +0200 Subject: [PATCH] Do not spam exceptions when the database connection pool is closed When some database access is still running asynchronously, it will create an SQLException when the pool is closed (on shutdown). Just silently ignore them in this case. --- .../de/diddiz/LogBlock/CommandsHandler.java | 40 +++++++++++++------ .../java/de/diddiz/LogBlock/LogBlock.java | 9 ++++- src/main/java/de/diddiz/LogBlock/Updater.java | 4 +- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/diddiz/LogBlock/CommandsHandler.java b/src/main/java/de/diddiz/LogBlock/CommandsHandler.java index ec8d8a8..13deb36 100755 --- a/src/main/java/de/diddiz/LogBlock/CommandsHandler.java +++ b/src/main/java/de/diddiz/LogBlock/CommandsHandler.java @@ -426,7 +426,9 @@ public class CommandsHandler implements CommandExecutor { rs.close(); } } catch (final SQLException ex) { - logblock.getLogger().log(Level.SEVERE, "[CommandsHandler] SQL exception on close", ex); + if (logblock.isCompletelyEnabled()) { + logblock.getLogger().log(Level.SEVERE, "[CommandsHandler] SQL exception on close", ex); + } } } } @@ -490,8 +492,10 @@ public class CommandsHandler implements CommandExecutor { getSession(sender).lookupCache = null; } } catch (final Exception ex) { - sender.sendMessage(ChatColor.RED + "Exception, check error log"); - logblock.getLogger().log(Level.SEVERE, "[Lookup] " + params.getQuery() + ": ", ex); + if (logblock.isCompletelyEnabled() || !(ex instanceof SQLException)) { + sender.sendMessage(ChatColor.RED + "Exception, check error log"); + logblock.getLogger().log(Level.SEVERE, "[Lookup] " + params.getQuery() + ": ", ex); + } } finally { close(); } @@ -546,8 +550,10 @@ public class CommandsHandler implements CommandExecutor { writer.close(); sender.sendMessage(ChatColor.GREEN + "Wrote " + counter + " lines."); } catch (final Exception ex) { - sender.sendMessage(ChatColor.RED + "Exception, check error log"); - logblock.getLogger().log(Level.SEVERE, "[WriteLogFile] " + params.getQuery() + " (file was " + file.getAbsolutePath() + "): ", ex); + if (logblock.isCompletelyEnabled() || !(ex instanceof SQLException)) { + sender.sendMessage(ChatColor.RED + "Exception, check error log"); + logblock.getLogger().log(Level.SEVERE, "[WriteLogFile] " + params.getQuery() + " (file was " + file.getAbsolutePath() + "): ", ex); + } } finally { close(); } @@ -606,8 +612,10 @@ public class CommandsHandler implements CommandExecutor { sender.sendMessage(ChatColor.RED + "No block change found to teleport to"); } } catch (final Exception ex) { - sender.sendMessage(ChatColor.RED + "Exception, check error log"); - logblock.getLogger().log(Level.SEVERE, "[Teleport] " + params.getQuery() + ": ", ex); + if (logblock.isCompletelyEnabled() || !(ex instanceof SQLException)) { + sender.sendMessage(ChatColor.RED + "Exception, check error log"); + logblock.getLogger().log(Level.SEVERE, "[Teleport] " + params.getQuery() + ": ", ex); + } } finally { close(); } @@ -693,8 +701,10 @@ public class CommandsHandler implements CommandExecutor { } } } catch (final Exception ex) { - sender.sendMessage(ChatColor.RED + "Exception, check error log"); - logblock.getLogger().log(Level.SEVERE, "[Rollback] " + params.getQuery() + ": ", ex); + if (logblock.isCompletelyEnabled() || !(ex instanceof SQLException)) { + sender.sendMessage(ChatColor.RED + "Exception, check error log"); + logblock.getLogger().log(Level.SEVERE, "[Rollback] " + params.getQuery() + ": ", ex); + } } finally { close(); } @@ -766,8 +776,10 @@ public class CommandsHandler implements CommandExecutor { editor.start(); sender.sendMessage(ChatColor.GREEN + "Redo finished successfully (" + editor.getElapsedTime() + " ms, " + editor.getSuccesses() + "/" + changes + " blocks" + (editor.getErrors() > 0 ? ", " + ChatColor.RED + editor.getErrors() + " errors" + ChatColor.GREEN : "") + (editor.getBlacklistCollisions() > 0 ? ", " + editor.getBlacklistCollisions() + " blacklist collisions" : "") + ")"); } catch (final Exception ex) { - sender.sendMessage(ChatColor.RED + "Exception, check error log"); - logblock.getLogger().log(Level.SEVERE, "[Redo] " + params.getQuery() + ": ", ex); + if (logblock.isCompletelyEnabled() || !(ex instanceof SQLException)) { + sender.sendMessage(ChatColor.RED + "Exception, check error log"); + logblock.getLogger().log(Level.SEVERE, "[Redo] " + params.getQuery() + ": ", ex); + } } finally { close(); } @@ -841,8 +853,10 @@ public class CommandsHandler implements CommandExecutor { sender.sendMessage(ChatColor.GREEN + "Cleared out table " + table + "-chestdata. Deleted " + deleted + " entries."); } } catch (final Exception ex) { - sender.sendMessage(ChatColor.RED + "Exception, check error log"); - logblock.getLogger().log(Level.SEVERE, "[ClearLog] Exception: ", ex); + if (logblock.isCompletelyEnabled() || !(ex instanceof SQLException)) { + sender.sendMessage(ChatColor.RED + "Exception, check error log"); + logblock.getLogger().log(Level.SEVERE, "[ClearLog] Exception: ", ex); + } } finally { close(); } diff --git a/src/main/java/de/diddiz/LogBlock/LogBlock.java b/src/main/java/de/diddiz/LogBlock/LogBlock.java index ae95ba7..1c10bdc 100644 --- a/src/main/java/de/diddiz/LogBlock/LogBlock.java +++ b/src/main/java/de/diddiz/LogBlock/LogBlock.java @@ -40,11 +40,16 @@ public class LogBlock extends JavaPlugin { private boolean errorAtLoading = false, noDb = false, connected = true; private PlayerInfoLogging playerInfoLogging; private Questioner questioner; + private volatile boolean isCompletelyEnabled; public static LogBlock getInstance() { return logblock; } + public boolean isCompletelyEnabled() { + return isCompletelyEnabled; + } + public Consumer getConsumer() { return consumer; } @@ -120,7 +125,6 @@ public class LogBlock extends JavaPlugin { new DumpedLogImporter(this).run(); registerEvents(); consumer.start(); - getServer().getScheduler().runTaskAsynchronously(this, new Updater.PlayerCountChecker(this)); for (final Tool tool : toolsByType.values()) { if (pm.getPermission("logblock.tools." + tool.name) == null) { final Permission perm = new Permission("logblock.tools." + tool.name, tool.permissionDefault); @@ -128,6 +132,8 @@ public class LogBlock extends JavaPlugin { } } questioner = new Questioner(this); + isCompletelyEnabled = true; + getServer().getScheduler().runTaskAsynchronously(this, new Updater.PlayerCountChecker(this)); try { Metrics metrics = new Metrics(this); metrics.start(); @@ -204,6 +210,7 @@ public class LogBlock extends JavaPlugin { @Override public void onDisable() { + isCompletelyEnabled = false; if (timer != null) { timer.cancel(); } diff --git a/src/main/java/de/diddiz/LogBlock/Updater.java b/src/main/java/de/diddiz/LogBlock/Updater.java index ede6255..7d2af31 100644 --- a/src/main/java/de/diddiz/LogBlock/Updater.java +++ b/src/main/java/de/diddiz/LogBlock/Updater.java @@ -825,7 +825,9 @@ class Updater { st.close(); conn.close(); } catch (final SQLException ex) { - logblock.getLogger().log(Level.SEVERE, "[Updater] Error: ", ex); + if (logblock.isCompletelyEnabled()) { + logblock.getLogger().log(Level.SEVERE, "[Updater] Error: ", ex); + } } } }