Active/active setup using zookeeper-refdb plugin and zookeeper service

Change-Id: I3e23c07239e4e034b45827a79120d33283cf045c
(cherry picked from commit 4e53ee22a04401e24de3613bd59dd07cd9430504)
diff --git a/src/test/docker/docker-compose.yaml b/src/test/docker/docker-compose.yaml
index 11f4861..4e8a457 100644
--- a/src/test/docker/docker-compose.yaml
+++ b/src/test/docker/docker-compose.yaml
@@ -18,28 +18,43 @@
     ports:
       - 2049:2049
     networks:
-      nfs-server-bridge:
+      gerrit-net:
         ipv4_address: 192.168.1.5
     volumes:
       - nfs-server-volume:/var/gerrit
 
+  zookeeper-refdb:
+    image: zookeeper
+    ports:
+      - "2181:2181"
+    networks:
+      - gerrit-net
+    healthcheck:
+      test: ["CMD-SHELL", "./bin/zkServer.sh", "status"] # required, otherwise the gerrit service will fail to start with a "connection refused" error
+      interval: 1s
+      timeout: 1m
+      retries: 10
+
   gerrit-01:
     build: gerrit
     privileged: true
     depends_on:
       nfs-server:
         condition: service_healthy
+      zookeeper-refdb:
+        condition: service_healthy
     ports:
       - "8081:8080"
       - "29411:29418"
     networks:
-      nfs-server-bridge: null
+      - gerrit-net
     volumes:
       - /dev/urandom:/dev/random
       - shareddir:/var/gerrit/shareddir
       - ./etc/jgit.config:/var/gerrit/etc/jgit.config.orig
       - ./etc/gerrit.config:/var/gerrit/etc/gerrit.config.orig
       - ./etc/high-availability.gerrit-01.config:/var/gerrit/etc/high-availability.config.orig
+      - ./etc/zookeeper-refdb.config:/var/gerrit/etc/zookeeper-refdb.config.orig
     environment:
       - HOSTNAME=localhost
 
@@ -50,7 +65,7 @@
       - "8082:8080"
       - "29412:29418"
     networks:
-      nfs-server-bridge: null
+      - gerrit-net
     depends_on:
       gerrit-01:
         condition: service_started
@@ -62,6 +77,7 @@
       - ./etc/jgit.config:/var/gerrit/etc/jgit.config.orig
       - ./etc/gerrit.config:/var/gerrit/etc/gerrit.config.orig
       - ./etc/high-availability.gerrit-02.config:/var/gerrit/etc/high-availability.config.orig
+      - ./etc/zookeeper-refdb.config:/var/gerrit/etc/zookeeper-refdb.config.orig
     environment:
       - HOSTNAME=localhost
       - WAIT_FOR=gerrit-01:8080
@@ -71,10 +87,10 @@
     ports:
       - "80:80"
       - "29418:29418"
-    networks:
-      nfs-server-bridge: null
     volumes:
       - syslog-sidecar:/syslog-sidecar
+    volumes_from:
+      - syslog-sidecar
     depends_on:
       - syslog-sidecar
       - gerrit-01
@@ -83,10 +99,10 @@
   syslog-sidecar:
     build: docker-syslog-ng-stdout
     networks:
-      nfs-server-bridge: null
+      - gerrit-net
 
 networks:
-  nfs-server-bridge:
+  gerrit-net:
     ipam:
       driver: default
       config:
diff --git a/src/test/docker/etc/gerrit.config b/src/test/docker/etc/gerrit.config
index 90a4057..2a08db6 100644
--- a/src/test/docker/etc/gerrit.config
+++ b/src/test/docker/etc/gerrit.config
@@ -2,6 +2,8 @@
 	basePath = git
 	canonicalWebUrl = http://gerrit:8080/
 	serverId = f7696647-8efd-41b1-bd60-d321bc071ea9
+	installDbModule = com.ericsson.gerrit.plugins.highavailability.ValidationModule
+	installModule = com.gerritforge.gerrit.globalrefdb.validation.LibModule
 [index]
 	type = LUCENE
 [auth]
diff --git a/src/test/docker/etc/high-availability.gerrit-01.config b/src/test/docker/etc/high-availability.gerrit-01.config
index a21f05c..d8619c1 100644
--- a/src/test/docker/etc/high-availability.gerrit-01.config
+++ b/src/test/docker/etc/high-availability.gerrit-01.config
@@ -6,3 +6,6 @@
 
 [peerInfo "static"]
   url = http://gerrit-02:8080
+
+[ref-database]
+  enabled = true
diff --git a/src/test/docker/etc/high-availability.gerrit-02.config b/src/test/docker/etc/high-availability.gerrit-02.config
index d05c7ec..54cc1f2 100644
--- a/src/test/docker/etc/high-availability.gerrit-02.config
+++ b/src/test/docker/etc/high-availability.gerrit-02.config
@@ -5,4 +5,7 @@
   strategy = static
 
 [peerInfo "static"]
-  url = http://gerrit-01:8080
\ No newline at end of file
+  url = http://gerrit-01:8080
+
+[ref-database]
+  enabled = true
diff --git a/src/test/docker/etc/zookeeper-refdb.config b/src/test/docker/etc/zookeeper-refdb.config
new file mode 100644
index 0000000..d3cdb80
--- /dev/null
+++ b/src/test/docker/etc/zookeeper-refdb.config
@@ -0,0 +1,4 @@
+[ref-database "zookeeper"]
+  connectString = "zookeeper-refdb:2181"
+  rootNode = "gerrit/HA"
+  transactionLockTimeoutMs = 1000
diff --git a/src/test/docker/gerrit/Dockerfile b/src/test/docker/gerrit/Dockerfile
index ea07b5b..91e48a7 100644
--- a/src/test/docker/gerrit/Dockerfile
+++ b/src/test/docker/gerrit/Dockerfile
@@ -32,10 +32,18 @@
 ADD --chown=gerrit \
     "https://gerrit-ci.gerritforge.com/job/plugin-high-availability-bazel-stable-$GERRIT_VERSION/lastSuccessfulBuild/artifact/bazel-bin/plugins/high-availability/high-availability.jar" \
     /var/gerrit/plugins/high-availability.jar
+
+RUN mkdir -p /var/gerrit/lib && \
+    ln -sf /var/gerrit/plugins/high-availability.jar /var/gerrit/lib/high-availability.jar
+
 ADD --chown=gerrit \
     "https://gerrit-ci.gerritforge.com/job/module-global-refdb-bazel-stable-$GERRIT_VERSION/lastSuccessfulBuild/artifact/bazel-bin/plugins/global-refdb/global-refdb.jar" \
     /var/gerrit/lib/global-refdb.jar
 
+ADD --chown=gerrit \
+    "https://gerrit-ci.gerritforge.com/job/plugin-zookeeper-refdb-bazel-stable-$GERRIT_VERSION/lastSuccessfulBuild/artifact/bazel-bin/plugins/zookeeper-refdb/zookeeper-refdb.jar" \
+    /var/gerrit/plugins/zookeeper-refdb.jar
+
 ADD --chown=gerrit:gerrit ./wait-for-it.sh /bin
 
 # Change user
diff --git a/src/test/docker/gerrit/entrypoint.sh b/src/test/docker/gerrit/entrypoint.sh
index 3a98d92..77d9eac 100755
--- a/src/test/docker/gerrit/entrypoint.sh
+++ b/src/test/docker/gerrit/entrypoint.sh
@@ -9,6 +9,7 @@
 sudo -u gerrit cp /var/gerrit/etc/jgit.config.orig /var/gerrit/etc/jgit.config
 sudo -u gerrit cp /var/gerrit/etc/gerrit.config.orig /var/gerrit/etc/gerrit.config
 sudo -u gerrit cp /var/gerrit/etc/high-availability.config.orig /var/gerrit/etc/high-availability.config
+sudo -u gerrit cp /var/gerrit/etc/zookeeper-refdb.config.orig /var/gerrit/etc/zookeeper-refdb.config
 
 
 echo "Mount NFS ..."
diff --git a/src/test/docker/haproxy/haproxy.cfg b/src/test/docker/haproxy/haproxy.cfg
index e86cdce..07a6746 100644
--- a/src/test/docker/haproxy/haproxy.cfg
+++ b/src/test/docker/haproxy/haproxy.cfg
@@ -45,7 +45,7 @@
     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 backup
+    server gerrit-ssh_02 gerrit-02:29418 check port 8080 inter 10s fall 3 rise 2
 
 backend gerrit_http_nodes
     mode http
@@ -55,7 +55,7 @@
     option httpchk GET /config/server/version HTTP/1.0
     http-check expect status 200
     server gerrit_01 gerrit-01:8080 check
-    server gerrit_02 gerrit-02:8080 check backup
+    server gerrit_02 gerrit-02:8080 check
 
 backend gerrit_http_nodes_balanced
     mode http