Merge changes I475d55b3,I2bc7b3f7,Ibc04347f,I17368493,I642953e4, ...

* changes:
  Use Java record for Forwarder.Result
  Add metric displaying the number of retries required to forward event
  Add metrics to measure time of processing forwarded event
  Add metric reporting the success/failure of event processing
  Add metrics measuring time between event creation and response
  Use millisecond accuracy for IndexEvent.eventCreatedOn
  Add metric about failure/success count of forwarding request
  Use enum for Command.TYPE
diff --git a/BUILD b/BUILD
index 4beff6e..10896bf 100644
--- a/BUILD
+++ b/BUILD
@@ -15,6 +15,7 @@
         "Gerrit-Module: com.ericsson.gerrit.plugins.highavailability.Module",
         "Gerrit-HttpModule: com.ericsson.gerrit.plugins.highavailability.HttpModule",
         "Gerrit-InitStep: com.ericsson.gerrit.plugins.highavailability.Setup",
+        "Gerrit-ReloadMode: restart",
         "Implementation-Title: high-availability plugin",
         "Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/high-availability",
     ],
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/ExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/ExecutorProvider.java
index d48df46..0d25d92 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/ExecutorProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/ExecutorProvider.java
@@ -35,7 +35,7 @@
       WorkQueue workQueue, int threadPoolSize, String threadNamePrefix, long scheduleDelayMsec) {
     executor =
         new ScheduledWithDelayExecutorService(
-            workQueue.createQueue(threadPoolSize, threadNamePrefix), scheduleDelayMsec);
+            workQueue.createQueue(threadPoolSize, threadNamePrefix, true), scheduleDelayMsec);
   }
 
   @Override
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexModule.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexModule.java
index 1db3721..c1b0ef3 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexModule.java
@@ -20,13 +20,13 @@
 import com.google.gerrit.extensions.events.GroupIndexedListener;
 import com.google.gerrit.extensions.events.ProjectIndexedListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.inject.AbstractModule;
+import com.google.gerrit.lifecycle.LifecycleModule;
 import com.google.inject.Scopes;
 import com.google.inject.TypeLiteral;
 import com.google.inject.assistedinject.FactoryModuleBuilder;
 import dev.failsafe.FailsafeExecutor;
 
-public class IndexModule extends AbstractModule {
+public class IndexModule extends LifecycleModule {
 
   @Override
   protected void configure() {
@@ -38,6 +38,7 @@
         .annotatedWith(ForwardedIndexExecutor.class)
         .to(ForwardedIndexExecutorProvider.class)
         .in(Scopes.SINGLETON);
+    listener().to(ForwardedIndexExecutorProvider.class);
 
     bind(new TypeLiteral<FailsafeExecutor<Boolean>>() {})
         .annotatedWith(ForwardedBatchIndexExecutor.class)
@@ -47,7 +48,7 @@
         .annotatedWith(ForwardedBatchIndexExecutor.class)
         .to(ForwardedBatchIndexExecutorProvider.class)
         .in(Scopes.SINGLETON);
-
+    listener().to(ForwardedBatchIndexExecutorProvider.class);
     DynamicSet.bind(binder(), ChangeIndexedListener.class)
         .to(IndexEventHandler.class)
         .in(Scopes.SINGLETON);
diff --git a/src/test/docker/gerrit/Dockerfile b/src/test/docker/gerrit/Dockerfile
index 02c3af1..d18e060 100644
--- a/src/test/docker/gerrit/Dockerfile
+++ b/src/test/docker/gerrit/Dockerfile
@@ -11,7 +11,7 @@
     nfs-utils \
     && yum -y clean all
 
-ENV GERRIT_BRANCH master
+ENV GERRIT_BRANCH stable-3.13
 
 # Add gerrit user
 RUN adduser -p -m --uid 1000 gerrit --home-dir /home/gerrit
@@ -42,13 +42,17 @@
     /var/gerrit/lib/global-refdb.jar
 
 ADD --chown=gerrit:gerrit \
-    "https://gerrit-ci.gerritforge.com/job/plugin-zookeeper-refdb-bazel-$GERRIT_BRANCH/lastSuccessfulBuild/artifact/bazel-bin/plugins/zookeeper-refdb/zookeeper-refdb.jar" \
+    "https://gerrit-ci.gerritforge.com/job/plugin-zookeeper-refdb-gh-bazel-$GERRIT_BRANCH/lastSuccessfulBuild/artifact/bazel-bin/plugins/zookeeper-refdb/zookeeper-refdb.jar" \
     /var/gerrit/plugins/zookeeper-refdb.jar
 
 ADD --chown=gerrit:gerrit \
     "https://gerrit-ci.gerritforge.com/view/Plugins-master/job/module-index-elasticsearch-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/index-elasticsearch/index-elasticsearch.jar" \
     /var/gerrit_plugins/index-elasticsearch.jar
 
+ADD --chown=gerrit:gerrit \
+    "https://gerrit-ci.gerritforge.com/job/plugin-healthcheck-bazel-$GERRIT_BRANCH/lastSuccessfulBuild/artifact/bazel-bin/plugins/healthcheck/healthcheck.jar" \
+    /var/gerrit/plugins/healthcheck.jar
+
 ADD --chown=gerrit:gerrit ./wait-for-it.sh /bin
 
 # Change user
diff --git a/src/test/docker/haproxy/haproxy.cfg b/src/test/docker/haproxy/haproxy.cfg
index 07a6746..a068802 100644
--- a/src/test/docker/haproxy/haproxy.cfg
+++ b/src/test/docker/haproxy/haproxy.cfg
@@ -44,15 +44,15 @@
     balance source
     timeout connect 10s
     timeout server 5m
-    server gerrit_ssh_01 gerrit-01:29418 check port 8080 inter 10s fall 3 rise 2
-    server gerrit-ssh_02 gerrit-02:29418 check port 8080 inter 10s fall 3 rise 2
+    server gerrit_ssh_01 gerrit-01:29418 check port 8080 inter 1s fall 3 rise 2
+    server gerrit-ssh_02 gerrit-02:29418 check port 8080 inter 1s fall 3 rise 2
 
 backend gerrit_http_nodes
     mode http
     balance source
     option forwardfor
-    default-server inter 10s fall 3 rise 2
-    option httpchk GET /config/server/version HTTP/1.0
+    default-server inter 1s fall 3 rise 2
+    option httpchk GET /config/server/healthcheck~status HTTP/1.0
     http-check expect status 200
     server gerrit_01 gerrit-01:8080 check
     server gerrit_02 gerrit-02:8080 check
@@ -61,8 +61,8 @@
     mode http
     balance source
     option forwardfor
-    default-server inter 10s fall 3 rise 2
-    option httpchk GET /config/server/version HTTP/1.0
+    default-server inter 1s fall 3 rise 2
+    option httpchk GET /config/server/healthcheck~status HTTP/1.0
     http-check expect status 200
     server gerrit_01 gerrit-01:8080 check
     server gerrit_02 gerrit-02:8080 check