diff options
author | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-12 23:47:26 +0100 |
---|---|---|
committer | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-29 13:05:11 +0000 |
commit | b8e9d684c28402d9888573d5ea79a1985c1b3253 (patch) | |
tree | e0c93c34ad7a19854f5a235bb5f0a14ecdbc7cd4 | |
parent | 3d6472706e6984d28a0f84245a826641c812eadf (diff) |
Set PerThreadCache as readonly when formatting change JSON
Apply the same optimisation made for Change-Id: I1b71bfcf to
the formatting of change JSON output as return value for REST APIs.
The ChangeJson class needs to read multiple fields from NoteDb
and calls the /meta refs lookups multiple times for the same
change JSON output (e.g. formatting the output JSON of an
abandoned change generates 23 refs lookups calls for a single
change).
The same considerations of performance improvement and reduction
of /meta refs lookup are valid in this use-case.
Release-Notes: enable the read-only cache of /meta when producing JSON
Change-Id: Ic0e747352dcd8a0c2c1348a9878a5a4165777abd
-rw-r--r-- | java/com/google/gerrit/server/change/ChangeJson.java | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/java/com/google/gerrit/server/change/ChangeJson.java b/java/com/google/gerrit/server/change/ChangeJson.java index 2aaf4c513c..af557cef18 100644 --- a/java/com/google/gerrit/server/change/ChangeJson.java +++ b/java/com/google/gerrit/server/change/ChangeJson.java @@ -84,6 +84,8 @@ import com.google.gerrit.server.ReviewerStatusUpdate; import com.google.gerrit.server.StarredChangesUtil; import com.google.gerrit.server.account.AccountInfoComparator; import com.google.gerrit.server.account.AccountLoader; +import com.google.gerrit.server.cache.PerThreadCache; +import com.google.gerrit.server.cache.PerThreadCache.ReadonlyRequestWindow; import com.google.gerrit.server.config.TrackingFooters; import com.google.gerrit.server.index.change.ChangeField; import com.google.gerrit.server.notedb.ChangeNotes; @@ -493,7 +495,8 @@ public class ChangeJson { ChangeData cd, Optional<PatchSet.Id> limitToPsId, Supplier<I> changeInfoSupplier) throws PatchListNotAvailableException, GpgException, OrmException, PermissionBackendException, IOException { - try (Timer0.Context ignored = metrics.toChangeInfoLatency.start()) { + try (Timer0.Context ignored = metrics.toChangeInfoLatency.start(); + ReadonlyRequestWindow window = PerThreadCache.openReadonlyRequestWindow()) { return toChangeInfoImpl(cd, limitToPsId, changeInfoSupplier); } } |