Skip to content

Commit 90ca22b

Browse files
Addressed comments
1 parent fa3a3c3 commit 90ca22b

File tree

2 files changed

+48
-34
lines changed

2 files changed

+48
-34
lines changed

grpc-circuitbreaker-utils/src/main/java/org/hypertrace/circuitbreaker/grpcutils/CircuitBreakerConfigParser.java

+40-26
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.hypertrace.circuitbreaker.grpcutils;
22

33
import com.typesafe.config.Config;
4-
import java.time.Duration;
54
import java.util.Map;
65
import java.util.Set;
76
import java.util.stream.Collectors;
@@ -10,9 +9,6 @@
109
@Slf4j
1110
public class CircuitBreakerConfigParser {
1211

13-
private static final Set<String> nonThresholdKeys =
14-
Set.of("enabled", "defaultCircuitBreakerKey", "defaultThresholds");
15-
1612
// Percentage of failures to trigger OPEN state
1713
private static final String FAILURE_RATE_THRESHOLD = "failureRateThreshold";
1814
// Percentage of slow calls to trigger OPEN state
@@ -32,6 +28,7 @@ public class CircuitBreakerConfigParser {
3228
private static final String SLIDING_WINDOW_TYPE = "slidingWindowType";
3329
public static final String ENABLED = "enabled";
3430
public static final String DEFAULT_THRESHOLDS = "defaultThresholds";
31+
private static final Set<String> NON_THRESHOLD_KEYS = Set.of(ENABLED, DEFAULT_THRESHOLDS);
3532

3633
public static <T> CircuitBreakerConfiguration.CircuitBreakerConfigurationBuilder<T> parseConfig(
3734
Config config) {
@@ -50,7 +47,7 @@ public static <T> CircuitBreakerConfiguration.CircuitBreakerConfigurationBuilder
5047

5148
Map<String, CircuitBreakerThresholds> circuitBreakerThresholdsMap =
5249
config.root().keySet().stream()
53-
.filter(key -> !nonThresholdKeys.contains(key)) // Filter out non-threshold keys
50+
.filter(key -> !NON_THRESHOLD_KEYS.contains(key)) // Filter out non-threshold keys
5451
.collect(
5552
Collectors.toMap(
5653
key -> key, // Circuit breaker key
@@ -61,30 +58,47 @@ public static <T> CircuitBreakerConfiguration.CircuitBreakerConfigurationBuilder
6158
}
6259

6360
private static CircuitBreakerThresholds buildCircuitBreakerThresholds(Config config) {
64-
return CircuitBreakerThresholds.builder()
65-
.failureRateThreshold((float) config.getDouble(FAILURE_RATE_THRESHOLD))
66-
.slowCallRateThreshold((float) config.getDouble(SLOW_CALL_RATE_THRESHOLD))
67-
.slowCallDurationThreshold(config.getDuration(SLOW_CALL_DURATION_THRESHOLD))
68-
.slidingWindowType(getSlidingWindowType(config.getString(SLIDING_WINDOW_TYPE)))
69-
.slidingWindowSize(config.getInt(SLIDING_WINDOW_SIZE))
70-
.waitDurationInOpenState(config.getDuration(WAIT_DURATION_IN_OPEN_STATE))
71-
.permittedNumberOfCallsInHalfOpenState(
72-
config.getInt(PERMITTED_NUMBER_OF_CALLS_IN_HALF_OPEN_STATE))
73-
.minimumNumberOfCalls(config.getInt(MINIMUM_NUMBER_OF_CALLS))
74-
.build();
61+
CircuitBreakerThresholds.CircuitBreakerThresholdsBuilder builder =
62+
CircuitBreakerThresholds.builder();
63+
64+
if (config.hasPath(FAILURE_RATE_THRESHOLD)) {
65+
builder.failureRateThreshold((float) config.getDouble(FAILURE_RATE_THRESHOLD));
66+
}
67+
68+
if (config.hasPath(SLOW_CALL_RATE_THRESHOLD)) {
69+
builder.slowCallRateThreshold((float) config.getDouble(SLOW_CALL_RATE_THRESHOLD));
70+
}
71+
72+
if (config.hasPath(SLOW_CALL_DURATION_THRESHOLD)) {
73+
builder.slowCallDurationThreshold(config.getDuration(SLOW_CALL_DURATION_THRESHOLD));
74+
}
75+
76+
if (config.hasPath(SLIDING_WINDOW_TYPE)) {
77+
builder.slidingWindowType(getSlidingWindowType(config.getString(SLIDING_WINDOW_TYPE)));
78+
}
79+
80+
if (config.hasPath(SLIDING_WINDOW_SIZE)) {
81+
builder.slidingWindowSize(config.getInt(SLIDING_WINDOW_SIZE));
82+
}
83+
84+
if (config.hasPath(WAIT_DURATION_IN_OPEN_STATE)) {
85+
builder.waitDurationInOpenState(config.getDuration(WAIT_DURATION_IN_OPEN_STATE));
86+
}
87+
88+
if (config.hasPath(PERMITTED_NUMBER_OF_CALLS_IN_HALF_OPEN_STATE)) {
89+
builder.permittedNumberOfCallsInHalfOpenState(
90+
config.getInt(PERMITTED_NUMBER_OF_CALLS_IN_HALF_OPEN_STATE));
91+
}
92+
93+
if (config.hasPath(MINIMUM_NUMBER_OF_CALLS)) {
94+
builder.minimumNumberOfCalls(config.getInt(MINIMUM_NUMBER_OF_CALLS));
95+
}
96+
97+
return builder.build();
7598
}
7699

77100
public static CircuitBreakerThresholds buildCircuitBreakerDefaultThresholds() {
78-
return CircuitBreakerThresholds.builder()
79-
.failureRateThreshold(50f)
80-
.slowCallRateThreshold(50f)
81-
.slowCallDurationThreshold(Duration.ofSeconds(2))
82-
.slidingWindowType(CircuitBreakerThresholds.SlidingWindowType.TIME_BASED)
83-
.slidingWindowSize(60)
84-
.waitDurationInOpenState(Duration.ofSeconds(60))
85-
.permittedNumberOfCallsInHalfOpenState(5)
86-
.minimumNumberOfCalls(10)
87-
.build();
101+
return CircuitBreakerThresholds.builder().build();
88102
}
89103

90104
private static CircuitBreakerThresholds.SlidingWindowType getSlidingWindowType(

grpc-circuitbreaker-utils/src/main/java/org/hypertrace/circuitbreaker/grpcutils/CircuitBreakerThresholds.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,21 @@
88
@Builder
99
public class CircuitBreakerThresholds {
1010
// Percentage of failures to trigger OPEN state
11-
float failureRateThreshold;
11+
@Builder.Default float failureRateThreshold = 50f;
1212
// Percentage of slow calls to trigger OPEN state
13-
float slowCallRateThreshold;
13+
@Builder.Default float slowCallRateThreshold = 50f;
1414
// Define what a "slow" call is
15-
Duration slowCallDurationThreshold;
15+
@Builder.Default Duration slowCallDurationThreshold = Duration.ofSeconds(2);
1616
// Number of calls to consider in the sliding window
17-
SlidingWindowType slidingWindowType;
18-
int slidingWindowSize;
17+
@Builder.Default SlidingWindowType slidingWindowType = SlidingWindowType.TIME_BASED;
18+
@Builder.Default int slidingWindowSize = 60;
1919
// Time before retrying after OPEN state
20-
Duration waitDurationInOpenState;
20+
@Builder.Default Duration waitDurationInOpenState = Duration.ofSeconds(60);
2121
// Minimum calls before evaluating failure rate
22-
int minimumNumberOfCalls;
22+
@Builder.Default int minimumNumberOfCalls = 10;
2323
// Calls allowed in HALF_OPEN state before deciding to
2424
// CLOSE or OPEN again
25-
int permittedNumberOfCallsInHalfOpenState;
25+
@Builder.Default int permittedNumberOfCallsInHalfOpenState = 5;
2626

2727
public enum SlidingWindowType {
2828
COUNT_BASED,

0 commit comments

Comments
 (0)