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 {