diff options
author | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-12 21:37:26 +0100 |
---|---|---|
committer | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-29 13:54:36 +0100 |
commit | 733a7ce06428be7ddd5c0d12e3c13cff5c0cf157 (patch) | |
tree | d3931b7c84fa8faecc49671adda807ed8fa930bd | |
parent | bba801e223d64e26a0ef7537fef7935db3ca46de (diff) |
Set PerThreadCache as readonly after abandoning a change
Apply the same optimisation made for Change-Id: I1b71bfcf to
the production of events after abandoning a 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 refs for abandoned changes
Change-Id: Iab71eca5ead78f6462fd3aaf41eb9590fce4684e
-rw-r--r-- | java/com/google/gerrit/server/events/StreamEventsApiListener.java | 18 | ||||
-rw-r--r-- | java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java | 21 |
2 files changed, 24 insertions, 15 deletions
diff --git a/java/com/google/gerrit/server/events/StreamEventsApiListener.java b/java/com/google/gerrit/server/events/StreamEventsApiListener.java index 413269a6fa..d7801d0483 100644 --- a/java/com/google/gerrit/server/events/StreamEventsApiListener.java +++ b/java/com/google/gerrit/server/events/StreamEventsApiListener.java @@ -463,14 +463,18 @@ public class StreamEventsApiListener @Override public void onChangeAbandoned(ChangeAbandonedListener.Event ev) { try { - ChangeNotes notes = getNotes(ev.getChange()); - Change change = notes.getChange(); - ChangeAbandonedEvent event = new ChangeAbandonedEvent(change); + ChangeAbandonedEvent event; + Change change; + try (ReadonlyRequestWindow window = PerThreadCache.openReadonlyRequestWindow()) { + ChangeNotes notes = getNotes(ev.getChange()); + change = notes.getChange(); + event = new ChangeAbandonedEvent(change); - event.change = changeAttributeSupplier(change, notes); - event.abandoner = accountAttributeSupplier(ev.getWho()); - event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); - event.reason = ev.getReason(); + event.change = changeAttributeSupplier(change, notes); + event.abandoner = accountAttributeSupplier(ev.getWho()); + event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); + event.reason = ev.getReason(); + } dispatcher.run(d -> d.postEvent(change, event)); } catch (OrmException e) { diff --git a/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java b/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java index 3d6700e5a1..67e6ec5d20 100644 --- a/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java +++ b/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.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; @@ -58,14 +60,17 @@ public class ChangeAbandoned { return; } try { - Event event = - new Event( - util.changeInfo(change), - util.revisionInfo(change.getProject(), ps), - util.accountInfo(abandoner), - reason, - when, - notifyHandling); + Event event; + try (ReadonlyRequestWindow window = PerThreadCache.openReadonlyRequestWindow()) { + event = + new Event( + util.changeInfo(change), + util.revisionInfo(change.getProject(), ps), + util.accountInfo(abandoner), + reason, + when, + notifyHandling); + } listeners.runEach(l -> l.onChangeAbandoned(event)); } catch (PatchListObjectTooLargeException e) { logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); |