summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Milanesio <luca.milanesio@gmail.com>2022-04-27 21:56:41 +0100
committerLuca Milanesio <luca.milanesio@gmail.com>2022-04-29 14:08:14 +0100
commit5003460963903cfe6294f27b5836ad4df657ea94 (patch)
tree52c6cda12f5313f8ac067d66a9332bc91d222cbb
parent71e4ce3d069507f6186e1112112ed2bfd45fbccd (diff)
Set PerThreadCache as readonly after creating a new patch-set
Apply the same optimisation made for Change-Id: I1b71bfcf to the production of events after creating a new patch-set and for returning the merged change JSON response. 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 refs for new patch-sets Change-Id: I58abd12f3779e0a57c1f8cda618905c9c0bb9b7e
-rw-r--r--java/com/google/gerrit/server/events/StreamEventsApiListener.java18
-rw-r--r--java/com/google/gerrit/server/extensions/events/RevisionCreated.java19
2 files changed, 23 insertions, 14 deletions
diff --git a/java/com/google/gerrit/server/events/StreamEventsApiListener.java b/java/com/google/gerrit/server/events/StreamEventsApiListener.java
index 6a530ed764..d009387861 100644
--- a/java/com/google/gerrit/server/events/StreamEventsApiListener.java
+++ b/java/com/google/gerrit/server/events/StreamEventsApiListener.java
@@ -291,14 +291,18 @@ public class StreamEventsApiListener
@Override
public void onRevisionCreated(RevisionCreatedListener.Event ev) {
try {
- ChangeNotes notes = getNotes(ev.getChange());
- Change change = notes.getChange();
- PatchSet patchSet = getPatchSet(notes, ev.getRevision());
- PatchSetCreatedEvent event = new PatchSetCreatedEvent(change);
+ Change change;
+ PatchSetCreatedEvent event;
+ try (ReadonlyRequestWindow window = PerThreadCache.openReadonlyRequestWindow()) {
+ ChangeNotes notes = getNotes(ev.getChange());
+ change = notes.getChange();
+ PatchSet patchSet = getPatchSet(notes, ev.getRevision());
+ event = new PatchSetCreatedEvent(change);
- event.change = changeAttributeSupplier(change, notes);
- event.patchSet = patchSetAttributeSupplier(change, patchSet);
- event.uploader = accountAttributeSupplier(ev.getWho());
+ event.change = changeAttributeSupplier(change, notes);
+ event.patchSet = patchSetAttributeSupplier(change, patchSet);
+ event.uploader = accountAttributeSupplier(ev.getWho());
+ }
dispatcher.run(d -> d.postEvent(change, event));
} catch (OrmException e) {
diff --git a/java/com/google/gerrit/server/extensions/events/RevisionCreated.java b/java/com/google/gerrit/server/extensions/events/RevisionCreated.java
index e043e9fcd2..cb4d0b4a89 100644
--- a/java/com/google/gerrit/server/extensions/events/RevisionCreated.java
+++ b/java/com/google/gerrit/server/extensions/events/RevisionCreated.java
@@ -24,6 +24,8 @@ import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.server.GpgException;
import com.google.gerrit.server.account.AccountState;
+import com.google.gerrit.server.cache.PerThreadCache;
+import com.google.gerrit.server.cache.PerThreadCache.ReadonlyRequestWindow;
import com.google.gerrit.server.patch.PatchListNotAvailableException;
import com.google.gerrit.server.patch.PatchListObjectTooLargeException;
import com.google.gerrit.server.permissions.PermissionBackendException;
@@ -73,13 +75,16 @@ public class RevisionCreated {
return;
}
try {
- Event event =
- new Event(
- util.changeInfo(change),
- util.revisionInfo(change.getProject(), patchSet),
- util.accountInfo(uploader),
- when,
- notify);
+ Event event;
+ try (ReadonlyRequestWindow window = PerThreadCache.openReadonlyRequestWindow()) {
+ event =
+ new Event(
+ util.changeInfo(change),
+ util.revisionInfo(change.getProject(), patchSet),
+ util.accountInfo(uploader),
+ when,
+ notify);
+ }
listeners.runEach(l -> l.onRevisionCreated(event));
} catch (PatchListObjectTooLargeException e) {
logger.atWarning().log("Couldn't fire event: %s", e.getMessage());