diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java index 1b1b7b5250..5572db2959 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java @@ -491,7 +491,12 @@ public class MergeOp implements AutoCloseable { } return null; }, - RetryHelper.options().listener(retryTracker).build()); + RetryHelper.options() + .listener(retryTracker) + // Up to the entire submit operation is retried, including possibly many projects. + // Multiply the timeout by the number of projects we're actually attempting to submit. + .timeout(retryHelper.getDefaultTimeout().multipliedBy(cs.projects().size())) + .build()); if (projects > 1) { topicMetrics.topicSubmissionsCompleted.increment(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/update/RetryHelper.java b/gerrit-server/src/main/java/com/google/gerrit/server/update/RetryHelper.java index 8a1674a6cd..d8a5278e6e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/update/RetryHelper.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/update/RetryHelper.java @@ -108,6 +108,10 @@ public class RetryHelper { WaitStrategies.randomWait(50, MILLISECONDS)); } + public Duration getDefaultTimeout() { + return defaultTimeout; + } + public T execute(Action action) throws RestApiException, UpdateException { return execute(action, defaults()); }