Skip to content

Commit

Permalink
Issue ReactiveX#607: The CircuitBreakerHealthIndicator and RateLimite…
Browse files Browse the repository at this point in the history
…rHealthIn… (ReactiveX#615)

* Issue ReactiveX#607: The CircuitBreakerHealthIndicator and RateLimiterHealthIndicator should be disabled by default. Otherwise the application health status is DOWN when a CircuitBreaker is open which is not what users want.
  • Loading branch information
RobWin authored Sep 13, 2019
1 parent b8c4f71 commit f8f9d22
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,11 @@ public class CircuitBreakerConfigurationProperties {
private Map<String, InstanceProperties> configs = new HashMap<>();

public Optional<InstanceProperties> findCircuitBreakerProperties(String name) {
return Optional.ofNullable(instances.get(name));
InstanceProperties instanceProperties = instances.get(name);
if(instanceProperties == null){
instanceProperties = configs.get("default");
}
return Optional.ofNullable(instanceProperties);
}

public CircuitBreakerConfig createCircuitBreakerConfig(InstanceProperties instanceProperties) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ public class RateLimiterConfigurationProperties {
private Map<String, InstanceProperties> configs = new HashMap<>();

public Optional<InstanceProperties> findRateLimiterProperties(String name) {
return Optional.ofNullable(instances.get(name));
InstanceProperties instanceProperties = instances.get(name);
if(instanceProperties == null){
instanceProperties = configs.get("default");
}
return Optional.ofNullable(instanceProperties);
}

public RateLimiterConfig createRateLimiterConfig(@Nullable InstanceProperties instanceProperties) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ public Health health() {

private boolean isRegisterHealthIndicator(CircuitBreaker circuitBreaker) {
return circuitBreakerProperties.findCircuitBreakerProperties(circuitBreaker.getName())
.map(io.github.resilience4j.common.circuitbreaker.configuration.CircuitBreakerConfigurationProperties.InstanceProperties::getRegisterHealthIndicator)
.orElse(true);
.map(CircuitBreakerConfigurationProperties.InstanceProperties::getRegisterHealthIndicator)
.orElse(false);
}

private static Health mapBackendMonitorState(CircuitBreaker circuitBreaker) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ public Health health() {

private boolean isRegisterHealthIndicator(RateLimiter rateLimiter) {
return rateLimiterProperties.findRateLimiterProperties(rateLimiter.getName())
.map(io.github.resilience4j.common.ratelimiter.configuration.RateLimiterConfigurationProperties.InstanceProperties::getRegisterHealthIndicator)
.orElse(true);
.map(RateLimiterConfigurationProperties.InstanceProperties::getRegisterHealthIndicator)
.orElse(false);
}

private Health mapRateLimiterHealth(RateLimiter rateLimiter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ public void healthMetricsAndConfig() {
CircuitBreakerRegistry registry = mock(CircuitBreakerRegistry.class);
CircuitBreaker.Metrics metrics = mock(CircuitBreaker.Metrics.class);
CircuitBreaker circuitBreaker = mock(CircuitBreaker.class);
io.github.resilience4j.common.circuitbreaker.configuration.CircuitBreakerConfigurationProperties.InstanceProperties instanceProperties =
mock(io.github.resilience4j.common.circuitbreaker.configuration.CircuitBreakerConfigurationProperties.InstanceProperties.class);
CircuitBreakerConfigurationProperties.InstanceProperties instanceProperties =
mock(CircuitBreakerConfigurationProperties.InstanceProperties.class);
CircuitBreakerConfigurationProperties circuitBreakerProperties = mock(CircuitBreakerConfigurationProperties.class);
HealthAggregator healthAggregator = new OrderedHealthAggregator();
CircuitBreakersHealthIndicator healthIndicator =
Expand Down Expand Up @@ -86,8 +86,8 @@ public void testHealthStatus() {
expectedStateToCircuitBreaker.put(OPEN, openCircuitBreaker);
expectedStateToCircuitBreaker.put(HALF_OPEN, halfOpenCircuitBreaker);
expectedStateToCircuitBreaker.put(CLOSED, closeCircuitBreaker);
io.github.resilience4j.common.circuitbreaker.configuration.CircuitBreakerConfigurationProperties.InstanceProperties instanceProperties =
mock(io.github.resilience4j.common.circuitbreaker.configuration.CircuitBreakerConfigurationProperties.InstanceProperties.class);
CircuitBreakerConfigurationProperties.InstanceProperties instanceProperties =
mock(CircuitBreakerConfigurationProperties.InstanceProperties.class);
CircuitBreakerConfigurationProperties circuitBreakerProperties = mock(CircuitBreakerConfigurationProperties.class);

// given
Expand Down Expand Up @@ -126,7 +126,7 @@ private void setCircuitBreakerWhen(CircuitBreaker.State givenState, CircuitBreak
when(circuitBreaker.getState()).thenReturn(givenState);
when(circuitBreaker.getCircuitBreakerConfig()).thenReturn(config);
when(circuitBreaker.getMetrics()).thenReturn(metrics);
when(circuitBreakerProperties.findCircuitBreakerProperties("test")).thenReturn(Optional.of(instanceProperties));
when(circuitBreakerProperties.findCircuitBreakerProperties(givenState.name())).thenReturn(Optional.of(instanceProperties));
when(instanceProperties.getRegisterHealthIndicator()).thenReturn(true);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ resilience4j.circuitbreaker:
registerHealthIndicator: true
backends:
backendA:
registerHealthIndicator: true
slidingWindowSize: 6
permittedNumberOfCallsInHalfOpenState: 2
waitDurationInOpenState: 5s
Expand Down

0 comments on commit f8f9d22

Please sign in to comment.