diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/DisabledExternalIdCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/DisabledExternalIdCache.java index 8eda8438c4..687f1fef3d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/DisabledExternalIdCache.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/DisabledExternalIdCache.java @@ -89,8 +89,18 @@ public class DisabledExternalIdCache implements ExternalIdCache { throw new UnsupportedOperationException(); } + @Override + public ImmutableSetMultimap allByAccount() throws IOException { + throw new UnsupportedOperationException(); + } + @Override public ImmutableSetMultimap byEmails(String... emails) throws IOException { throw new UnsupportedOperationException(); } + + @Override + public ImmutableSetMultimap allByEmail() throws IOException { + throw new UnsupportedOperationException(); + } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIdCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIdCache.java index a4d5da5b14..b3444480ff 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIdCache.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIdCache.java @@ -82,8 +82,12 @@ interface ExternalIdCache { Set byAccount(Account.Id accountId) throws IOException; + ImmutableSetMultimap allByAccount() throws IOException; + ImmutableSetMultimap byEmails(String... emails) throws IOException; + ImmutableSetMultimap allByEmail() throws IOException; + default ImmutableSet byEmail(String email) throws IOException { return byEmails(email).get(email); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIdCacheImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIdCacheImpl.java index 36d222742d..756c360c3b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIdCacheImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIdCacheImpl.java @@ -218,24 +218,34 @@ class ExternalIdCacheImpl implements ExternalIdCache { @Override public Set byAccount(Account.Id accountId) throws IOException { - try { - return extIdsByAccount.get(externalIdReader.readRevision()).byAccount().get(accountId); - } catch (ExecutionException e) { - throw new IOException("Cannot list external ids by account", e); - } + return get().byAccount().get(accountId); + } + + @Override + public ImmutableSetMultimap allByAccount() throws IOException { + return get().byAccount(); } @Override public ImmutableSetMultimap byEmails(String... emails) throws IOException { + AllExternalIds allExternalIds = get(); + ImmutableSetMultimap.Builder byEmails = ImmutableSetMultimap.builder(); + for (String email : emails) { + byEmails.putAll(email, allExternalIds.byEmail().get(email)); + } + return byEmails.build(); + } + + @Override + public ImmutableSetMultimap allByEmail() throws IOException { + return get().byEmail(); + } + + private AllExternalIds get() throws IOException { try { - AllExternalIds allExternalIds = extIdsByAccount.get(externalIdReader.readRevision()); - ImmutableSetMultimap.Builder byEmails = ImmutableSetMultimap.builder(); - for (String email : emails) { - byEmails.putAll(email, allExternalIds.byEmail().get(email)); - } - return byEmails.build(); + return extIdsByAccount.get(externalIdReader.readRevision()); } catch (ExecutionException e) { - throw new IOException("Cannot list external ids by email", e); + throw new IOException("Cannot load external ids", e); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIds.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIds.java index 3b67e7198d..35eb6d4c99 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIds.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalIds.java @@ -75,6 +75,11 @@ public class ExternalIds { return byAccount(accountId).stream().filter(e -> e.key().isScheme(scheme)).collect(toSet()); } + /** Returns all external IDs by account. */ + public ImmutableSetMultimap allByAccount() throws IOException { + return externalIdCache.allByAccount(); + } + /** * Returns the external ID with the given email. * @@ -109,4 +114,9 @@ public class ExternalIds { public ImmutableSetMultimap byEmails(String... emails) throws IOException { return externalIdCache.byEmails(emails); } + + /** Returns all external IDs by email. */ + public ImmutableSetMultimap allByEmail() throws IOException { + return externalIdCache.allByEmail(); + } }