From 7a7781b802e955c0c657cd8992ad947f3b1f016d Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 30 Dec 2024 16:11:34 +0300 Subject: [PATCH] Feature - onConnectFailed() and onPingFailed() methods with Throwable argument added to org.redisson.client.FailedNodeDetector --- .../org/redisson/client/FailedCommandsDetector.java | 8 ++++++++ .../org/redisson/client/FailedConnectionDetector.java | 8 ++++++++ .../java/org/redisson/client/FailedNodeDetector.java | 10 ++++++++++ .../redisson/client/handler/PingConnectionHandler.java | 2 +- .../org/redisson/connection/pool/ConnectionPool.java | 2 +- 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/client/FailedCommandsDetector.java b/redisson/src/main/java/org/redisson/client/FailedCommandsDetector.java index c5eefbe52..0fdb989ab 100644 --- a/redisson/src/main/java/org/redisson/client/FailedCommandsDetector.java +++ b/redisson/src/main/java/org/redisson/client/FailedCommandsDetector.java @@ -65,6 +65,10 @@ public class FailedCommandsDetector implements FailedNodeDetector { public void onConnectFailed() { } + @Override + public void onConnectFailed(Throwable cause) { + } + @Override public void onConnectSuccessful() { } @@ -81,6 +85,10 @@ public class FailedCommandsDetector implements FailedNodeDetector { public void onPingFailed() { } + @Override + public void onPingFailed(Throwable cause) { + } + @Override public void onCommandFailed(Throwable cause) { failedCommands.add(System.currentTimeMillis()); diff --git a/redisson/src/main/java/org/redisson/client/FailedConnectionDetector.java b/redisson/src/main/java/org/redisson/client/FailedConnectionDetector.java index 1a373a85c..07159488e 100644 --- a/redisson/src/main/java/org/redisson/client/FailedConnectionDetector.java +++ b/redisson/src/main/java/org/redisson/client/FailedConnectionDetector.java @@ -51,6 +51,10 @@ public class FailedConnectionDetector implements FailedNodeDetector { @Override public void onConnectFailed() { + } + + @Override + public void onConnectFailed(Throwable cause) { firstFailTime.compareAndSet(0, System.currentTimeMillis()); } @@ -70,6 +74,10 @@ public class FailedConnectionDetector implements FailedNodeDetector { @Override public void onPingFailed() { + } + + @Override + public void onPingFailed(Throwable cause) { firstFailTime.compareAndSet(0, System.currentTimeMillis()); } diff --git a/redisson/src/main/java/org/redisson/client/FailedNodeDetector.java b/redisson/src/main/java/org/redisson/client/FailedNodeDetector.java index fed6f59be..f108d442c 100644 --- a/redisson/src/main/java/org/redisson/client/FailedNodeDetector.java +++ b/redisson/src/main/java/org/redisson/client/FailedNodeDetector.java @@ -26,12 +26,22 @@ public interface FailedNodeDetector { void onConnectSuccessful(); + @Deprecated void onConnectFailed(); + default void onConnectFailed(Throwable cause) { + onConnectFailed(); + } + void onPingSuccessful(); + @Deprecated void onPingFailed(); + default void onPingFailed(Throwable cause) { + onPingFailed(); + } + void onCommandSuccessful(); void onCommandFailed(Throwable cause); diff --git a/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java b/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java index d7ef641d1..866357f47 100644 --- a/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java +++ b/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java @@ -98,7 +98,7 @@ public class PingConnectionHandler extends ChannelInboundHandlerAdapter { log.debug("channel: {} closed due to PING response timeout set in {} ms", ctx.channel(), config.getPingConnectionInterval()); ctx.channel().close(); - connection.getRedisClient().getConfig().getFailedNodeDetector().onPingFailed(); + connection.getRedisClient().getConfig().getFailedNodeDetector().onPingFailed(cause); } else { connection.getRedisClient().getConfig().getFailedNodeDetector().onPingSuccessful(); sendPing(ctx); diff --git a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java index 7ead955fa..11afb68a0 100644 --- a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java +++ b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java @@ -116,7 +116,7 @@ abstract class ConnectionPool { if (e != null) { if (entry.getNodeType() == NodeType.SLAVE) { FailedNodeDetector detector = entry.getClient().getConfig().getFailedNodeDetector(); - detector.onConnectFailed(); + detector.onConnectFailed(e); if (detector.isNodeFailed()) { log.error("Redis node {} has been marked as failed according to the detection logic defined in {}", entry.getClient().getAddr(), detector);