summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Milanesio <luca.milanesio@gmail.com>2022-04-12 21:37:26 +0100
committerLuca Milanesio <luca.milanesio@gmail.com>2022-04-29 13:54:36 +0100
commit733a7ce06428be7ddd5c0d12e3c13cff5c0cf157 (patch)
treed3931b7c84fa8faecc49671adda807ed8fa930bd
parentbba801e223d64e26a0ef7537fef7935db3ca46de (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.java18
-rw-r--r--java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java21
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());