diff options
author | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-27 21:56:41 +0100 |
---|---|---|
committer | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-29 14:08:14 +0100 |
commit | 5003460963903cfe6294f27b5836ad4df657ea94 (patch) | |
tree | 52c6cda12f5313f8ac067d66a9332bc91d222cbb | |
parent | 71e4ce3d069507f6186e1112112ed2bfd45fbccd (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.java | 18 | ||||
-rw-r--r-- | java/com/google/gerrit/server/extensions/events/RevisionCreated.java | 19 |
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()); |