summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Milanesio <luca.milanesio@gmail.com>2024-01-26 08:53:41 +0000
committerNasser Grainawi <nasser.grainawi@linaro.org>2024-04-04 16:35:36 +0000
commit7a127d54a94b790a0d078df337420b8895ef8e33 (patch)
tree2f967075d003d3aa746e0652f12da34ee98e19b6
parent7d4ace2c7718c9632ad1f2d9dcbbb0a035642bbb (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)
-rw-r--r--java/com/google/gerrit/server/index/OnlineReindexer.java3
-rw-r--r--java/com/google/gerrit/server/index/change/AllChangesIndexer.java38
-rw-r--r--java/com/google/gerrit/server/index/change/ChangeIndexer.java12
-rw-r--r--java/com/google/gerrit/server/index/change/IndexedChangeQuery.java5
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) {