Merge branch 'stable-2.11' into stable-2.12

* stable-2.11:
  Destination: parse replication delay and retry as time units
  Remove obsolete remote.NAME.timeout from config documentation

Change-Id: I57016ead4f30def6153b66dee41922cddad36804
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
index 5e04bb9..ee8d08d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
@@ -29,6 +29,7 @@
 import com.google.gerrit.server.account.GroupBackend;
 import com.google.gerrit.server.account.GroupBackends;
 import com.google.gerrit.server.account.ListGroupMembership;
+import com.google.gerrit.server.config.ConfigUtil;
 import com.google.gerrit.server.config.RequestScopedReviewDbProvider;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.PerThreadRequestScope;
@@ -107,8 +108,10 @@
     gitManager = gitRepositoryManager;
     this.stateLog = stateLog;
 
-    delay = Math.max(0, getInt(rc, cfg, "replicationdelay", 15));
-    retryDelay = Math.max(0, getInt(rc, cfg, "replicationretry", 1));
+    delay = Math.max(0,
+        getTimeUnit(rc, cfg, "replicationdelay", 15, TimeUnit.SECONDS));
+    retryDelay = Math.max(0,
+        getTimeUnit(rc, cfg, "replicationretry", 1, TimeUnit.MINUTES));
     lockErrorMaxRetries = cfg.getInt("replication", "lockErrorMaxRetries", 0);
     adminUrls = cfg.getStringList("remote", rc.getName(), "adminUrl");
     urls = cfg.getStringList("remote", rc.getName(), "url");
@@ -204,6 +207,12 @@
     return cfg.getInt("remote", rc.getName(), name, defValue);
   }
 
+  private static int getTimeUnit(
+      RemoteConfig rc, Config cfg, String name, int defValue, TimeUnit unit) {
+    return (int)ConfigUtil.getTimeUnit(
+        cfg, "remote", rc.getName(), name, defValue, unit);
+  }
+
   private boolean isVisible(final Project.NameKey project,
       ReplicationState... states) {
     try {
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index bea2d92..54251ce 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -182,31 +182,18 @@
 
 [2]: #example_file
 
-remote.NAME.timeout
-:	Number of seconds to wait for a network read or write to
-	complete before giving up and declaring the remote side is not
-	responding.  If 0, there is no timeout, and the push client
-	waits indefinitely.
-
-	A timeout should be large enough to mostly transfer the
-	objects to the other side.  1 second may be too small for
-	larger projects, especially over a WAN link, while 10-30
-	seconds is a much more reasonable timeout value.
-
-	Defaults to 0 seconds, wait indefinitely.
-
 remote.NAME.replicationDelay
-:	Number of seconds to wait before scheduling a remote push
-	operation.  Setting the delay to 0 effectively disables the
-	delay, causing the push to start as soon as possible.
+:	Time to wait before scheduling a remote push operation. Setting
+	the delay to 0 effectively disables the delay, causing the push
+	to start as soon as possible.
 
 	This is a Gerrit specific extension to the Git remote block.
 
 	By default, 15 seconds.
 
 remote.NAME.replicationRetry
-:	Number of minutes to wait before scheduling a remote push
-	operation previously failed due to an offline remote server.
+:	Time to wait before scheduling a remote push operation previously
+	failed due to an offline remote server.
 
 	If a remote push operation fails because a remote server was
 	offline, all push operations to the same destination URL are