summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaushik Lingarkar <kaushikl@codeaurora.org>2021-11-23 13:09:55 -0800
committerKaushik Lingarkar <kaushikl@codeaurora.org>2021-12-20 10:48:54 -0800
commit80b846436bab3a45877bcec98d4ffdb40ed3f44d (patch)
tree3b1aeefa4c00d342bac7d8115e842bbd44c05a32
parent0bb9f91c44760dee3ee571abe6f8c9aef3655f9e (diff)
Avoid re-reading refs in schema 161
A ref lookup using its name can be slow, especially in an unrepacked NFS based repository. Instead, use a Ref object which is already available to read labels. Change-Id: I31bafad54b7f69059235cc466d4a3d732ba44d97
-rw-r--r--java/com/google/gerrit/server/StarredChangesUtil.java27
-rw-r--r--java/com/google/gerrit/server/schema/Schema_161.java2
2 files changed, 17 insertions, 12 deletions
diff --git a/java/com/google/gerrit/server/StarredChangesUtil.java b/java/com/google/gerrit/server/StarredChangesUtil.java
index 9962c39153..035b3a5a1b 100644
--- a/java/com/google/gerrit/server/StarredChangesUtil.java
+++ b/java/com/google/gerrit/server/StarredChangesUtil.java
@@ -385,18 +385,23 @@ public class StarredChangesUtil {
public static StarRef readLabels(Repository repo, String refName) throws IOException {
try (TraceTimer traceTimer = TraceContext.newTimer("Read star labels from %s", refName)) {
Ref ref = repo.exactRef(refName);
- if (ref == null) {
- return StarRef.MISSING;
- }
+ return readLabels(repo, ref);
+ }
+ }
- try (ObjectReader reader = repo.newObjectReader()) {
- ObjectLoader obj = reader.open(ref.getObjectId(), Constants.OBJ_BLOB);
- return StarRef.create(
- ref,
- Splitter.on(CharMatcher.whitespace())
- .omitEmptyStrings()
- .split(new String(obj.getCachedBytes(Integer.MAX_VALUE), UTF_8)));
- }
+ public static StarRef readLabels(Repository repo, Ref ref) throws IOException {
+ if (ref == null) {
+ return StarRef.MISSING;
+ }
+ try (TraceTimer traceTimer =
+ TraceContext.newTimer("Read star labels from %s (without ref lookup)", ref.getName());
+ ObjectReader reader = repo.newObjectReader()) {
+ ObjectLoader obj = reader.open(ref.getObjectId(), Constants.OBJ_BLOB);
+ return StarRef.create(
+ ref,
+ Splitter.on(CharMatcher.whitespace())
+ .omitEmptyStrings()
+ .split(new String(obj.getCachedBytes(Integer.MAX_VALUE), UTF_8)));
}
}
diff --git a/java/com/google/gerrit/server/schema/Schema_161.java b/java/com/google/gerrit/server/schema/Schema_161.java
index 70010f830d..b84af60071 100644
--- a/java/com/google/gerrit/server/schema/Schema_161.java
+++ b/java/com/google/gerrit/server/schema/Schema_161.java
@@ -61,7 +61,7 @@ public class Schema_161 extends SchemaVersion {
bru.setAllowNonFastForwards(true);
for (Ref ref : git.getRefDatabase().getRefsByPrefix(RefNames.REFS_STARRED_CHANGES)) {
- StarRef starRef = StarredChangesUtil.readLabels(git, ref.getName());
+ StarRef starRef = StarredChangesUtil.readLabels(git, ref);
Set<Integer> mutedPatchSets =
StarredChangesUtil.getStarredPatchSets(starRef.labels(), MUTE_LABEL);