TransferConfig: Move getEffectiveMaxObjectSizeLimit to ProjectState
This is a preparatory change towards implementing support for
inheriting the max object size limit from parent projects.
Change-Id: Ib92f064fe9d71a04555d94b770faf351cb42c12f
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
index 7ee855d..cd97464 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
@@ -446,8 +446,7 @@
rp.setAllowNonFastForwards(true);
rp.setRefLogIdent(user.newRefLogIdent());
rp.setTimeout(transferConfig.getTimeout());
- rp.setMaxObjectSizeLimit(
- transferConfig.getEffectiveMaxObjectSizeLimit(projectControl.getProjectState()));
+ rp.setMaxObjectSizeLimit(projectControl.getProjectState().getEffectiveMaxObjectSizeLimit());
rp.setCheckReceivedObjects(ps.getConfig().getCheckReceivedObjects());
rp.setRefFilter(
new RefFilter() {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/TransferConfig.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/TransferConfig.java
index 4ac9071..28432f5 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/TransferConfig.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/TransferConfig.java
@@ -16,7 +16,6 @@
import com.google.gerrit.server.config.ConfigUtil;
import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.project.ProjectState;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.concurrent.TimeUnit;
@@ -66,14 +65,4 @@
public String getFormattedMaxObjectSizeLimit() {
return maxObjectSizeLimitFormatted;
}
-
- public long getEffectiveMaxObjectSizeLimit(ProjectState p) {
- long global = getMaxObjectSizeLimit();
- long local = p.getMaxObjectSizeLimit();
- if (global > 0 && local > 0) {
- return Math.min(global, local);
- }
- // zero means "no limit", in this case the max is more limiting
- return Math.max(global, local);
- }
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ConfigInfoImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ConfigInfoImpl.java
index b80442b..0ddb847 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ConfigInfoImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ConfigInfoImpl.java
@@ -126,8 +126,7 @@
ProjectState projectState, TransferConfig transferConfig, Project p) {
MaxObjectSizeLimitInfo info = new MaxObjectSizeLimitInfo();
info.value =
- transferConfig.getEffectiveMaxObjectSizeLimit(projectState)
- == transferConfig.getMaxObjectSizeLimit()
+ projectState.getEffectiveMaxObjectSizeLimit() == transferConfig.getMaxObjectSizeLimit()
? transferConfig.getFormattedMaxObjectSizeLimit()
: p.getMaxObjectSizeLimit();
info.configuredValue = p.getMaxObjectSizeLimit();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java
index 95a89a3..681515b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java
@@ -46,6 +46,7 @@
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.ProjectConfig;
import com.google.gerrit.server.git.ProjectLevelConfig;
+import com.google.gerrit.server.git.TransferConfig;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import com.googlecode.prolog_cafe.exceptions.CompileException;
@@ -93,6 +94,7 @@
private final ProjectConfig config;
private final Map<String, ProjectLevelConfig> configs;
private final Set<AccountGroup.UUID> localOwners;
+ private final long globalMaxObjectSizeLimit;
/** Prolog rule state. */
private volatile PrologMachineCopy rulesMachine;
@@ -121,6 +123,7 @@
RulesCache rulesCache,
List<CommentLinkInfo> commentLinks,
CapabilityCollection.Factory capabilityFactory,
+ TransferConfig transferConfig,
@Assisted ProjectConfig config) {
this.sitePaths = sitePaths;
this.projectCache = projectCache;
@@ -138,6 +141,7 @@
isAllProjects
? capabilityFactory.create(config.getAccessSection(AccessSection.GLOBAL_CAPABILITIES))
: null;
+ this.globalMaxObjectSizeLimit = transferConfig.getMaxObjectSizeLimit();
if (isAllProjects && !Permission.canBeOnAllProjects(AccessSection.ALL, Permission.OWNER)) {
localOwners = Collections.emptySet();
@@ -245,6 +249,15 @@
return config.getMaxObjectSizeLimit();
}
+ public long getEffectiveMaxObjectSizeLimit() {
+ long local = getMaxObjectSizeLimit();
+ if (globalMaxObjectSizeLimit > 0 && local > 0) {
+ return Math.min(globalMaxObjectSizeLimit, local);
+ }
+ // zero means "no limit", in this case the max is more limiting
+ return Math.max(globalMaxObjectSizeLimit, local);
+ }
+
/** Get the sections that pertain only to this project. */
List<SectionMatcher> getLocalAccessSections() {
List<SectionMatcher> sm = localAccessSections;
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java
index 00141a9..4f2284c 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java
@@ -57,6 +57,7 @@
import com.google.gerrit.server.config.AllUsersNameProvider;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.git.ProjectConfig;
+import com.google.gerrit.server.git.TransferConfig;
import com.google.gerrit.server.index.SingleVersionModule.SingleVersionListener;
import com.google.gerrit.server.query.change.InternalChangeQuery;
import com.google.gerrit.server.schema.SchemaCreator;
@@ -204,6 +205,7 @@
@Inject private ThreadLocalRequestContext requestContext;
@Inject private Provider<InternalChangeQuery> queryProvider;
@Inject private ProjectControl.Metrics metrics;
+ @Inject private TransferConfig transferConfig;
@Before
public void setUp() throws Exception {
@@ -883,6 +885,7 @@
rulesCache,
commentLinks,
capabilityCollectionFactory,
+ transferConfig,
pc));
return repo;
}