diff options
author | Kaushik Lingarkar <kaushikl@codeaurora.org> | 2021-11-23 13:09:55 -0800 |
---|---|---|
committer | Kaushik Lingarkar <kaushikl@codeaurora.org> | 2021-12-20 10:48:54 -0800 |
commit | 80b846436bab3a45877bcec98d4ffdb40ed3f44d (patch) | |
tree | 3b1aeefa4c00d342bac7d8115e842bbd44c05a32 | |
parent | 0bb9f91c44760dee3ee571abe6f8c9aef3655f9e (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.java | 27 | ||||
-rw-r--r-- | java/com/google/gerrit/server/schema/Schema_161.java | 2 |
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); |