public void setCircuitBreakerState(CircuitBreakerState.State state) { this.circuitBreaker.setState(state); }
logger.debug("CircuitBreaker tripped!"); if (state.equals(PRIMARY_HEALTHY)) { setState(PRIMARY_TRIPPED); executor.schedule(primaryTrippedToPrimaryProbe, PRIMARY_TRIP_TIME, TimeUnit.SECONDS); } else if (state.equals(SECONDARY_HEALTHY)) { setState(SECONDARY_TRIPPED); executor.schedule(secondaryTrippedToSecondaryProbe, SECONDARY_TRIP_TIME, TimeUnit.SECONDS); } else { setState(TERTIARY_TRIPPED); executor.schedule(tertiaryTrippedToTertiaryProbe, TERTIARY_TRIP_TIME, TimeUnit.SECONDS); if (resultGood) { logger.debug("CircuitBreaker was tripped, became healthy"); setState(SECONDARY_HEALTHY); responseHistory.clear(); executor.schedule(secondaryHealthyToPrimaryHealthy, } else { logger.debug("CircuitBreaker tripped!"); setState(SECONDARY_TRIPPED); executor.schedule(secondaryTrippedToSecondaryProbe, SECONDARY_TRIP_TIME, TimeUnit.SECONDS); if (resultGood) { logger.debug("CircuitBreaker was tripped, became healthy"); setState(SECONDARY_HEALTHY);
@Test public void testCanServeRequests() { assertThat(breaker.canServeRequests(false)).isTrue(); breaker.setState(CircuitBreakerState.State.SECONDARY_HEALTHY); assertThat(breaker.canServeRequests(false)).isTrue(); breaker.setState(CircuitBreakerState.State.TERTIARY_HEALTHY); assertThat(breaker.canServeRequests(false)).isTrue(); breaker.setState(CircuitBreakerState.State.PRIMARY_TRIPPED); assertThat(breaker.canServeRequests(false)).isFalse(); breaker.setState(CircuitBreakerState.State.SECONDARY_TRIPPED); assertThat(breaker.canServeRequests(false)).isFalse(); breaker.setState(CircuitBreakerState.State.TERTIARY_TRIPPED); assertThat(breaker.canServeRequests(false)).isFalse(); breaker.setState(CircuitBreakerState.State.UNHEALTHY); assertThat(breaker.canServeRequests(false)).isFalse(); breaker.setState(CircuitBreakerState.State.PRIMARY_PROBE); assertThat(breaker.canServeRequests(false)).isTrue(); breaker.setState(CircuitBreakerState.State.SECONDARY_PROBE); assertThat(breaker.canServeRequests(false)).isTrue(); breaker.setState(CircuitBreakerState.State.TERTIARY_PROBE); assertThat(breaker.canServeRequests(false)).isTrue(); breaker.setState(CircuitBreakerState.State.PRIMARY_PROBE); assertThat(breaker.canServeRequests(true)).isFalse(); breaker.setState(CircuitBreakerState.State.SECONDARY_PROBE); assertThat(breaker.canServeRequests(true)).isFalse(); breaker.setState(CircuitBreakerState.State.TERTIARY_PROBE); assertThat(breaker.canServeRequests(true)).isFalse(); }
if (CircuitBreakerState.this.getState().equals(fromState)) { logger.debug("CircuitBreaker timer elapsed -> {}", toState); CircuitBreakerState.this.setState(toState); if (toState.equals(SECONDARY_HEALTHY)) { executor.schedule(secondaryHealthyToPrimaryHealthy,