summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Milanesio <luca.milanesio@gmail.com>2022-04-12 23:47:26 +0100
committerLuca Milanesio <luca.milanesio@gmail.com>2022-04-29 13:05:11 +0000
commitb8e9d684c28402d9888573d5ea79a1985c1b3253 (patch)
treee0c93c34ad7a19854f5a235bb5f0a14ecdbc7cd4
parent3d6472706e6984d28a0f84245a826641c812eadf (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.java5
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);
}
}