diff --git a/java/com/google/gerrit/server/index/change/ChangeIndexer.java b/java/com/google/gerrit/server/index/change/ChangeIndexer.java index 55f8b48805..8653cded5f 100644 --- a/java/com/google/gerrit/server/index/change/ChangeIndexer.java +++ b/java/com/google/gerrit/server/index/change/ChangeIndexer.java @@ -184,15 +184,12 @@ public class ChangeIndexer { } /** - * Synchronously index a change. + * Synchronously index a change, then check if the index is stale due to a race condition. * * @param cd change to index. */ public void index(ChangeData cd) throws IOException { - for (Index i : getWriteIndexes()) { - i.replace(cd); - } - fireChangeIndexedEvent(cd.project().get(), cd.getId().get()); + indexImpl(cd); // Always double-check whether the change might be stale immediately after // interactively indexing it. This fixes up the case where two writers write @@ -215,6 +212,13 @@ public class ChangeIndexer { autoReindexIfStale(cd); } + private void indexImpl(ChangeData cd) throws IOException { + for (Index i : getWriteIndexes()) { + i.replace(cd); + } + fireChangeIndexedEvent(cd.project().get(), cd.getId().get()); + } + private void fireChangeIndexedEvent(String projectName, int id) { for (ChangeIndexedListener listener : indexedListeners) { try { @@ -434,7 +438,7 @@ public class ChangeIndexer { public Boolean callImpl(Provider db) throws Exception { try { if (stalenessChecker.isStale(id)) { - index(newChangeData(db.get(), project, id)); + indexImpl(newChangeData(db.get(), project, id)); return true; } } catch (NoSuchChangeException nsce) {