Use Java record for Forwarder.Result

Change-Id: I475d55b33aff1c5b6e893178779fd0eda269cac1
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/Forwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/Forwarder.java
index 5d92700..3bf08b4 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/Forwarder.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/Forwarder.java
@@ -21,32 +21,10 @@
 /** Forward indexing, stream events and cache evictions to the other primary */
 public interface Forwarder {
 
-  public class Result {
-    private EventType type;
-    private boolean result;
-    private boolean isRecoverable;
-
+  public record Result(EventType type, boolean result, boolean isRecoverable) {
     public Result(EventType task, boolean result) {
       this(task, result, true);
     }
-
-    public Result(EventType type, boolean result, boolean isRecoverable) {
-      this.type = type;
-      this.result = result;
-      this.isRecoverable = isRecoverable;
-    }
-
-    public EventType getType() {
-      return type;
-    }
-
-    public boolean getResult() {
-      return result;
-    }
-
-    public boolean isRecoverable() {
-      return isRecoverable;
-    }
   }
 
   /**
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/FailsafeExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/FailsafeExecutorProvider.java
index df2ab14..be6bbf4 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/FailsafeExecutorProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/FailsafeExecutorProvider.java
@@ -46,7 +46,7 @@
                 e ->
                     log.atWarning().log(
                         "%d jgroups retries exceeded for event %s", cfg.jgroups().maxTries(), e))
-            .handleResultIf(r -> !r.getResult())
+            .handleResultIf(r -> !r.result())
             .build();
     return Failsafe.with(retryPolicy)
         .with(workQueue.createQueue(cfg.jgroups().threadPoolSize(), "JGroupsForwarder"));
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java
index be8bd7c..0bd8c5d 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java
@@ -64,7 +64,7 @@
     this.metricsRegistry = metricsRegistry;
     this.executor.onComplete(
         ev -> {
-          this.metricsRegistry.get(ev.getResult().getType()).recordRetries(ev.getAttemptCount());
+          this.metricsRegistry.get(ev.getResult().type()).recordRetries(ev.getAttemptCount());
         });
   }
 
@@ -130,7 +130,7 @@
         .getAsync(() -> executeOnce(cmd))
         .thenApplyAsync(
             result -> {
-              metricsRegistry.get(cmd.type).recordResult(result.getResult());
+              metricsRegistry.get(cmd.type).recordResult(result.result());
               metricsRegistry
                   .get(cmd.type)
                   .recordLatency(Duration.between(cmd.eventCreatedOn, Instant.now()).toMillis());
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/FailsafeExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/FailsafeExecutorProvider.java
index 6c27d4b..6168880 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/FailsafeExecutorProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/FailsafeExecutorProvider.java
@@ -46,8 +46,8 @@
                 e ->
                     log.atWarning().log(
                         "%d http retries exceeded for event %s", cfg.http().maxTries(), e))
-            .handleResultIf(r -> !r.getResult())
-            .abortIf((r, e) -> !r.getResult() && !r.isRecoverable())
+            .handleResultIf(r -> !r.result())
+            .abortIf((r, e) -> !r.result() && !r.isRecoverable())
             .build();
     // TODO: the executor shall be created by workQueue.createQueue(...)
     //   However, this currently doesn't work because WorkQueue.Executor doesn't support wrapping of
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java
index 6d15755..b7ad165 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java
@@ -79,7 +79,7 @@
     this.metricsRegistry = metricsRegistry;
     this.executor.onComplete(
         ev -> {
-          this.metricsRegistry.get(ev.getResult().getType()).recordRetries(ev.getAttemptCount());
+          this.metricsRegistry.get(ev.getResult().type()).recordRetries(ev.getAttemptCount());
         });
   }
 
@@ -261,11 +261,10 @@
             CompletableFuture.completedFuture(new Result(eventType, true)),
             (a, b) ->
                 a.thenCombine(
-                    b,
-                    (left, right) -> new Result(eventType, left.getResult() && right.getResult())))
+                    b, (left, right) -> new Result(eventType, left.result() && right.result())))
         .thenApplyAsync(
             result -> {
-              metricsRegistry.get(eventType).recordResult(result.getResult());
+              metricsRegistry.get(eventType).recordResult(result.result());
               metricsRegistry
                   .get(eventType)
                   .recordLatency(Duration.between(requestStart, Instant.now()).toMillis());
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderTest.java
index 39d388c..e7542b4 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarderTest.java
@@ -96,7 +96,7 @@
     when(dispatcher.castMessage(any(), any(), any())).thenReturn(OK);
 
     CompletableFuture<Result> result = forwarder.indexAccount(100, new IndexEvent());
-    assertThat(result.get().getResult()).isTrue();
+    assertThat(result.get().result()).isTrue();
     verify(dispatcher, times(1)).castMessage(any(), any(), any());
   }
 
@@ -108,7 +108,7 @@
     when(dispatcher.castMessage(any(), any(), any())).thenReturn(FAIL, OK);
 
     CompletableFuture<Result> result = forwarder.indexAccount(100, new IndexEvent());
-    assertThat(result.get().getResult()).isTrue();
+    assertThat(result.get().result()).isTrue();
     verify(dispatcher, times(2)).castMessage(any(), any(), any());
   }
 
@@ -120,7 +120,7 @@
     when(dispatcher.castMessage(any(), any(), any())).thenReturn(FAIL, FAIL, FAIL);
 
     CompletableFuture<Result> result = forwarder.indexAccount(100, new IndexEvent());
-    assertThat(result.get().getResult()).isFalse();
+    assertThat(result.get().result()).isFalse();
     verify(dispatcher, times(MAX_TRIES)).castMessage(any(), any(), any());
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderTest.java
index 94ff2fb..78d21ef 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderTest.java
@@ -146,7 +146,7 @@
             forwarder
                 .indexAccount(ACCOUNT_NUMBER, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -158,7 +158,7 @@
             forwarder
                 .indexAccount(ACCOUNT_NUMBER, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -170,7 +170,7 @@
             forwarder
                 .indexAccount(ACCOUNT_NUMBER, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -182,7 +182,7 @@
             forwarder
                 .indexGroup(UUID, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -194,7 +194,7 @@
             forwarder
                 .indexGroup(UUID, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -205,7 +205,7 @@
             forwarder
                 .indexGroup(UUID, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -217,7 +217,7 @@
             forwarder
                 .indexChange(PROJECT_NAME, CHANGE_NUMBER, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -229,7 +229,7 @@
             forwarder
                 .indexChange(PROJECT_NAME, CHANGE_NUMBER, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -241,7 +241,7 @@
             forwarder
                 .indexChange(PROJECT_NAME, CHANGE_NUMBER, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -253,7 +253,7 @@
             forwarder
                 .batchIndexChange(PROJECT_NAME, CHANGE_NUMBER, new IndexEvent())
                 .get()
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -265,7 +265,7 @@
             forwarder
                 .batchIndexChange(PROJECT_NAME, CHANGE_NUMBER, new IndexEvent())
                 .get()
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -277,7 +277,7 @@
             forwarder
                 .batchIndexChange(PROJECT_NAME, CHANGE_NUMBER, new IndexEvent())
                 .get()
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -289,7 +289,7 @@
             forwarder
                 .deleteChangeFromIndex(CHANGE_NUMBER, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -301,7 +301,7 @@
             forwarder
                 .deleteAllChangesForProject(Project.nameKey(PROJECT_NAME))
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -313,7 +313,7 @@
             forwarder
                 .deleteChangeFromIndex(CHANGE_NUMBER, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -324,7 +324,7 @@
             forwarder
                 .deleteChangeFromIndex(CHANGE_NUMBER, new IndexEvent())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -332,20 +332,20 @@
   public void testEventSentOK() throws Exception {
     when(httpSessionMock.post(eq(EVENT_ENDPOINT), eq(event), any()))
         .thenReturn(new HttpResult(SUCCESSFUL, EMPTY_MSG));
-    assertThat(forwarder.send(event).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).getResult()).isTrue();
+    assertThat(forwarder.send(event).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result()).isTrue();
   }
 
   @Test
   public void testEventSentFailed() throws Exception {
     when(httpSessionMock.post(eq(EVENT_ENDPOINT), eq(event), any()))
         .thenReturn(new HttpResult(FAILED, EMPTY_MSG));
-    assertThat(forwarder.send(event).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).getResult()).isFalse();
+    assertThat(forwarder.send(event).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result()).isFalse();
   }
 
   @Test
   public void testEventSentThrowsException() throws Exception {
     when(httpSessionMock.post(eq(EVENT_ENDPOINT), eq(event), any())).thenThrow(IOException.class);
-    assertThat(forwarder.send(event).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).getResult()).isFalse();
+    assertThat(forwarder.send(event).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result()).isFalse();
   }
 
   @Test
@@ -355,10 +355,7 @@
     when(httpSessionMock.post(eq(buildCacheEndpoint(Constants.PROJECTS)), eq(keyJson), any()))
         .thenReturn(new HttpResult(SUCCESSFUL, EMPTY_MSG));
     assertThat(
-            forwarder
-                .evict(Constants.PROJECTS, key)
-                .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+            forwarder.evict(Constants.PROJECTS, key).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result())
         .isTrue();
   }
 
@@ -369,10 +366,7 @@
     when(httpSessionMock.post(eq(buildCacheEndpoint(Constants.ACCOUNTS)), eq(keyJson), any()))
         .thenReturn(new HttpResult(SUCCESSFUL, EMPTY_MSG));
     assertThat(
-            forwarder
-                .evict(Constants.ACCOUNTS, key)
-                .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+            forwarder.evict(Constants.ACCOUNTS, key).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result())
         .isTrue();
   }
 
@@ -384,10 +378,7 @@
     when(httpSessionMock.post(eq(endpoint), eq(keyJson), any()))
         .thenReturn(new HttpResult(SUCCESSFUL, EMPTY_MSG));
     assertThat(
-            forwarder
-                .evict(Constants.GROUPS, key)
-                .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+            forwarder.evict(Constants.GROUPS, key).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result())
         .isTrue();
   }
 
@@ -402,7 +393,7 @@
             forwarder
                 .evict(Constants.GROUPS_BYINCLUDE, key)
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -416,7 +407,7 @@
             forwarder
                 .evict(Constants.GROUPS_MEMBERS, key)
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -427,10 +418,7 @@
     when(httpSessionMock.post(eq(buildCacheEndpoint(Constants.PROJECTS)), eq(keyJson), any()))
         .thenReturn(new HttpResult(FAILED, EMPTY_MSG));
     assertThat(
-            forwarder
-                .evict(Constants.PROJECTS, key)
-                .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+            forwarder.evict(Constants.PROJECTS, key).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result())
         .isFalse();
   }
 
@@ -441,10 +429,7 @@
     when(httpSessionMock.post(eq(buildCacheEndpoint(Constants.PROJECTS)), eq(keyJson), any()))
         .thenThrow(IOException.class);
     assertThat(
-            forwarder
-                .evict(Constants.PROJECTS, key)
-                .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+            forwarder.evict(Constants.PROJECTS, key).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result())
         .isFalse();
   }
 
@@ -458,10 +443,7 @@
     when(httpSessionMock.post(eq(buildProjectListCacheEndpoint(projectName)), any(), any()))
         .thenReturn(new HttpResult(SUCCESSFUL, EMPTY_MSG));
     assertThat(
-            forwarder
-                .addToProjectList(projectName)
-                .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+            forwarder.addToProjectList(projectName).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result())
         .isTrue();
   }
 
@@ -471,10 +453,7 @@
     when(httpSessionMock.post(eq(buildProjectListCacheEndpoint(projectName)), any(), any()))
         .thenReturn(new HttpResult(FAILED, EMPTY_MSG));
     assertThat(
-            forwarder
-                .addToProjectList(projectName)
-                .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+            forwarder.addToProjectList(projectName).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result())
         .isFalse();
   }
 
@@ -484,10 +463,7 @@
     when(httpSessionMock.post(eq(buildProjectListCacheEndpoint(projectName)), any(), any()))
         .thenThrow(IOException.class);
     assertThat(
-            forwarder
-                .addToProjectList(projectName)
-                .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+            forwarder.addToProjectList(projectName).get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS).result())
         .isFalse();
   }
 
@@ -500,7 +476,7 @@
             forwarder
                 .removeFromProjectList(projectName)
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -513,7 +489,7 @@
             forwarder
                 .removeFromProjectList(projectName)
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -526,7 +502,7 @@
             forwarder
                 .removeFromProjectList(projectName)
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -545,7 +521,7 @@
             forwarder
                 .evict(Constants.PROJECT_LIST, new Object())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -560,7 +536,7 @@
             forwarder
                 .evict(Constants.PROJECT_LIST, new Object())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isTrue();
   }
 
@@ -574,7 +550,7 @@
             forwarder
                 .evict(Constants.PROJECT_LIST, new Object())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 
@@ -589,7 +565,7 @@
             forwarder
                 .evict(Constants.PROJECT_LIST, new Object())
                 .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS)
-                .getResult())
+                .result())
         .isFalse();
   }
 }