Retry request to eiffel event-repository To make the plugin able to handle a temporary unreachable event-repository we retry the request when it fail. Solves: Jira GER-1687 Change-Id: I4561f0946a0aff9430fc9a01d506b6145dc62ebb
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/eiffel/api/EiffelGraphQlClient.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/eiffel/api/EiffelGraphQlClient.java index c3c9201..ff8bf2b 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/eiffel/api/EiffelGraphQlClient.java +++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/eiffel/api/EiffelGraphQlClient.java
@@ -14,6 +14,11 @@ package com.googlesource.gerrit.plugins.eventseiffel.eiffel.api; +import com.github.rholder.retry.RetryException; +import com.github.rholder.retry.Retryer; +import com.github.rholder.retry.RetryerBuilder; +import com.github.rholder.retry.StopStrategies; +import com.github.rholder.retry.WaitStrategies; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; import com.google.common.flogger.FluentLogger; @@ -37,6 +42,8 @@ import java.util.List; import java.util.Optional; import java.util.UUID; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; public class EiffelGraphQlClient implements EventStorage { @@ -131,8 +138,14 @@ private QueryResult query(String query) throws EventStorageException { HttpResponse<String> response; try { - response = post(query); - } catch (IOException | InterruptedException e) { + Retryer<HttpResponse<String>> retryer = + RetryerBuilder.<HttpResponse<String>>newBuilder() + .retryIfException() + .withWaitStrategy(WaitStrategies.fixedWait(10, TimeUnit.SECONDS)) + .withStopStrategy(StopStrategies.stopAfterAttempt(2)) + .build(); + response = retryer.call(() -> post(query)); + } catch (RetryException | ExecutionException e) { throw new EventStorageException(e, "Query \"%s\" failed.", query); }