22295 Allow user define what is failure in terms on circuit breaker

Revert all unnecessary style changes

Add api for java

Make exceptionsAsFailure function private

Exclude changed method api for binary compatibility check

- The changes expand the api by overload, thus is backward compatible
This commit is contained in:
Qingwei 2017-02-13 07:27:42 -05:00 committed by Patrik Nordwall
parent f60710b58f
commit c879c03679
4 changed files with 277 additions and 22 deletions

View file

@ -13,9 +13,11 @@ import scala.compat.java8.FutureConverters;
import scala.concurrent.Await;
import scala.concurrent.duration.FiniteDuration;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.TimeUnit;
import java.util.function.BiFunction;
import static org.junit.Assert.assertEquals;
@ -39,4 +41,19 @@ public class CircuitBreakerTest extends JUnitSuite {
assertEquals("hello", Await.result(FutureConverters.toScala(res), fiveSeconds));
}
@Test
public void useCircuitBreakerWithCompletableFutureAndCustomDefineFailure() throws Exception {
final FiniteDuration fiveSeconds = FiniteDuration.create(5, TimeUnit.SECONDS);
final FiniteDuration fiveHundredMillis = FiniteDuration.create(500, TimeUnit.MILLISECONDS);
final CircuitBreaker breaker = new CircuitBreaker(system.dispatcher(), system.scheduler(), 1, fiveSeconds, fiveHundredMillis);
final BiFunction<Optional<String>, Optional<Throwable>, java.lang.Boolean> fn =
(result, err) -> (result.isPresent() && result.get().equals("hello"));
final CompletableFuture<String> f = new CompletableFuture<>();
f.complete("hello");
final CompletionStage<String> res = breaker.callWithCircuitBreakerCS(() -> f, fn);
assertEquals("hello", Await.result(FutureConverters.toScala(res), fiveSeconds));
assertEquals(1, breaker.currentFailureCount());
}
}