commit 0e9b531949b39142c450f9074f0870b758f67c79 Author: Patrick Hiesel Date: Fri Oct 16 09:05:46 2020 +0000 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 diff --git a/java/com/google/gerrit/server/AnonymousUser.java b/java/com/google/gerrit/server/AnonymousUser.java index c96d61a..91d2d05 100644 --- a/java/com/google/gerrit/server/AnonymousUser.java +++ b/java/com/google/gerrit/server/AnonymousUser.java @@ -27,6 +27,12 @@ public class AnonymousUser extends CurrentUser { } @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 43d3c7b..825b34f 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 ec2eb81..75c7cda 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 821a0c6..381819d 100644 --- a/java/com/google/gerrit/server/InternalUser.java +++ b/java/com/google/gerrit/server/InternalUser.java @@ -36,6 +36,11 @@ public class InternalUser extends CurrentUser { } @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 8a8b67a..b27e05c 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 dac555d..3960813 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 1cdca1b..de23ef4 100644 --- a/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java +++ b/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java @@ -101,6 +101,11 @@ public class UiActionsTest { } @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 64f9392..81cb732 100644 --- a/javatests/com/google/gerrit/server/permissions/RefControlTest.java +++ b/javatests/com/google/gerrit/server/permissions/RefControlTest.java @@ -1198,6 +1198,11 @@ public class RefControlTest { } @Override + public Object getCacheKey() { + return new Object(); + } + + @Override public Optional getUserName() { return Optional.ofNullable(username); } diff --git a/plugins/replication b/plugins/replication index 10b6162..a6a6ec5 160000 --- a/plugins/replication +++ b/plugins/replication @@ -1 +1 @@ -Subproject commit 10b616284a846dade09a330896ec76e80df1c68c +Subproject commit a6a6ec5982e41a0ee9bfe24a46be96d4f13fcaaa