diff options
Diffstat (limited to 'java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java')
-rw-r--r-- | java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java b/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java index 1b029b17d5..cf6a1846ce 100644 --- a/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java +++ b/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java @@ -34,6 +34,7 @@ import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.PeerDaemonUser; import com.google.gerrit.server.account.CapabilityCollection; +import com.google.gerrit.server.cache.PerThreadCache; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.project.ProjectState; import com.google.inject.Inject; @@ -104,7 +105,11 @@ public class DefaultPermissionBackend extends PermissionBackend { public ForProject project(Project.NameKey project) { try { ProjectState state = projectCache.get(project).orElseThrow(illegalState(project)); - return projectControlFactory.create(user, state).asForProject(); + ProjectControl control = + PerThreadCache.getOrCompute( + PerThreadCache.Key.create(ProjectControl.class, project, user.getCacheKey()), + () -> projectControlFactory.create(user, state)); + return control.asForProject(); } catch (Exception e) { Throwable cause = e.getCause() != null ? e.getCause() : e; return FailedPermissionBackend.project( |