Remove CapabilityControl from CurrentUser

Drop the capabilities reference from all user objects.  Most global
capabilities can be checked with the PermissionBackend.

QoS, query limits, and emailing reviewers still require the capability
object.  Bundle its factory into the call sites that need it.

Continue caching the CapabilityControl in an opaque property on the
CurrentUser, and also in the DefaultPermissionBackend.WithUserImpl.
Both of these sites reduce evaluations for critical properties like
"administrateServer".

Change-Id: I5aae8200e0a579ac1295a3fb7005703fd39d2696
This commit is contained in:
Shawn Pearce
2017-04-29 14:23:56 -07:00
committed by David Pursehouse
parent f4001aa356
commit 6302ccb2bb
33 changed files with 222 additions and 217 deletions

View File

@@ -20,6 +20,7 @@ import static java.util.concurrent.TimeUnit.MINUTES;
import static javax.servlet.http.HttpServletResponse.SC_SERVICE_UNAVAILABLE;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.account.CapabilityControl;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.git.QueueProvider;
import com.google.gerrit.server.git.WorkQueue.CancelableRunnable;
@@ -69,7 +70,6 @@ public class ProjectQoSFilter implements Filter {
private static final Pattern URI_PATTERN = Pattern.compile(FILTER_RE);
public static class Module extends ServletModule {
@Override
protected void configureServlets() {
bind(QueueProvider.class).to(CommandExecutorQueueProvider.class).in(SINGLETON);
@@ -77,18 +77,20 @@ public class ProjectQoSFilter implements Filter {
}
}
private final CapabilityControl.Factory capabilityFactory;
private final Provider<CurrentUser> user;
private final QueueProvider queue;
private final ServletContext context;
private final long maxWait;
@Inject
ProjectQoSFilter(
CapabilityControl.Factory capabilityFactory,
Provider<CurrentUser> user,
QueueProvider queue,
ServletContext context,
@GerritServerConfig Config cfg) {
this.capabilityFactory = capabilityFactory;
this.user = user;
this.queue = queue;
this.context = context;
@@ -137,7 +139,8 @@ public class ProjectQoSFilter implements Filter {
}
private ScheduledThreadPoolExecutor getExecutor() {
return queue.getQueue(user.get().getCapabilities().getQueueType());
QueueProvider.QueueType qt = capabilityFactory.create(user.get()).getQueueType();
return queue.getQueue(qt);
}
@Override

View File

@@ -32,7 +32,6 @@ import com.google.gerrit.server.account.AccountCacheImpl;
import com.google.gerrit.server.account.AccountVisibility;
import com.google.gerrit.server.account.AccountVisibilityProvider;
import com.google.gerrit.server.account.CapabilityCollection;
import com.google.gerrit.server.account.CapabilityControl;
import com.google.gerrit.server.account.FakeRealm;
import com.google.gerrit.server.account.GroupCacheImpl;
import com.google.gerrit.server.account.GroupIncludeCacheImpl;
@@ -164,7 +163,6 @@ public class BatchProgramModule extends FactoryModule {
install(MergeabilityCacheImpl.module());
install(TagCache.module());
factory(CapabilityCollection.Factory.class);
factory(CapabilityControl.Factory.class);
factory(ChangeData.Factory.class);
factory(ProjectState.Factory.class);