summaryrefslogtreecommitdiffstats
path: root/java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java')
-rw-r--r--java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java35
1 files changed, 29 insertions, 6 deletions
diff --git a/java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java b/java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java
index 9efb976a65..60b0c5b01a 100644
--- a/java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java
+++ b/java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java
@@ -30,6 +30,7 @@ import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.permissions.ChangePermission;
import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.permissions.PermissionBackendException;
@@ -53,6 +54,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.revwalk.RevCommit;
@@ -65,6 +67,8 @@ import org.eclipse.jgit.revwalk.RevSort;
public class LocalMergeSuperSetComputation implements MergeSuperSetComputation {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+ public static final int MAX_SUBMITTABLE_CHANGES_AT_ONCE_DEFAULT = 1024;
+
public static class Module extends AbstractModule {
@Override
protected void configure() {
@@ -90,17 +94,22 @@ public class LocalMergeSuperSetComputation implements MergeSuperSetComputation {
private final Map<QueryKey, List<ChangeData>> queryCache;
private final Map<Branch.NameKey, Optional<RevCommit>> heads;
private final ProjectCache projectCache;
+ private final int maxSubmittableChangesAtOnce;
@Inject
LocalMergeSuperSetComputation(
PermissionBackend permissionBackend,
Provider<InternalChangeQuery> queryProvider,
- ProjectCache projectCache) {
+ ProjectCache projectCache,
+ @GerritServerConfig Config gerritConfig) {
this.projectCache = projectCache;
this.permissionBackend = permissionBackend;
this.queryProvider = queryProvider;
this.queryCache = new HashMap<>();
this.heads = new HashMap<>();
+ this.maxSubmittableChangesAtOnce =
+ gerritConfig.getInt(
+ "change", "maxSubmittableAtOnce", MAX_SUBMITTABLE_CHANGES_AT_ONCE_DEFAULT);
}
@Override
@@ -146,10 +155,12 @@ public class LocalMergeSuperSetComputation implements MergeSuperSetComputation {
}
Set<String> visibleHashes =
- walkChangesByHashes(visibleCommits, Collections.emptySet(), or, b);
+ walkChangesByHashes(
+ visibleCommits, Collections.emptySet(), or, b, maxSubmittableChangesAtOnce);
Iterables.addAll(visibleChanges, byCommitsOnBranchNotMerged(or, db, b, visibleHashes));
- Set<String> nonVisibleHashes = walkChangesByHashes(nonVisibleCommits, visibleHashes, or, b);
+ Set<String> nonVisibleHashes =
+ walkChangesByHashes(nonVisibleCommits, visibleHashes, or, b, maxSubmittableChangesAtOnce);
Iterables.addAll(nonVisibleChanges, byCommitsOnBranchNotMerged(or, db, b, nonVisibleHashes));
}
@@ -229,7 +240,11 @@ public class LocalMergeSuperSetComputation implements MergeSuperSetComputation {
}
private Set<String> walkChangesByHashes(
- Collection<RevCommit> sourceCommits, Set<String> ignoreHashes, OpenRepo or, Branch.NameKey b)
+ Collection<RevCommit> sourceCommits,
+ Set<String> ignoreHashes,
+ OpenRepo or,
+ Branch.NameKey b,
+ int limit)
throws IOException {
Set<String> destHashes = new HashSet<>();
or.rw.reset();
@@ -239,7 +254,11 @@ public class LocalMergeSuperSetComputation implements MergeSuperSetComputation {
if (ignoreHashes.contains(name)) {
continue;
}
- destHashes.add(name);
+ if (destHashes.size() < limit) {
+ destHashes.add(name);
+ } else {
+ break;
+ }
or.rw.markStart(c);
}
for (RevCommit c : or.rw) {
@@ -247,7 +266,11 @@ public class LocalMergeSuperSetComputation implements MergeSuperSetComputation {
if (ignoreHashes.contains(name)) {
continue;
}
- destHashes.add(name);
+ if (destHashes.size() < limit) {
+ destHashes.add(name);
+ } else {
+ break;
+ }
}
return destHashes;