summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Milanesio <luca.milanesio@gmail.com>2022-04-12 21:42:03 +0100
committerLuca Milanesio <luca.milanesio@gmail.com>2022-04-29 14:03:55 +0100
commit3d6472706e6984d28a0f84245a826641c812eadf (patch)
treec5f385301eecacf1b485a592e8567d0107948170
parent733a7ce06428be7ddd5c0d12e3c13cff5c0cf157 (diff)
Set PerThreadCache as readonly after deleting a change
Apply the same optimisation made for Change-Id: I1b71bfcf to the production of events after deleting 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 deleted changes Change-Id: Ic04e9257b7801bd331390679e00e1f980a9d1d19
-rw-r--r--java/com/google/gerrit/server/events/StreamEventsApiListener.java15
-rw-r--r--java/com/google/gerrit/server/extensions/events/ChangeDeleted.java7
2 files changed, 16 insertions, 6 deletions
diff --git a/java/com/google/gerrit/server/events/StreamEventsApiListener.java b/java/com/google/gerrit/server/events/StreamEventsApiListener.java
index d7801d0483..6a530ed764 100644
--- a/java/com/google/gerrit/server/events/StreamEventsApiListener.java
+++ b/java/com/google/gerrit/server/events/StreamEventsApiListener.java
@@ -541,12 +541,17 @@ public class StreamEventsApiListener
@Override
public void onChangeDeleted(ChangeDeletedListener.Event ev) {
try {
- ChangeNotes notes = getNotes(ev.getChange());
- Change change = notes.getChange();
- ChangeDeletedEvent event = new ChangeDeletedEvent(change);
+ Change change;
+ ChangeDeletedEvent event;
- event.change = changeAttributeSupplier(change, notes);
- event.deleter = accountAttributeSupplier(ev.getWho());
+ try (ReadonlyRequestWindow window = PerThreadCache.openReadonlyRequestWindow()) {
+ ChangeNotes notes = getNotes(ev.getChange());
+ change = notes.getChange();
+ event = new ChangeDeletedEvent(change);
+
+ event.change = changeAttributeSupplier(change, notes);
+ event.deleter = accountAttributeSupplier(ev.getWho());
+ }
dispatcher.run(d -> d.postEvent(change, event));
} catch (OrmException e) {
diff --git a/java/com/google/gerrit/server/extensions/events/ChangeDeleted.java b/java/com/google/gerrit/server/extensions/events/ChangeDeleted.java
index d9eb9f98b6..0c724b81c2 100644
--- a/java/com/google/gerrit/server/extensions/events/ChangeDeleted.java
+++ b/java/com/google/gerrit/server/extensions/events/ChangeDeleted.java
@@ -21,6 +21,8 @@ import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.events.ChangeDeletedListener;
import com.google.gerrit.reviewdb.client.Change;
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.plugincontext.PluginSetContext;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -45,7 +47,10 @@ public class ChangeDeleted {
return;
}
try {
- Event event = new Event(util.changeInfo(change), util.accountInfo(deleter), when);
+ Event event;
+ try (ReadonlyRequestWindow window = PerThreadCache.openReadonlyRequestWindow()) {
+ event = new Event(util.changeInfo(change), util.accountInfo(deleter), when);
+ }
listeners.runEach(l -> l.onChangeDeleted(event));
} catch (OrmException e) {
logger.atSevere().withCause(e).log("Couldn't fire event");