From bf7332c1467c5017194d492e624d172741308d9a Mon Sep 17 00:00:00 2001 From: Guillaume Duval <117720964+g-duval@users.noreply.github.com> Date: Wed, 29 May 2024 16:29:39 +0200 Subject: [PATCH] Add SocketTimeoutException as endpoint auto-disabling cause (#2726) Co-authored-by: Gwenneg Lepage --- .../cloud/notifications/connector/http/HttpErrorType.java | 1 + .../connector/http/HttpExceptionProcessor.java | 8 ++++++++ .../events/EndpointErrorFromConnectorHelper.java | 3 ++- .../redhat/cloud/notifications/events/HttpErrorType.java | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/connector-common-http/src/main/java/com/redhat/cloud/notifications/connector/http/HttpErrorType.java b/connector-common-http/src/main/java/com/redhat/cloud/notifications/connector/http/HttpErrorType.java index 75f0b6f0a8..97536a5a6f 100644 --- a/connector-common-http/src/main/java/com/redhat/cloud/notifications/connector/http/HttpErrorType.java +++ b/connector-common-http/src/main/java/com/redhat/cloud/notifications/connector/http/HttpErrorType.java @@ -1,6 +1,7 @@ package com.redhat.cloud.notifications.connector.http; public enum HttpErrorType { + SOCKET_TIMEOUT, CONNECT_TIMEOUT, CONNECTION_REFUSED, HTTP_4XX, diff --git a/connector-common-http/src/main/java/com/redhat/cloud/notifications/connector/http/HttpExceptionProcessor.java b/connector-common-http/src/main/java/com/redhat/cloud/notifications/connector/http/HttpExceptionProcessor.java index aaf60351a6..aa329c66ba 100644 --- a/connector-common-http/src/main/java/com/redhat/cloud/notifications/connector/http/HttpExceptionProcessor.java +++ b/connector-common-http/src/main/java/com/redhat/cloud/notifications/connector/http/HttpExceptionProcessor.java @@ -11,6 +11,7 @@ import org.jboss.logging.Logger; import javax.net.ssl.SSLHandshakeException; +import java.net.SocketTimeoutException; import java.net.UnknownHostException; import static com.redhat.cloud.notifications.connector.http.ExchangeProperty.HTTP_ERROR_TYPE; @@ -19,6 +20,7 @@ import static com.redhat.cloud.notifications.connector.http.HttpErrorType.CONNECT_TIMEOUT; import static com.redhat.cloud.notifications.connector.http.HttpErrorType.HTTP_4XX; import static com.redhat.cloud.notifications.connector.http.HttpErrorType.HTTP_5XX; +import static com.redhat.cloud.notifications.connector.http.HttpErrorType.SOCKET_TIMEOUT; import static com.redhat.cloud.notifications.connector.http.HttpErrorType.SSL_HANDSHAKE; import static com.redhat.cloud.notifications.connector.http.HttpErrorType.UNKNOWN_HOST; import static org.apache.http.HttpStatus.SC_TOO_MANY_REQUESTS; @@ -55,6 +57,12 @@ protected void process(Throwable t, Exchange exchange) { } else { logDefault(t, exchange); } + } else if (t instanceof SocketTimeoutException) { + if (connectorConfig.isDisableFaultyEndpoints()) { + exchange.setProperty(HTTP_ERROR_TYPE, SOCKET_TIMEOUT); + } else { + logDefault(t, exchange); + } } else if (t instanceof HttpHostConnectException) { if (connectorConfig.isDisableFaultyEndpoints()) { exchange.setProperty(HTTP_ERROR_TYPE, CONNECTION_REFUSED); diff --git a/engine/src/main/java/com/redhat/cloud/notifications/events/EndpointErrorFromConnectorHelper.java b/engine/src/main/java/com/redhat/cloud/notifications/events/EndpointErrorFromConnectorHelper.java index 6bdf3c71d1..081b66c5b7 100644 --- a/engine/src/main/java/com/redhat/cloud/notifications/events/EndpointErrorFromConnectorHelper.java +++ b/engine/src/main/java/com/redhat/cloud/notifications/events/EndpointErrorFromConnectorHelper.java @@ -17,13 +17,14 @@ import static com.redhat.cloud.notifications.events.HttpErrorType.CONNECT_TIMEOUT; import static com.redhat.cloud.notifications.events.HttpErrorType.HTTP_4XX; import static com.redhat.cloud.notifications.events.HttpErrorType.HTTP_5XX; +import static com.redhat.cloud.notifications.events.HttpErrorType.SOCKET_TIMEOUT; import static com.redhat.cloud.notifications.events.HttpErrorType.SSL_HANDSHAKE; import static com.redhat.cloud.notifications.events.HttpErrorType.UNKNOWN_HOST; @ApplicationScoped public class EndpointErrorFromConnectorHelper { - private static final Set HTTP_SERVER_ERRORS = Set.of(CONNECT_TIMEOUT, CONNECTION_REFUSED, HTTP_5XX, SSL_HANDSHAKE, UNKNOWN_HOST); + private static final Set HTTP_SERVER_ERRORS = Set.of(SOCKET_TIMEOUT, CONNECT_TIMEOUT, CONNECTION_REFUSED, HTTP_5XX, SSL_HANDSHAKE, UNKNOWN_HOST); @Inject EndpointRepository endpointRepository; diff --git a/engine/src/main/java/com/redhat/cloud/notifications/events/HttpErrorType.java b/engine/src/main/java/com/redhat/cloud/notifications/events/HttpErrorType.java index b788a6a2ea..6b5b9a4398 100644 --- a/engine/src/main/java/com/redhat/cloud/notifications/events/HttpErrorType.java +++ b/engine/src/main/java/com/redhat/cloud/notifications/events/HttpErrorType.java @@ -1,6 +1,7 @@ package com.redhat.cloud.notifications.events; public enum HttpErrorType { + SOCKET_TIMEOUT("a timeout happened while waiting for the HTTP server response"), CONNECT_TIMEOUT("a timeout happened while connecting to the HTTP server"), CONNECTION_REFUSED("the connection to the HTTP server was refused"), HTTP_4XX(""), // Message not used.