diff --git a/java/com/google/gerrit/server/account/AccountCacheImpl.java b/java/com/google/gerrit/server/account/AccountCacheImpl.java index f68a1c7e80..93e048806a 100644 --- a/java/com/google/gerrit/server/account/AccountCacheImpl.java +++ b/java/com/google/gerrit/server/account/AccountCacheImpl.java @@ -19,6 +19,7 @@ import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_USE import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Sets; import com.google.common.flogger.FluentLogger; import com.google.gerrit.entities.Account; import com.google.gerrit.entities.RefNames; @@ -113,20 +114,21 @@ public class AccountCacheImpl implements AccountCache { ? defaultPreferenceCache.get(ref.getObjectId()) : DefaultPreferencesCache.EMPTY; - ImmutableMap.Builder result = ImmutableMap.builder(); + Set keys = + Sets.newLinkedHashSetWithExpectedSize(accountIds.size()); for (Account.Id id : accountIds) { Ref userRef = allUsers.exactRef(RefNames.refsUsers(id)); if (userRef == null) { continue; } - + keys.add(CachedAccountDetails.Key.create(id, userRef.getObjectId())); + } + ImmutableMap.Builder result = ImmutableMap.builder(); + for (Map.Entry account : + accountDetailsCache.getAll(keys).entrySet()) { result.put( - id, - AccountState.forCachedAccount( - accountDetailsCache.get( - CachedAccountDetails.Key.create(id, userRef.getObjectId())), - defaultPreferences, - externalIds)); + account.getKey().accountId(), + AccountState.forCachedAccount(account.getValue(), defaultPreferences, externalIds)); } return result.build(); }