failsafe-lib/failsafe

CircuitBreaker stays in OPEN even after DELAY time

epischel opened this issue · 2 comments

I configure a CircuitBreaker with a delay. I expect to transition from OPEN to HALFOPEN after delay-time given that nothing gets recorded. It does not happen.
Code to observe this behaviour:

  public static void main(String[] args) throws InterruptedException {
    final CircuitBreaker<Object> circuitBreaker =
        CircuitBreaker.builder()
            .withFailureThreshold(3)
            .withSuccessThreshold(3)
            .withDelay(Duration.ofMinutes(2))
            .build();
    // bring to OPEN state
    circuitBreaker.recordFailure();
    circuitBreaker.recordFailure();
    circuitBreaker.recordFailure();
    circuitBreaker.recordFailure();
    // print state every 10 seconds
    for (int i = 0; i < 4 * 6; i++) {
      System.out.println(LocalDateTime.now());
      System.out.println(circuitBreaker.getState());
      System.out.println(circuitBreaker.getRemainingDelay());
      Thread.sleep(10_000L);
    }
  }

Is this intended behaviour?

I would also appreciate an understanding of why the CircuitBreaker never appears to change state in this scenario.