Allow to disable reindexing for account updates
At Google we need to do account updates in a context where reindex is not possible. Hence reindexing for the AccountUpdates class must be optional. Change-Id: I03ae0d37da3c6550963f6be937e117da5f3cd3bc Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
@@ -29,6 +29,7 @@ import com.google.gerrit.reviewdb.client.RefNames;
|
|||||||
import com.google.gerrit.server.GerritPersonIdent;
|
import com.google.gerrit.server.GerritPersonIdent;
|
||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
import com.google.gerrit.server.account.externalids.ExternalIdNotes;
|
import com.google.gerrit.server.account.externalids.ExternalIdNotes;
|
||||||
|
import com.google.gerrit.server.account.externalids.ExternalIdNotes.ExternalIdNotesLoader;
|
||||||
import com.google.gerrit.server.config.AllUsersName;
|
import com.google.gerrit.server.config.AllUsersName;
|
||||||
import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
|
import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||||
@@ -159,6 +160,62 @@ public class AccountsUpdate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory to create an AccountsUpdate instance for updating accounts by the Gerrit server.
|
||||||
|
*
|
||||||
|
* <p>Using this class no reindex will be performed for the affected accounts and they will also
|
||||||
|
* not be evicted from the account cache.
|
||||||
|
*
|
||||||
|
* <p>The Gerrit server identity will be used as author and committer for all commits that update
|
||||||
|
* the accounts.
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
public static class ServerNoReindex {
|
||||||
|
private final GitRepositoryManager repoManager;
|
||||||
|
private final GitReferenceUpdated gitRefUpdated;
|
||||||
|
private final AllUsersName allUsersName;
|
||||||
|
private final OutgoingEmailValidator emailValidator;
|
||||||
|
private final Provider<PersonIdent> serverIdentProvider;
|
||||||
|
private final Provider<MetaDataUpdate.InternalFactory> metaDataUpdateInternalFactory;
|
||||||
|
private final RetryHelper retryHelper;
|
||||||
|
private final ExternalIdNotes.FactoryNoReindex extIdNotesFactory;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public ServerNoReindex(
|
||||||
|
GitRepositoryManager repoManager,
|
||||||
|
GitReferenceUpdated gitRefUpdated,
|
||||||
|
AllUsersName allUsersName,
|
||||||
|
OutgoingEmailValidator emailValidator,
|
||||||
|
@GerritPersonIdent Provider<PersonIdent> serverIdentProvider,
|
||||||
|
Provider<MetaDataUpdate.InternalFactory> metaDataUpdateInternalFactory,
|
||||||
|
RetryHelper retryHelper,
|
||||||
|
ExternalIdNotes.FactoryNoReindex extIdNotesFactory) {
|
||||||
|
this.repoManager = repoManager;
|
||||||
|
this.gitRefUpdated = gitRefUpdated;
|
||||||
|
this.allUsersName = allUsersName;
|
||||||
|
this.emailValidator = emailValidator;
|
||||||
|
this.serverIdentProvider = serverIdentProvider;
|
||||||
|
this.metaDataUpdateInternalFactory = metaDataUpdateInternalFactory;
|
||||||
|
this.retryHelper = retryHelper;
|
||||||
|
this.extIdNotesFactory = extIdNotesFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AccountsUpdate create() {
|
||||||
|
PersonIdent serverIdent = serverIdentProvider.get();
|
||||||
|
return new AccountsUpdate(
|
||||||
|
repoManager,
|
||||||
|
gitRefUpdated,
|
||||||
|
null,
|
||||||
|
allUsersName,
|
||||||
|
emailValidator,
|
||||||
|
metaDataUpdateInternalFactory,
|
||||||
|
retryHelper,
|
||||||
|
extIdNotesFactory,
|
||||||
|
serverIdent,
|
||||||
|
serverIdent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory to create an AccountsUpdate instance for updating accounts by the current user.
|
* Factory to create an AccountsUpdate instance for updating accounts by the current user.
|
||||||
*
|
*
|
||||||
@@ -228,7 +285,7 @@ public class AccountsUpdate {
|
|||||||
private final OutgoingEmailValidator emailValidator;
|
private final OutgoingEmailValidator emailValidator;
|
||||||
private final Provider<MetaDataUpdate.InternalFactory> metaDataUpdateInternalFactory;
|
private final Provider<MetaDataUpdate.InternalFactory> metaDataUpdateInternalFactory;
|
||||||
private final RetryHelper retryHelper;
|
private final RetryHelper retryHelper;
|
||||||
private final ExternalIdNotes.Factory extIdNotesFactory;
|
private final ExternalIdNotesLoader extIdNotesLoader;
|
||||||
private final PersonIdent committerIdent;
|
private final PersonIdent committerIdent;
|
||||||
private final PersonIdent authorIdent;
|
private final PersonIdent authorIdent;
|
||||||
private final Runnable afterReadRevision;
|
private final Runnable afterReadRevision;
|
||||||
@@ -241,7 +298,7 @@ public class AccountsUpdate {
|
|||||||
OutgoingEmailValidator emailValidator,
|
OutgoingEmailValidator emailValidator,
|
||||||
Provider<MetaDataUpdate.InternalFactory> metaDataUpdateInternalFactory,
|
Provider<MetaDataUpdate.InternalFactory> metaDataUpdateInternalFactory,
|
||||||
RetryHelper retryHelper,
|
RetryHelper retryHelper,
|
||||||
ExternalIdNotes.Factory extIdNotesFactory,
|
ExternalIdNotesLoader extIdNotesLoader,
|
||||||
PersonIdent committerIdent,
|
PersonIdent committerIdent,
|
||||||
PersonIdent authorIdent) {
|
PersonIdent authorIdent) {
|
||||||
this(
|
this(
|
||||||
@@ -252,7 +309,7 @@ public class AccountsUpdate {
|
|||||||
emailValidator,
|
emailValidator,
|
||||||
metaDataUpdateInternalFactory,
|
metaDataUpdateInternalFactory,
|
||||||
retryHelper,
|
retryHelper,
|
||||||
extIdNotesFactory,
|
extIdNotesLoader,
|
||||||
committerIdent,
|
committerIdent,
|
||||||
authorIdent,
|
authorIdent,
|
||||||
Runnables.doNothing());
|
Runnables.doNothing());
|
||||||
@@ -267,7 +324,7 @@ public class AccountsUpdate {
|
|||||||
OutgoingEmailValidator emailValidator,
|
OutgoingEmailValidator emailValidator,
|
||||||
Provider<MetaDataUpdate.InternalFactory> metaDataUpdateInternalFactory,
|
Provider<MetaDataUpdate.InternalFactory> metaDataUpdateInternalFactory,
|
||||||
RetryHelper retryHelper,
|
RetryHelper retryHelper,
|
||||||
ExternalIdNotes.Factory extIdNotesFactory,
|
ExternalIdNotesLoader extIdNotesLoader,
|
||||||
PersonIdent committerIdent,
|
PersonIdent committerIdent,
|
||||||
PersonIdent authorIdent,
|
PersonIdent authorIdent,
|
||||||
Runnable afterReadRevision) {
|
Runnable afterReadRevision) {
|
||||||
@@ -279,7 +336,7 @@ public class AccountsUpdate {
|
|||||||
this.metaDataUpdateInternalFactory =
|
this.metaDataUpdateInternalFactory =
|
||||||
checkNotNull(metaDataUpdateInternalFactory, "metaDataUpdateInternalFactory");
|
checkNotNull(metaDataUpdateInternalFactory, "metaDataUpdateInternalFactory");
|
||||||
this.retryHelper = checkNotNull(retryHelper, "retryHelper");
|
this.retryHelper = checkNotNull(retryHelper, "retryHelper");
|
||||||
this.extIdNotesFactory = checkNotNull(extIdNotesFactory, "extIdNotesFactory");
|
this.extIdNotesLoader = checkNotNull(extIdNotesLoader, "extIdNotesLoader");
|
||||||
this.committerIdent = checkNotNull(committerIdent, "committerIdent");
|
this.committerIdent = checkNotNull(committerIdent, "committerIdent");
|
||||||
this.authorIdent = checkNotNull(authorIdent, "authorIdent");
|
this.authorIdent = checkNotNull(authorIdent, "authorIdent");
|
||||||
this.afterReadRevision = afterReadRevision;
|
this.afterReadRevision = afterReadRevision;
|
||||||
@@ -491,7 +548,7 @@ public class AccountsUpdate {
|
|||||||
update.getDeletedExternalIds()),
|
update.getDeletedExternalIds()),
|
||||||
accountId);
|
accountId);
|
||||||
|
|
||||||
ExternalIdNotes extIdNotes = extIdNotesFactory.load(allUsersRepo);
|
ExternalIdNotes extIdNotes = extIdNotesLoader.load(allUsersRepo);
|
||||||
extIdNotes.replace(update.getDeletedExternalIds(), update.getCreatedExternalIds());
|
extIdNotes.replace(update.getDeletedExternalIds(), update.getCreatedExternalIds());
|
||||||
extIdNotes.upsert(update.getUpdatedExternalIds());
|
extIdNotes.upsert(update.getUpdatedExternalIds());
|
||||||
return extIdNotes;
|
return extIdNotes;
|
||||||
|
|||||||
@@ -78,8 +78,12 @@ public class ExternalIdNotes extends VersionedMetaData {
|
|||||||
|
|
||||||
private static final int MAX_NOTE_SZ = 1 << 19;
|
private static final int MAX_NOTE_SZ = 1 << 19;
|
||||||
|
|
||||||
|
public interface ExternalIdNotesLoader {
|
||||||
|
ExternalIdNotes load(Repository allUsersRepo) throws IOException, ConfigInvalidException;
|
||||||
|
}
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public static class Factory {
|
public static class Factory implements ExternalIdNotesLoader {
|
||||||
private final ExternalIdCache externalIdCache;
|
private final ExternalIdCache externalIdCache;
|
||||||
private final AccountCache accountCache;
|
private final AccountCache accountCache;
|
||||||
|
|
||||||
@@ -89,6 +93,7 @@ public class ExternalIdNotes extends VersionedMetaData {
|
|||||||
this.accountCache = accountCache;
|
this.accountCache = accountCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public ExternalIdNotes load(Repository allUsersRepo)
|
public ExternalIdNotes load(Repository allUsersRepo)
|
||||||
throws IOException, ConfigInvalidException {
|
throws IOException, ConfigInvalidException {
|
||||||
return new ExternalIdNotes(externalIdCache, accountCache, allUsersRepo).load();
|
return new ExternalIdNotes(externalIdCache, accountCache, allUsersRepo).load();
|
||||||
@@ -96,7 +101,7 @@ public class ExternalIdNotes extends VersionedMetaData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public static class FactoryNoReindex {
|
public static class FactoryNoReindex implements ExternalIdNotesLoader {
|
||||||
private final ExternalIdCache externalIdCache;
|
private final ExternalIdCache externalIdCache;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@@ -104,6 +109,7 @@ public class ExternalIdNotes extends VersionedMetaData {
|
|||||||
this.externalIdCache = externalIdCache;
|
this.externalIdCache = externalIdCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public ExternalIdNotes load(Repository allUsersRepo)
|
public ExternalIdNotes load(Repository allUsersRepo)
|
||||||
throws IOException, ConfigInvalidException {
|
throws IOException, ConfigInvalidException {
|
||||||
return new ExternalIdNotes(externalIdCache, null, allUsersRepo).load();
|
return new ExternalIdNotes(externalIdCache, null, allUsersRepo).load();
|
||||||
|
|||||||
Reference in New Issue
Block a user