Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. HttpResponse execute(HttpRequest request) throws TimeoutException {
  2. Stopwatch timer = Stopwatch.createStarted();
  3. for (int i = 0; i < MAX_RETRIES; i++) {
  4. if (timer.elapsed(TimeUnit.MILLISECONDS) > REQUEST_TIMEOUT) {
  5. throw new TimeoutException();
  6. }
  7. try {
  8. return tryExecute(request);
  9. } catch (ConnectionException e) {
  10. // cycle one more time
  11. }
  12. }
  13. throw new UnreachableHostException();
  14. }
  15.  
  16. CompletableFuture<HttpResponse> execute(HttpRequest request, State state) {
  17. if (state.getTimer().elapsed(TimeUnit.MILLISECONDS) > REQUEST_TIMEOUT) {
  18. CompletableFuture<HttpResponse> synchronizer = new CompletableFuture<>();
  19. synchronizer.completeExceptionally(new TimeoutException());
  20. return synchronizer;
  21. }
  22. if (state.getAttempt() >= MAX_ATTEMPTS) {
  23. CompletableFuture<HttpResponse> synchronizer = new CompletableFuture<>();
  24. synchronizer.completeExceptionally(new UnreachableHostException());
  25. return synchronizer;
  26. }
  27. return tryExecute(request)
  28. // о да, мы идем прямо в ад. прошу не обращать
  29. // внимание на саму сложность конструкции
  30. .handle((result, throwable) -> {
  31. if (result != null) {
  32. return CompletableFuture.completedFuture(result);
  33. }
  34. if (throwable instanceof ConnectionException) {
  35. state.setAttempt(state.getAttempt() + 1);
  36. return execute(request, state);
  37. }
  38. CompletableFuture synchronizer = new CompletableFuture<>();
  39. synchronizer.completeExceptionally(throwable);
  40. return synchronizer;
  41. })
  42. .thenCompose(f -> f);
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement