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);
     }