Reindex unconditionally in MergeabilityChecker, not in Mergeable
Don't try to guess whether Mergeable will reindex. Turn off
reindexing in that code path and do it explicitly in
MergeabilityChecker.
Change-Id: I2a9df574e30fe469134b9f2d47a134833cd5565e
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/MergeabilityChecker.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/MergeabilityChecker.java
index cc20608..270f718 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/MergeabilityChecker.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/MergeabilityChecker.java
@@ -35,7 +35,6 @@
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.change.MergeabilityChecksExecutor.Priority;
-import com.google.gerrit.server.change.Mergeable.MergeableInfo;
import com.google.gerrit.server.git.MetaDataUpdate;
import com.google.gerrit.server.git.ProjectConfig;
import com.google.gerrit.server.git.WorkQueue.Executor;
@@ -150,20 +149,18 @@
List<ListenableFuture<?>> result =
Lists.newArrayListWithCapacity(changes.size());
for (final Change c : changes) {
- ListenableFuture<Boolean> b =
- executor.submit(new Task(c, force));
+ // Don't try to guess whether Mergeable will reindex; just turn
+ // off reindexing in that code path and do it explicitly below.
+ ListenableFuture<Void> b =
+ executor.submit(new Task(c, force, !reindex));
if (reindex) {
result.add(Futures.transform(
- b, new AsyncFunction<Boolean, Object>() {
+ b, new AsyncFunction<Void, Void>() {
@SuppressWarnings("unchecked")
@Override
- public ListenableFuture<Object> apply(
- Boolean indexUpdated) throws Exception {
- if (!indexUpdated) {
- return (ListenableFuture<Object>)
- indexer.indexAsync(c.getId());
- }
- return Futures.immediateFuture(null);
+ public ListenableFuture<Void> apply(Void o) {
+ return (ListenableFuture<Void>)
+ indexer.indexAsync(c.getId());
}
}));
} else {
@@ -291,19 +288,21 @@
return ProjectConfig.read(metaDataUpdateFactory.create(p), id);
}
- private class Task implements Callable<Boolean> {
+ private class Task implements Callable<Void> {
private final Change change;
private final boolean force;
+ private final boolean reindex;
private ReviewDb reviewDb;
- Task(Change change, boolean force) {
+ Task(Change change, boolean force, boolean reindex) {
this.change = change;
this.force = force;
+ this.reindex = reindex;
}
@Override
- public Boolean call() throws Exception {
+ public Void call() throws Exception {
mergeabilityCheckQueue.updatingMergeabilityFlag(change, force);
RequestContext context = new RequestContext() {
@@ -335,20 +334,20 @@
PatchSet ps = db.patchSets().get(change.currentPatchSetId());
if (ps == null) {
// Cannot compute mergeability if current patch set is missing.
- return false;
+ return null;
}
Mergeable m = mergeable.get();
m.setForce(force);
+ m.setReindex(reindex);
ChangeControl control =
changeControlFactory.controlFor(change, context.getCurrentUser());
- MergeableInfo info = m.apply(
- new RevisionResource(new ChangeResource(control), ps));
- return change.isMergeable() != info.mergeable;
+ m.apply(new RevisionResource(new ChangeResource(control), ps));
+ return null;
} catch (ResourceConflictException e) {
// change is closed
- return false;
+ return null;
} catch (Exception e) {
log.error(String.format(
"cannot update mergeability flag of change %d in project %s after update of %s",
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
index f151792..3605868 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
@@ -82,6 +82,10 @@
this.force = force;
}
+ public void setReindex(boolean reindex) {
+ this.reindex = reindex;
+ }
+
private final GitRepositoryManager gitManager;
private final ProjectCache projectCache;
private final ChangeData.Factory changeDataFactory;
@@ -90,6 +94,7 @@
private final ChangeIndexer indexer;
private boolean force;
+ private boolean reindex;
@Inject
Mergeable(GitRepositoryManager gitManager,
@@ -104,6 +109,7 @@
this.submitStrategyFactory = submitStrategyFactory;
this.db = db;
this.indexer = indexer;
+ reindex = true;
}
@Override
@@ -197,7 +203,7 @@
}
}
});
- if (c != null) {
+ if (reindex && c != null) {
indexer.index(db.get(), c);
}
return mergeable;