Merge changes I112a862d,I0c26a771,Id7d054ce,Ib9adf725 * changes: ChangeJson: Don't get all ref states when only meta ref is needed ChangeData: Cache metaRevision when it is computed in metaRevisionOrThrow() ChangeJson: Remove unneeded null check for ChangeData#getRefStates() ChangeData: Do not import Project.NameKey
diff --git a/java/com/google/gerrit/server/change/ChangeJson.java b/java/com/google/gerrit/server/change/ChangeJson.java index d30e91a..f5af631 100644 --- a/java/com/google/gerrit/server/change/ChangeJson.java +++ b/java/com/google/gerrit/server/change/ChangeJson.java
@@ -63,7 +63,6 @@ import com.google.gerrit.entities.PatchSet; import com.google.gerrit.entities.PatchSetApproval; import com.google.gerrit.entities.Project; -import com.google.gerrit.entities.RefNames; import com.google.gerrit.entities.SubmitRecord; import com.google.gerrit.entities.SubmitRecord.Status; import com.google.gerrit.entities.SubmitRequirementResult; @@ -86,7 +85,6 @@ import com.google.gerrit.extensions.common.SubmitRequirementResultInfo; import com.google.gerrit.extensions.common.TrackingIdInfo; import com.google.gerrit.extensions.restapi.Url; -import com.google.gerrit.index.RefState; import com.google.gerrit.index.query.QueryResult; import com.google.gerrit.metrics.Description; import com.google.gerrit.metrics.Description.Units; @@ -868,14 +866,8 @@ TraceContext.newTimer( "Get change meta ref", Metadata.builder().changeId(cd.change().getId().get()).build())) { - if (cd.getRefStates() != null) { - String metaName = RefNames.changeMetaRef(cd.getId()); - Optional<RefState> metaState = - cd.getRefStates().values().stream().filter(r -> r.ref().equals(metaName)).findAny(); - return metaState.map(RefState::id); - } + return cd.metaRevision(); } - return Optional.empty(); } private Boolean isReviewedByCurrentUser(ChangeData cd, CurrentUser user) {
diff --git a/java/com/google/gerrit/server/query/change/ChangeData.java b/java/com/google/gerrit/server/query/change/ChangeData.java index 5676ab4..b607691 100644 --- a/java/com/google/gerrit/server/query/change/ChangeData.java +++ b/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -50,7 +50,6 @@ import com.google.gerrit.entities.PatchSet; import com.google.gerrit.entities.PatchSetApproval; import com.google.gerrit.entities.Project; -import com.google.gerrit.entities.Project.NameKey; import com.google.gerrit.entities.RefNames; import com.google.gerrit.entities.RobotComment; import com.google.gerrit.entities.SubmitRecord; @@ -450,7 +449,7 @@ private Integer totalCommentCount; private LabelTypes labelTypes; private Optional<Instant> mergedOn; - private ImmutableSetMultimap<NameKey, RefState> refStates; + private ImmutableSetMultimap<Project.NameKey, RefState> refStates; private ImmutableList<byte[]> refStatePatterns; private String gerritServerId; private String changeServerId; @@ -692,10 +691,10 @@ return this; } - public ObjectId metaRevisionOrThrow() { + public Optional<ObjectId> metaRevision() { if (notes == null) { if (metaRevision != null) { - return metaRevision; + return Optional.of(metaRevision); } if (refStates != null) { ImmutableSet<RefState> refs = refStates.get(project); @@ -703,17 +702,25 @@ String metaRef = RefNames.changeMetaRef(getId()); for (RefState r : refs) { if (r.ref().equals(metaRef)) { - return r.id(); + return Optional.of(r.id()); } } } } - throwIfNotLazyLoad("metaRevision"); + if (!lazyload()) { + return Optional.empty(); + } @SuppressWarnings("unused") var unused = notes(); } - return notes.getRevision(); + metaRevision = notes.getRevision(); + return Optional.of(metaRevision); + } + + public ObjectId metaRevisionOrThrow() { + return metaRevision() + .orElseThrow(() -> new IllegalStateException("'metaRevision' field not populated")); } boolean fastIsVisibleTo(CurrentUser user) { @@ -1499,13 +1506,14 @@ } } - public SetMultimap<NameKey, RefState> getRefStates() { + public SetMultimap<Project.NameKey, RefState> getRefStates() { if (refStates == null) { if (!lazyload()) { return ImmutableSetMultimap.of(); } - ImmutableSetMultimap.Builder<NameKey, RefState> result = ImmutableSetMultimap.builder(); + ImmutableSetMultimap.Builder<Project.NameKey, RefState> result = + ImmutableSetMultimap.builder(); for (Table.Cell<Account.Id, PatchSet.Id, Ref> edit : editRefs().cellSet()) { result.put( project,