Remove usage of AccountByEmailCache
With change I1c24da1378 there is a new Emails class that allows looking up accounts by email. To find accounts by email it gets external IDs by email from the ExternalIdCache and extracts the account IDs from the external IDs. This is exactly what AccountByEmailCacheImpl.Loader was doing. In addition the Emails class does an index lookup to also find accounts by preferred email (see commit message of change I1c24da1378 for an explanation of why this is needed). Adapt all code to use the new Emails class instead of the AccountByEmailCache. Looking up accounts by email via the ExternalIdCache means that the SHA1 of the refs/meta/external-ids branch is read on each lookup (to verify that the cache is up to date). To avoid reading the SHA1 of the refs/meta/external-ids branch multiple times when looking up accounts by email in a loop the Emails class offers a method that can lookup accounts for several emails at once. This method is currently not used by Gerrit core, but plugins may need it (e.g. the find-owners plugin). When emails are changed the ExternalIdCache is automatically evicted since it detects when the refs/meta/external-ids branch was updated, hence manual cache eviction for this cache is not needed. Accounts are also reindexed if the preferred email is changed so that looking up accounts by preferred email via the account index always returns up-to-date results. The AccountByEmailCache is only removed in the follow-up change. This allows Google to adapt internal code to use the new API before the AccountByEmailCache is dropped. Change-Id: I991d21b1acc11025a23504655b5a2c4fea795acf Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
@@ -78,7 +78,6 @@ import com.google.gerrit.gpg.testutil.TestKey;
|
||||
import com.google.gerrit.reviewdb.client.Account;
|
||||
import com.google.gerrit.reviewdb.client.RefNames;
|
||||
import com.google.gerrit.server.Sequences;
|
||||
import com.google.gerrit.server.account.AccountByEmailCache;
|
||||
import com.google.gerrit.server.account.AccountConfig;
|
||||
import com.google.gerrit.server.account.AccountsUpdate;
|
||||
import com.google.gerrit.server.account.Emails;
|
||||
@@ -145,8 +144,6 @@ public class AccountIT extends AbstractDaemonTest {
|
||||
|
||||
@Inject private AccountsUpdate.Server accountsUpdate;
|
||||
|
||||
@Inject private AccountByEmailCache byEmailCache;
|
||||
|
||||
@Inject private ExternalIds externalIds;
|
||||
|
||||
@Inject private ExternalIdsUpdate.User externalIdsUpdateFactory;
|
||||
@@ -679,28 +676,6 @@ public class AccountIT extends AbstractDaemonTest {
|
||||
gApi.accounts().id(admin.id.get()).deleteEmail(admin.email);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lookUpFromCacheByEmail() throws Exception {
|
||||
// exact match with scheme "mailto:"
|
||||
assertEmail(byEmailCache.get(admin.email), admin);
|
||||
|
||||
// exact match with other scheme
|
||||
String email = "foo.bar@example.com";
|
||||
externalIdsUpdateFactory
|
||||
.create()
|
||||
.insert(ExternalId.createWithEmail(ExternalId.Key.parse("foo:bar"), admin.id, email));
|
||||
assertEmail(byEmailCache.get(email), admin);
|
||||
|
||||
// wrong case doesn't match
|
||||
assertThat(byEmailCache.get(admin.email.toUpperCase(Locale.US))).isEmpty();
|
||||
|
||||
// prefix doesn't match
|
||||
assertThat(byEmailCache.get(admin.email.substring(0, admin.email.indexOf('@')))).isEmpty();
|
||||
|
||||
// non-existing doesn't match
|
||||
assertThat(byEmailCache.get("non-existing@example.com")).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lookUpByEmail() throws Exception {
|
||||
// exact match with scheme "mailto:"
|
||||
|
||||
Reference in New Issue
Block a user