Use ChangeIndexer.deleteAllForProject on project deletion
When a project is deleted, all its changes must be removed from the
index. The plugin previously iterated over write indexes and called
ChangeIndex.deleteAllForProject() directly. This bypassed the higher-
level API and duplicated index selection logic.
Route the deletion through ChangeIndexer.deleteAllForProject(), which:
- Centralizes index handling across backends and shards.
- Emits the onAllChangesDeletedForProject notification for listeners.
- Simplifies the code by removing the local iteration helper.
This aligns the plugin with the API introduced in I4c8a53629 and avoids
the pitfalls of calling low-level ChangeIndex operations directly.
Note: this partially re-applies reverted I7a171837bca, without the
provided notification via stream events, which was not correct.
Bug: Issue 440670678
Change-Id: I7a171837bca5103094caa9c302afb6409f075195
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
index 99dc164..a40cab3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
@@ -27,8 +27,7 @@
import com.google.gerrit.server.account.AccountState;
import com.google.gerrit.server.account.AccountsUpdate;
import com.google.gerrit.server.git.GitRepositoryManager;
-import com.google.gerrit.server.index.change.ChangeIndex;
-import com.google.gerrit.server.index.change.ChangeIndexCollection;
+import com.google.gerrit.server.index.change.ChangeIndexer;
import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.notedb.ChangeNotes.Factory.ChangeNotesResult;
import com.google.gerrit.server.project.NoSuchChangeException;
@@ -44,7 +43,7 @@
private static final FluentLogger log = FluentLogger.forEnclosingClass();
private final StarredChangesWriter starredChangesWriter;
- private final ChangeIndexCollection indexes;
+ private final ChangeIndexer indexer;
private final Provider<InternalAccountQuery> accountQueryProvider;
private final Provider<AccountsUpdate> accountsUpdateProvider;
private final ChangeNotes.Factory schemaFactoryNoteDb;
@@ -53,13 +52,13 @@
@Inject
public DatabaseDeleteHandler(
StarredChangesWriter starredChangesWriter,
- ChangeIndexCollection indexes,
+ ChangeIndexer indexer,
ChangeNotes.Factory schemaFactoryNoteDb,
GitRepositoryManager repoManager,
Provider<InternalAccountQuery> accountQueryProvider,
@UserInitiated Provider<AccountsUpdate> accountsUpdateProvider) {
this.starredChangesWriter = starredChangesWriter;
- this.indexes = indexes;
+ this.indexer = indexer;
this.accountQueryProvider = accountQueryProvider;
this.accountsUpdateProvider = accountsUpdateProvider;
this.schemaFactoryNoteDb = schemaFactoryNoteDb;
@@ -67,7 +66,7 @@
}
public void delete(Project project) throws IOException {
- deleteChangesFromIndex(project);
+ indexer.deleteAllForProject(project.getNameKey());
unstarChanges(getChangesListFromNoteDb(project));
deleteProjectWatches(project);
}
@@ -84,12 +83,6 @@
}
}
- private void deleteChangesFromIndex(Project project) {
- for (ChangeIndex i : indexes.getWriteIndexes()) {
- i.deleteAllForProject(project.getNameKey());
- }
- }
-
private void unstarChanges(List<Change.Id> changeIds) {
for (Change.Id id : changeIds) {
try {