aboutsummaryrefslogtreecommitdiffstats
path: root/vespa-feed-client/src/main/java/ai/vespa/feed/client/GracePeriodCircuitBreaker.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespa-feed-client/src/main/java/ai/vespa/feed/client/GracePeriodCircuitBreaker.java')
-rw-r--r--vespa-feed-client/src/main/java/ai/vespa/feed/client/GracePeriodCircuitBreaker.java10
1 files changed, 7 insertions, 3 deletions
diff --git a/vespa-feed-client/src/main/java/ai/vespa/feed/client/GracePeriodCircuitBreaker.java b/vespa-feed-client/src/main/java/ai/vespa/feed/client/GracePeriodCircuitBreaker.java
index 814d0283140..ed1ab7113df 100644
--- a/vespa-feed-client/src/main/java/ai/vespa/feed/client/GracePeriodCircuitBreaker.java
+++ b/vespa-feed-client/src/main/java/ai/vespa/feed/client/GracePeriodCircuitBreaker.java
@@ -4,6 +4,7 @@ package ai.vespa.feed.client;
import java.time.Duration;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.function.LongSupplier;
import java.util.logging.Logger;
@@ -26,6 +27,7 @@ public class GracePeriodCircuitBreaker implements FeedClient.CircuitBreaker {
private final AtomicBoolean halfOpen = new AtomicBoolean(false);
private final AtomicBoolean open = new AtomicBoolean(false);
private final LongSupplier clock;
+ private final AtomicReference<String> detail = new AtomicReference<>();
private final long graceMillis;
private final long doomMillis;
@@ -53,8 +55,9 @@ public class GracePeriodCircuitBreaker implements FeedClient.CircuitBreaker {
}
@Override
- public void failure() {
- failingSinceMillis.compareAndSet(NEVER, clock.getAsLong());
+ public void failure(String detail) {
+ if (failingSinceMillis.compareAndSet(NEVER, clock.getAsLong()))
+ this.detail.set(detail);
}
@Override
@@ -63,7 +66,8 @@ public class GracePeriodCircuitBreaker implements FeedClient.CircuitBreaker {
if (failingMillis > graceMillis && halfOpen.compareAndSet(false, true))
log.log(INFO, "Circuit breaker is now half-open, as no requests have succeeded for the " +
"last " + failingMillis + "ms. The server will be pinged to see if it recovers, " +
- "but this client will give up if no successes are observed within " + doomMillis + "ms");
+ "but this client will give up if no successes are observed within " + doomMillis + "ms. " +
+ "First failure was '" + detail.get() + "'.");
if (failingMillis > doomMillis && open.compareAndSet(false, true))
log.log(WARNING, "Circuit breaker is now open, after " + doomMillis + "ms of failing request, " +