Merge branch 'stable-3.10' into stable-3.11

* stable-3.10:
  Use a proper NFSv4 client for mounting the shared git
  Remove LockWrapper.Factory binding
  Optimize IndexEvent retries on the same change

Change-Id: Iaf0960a595d4cdc0ba532c0b39fdc6646f3d59b0
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/ValidationModule.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/ValidationModule.java
index d0699b1..9229d01 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/ValidationModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/ValidationModule.java
@@ -15,7 +15,6 @@
 package com.ericsson.gerrit.plugins.highavailability;
 
 import com.gerritforge.gerrit.globalrefdb.validation.BatchRefUpdateValidator;
-import com.gerritforge.gerrit.globalrefdb.validation.LockWrapper;
 import com.gerritforge.gerrit.globalrefdb.validation.Log4jSharedRefLogger;
 import com.gerritforge.gerrit.globalrefdb.validation.RefUpdateValidator;
 import com.gerritforge.gerrit.globalrefdb.validation.SharedRefDatabaseWrapper;
@@ -58,7 +57,6 @@
 
     bind(SharedRefDatabaseWrapper.class).in(Scopes.SINGLETON);
     bind(SharedRefLogger.class).to(Log4jSharedRefLogger.class);
-    factory(LockWrapper.Factory.class);
 
     bind(GitRepositoryManager.class).to(SharedRefDbGitRepositoryManager.class);
 
diff --git a/src/test/docker/docker-compose.yaml b/src/test/docker/docker-compose.yaml
index 2e7981d..d2b971f 100644
--- a/src/test/docker/docker-compose.yaml
+++ b/src/test/docker/docker-compose.yaml
@@ -6,6 +6,8 @@
     container_name: nfs-server
     environment:
       NFS_LOG_LEVEL: DEBUG
+      NFS_DISABLE_VERSION_3: true
+      NFS_VERSION: 4.2
     hostname: nfs-server
     healthcheck:
       test: ["CMD-SHELL", "sleep 10"] # required, otherwise the gerrit service will fail to start with a "connection refused" error
@@ -47,8 +49,8 @@
       - gerrit-net
     volumes:
       - /dev/urandom:/dev/random
-      - git-volume:/var/gerrit/git
       - 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
@@ -70,8 +72,8 @@
         condition: service_healthy
     volumes:
       - /dev/urandom:/dev/random
-      - git-volume:/var/gerrit/git
       - 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-02.config:/var/gerrit/etc/high-availability.config.orig
       - ./etc/zookeeper-refdb.config:/var/gerrit/etc/zookeeper-refdb.config.orig
@@ -109,9 +111,3 @@
   shareddir:
   nfs-server-volume:
   syslog-sidecar:
-  git-volume:
-    driver: "local"
-    driver_opts:
-      type: nfs
-      o: "addr=192.168.1.5,rw"
-      device: ":/var/gerrit/git"
diff --git a/src/test/docker/etc/jgit.config b/src/test/docker/etc/jgit.config
new file mode 100644
index 0000000..6585556
--- /dev/null
+++ b/src/test/docker/etc/jgit.config
@@ -0,0 +1,5 @@
+[core]
+    supportsAtomicFileCreation = false
+    trustFolderStat = false
+    trustLooseRefStat = after_open
+    trustPackedRefsStat = after_open
diff --git a/src/test/docker/gerrit/Dockerfile b/src/test/docker/gerrit/Dockerfile
index 641028d..6e0d639 100644
--- a/src/test/docker/gerrit/Dockerfile
+++ b/src/test/docker/gerrit/Dockerfile
@@ -8,6 +8,7 @@
     sudo \
     passwd \
     gettext \
+    nfs-utils \
     && yum -y clean all
 
 ENV GERRIT_BRANCH stable-3.11
diff --git a/src/test/docker/gerrit/entrypoint.sh b/src/test/docker/gerrit/entrypoint.sh
index e6181da..aaed80c 100755
--- a/src/test/docker/gerrit/entrypoint.sh
+++ b/src/test/docker/gerrit/entrypoint.sh
@@ -6,6 +6,7 @@
 fi
 
 chown -R gerrit /var/gerrit/etc
+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
@@ -18,6 +19,10 @@
   ln -sf /var/gerrit_plugins/index-elasticsearch.jar /var/gerrit/plugins/index-elasticsearch.jar
 fi
 
+echo "Mount NFS ..."
+mkdir /var/gerrit/git && chown gerrit:gerrit /var/gerrit/git
+mount -t nfs4 -o actimeo=120 nfs-server:/git /var/gerrit/git
+
 echo "Init gerrit..."
 sudo -u gerrit java -jar /tmp/gerrit.war init -d /var/gerrit --batch --install-all-plugins
 chown -R gerrit: /var/gerrit/shareddir
diff --git a/src/test/docker/nfs/Dockerfile b/src/test/docker/nfs/Dockerfile
index 19744f3..e4a8adc 100644
--- a/src/test/docker/nfs/Dockerfile
+++ b/src/test/docker/nfs/Dockerfile
@@ -6,8 +6,8 @@
 # server and the client, hence we are creating it explicitly in both.
 RUN adduser --disabled-password --gecos "" --uid 1000 gerrit
 
-# /var/gerrit/git is the shared directory
-RUN mkdir --parents /var/gerrit/git
-
 RUN chown gerrit:gerrit /var/lib/nfs
-RUN chown gerrit:gerrit /var/gerrit/git
\ No newline at end of file
+
+COPY gerrit-git-mount-entrypoint.sh /usr/local/bin
+
+ENTRYPOINT /usr/local/bin/gerrit-git-mount-entrypoint.sh
diff --git a/src/test/docker/nfs/exports.txt b/src/test/docker/nfs/exports.txt
index c31d586..3e56b08 100644
--- a/src/test/docker/nfs/exports.txt
+++ b/src/test/docker/nfs/exports.txt
@@ -1 +1,2 @@
+/var/gerrit/ 192.168.1.0/24(rw,fsid=0,no_subtree_check,insecure)
 /var/gerrit/git 192.168.1.0/24(rw,no_subtree_check,insecure)
\ No newline at end of file
diff --git a/src/test/docker/nfs/gerrit-git-mount-entrypoint.sh b/src/test/docker/nfs/gerrit-git-mount-entrypoint.sh
new file mode 100755
index 0000000..ca7afcc
--- /dev/null
+++ b/src/test/docker/nfs/gerrit-git-mount-entrypoint.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+MOUNT_POINT=/var/gerrit/git
+
+echo "Creating mountpoint $MOUNT_POINT"
+
+mkdir --parents $MOUNT_POINT
+chown gerrit:gerrit $MOUNT_POINT
+
+echo "ls -al $MOUNT_POINT ..."
+ls -al $MOUNT_POINT
+
+echo "Running NFS server ... "
+echo "======================="
+/usr/local/bin/entrypoint.sh
\ No newline at end of file