diff --git a/cloudplatform/resilience-api/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience/ResilienceConfiguration.java b/cloudplatform/resilience-api/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience/ResilienceConfiguration.java
index ceb5089b0..73afd28d1 100644
--- a/cloudplatform/resilience-api/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience/ResilienceConfiguration.java
+++ b/cloudplatform/resilience-api/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience/ResilienceConfiguration.java
@@ -428,6 +428,18 @@ public static final class CircuitBreakerConfiguration
*/
public static final Duration DEFAULT_WAIT_DURATION = Duration.ofSeconds(10);
+ /**
+ * The default duration threshold above which calls are considered as slow.
+ * Matches the Resilience4j default of 60 seconds.
+ */
+ public static final Duration DEFAULT_SLOW_CALL_DURATION_THRESHOLD = Duration.ofSeconds(60);
+
+ /**
+ * The default slow call rate threshold (as percentage within [0, 100]).
+ * Matches the Resilience4j default of 100%.
+ */
+ public static final float DEFAULT_SLOW_CALL_RATE_THRESHOLD = 100;
+
/**
* Flag to indicate active CircuitBreakerConfiguration.
*/
@@ -461,6 +473,22 @@ public static final class CircuitBreakerConfiguration
*/
private int halfOpenBufferSize = DEFAULT_HALF_OPEN_BUFFER_SIZE;
+ /**
+ * The duration threshold above which calls are considered as slow and increase the slow call rate.
+ * When the percentage of slow calls is equal to or greater than {@link #slowCallRateThreshold},
+ * the CircuitBreaker transitions to OPEN and starts short-circuiting calls.
+ */
+ @Nonnull
+ private Duration slowCallDurationThreshold = DEFAULT_SLOW_CALL_DURATION_THRESHOLD;
+
+ /**
+ * The slow call rate threshold (as percentage within [0, 100]). The CircuitBreaker considers a call as slow
+ * when the call duration is greater than {@link #slowCallDurationThreshold}. When the percentage of slow calls
+ * is equal to or greater than the threshold, the CircuitBreaker transitions to OPEN and starts
+ * short-circuiting calls.
+ */
+ private float slowCallRateThreshold = DEFAULT_SLOW_CALL_RATE_THRESHOLD;
+
/**
* Get the status indicator for the CircuitBreaker.
*
diff --git a/cloudplatform/resilience4j/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience4j/DefaultCircuitBreakerProvider.java b/cloudplatform/resilience4j/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience4j/DefaultCircuitBreakerProvider.java
index 43a2c15d3..ee9da5055 100644
--- a/cloudplatform/resilience4j/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience4j/DefaultCircuitBreakerProvider.java
+++ b/cloudplatform/resilience4j/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience4j/DefaultCircuitBreakerProvider.java
@@ -55,6 +55,8 @@ public CircuitBreaker getCircuitBreaker( @Nonnull final ResilienceConfiguration
.slidingWindowSize(configuration.circuitBreakerConfiguration().closedBufferSize())
.minimumNumberOfCalls(configuration.circuitBreakerConfiguration().closedBufferSize())
.permittedNumberOfCallsInHalfOpenState(configuration.circuitBreakerConfiguration().halfOpenBufferSize())
+ .slowCallDurationThreshold(configuration.circuitBreakerConfiguration().slowCallDurationThreshold())
+ .slowCallRateThreshold(configuration.circuitBreakerConfiguration().slowCallRateThreshold())
.build();
val circuitBreaker = circuitBreakerRegistry.circuitBreaker(identifier, customCircuitBreakerConfig);