diff options
author | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-12 21:42:03 +0100 |
---|---|---|
committer | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-29 14:03:55 +0100 |
commit | 3d6472706e6984d28a0f84245a826641c812eadf (patch) | |
tree | c5f385301eecacf1b485a592e8567d0107948170 | |
parent | 733a7ce06428be7ddd5c0d12e3c13cff5c0cf157 (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.java | 15 | ||||
-rw-r--r-- | java/com/google/gerrit/server/extensions/events/ChangeDeleted.java | 7 |
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"); |