From 2e0a4d71a5d442e30762a64dd854d2c05226cfdc Mon Sep 17 00:00:00 2001 From: Luck Date: Sun, 27 Mar 2022 16:50:31 +0100 Subject: [PATCH] Fix redis close (#3353) --- .../messaging/redis/RedisMessenger.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/messaging/redis/RedisMessenger.java b/common/src/main/java/me/lucko/luckperms/common/messaging/redis/RedisMessenger.java index 73cf911d9..c673730bf 100644 --- a/common/src/main/java/me/lucko/luckperms/common/messaging/redis/RedisMessenger.java +++ b/common/src/main/java/me/lucko/luckperms/common/messaging/redis/RedisMessenger.java @@ -48,8 +48,9 @@ public class RedisMessenger implements Messenger { private final LuckPermsPlugin plugin; private final IncomingMessageConsumer consumer; - private JedisPool jedisPool; - private Subscription sub; + private /* final */ JedisPool jedisPool; + private /* final */ Subscription sub; + private boolean closing = false; public RedisMessenger(LuckPermsPlugin plugin, IncomingMessageConsumer consumer) { this.plugin = plugin; @@ -82,6 +83,7 @@ public class RedisMessenger implements Messenger { @Override public void close() { + this.closing = true; this.sub.unsubscribe(); this.jedisPool.destroy(); } @@ -90,16 +92,21 @@ public class RedisMessenger implements Messenger { @Override public void run() { - boolean wasBroken = false; - while (!Thread.interrupted() && !RedisMessenger.this.jedisPool.isClosed()) { + boolean first = true; + while (!RedisMessenger.this.closing && !Thread.interrupted() && !RedisMessenger.this.jedisPool.isClosed()) { try (Jedis jedis = RedisMessenger.this.jedisPool.getResource()) { - if (wasBroken) { + if (first) { + first = false; + } else { RedisMessenger.this.plugin.getLogger().info("Redis pubsub connection re-established"); - wasBroken = false; } - jedis.subscribe(this, CHANNEL); + + jedis.subscribe(this, CHANNEL); // blocking call } catch (Exception e) { - wasBroken = true; + if (RedisMessenger.this.closing) { + return; + } + RedisMessenger.this.plugin.getLogger().warn("Redis pubsub connection dropped, trying to re-open the connection", e); try { unsubscribe();