diff options
author | Luca Milanesio <luca.milanesio@gmail.com> | 2024-01-26 08:53:41 +0000 |
---|---|---|
committer | Nasser Grainawi <nasser.grainawi@linaro.org> | 2024-04-04 16:35:36 +0000 |
commit | 7a127d54a94b790a0d078df337420b8895ef8e33 (patch) | |
tree | 2f967075d003d3aa746e0652f12da34ee98e19b6 | |
parent | 7d4ace2c7718c9632ad1f2d9dcbbb0a035642bbb (diff) |
Revert "During online reindexing of all changes skip changes already present"
This reverts commit 366ae421f263acf201adbcc1f13c69f03fef40cf.
Reason for revert: Broke the offline reindexing (see Issue 322269961)
Bug: Issue 322269961
Release-Notes: Fix the disappearance of all changes after performing a full reindex
Change-Id: Ifa90a4eddb8b6eccc2bee7d99757e478fd983b1e
(cherry picked from commit ce49afb24e97e600a48dfc0f68f2014d20bdb197)
4 files changed, 12 insertions, 46 deletions
diff --git a/java/com/google/gerrit/server/index/OnlineReindexer.java b/java/com/google/gerrit/server/index/OnlineReindexer.java index e3b8e7cd12..eef394d66d 100644 --- a/java/com/google/gerrit/server/index/OnlineReindexer.java +++ b/java/com/google/gerrit/server/index/OnlineReindexer.java @@ -106,6 +106,9 @@ public class OnlineReindexer<K, V, I extends Index<K, V>> { "Starting online reindex of %s from schema version %s to %s", name, version(indexes.getSearchIndex()), version(index)); + if (oldVersion != newVersion) { + index.deleteAll(); + } SiteIndexer.Result result = batchIndexer.indexAll(index); if (!result.success()) { logger.atSevere().log( diff --git a/java/com/google/gerrit/server/index/change/AllChangesIndexer.java b/java/com/google/gerrit/server/index/change/AllChangesIndexer.java index b98bae0937..3935108199 100644 --- a/java/com/google/gerrit/server/index/change/AllChangesIndexer.java +++ b/java/com/google/gerrit/server/index/change/AllChangesIndexer.java @@ -47,7 +47,6 @@ import com.google.inject.Inject; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.RejectedExecutionException; @@ -198,20 +197,15 @@ public class AllChangesIndexer extends SiteIndexer<Change.Id, ChangeData, Change return Result.create(sw, ok.get(), nDone, nFailed); } - /** - * Reindexes all changes in a given project, even if they already exist in the index. Changes will - * not be sliced to allow multithreaded reindexing. - */ @Nullable public Callable<Void> reindexProject( ChangeIndexer indexer, Project.NameKey project, Task done, Task failed) { try (Repository repo = repoManager.openRepository(project)) { - return new ProjectSliceIndexer( + return reindexProjectSlice( indexer, ProjectSlice.oneSlice(project, ChangeNotes.Factory.scanChangeIds(repo)), done, - failed, - true); + failed); } catch (IOException e) { logger.atSevere().log("%s", e.getMessage()); return null; @@ -220,7 +214,7 @@ public class AllChangesIndexer extends SiteIndexer<Change.Id, ChangeData, Change public Callable<Void> reindexProjectSlice( ChangeIndexer indexer, ProjectSlice projectSlice, Task done, Task failed) { - return new ProjectSliceIndexer(indexer, projectSlice, done, failed, false); + return new ProjectSliceIndexer(indexer, projectSlice, done, failed); } private class ProjectSliceIndexer implements Callable<Void> { @@ -228,19 +222,16 @@ public class AllChangesIndexer extends SiteIndexer<Change.Id, ChangeData, Change private final ProjectSlice projectSlice; private final ProgressMonitor done; private final ProgressMonitor failed; - private final boolean forceReindex; private ProjectSliceIndexer( ChangeIndexer indexer, ProjectSlice projectSlice, ProgressMonitor done, - ProgressMonitor failed, - boolean forceReindex) { + ProgressMonitor failed) { this.indexer = indexer; this.projectSlice = projectSlice; this.done = done; this.failed = failed; - this.forceReindex = forceReindex; } @Override @@ -256,10 +247,6 @@ public class AllChangesIndexer extends SiteIndexer<Change.Id, ChangeData, Change + projectSlice.slice() + "]"); OnlineReindexMode.begin(); - Optional<ChangeIndex> newestIndex = indexer.getNewestIndex(); - if (newestIndex.isEmpty()) { - logger.atWarning().log("No change index available yet"); - } // Order of scanning changes is undefined. This is ok if we assume that packfile locality is // not important for indexing, since sites should have a fully populated DiffSummary cache. // It does mean that reindexing after invalidating the DiffSummary cache will be expensive, @@ -270,7 +257,7 @@ public class AllChangesIndexer extends SiteIndexer<Change.Id, ChangeData, Change projectSlice.metaIdByChange(), projectSlice.name(), id -> (id.get() % projectSlice.slices()) == projectSlice.slice()) - .forEach(r -> index(r, newestIndex)); + .forEach(r -> index(r)); OnlineReindexMode.end(); } finally { Thread.currentThread().setName(oldThreadName); @@ -278,23 +265,16 @@ public class AllChangesIndexer extends SiteIndexer<Change.Id, ChangeData, Change return null; } - private void index(ChangeNotesResult r, Optional<ChangeIndex> newestIndex) { + private void index(ChangeNotesResult r) { if (r.error().isPresent()) { fail("Failed to read change " + r.id() + " for indexing", true, r.error().get()); return; } try { - if (forceReindex || !indexer.isChangeAlreadyIndexed(r.id(), newestIndex)) { - indexer.index(changeDataFactory.create(r.notes())); - verboseWriter.format( - "Reindexed change %d (project: %s)\n", - r.id().get(), r.notes().getProjectName().get()); - - } else { - verboseWriter.format( - "Skipped change %d (project: %s)\n", r.id().get(), r.notes().getProjectName().get()); - } + indexer.index(changeDataFactory.create(r.notes())); done.update(1); + verboseWriter.format( + "Reindexed change %d (project: %s)\n", r.id().get(), r.notes().getProjectName().get()); } catch (RejectedExecutionException e) { // Server shutdown, don't spam the logs. failSilently(); diff --git a/java/com/google/gerrit/server/index/change/ChangeIndexer.java b/java/com/google/gerrit/server/index/change/ChangeIndexer.java index bf83a1b32a..faa5629be9 100644 --- a/java/com/google/gerrit/server/index/change/ChangeIndexer.java +++ b/java/com/google/gerrit/server/index/change/ChangeIndexer.java @@ -47,7 +47,6 @@ import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.AssistedInject; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -261,17 +260,6 @@ public class ChangeIndexer { fireChangeIndexedEvent(cd.project().get(), cd.getId().get()); } - public boolean isChangeAlreadyIndexed(Change.Id id, Optional<ChangeIndex> newestIndex) { - if (newestIndex.isEmpty()) { - return false; - } - return newestIndex.get().get(id, IndexedChangeQuery.oneResult()).isPresent(); - } - - public Optional<ChangeIndex> getNewestIndex() { - return getWriteIndexes().stream().max(Comparator.comparingInt(i -> i.getSchema().getVersion())); - } - private void fireChangeScheduledForIndexingEvent(String projectName, int id) { indexedListeners.runEach(l -> l.onChangeScheduledForIndexing(projectName, id)); } diff --git a/java/com/google/gerrit/server/index/change/IndexedChangeQuery.java b/java/com/google/gerrit/server/index/change/IndexedChangeQuery.java index f7ff13c688..00642a911b 100644 --- a/java/com/google/gerrit/server/index/change/IndexedChangeQuery.java +++ b/java/com/google/gerrit/server/index/change/IndexedChangeQuery.java @@ -21,7 +21,6 @@ import static com.google.gerrit.server.index.change.ChangeField.PROJECT_SPEC; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.gerrit.entities.Change; import com.google.gerrit.index.IndexConfig; @@ -52,10 +51,6 @@ import java.util.Set; */ public class IndexedChangeQuery extends IndexedQuery<Change.Id, ChangeData> implements ChangeDataSource, Matchable<ChangeData> { - public static QueryOptions oneResult() { - IndexConfig config = IndexConfig.createDefault(); - return createOptions(config, 0, 1, config.pageSizeMultiplier(), 1, ImmutableSet.of()); - } public static QueryOptions createOptions( IndexConfig config, int start, int limit, Set<String> fields) { |