From 0e9b531949b39142c450f9074f0870b758f67c79 Mon Sep 17 00:00:00 2001 From: Patrick Hiesel Date: Fri, 16 Oct 2020 09:05:46 +0000 Subject: [PATCH] Revert "Remove unused CurrentUser#cacheKey method" Revert "Adjust to changes in Gerrit core" Revert submission 283559-currentuser-remove-cache-key Reason for revert: Causes a latency regression for some hosts Reverted Changes: I76bfd3ebc:Adjust to changes in Gerrit core If7ccfd9a4:Remove unused CurrentUser#cacheKey method I1378ad083:Remove PerThreadCache Change-Id: Idd9eb9cb91bb531ee75aa2c2cde26a01ceb5ff0a --- java/com/google/gerrit/server/AnonymousUser.java | 6 ++++++ java/com/google/gerrit/server/CurrentUser.java | 6 ++++++ java/com/google/gerrit/server/IdentifiedUser.java | 5 +++++ java/com/google/gerrit/server/InternalUser.java | 5 +++++ java/com/google/gerrit/server/PeerDaemonUser.java | 5 +++++ .../google/gerrit/server/query/change/GroupBackedUser.java | 5 +++++ .../gerrit/server/extensions/webui/UiActionsTest.java | 5 +++++ .../google/gerrit/server/permissions/RefControlTest.java | 5 +++++ plugins/replication | 2 +- 9 files changed, 43 insertions(+), 1 deletion(-) diff --git a/java/com/google/gerrit/server/AnonymousUser.java b/java/com/google/gerrit/server/AnonymousUser.java index c96d61aab5..91d2d05e49 100644 --- a/java/com/google/gerrit/server/AnonymousUser.java +++ b/java/com/google/gerrit/server/AnonymousUser.java @@ -26,6 +26,12 @@ public class AnonymousUser extends CurrentUser { return new ListGroupMembership(Collections.singleton(SystemGroupBackend.ANONYMOUS_USERS)); } + @Override + public Object getCacheKey() { + // Treat all anonymous users as a single user + return "anonymous"; + } + @Override public String toString() { return "ANONYMOUS"; diff --git a/java/com/google/gerrit/server/CurrentUser.java b/java/com/google/gerrit/server/CurrentUser.java index 43d3c7b83d..825b34f3d7 100644 --- a/java/com/google/gerrit/server/CurrentUser.java +++ b/java/com/google/gerrit/server/CurrentUser.java @@ -91,6 +91,12 @@ public abstract class CurrentUser { */ public abstract GroupMembership getEffectiveGroups(); + /** + * Returns a unique identifier for this user that is intended to be used as a cache key. Returned + * object should to implement {@code equals()} and {@code hashCode()} for effective caching. + */ + public abstract Object getCacheKey(); + /** Unique name of the user on this server, if one has been assigned. */ public Optional getUserName() { return Optional.empty(); diff --git a/java/com/google/gerrit/server/IdentifiedUser.java b/java/com/google/gerrit/server/IdentifiedUser.java index ec2eb819bf..75c7cda98e 100644 --- a/java/com/google/gerrit/server/IdentifiedUser.java +++ b/java/com/google/gerrit/server/IdentifiedUser.java @@ -413,6 +413,11 @@ public class IdentifiedUser extends CurrentUser { return effectiveGroups; } + @Override + public Object getCacheKey() { + return getAccountId(); + } + public PersonIdent newRefLogIdent() { return newRefLogIdent(new Date(), TimeZone.getDefault()); } diff --git a/java/com/google/gerrit/server/InternalUser.java b/java/com/google/gerrit/server/InternalUser.java index 821a0c6135..381819d980 100644 --- a/java/com/google/gerrit/server/InternalUser.java +++ b/java/com/google/gerrit/server/InternalUser.java @@ -35,6 +35,11 @@ public class InternalUser extends CurrentUser { return GroupMembership.EMPTY; } + @Override + public String getCacheKey() { + return "internal"; + } + @Override public boolean isInternalUser() { return true; diff --git a/java/com/google/gerrit/server/PeerDaemonUser.java b/java/com/google/gerrit/server/PeerDaemonUser.java index 8a8b67a2be..b27e05cf41 100644 --- a/java/com/google/gerrit/server/PeerDaemonUser.java +++ b/java/com/google/gerrit/server/PeerDaemonUser.java @@ -40,6 +40,11 @@ public class PeerDaemonUser extends CurrentUser { return GroupMembership.EMPTY; } + @Override + public Object getCacheKey() { + return getRemoteAddress(); + } + public SocketAddress getRemoteAddress() { return peer; } diff --git a/java/com/google/gerrit/server/query/change/GroupBackedUser.java b/java/com/google/gerrit/server/query/change/GroupBackedUser.java index dac555d1b6..3960813b40 100644 --- a/java/com/google/gerrit/server/query/change/GroupBackedUser.java +++ b/java/com/google/gerrit/server/query/change/GroupBackedUser.java @@ -64,4 +64,9 @@ public final class GroupBackedUser extends CurrentUser { public String getLoggableName() { return "GroupBackedUser with memberships: " + groups.getKnownGroups(); } + + @Override + public Object getCacheKey() { + return groups.getKnownGroups(); + } } diff --git a/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java b/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java index 1cdca1b695..de23ef4573 100644 --- a/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java +++ b/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java @@ -100,6 +100,11 @@ public class UiActionsTest { throw new UnsupportedOperationException("not implemented"); } + @Override + public Object getCacheKey() { + return new Object(); + } + @Override public boolean isIdentifiedUser() { return true; diff --git a/javatests/com/google/gerrit/server/permissions/RefControlTest.java b/javatests/com/google/gerrit/server/permissions/RefControlTest.java index 64f9392f97..81cb732b82 100644 --- a/javatests/com/google/gerrit/server/permissions/RefControlTest.java +++ b/javatests/com/google/gerrit/server/permissions/RefControlTest.java @@ -1197,6 +1197,11 @@ public class RefControlTest { return groups; } + @Override + public Object getCacheKey() { + return new Object(); + } + @Override public Optional getUserName() { return Optional.ofNullable(username); diff --git a/plugins/replication b/plugins/replication index 10b616284a..a6a6ec5982 160000 --- a/plugins/replication +++ b/plugins/replication @@ -1 +1 @@ -Subproject commit 10b616284a846dade09a330896ec76e80df1c68c +Subproject commit a6a6ec5982e41a0ee9bfe24a46be96d4f13fcaaa