@Test() public void shouldUseIgnoreExceptionToBuildPredicate() { CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() .ignoreExceptions(RuntimeException.class, ExtendsExtendsException.class).build(); final Predicate<? super Throwable> failurePredicate = circuitBreakerConfig.getRecordFailurePredicate(); then(failurePredicate.test(new Exception())).isEqualTo(true); // not explicitly excluded then(failurePredicate.test(new ExtendsError())).isEqualTo(true); // not explicitly excluded then(failurePredicate.test(new ExtendsException())).isEqualTo(true); // not explicitly excluded then(failurePredicate.test(new ExtendsException2())).isEqualTo(true); // not explicitly excluded then(failurePredicate.test(new RuntimeException())).isEqualTo(false); // explicitly excluded then(failurePredicate.test(new ExtendsRuntimeException())).isEqualTo(false); // inherits excluded from ExtendsException then(failurePredicate.test(new ExtendsExtendsException())).isEqualTo(false); // explicitly excluded }
@Test() public void shouldUseIgnoreExceptionOverRecordToBuildPredicate() { CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() .recordExceptions(RuntimeException.class, ExtendsExtendsException.class) .ignoreExceptions(ExtendsException.class, ExtendsRuntimeException.class) .build(); final Predicate<? super Throwable> failurePredicate = circuitBreakerConfig.getRecordFailurePredicate(); then(failurePredicate.test(new Exception())).isEqualTo(false); // not explicitly included then(failurePredicate.test(new ExtendsError())).isEqualTo(false); // not explicitly included then(failurePredicate.test(new ExtendsException())).isEqualTo(false); // explicitly excluded then(failurePredicate.test(new ExtendsException2())).isEqualTo(false); // not explicitly included then(failurePredicate.test(new RuntimeException())).isEqualTo(true); // explicitly included then(failurePredicate.test(new ExtendsRuntimeException())).isEqualTo(false); // explicitly excluded then(failurePredicate.test(new ExtendsExtendsException())).isEqualTo(false); // inherits excluded from ExtendsException }
@Test() public void shouldUseBothRecordToBuildPredicate() { CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() .recordFailure(TEST_PREDICATE) //1 .recordExceptions(RuntimeException.class, ExtendsExtendsException.class) //2 .ignoreExceptions(ExtendsException.class, ExtendsRuntimeException.class) //3 .build(); final Predicate<? super Throwable> failurePredicate = circuitBreakerConfig.getRecordFailurePredicate(); then(failurePredicate.test(new Exception())).isEqualTo(false); // not explicitly included then(failurePredicate.test(new Exception("test"))).isEqualTo(true); // explicitly included by 1 then(failurePredicate.test(new ExtendsError())).isEqualTo(false); // ot explicitly included then(failurePredicate.test(new ExtendsException())).isEqualTo(false); // explicitly excluded by 3 then(failurePredicate.test(new ExtendsException("test"))).isEqualTo(false); // explicitly excluded by 3 even if included by 1 then(failurePredicate.test(new ExtendsException2())).isEqualTo(false); // not explicitly included then(failurePredicate.test(new RuntimeException())).isEqualTo(true); // explicitly included by 2 then(failurePredicate.test(new ExtendsRuntimeException())).isEqualTo(false); // explicitly excluded by 3 then(failurePredicate.test(new ExtendsExtendsException())).isEqualTo(false); // inherits excluded from ExtendsException by 3 }
.waitDurationInOpenState(Duration.ofMillis(circuitBreakerConfig.getWaitIntervalInMillis())) .recordExceptions(circuitBreakerConfig.getRecordExceptionClasses()) .ignoreExceptions(circuitBreakerConfig.getIgnoreExceptionClasses()); if (circuitBreakerConfig.isAutomaticTransitionFromOpenToHalfOpen()) { builder.enableAutomaticTransitionFromOpenToHalfOpen();
public Builder buildCircuitBreakerConfig(BackendProperties properties) { if (properties == null) { return new Builder(); } Builder builder = CircuitBreakerConfig.custom(); if (properties.getWaitDurationInOpenState() != null) { builder.waitDurationInOpenState(properties.getWaitDurationInOpenState()); } if (properties.getFailureRateThreshold() != null) { builder.failureRateThreshold(properties.getFailureRateThreshold()); } if (properties.getRingBufferSizeInClosedState() != null) { builder.ringBufferSizeInClosedState(properties.getRingBufferSizeInClosedState()); } if (properties.getRingBufferSizeInHalfOpenState() != null) { builder.ringBufferSizeInHalfOpenState(properties.getRingBufferSizeInHalfOpenState()); } if (properties.recordFailurePredicate != null) { buildRecordFailurePredicate(properties, builder); } if (properties.recordExceptions != null) { builder.recordExceptions(properties.recordExceptions); } if (properties.ignoreExceptions != null) { builder.ignoreExceptions(properties.ignoreExceptions); } return builder; }
.waitDurationInOpenState(Duration.ofMillis(circuitBreakerConfig.getWaitIntervalInMillis())) .recordExceptions(circuitBreakerConfig.getRecordExceptionClasses()) .ignoreExceptions(circuitBreakerConfig.getIgnoreExceptionClasses()); if (circuitBreakerConfig.isAutomaticTransitionFromOpenToHalfOpen()) { builder.enableAutomaticTransitionFromOpenToHalfOpen();
public Builder buildCircuitBreakerConfig(BackendProperties properties) { if (properties == null) { return new Builder(); } Builder builder = CircuitBreakerConfig.custom(); if (properties.getWaitDurationInOpenState() != null) { builder.waitDurationInOpenState(properties.getWaitDurationInOpenState()); } if (properties.getFailureRateThreshold() != null) { builder.failureRateThreshold(properties.getFailureRateThreshold()); } if (properties.getRingBufferSizeInClosedState() != null) { builder.ringBufferSizeInClosedState(properties.getRingBufferSizeInClosedState()); } if (properties.getRingBufferSizeInHalfOpenState() != null) { builder.ringBufferSizeInHalfOpenState(properties.getRingBufferSizeInHalfOpenState()); } if (properties.recordFailurePredicate != null) { buildRecordFailurePredicate(properties, builder); } if (properties.recordExceptions != null) { builder.recordExceptions(properties.recordExceptions); } if (properties.ignoreExceptions != null) { builder.ignoreExceptions(properties.ignoreExceptions); } return builder; }