From 2803935de6a875d2414c9a3749542b684b288b06 Mon Sep 17 00:00:00 2001 From: Andrew Bell <115623869+andybharness@users.noreply.github.com> Date: Wed, 16 Jul 2025 12:37:26 +0100 Subject: [PATCH] fix: [FFM-12506]: Avoid logging endpoint errors if SDK is shutting down --- settings.gradle | 2 +- src/main/java/io/harness/cf/client/api/InnerClient.java | 4 +++- src/main/java/io/harness/cf/client/api/PollingProcessor.java | 5 ++--- .../java/io/harness/cf/client/connector/EventSource.java | 5 +++-- .../io/harness/cf/client/connector/NewRetryInterceptor.java | 4 +++- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/settings.gradle b/settings.gradle index 29355452..230c0f5f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,7 +4,7 @@ dependencyResolutionManagement { versionCatalogs { libs { // main sdk version - version('sdk', '1.8.1'); + version('sdk', '1.8.2'); // sdk deps version('okhttp3', '4.12.0') diff --git a/src/main/java/io/harness/cf/client/api/InnerClient.java b/src/main/java/io/harness/cf/client/api/InnerClient.java index 7ef4090d..b39c70b6 100644 --- a/src/main/java/io/harness/cf/client/api/InnerClient.java +++ b/src/main/java/io/harness/cf/client/api/InnerClient.java @@ -209,7 +209,9 @@ public void onConnected() { @Override public void onDisconnected(String reason) { - SdkCodes.warnStreamDisconnected(reason); + if (!reason.contains("SDK_SHUTDOWN")) { + SdkCodes.warnStreamDisconnected(reason); + } if (!closing && !pollProcessor.isRunning()) { log.debug("onDisconnected triggered, starting poller to get latest flags"); diff --git a/src/main/java/io/harness/cf/client/api/PollingProcessor.java b/src/main/java/io/harness/cf/client/api/PollingProcessor.java index bb569764..73a82af5 100644 --- a/src/main/java/io/harness/cf/client/api/PollingProcessor.java +++ b/src/main/java/io/harness/cf/client/api/PollingProcessor.java @@ -71,7 +71,7 @@ public CompletableFuture> retrieveSegments() { completableFuture.complete(segments); } catch (Throwable e) { log.error( - "Exception was raised when fetching flags data with the message {}", e.getMessage(), e); + "Exception was raised when fetching segments data with the message {}", e.getMessage(), e); completableFuture.completeExceptionally(e); } return completableFuture; @@ -81,8 +81,7 @@ public void retrieveAll() { try { CompletableFuture.allOf(retrieveFlags(), retrieveSegments()).join(); } catch (CompletionException | CancellationException ex) { - log.warn("retrieveAll failed: {} - {}", ex.getClass().getSimpleName(), ex.getMessage()); - log.trace("retrieveAll failed", ex); + log.warn("retrieveAll failed: {} - {}", ex.getClass().getSimpleName(), ex.getMessage(), ex); } } diff --git a/src/main/java/io/harness/cf/client/connector/EventSource.java b/src/main/java/io/harness/cf/client/connector/EventSource.java index 4d985991..34bea95a 100644 --- a/src/main/java/io/harness/cf/client/connector/EventSource.java +++ b/src/main/java/io/harness/cf/client/connector/EventSource.java @@ -198,13 +198,14 @@ public void onResponse(@NotNull Call call, @NotNull Response response) throws IO } catch (Throwable ex) { log.warn("SSE Stream aborted: " + getExceptionMsg(ex)); log.trace("SSE Stream aborted trace", ex); - updater.onDisconnected(getExceptionMsg(ex)); + + updater.onDisconnected((isShuttingDown.get() ? "SDK_SHUTDOWN: " : "") + getExceptionMsg(ex)); } } private String getExceptionMsg(Throwable ex) { return (ex.getMessage() == null || "null".equals(ex.getMessage())) - ? ex.getClass().getSimpleName() + ? ex.getClass().getCanonicalName() : ex.getMessage(); } diff --git a/src/main/java/io/harness/cf/client/connector/NewRetryInterceptor.java b/src/main/java/io/harness/cf/client/connector/NewRetryInterceptor.java index 7df56229..447fe3dd 100644 --- a/src/main/java/io/harness/cf/client/connector/NewRetryInterceptor.java +++ b/src/main/java/io/harness/cf/client/connector/NewRetryInterceptor.java @@ -105,7 +105,7 @@ public Response intercept(@NotNull Chain chain) throws IOException { limitReached = !retryForever && tryCount >= maxTryCount; if (isShuttingDown.get()) { - log.warn( + log.trace( "Request attempt {} to {} was not successful, [{}], SDK is shutting down, no retries will be attempted", tryCount, chain.request().url(), @@ -147,6 +147,7 @@ int getRetryAfterHeaderInSeconds(Response response) { try { seconds = Integer.parseInt(retryAfterValue); } catch (NumberFormatException ignored) { + log.trace("Unable to parse Retry-After header as integer: {}", retryAfterValue); } if (seconds <= 0) { @@ -156,6 +157,7 @@ int getRetryAfterHeaderInSeconds(Response response) { seconds = (int) Duration.between(Instant.now(), then.toInstant()).getSeconds(); } } catch (ParseException ignored) { + log.warn("Unable to parse Retry-After header value: `{}` as integer or date", retryAfterValue); } }