From 878cce58b2387b50f000de5a7138fe7c583debbb Mon Sep 17 00:00:00 2001 From: Fulminazzo Date: Thu, 14 Mar 2024 13:14:56 +0100 Subject: [PATCH 1/3] Cancelled cleaner task upon reboot --- .../java/net/simplyvanilla/simplyrank/SimplyRankPlugin.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/simplyvanilla/simplyrank/SimplyRankPlugin.java b/src/main/java/net/simplyvanilla/simplyrank/SimplyRankPlugin.java index 929420a..07811fd 100644 --- a/src/main/java/net/simplyvanilla/simplyrank/SimplyRankPlugin.java +++ b/src/main/java/net/simplyvanilla/simplyrank/SimplyRankPlugin.java @@ -3,6 +3,7 @@ import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import io.papermc.paper.threadedregions.scheduler.ScheduledTask; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextColor; import net.simplyvanilla.simplyrank.addresswhitelist.AddressWhitelistService; @@ -46,6 +47,8 @@ public class SimplyRankPlugin extends JavaPlugin { private MySqlClient mySqlClient = null; + private ScheduledTask cleanerTask; + @Override public void onEnable() { @@ -93,7 +96,7 @@ public void onEnable() { this.playerDataService = new PlayerDataService(mySqlRepository, mySqlRepository); proxyService = new ProxyService(mySqlRepository, new ProxyCheckProvider(this.getConfig().getString("proxycheck-api-url", "https://proxycheck.io/v2/%s&vpn=1"))); - Bukkit.getAsyncScheduler().runAtFixedRate(this, new ProxyTtlCleanupTask(proxyService, this.getConfig().getInt("proxycache-ttl", 720)), 1, 10, TimeUnit.SECONDS); + this.cleanerTask = Bukkit.getAsyncScheduler().runAtFixedRate(this, new ProxyTtlCleanupTask(proxyService, this.getConfig().getInt("proxycache-ttl", 720)), 1, 10, TimeUnit.SECONDS); if (!this.playerDataService.groupExists("default")) { GroupData defaultData = new GroupData(NamedTextColor.GRAY, "Member "); @@ -156,6 +159,7 @@ public void onEnable() { @Override public void onDisable() { instance = null; + if (this.cleanerTask != null) this.cleanerTask.cancel(); if (this.mySqlClient != null) { this.mySqlClient.close(); } From ef2981b74420d05e506b59abb701ec5369c7180a Mon Sep 17 00:00:00 2001 From: Fulminazzo Date: Thu, 14 Mar 2024 15:13:30 +0100 Subject: [PATCH 2/3] Added testConnection method --- .../simplyrank/database/sql/MySqlClient.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/net/simplyvanilla/simplyrank/database/sql/MySqlClient.java b/src/main/java/net/simplyvanilla/simplyrank/database/sql/MySqlClient.java index e0c4a47..930cc0d 100644 --- a/src/main/java/net/simplyvanilla/simplyrank/database/sql/MySqlClient.java +++ b/src/main/java/net/simplyvanilla/simplyrank/database/sql/MySqlClient.java @@ -9,6 +9,9 @@ public class MySqlClient { public static final String TABLE_PLAYERS_NAME = "player"; public static final String TABLE_GROUPS_NAME = "group"; + private static final int MAX_TRIES = 10; + private static final long WAIT_TIME = 3000; + private final String url; private final String username; private final String password; @@ -24,6 +27,27 @@ public MySqlClient(String url, String user, String password) { initTables(); } + public void testConnection() { + for (int i = 0; i < MAX_TRIES; i++) { + if (testConnectionSingle()) return; + try { + Thread.sleep(WAIT_TIME); + } catch (InterruptedException ignored) { + break; + } + } + throw new RuntimeException(String.format("It was not possible to recover Database connection after %s tries", MAX_TRIES)); + } + + private boolean testConnectionSingle() { + try { + connection = DriverManager.getConnection(url, username, password); + return connection.isValid(1); + } catch (SQLException e) { + return false; + } + } + public void connect() { try { connection = DriverManager.getConnection(url, username, password); From 0adde466c6a8bf10263bb1930eaa59ab7b0eb202 Mon Sep 17 00:00:00 2001 From: Fulminazzo Date: Thu, 14 Mar 2024 15:14:32 +0100 Subject: [PATCH 3/3] Implemented testConnection methods for every method of MySqlClient --- .../simplyvanilla/simplyrank/database/sql/MySqlClient.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/net/simplyvanilla/simplyrank/database/sql/MySqlClient.java b/src/main/java/net/simplyvanilla/simplyrank/database/sql/MySqlClient.java index 930cc0d..cc3a65e 100644 --- a/src/main/java/net/simplyvanilla/simplyrank/database/sql/MySqlClient.java +++ b/src/main/java/net/simplyvanilla/simplyrank/database/sql/MySqlClient.java @@ -65,11 +65,13 @@ public void close() { } public void update(PreparedStatement statement) throws SQLException { + testConnection(); statement.executeUpdate(); statement.close(); } public ResultSet query(PreparedStatement statement) throws SQLException { + testConnection(); ResultSet rs; rs = statement.executeQuery(); @@ -79,6 +81,7 @@ public ResultSet query(PreparedStatement statement) throws SQLException { } private void executeRawStatement(String cmd) throws SQLException { + testConnection(); try (Statement st = connection.createStatement()) { st.execute(cmd); } @@ -151,6 +154,7 @@ PRIMARY KEY (`id`), } public PreparedStatement prepareStatement(String qry) throws SQLException { + testConnection(); return connection.prepareStatement(qry); }