Merge branch 'stable-2.16'

* stable-2.16:
  Disable the shared ref-db by configuration

Change-Id: I80e50a489aaa8e9b7b01974dad45d80d4d1f3dc9
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java
index 58a11e9..4e353c4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java
@@ -393,18 +393,8 @@
     private final boolean synchronize;
 
     private Forwarding(Supplier<Config> cfg, String section) {
-      synchronize = getBoolean(cfg, section, SYNCHRONIZE_KEY, DEFAULT_SYNCHRONIZE);
-    }
-
-    private static boolean getBoolean(
-        Supplier<Config> cfg, String section, String name, boolean defaultValue) {
-      try {
-        return cfg.get().getBoolean(section, name, defaultValue);
-      } catch (IllegalArgumentException e) {
-        log.error("invalid value for {}; using default value {}", name, defaultValue);
-        log.debug("Failed to retrieve boolean value: {}", e.getMessage(), e);
-        return defaultValue;
-      }
+      synchronize =
+          Configuration.getBoolean(cfg, section, null, SYNCHRONIZE_KEY, DEFAULT_SYNCHRONIZE);
     }
 
     public boolean synchronize() {
@@ -524,6 +514,7 @@
     private final int casBaseSleepTimeMs;
     private final int casMaxSleepTimeMs;
     private final int casMaxRetries;
+    private final boolean enabled;
 
     private CuratorFramework build;
 
@@ -585,6 +576,8 @@
               DEFAULT_CAS_RETRY_POLICY_MAX_RETRIES);
 
       checkArgument(StringUtils.isNotEmpty(connectionString), "zookeeper.%s contains no servers");
+
+      enabled = Configuration.getBoolean(cfg, SECTION, SUBSECTION, ENABLE_KEY, true);
     }
 
     public CuratorFramework buildCurator() {
@@ -608,5 +601,20 @@
       return new BoundedExponentialBackoffRetry(
           casBaseSleepTimeMs, casMaxSleepTimeMs, casMaxRetries);
     }
+
+    public boolean isEnabled() {
+      return enabled;
+    }
+  }
+
+  static boolean getBoolean(
+      Supplier<Config> cfg, String section, String subsection, String name, boolean defaultValue) {
+    try {
+      return cfg.get().getBoolean(section, subsection, name, defaultValue);
+    } catch (IllegalArgumentException e) {
+      log.error("invalid value for {}; using default value {}", name, defaultValue);
+      log.debug("Failed to retrieve boolean value: {}", e.getMessage(), e);
+      return defaultValue;
+    }
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/Module.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/Module.java
index 43fab21..adb74c8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/Module.java
@@ -99,7 +99,9 @@
       install(new BrokerForwarderModule(config.kafkaPublisher()));
     }
 
-    install(new ValidationModule(config, disableGitRepositoryValidation));
+    install(
+        new ValidationModule(
+            config, disableGitRepositoryValidation || !config.getZookeeperConfig().isEnabled()));
     bind(Gson.class)
         .annotatedWith(BrokerGson.class)
         .toProvider(GsonProvider.class)
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 699ecff..168cd74 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -181,6 +181,10 @@
 
     Defaults: 1000
 
+```ref-database.enabled```
+:   Enable the use of a shared ref-database
+    Defaults: true
+
 ```ref-database.zookeeper.connectString```
 :   Connection string to  zookeeper