diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java index 8da2ccf968..0cbe54078f 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java @@ -17,6 +17,7 @@ package com.google.gerrit.server; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Ordering; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.extensions.restapi.ResourceConflictException; @@ -444,15 +445,20 @@ public class ChangeUtil { } } + // Use the index to search for changes, but don't return any stored fields, + // to force rereading in case the index is stale. + InternalChangeQuery query = queryProvider.get() + .setRequestedFields(ImmutableSet. of()); + // Try isolated changeId if (!id.contains("~")) { - return asChangeControls(queryProvider.get().byKeyPrefix(id)); + return asChangeControls(query.byKeyPrefix(id)); } // Try change triplet Optional triplet = ChangeTriplet.parse(id); if (triplet.isPresent()) { - return asChangeControls(queryProvider.get().byBranchKey( + return asChangeControls(query.byBranchKey( triplet.get().branch(), triplet.get().id())); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java index a2ccc3a1f5..2dde97274f 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java @@ -106,6 +106,11 @@ public class InternalChangeQuery { return this; } + public InternalChangeQuery setRequestedFields(Set fields) { + qp.setRequestedFields(fields); + return this; + } + public List byKey(Change.Key key) throws OrmException { return byKeyPrefix(key.get()); }