diff options
author | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-12 14:55:40 +0100 |
---|---|---|
committer | Luca Milanesio <luca.milanesio@gmail.com> | 2022-04-29 13:47:30 +0100 |
commit | bba801e223d64e26a0ef7537fef7935db3ca46de (patch) | |
tree | b742f888a420f8814bd6ce380bb075330846a2f9 | |
parent | b23b8491dfa609438390f5735f2a3a63c94bbe47 (diff) |
Set PerThreadCache as readonly after merging a change
Apply the same optimisation made for Change-Id: I1b71bfcf to
the production of events after merging a change 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 merged changes
Change-Id: I34e147d644dfcdb5a6b1baa32cd4347805e506fc
3 files changed, 28 insertions, 15 deletions
diff --git a/java/com/google/gerrit/server/events/StreamEventsApiListener.java b/java/com/google/gerrit/server/events/StreamEventsApiListener.java index 272c835c0b..413269a6fa 100644 --- a/java/com/google/gerrit/server/events/StreamEventsApiListener.java +++ b/java/com/google/gerrit/server/events/StreamEventsApiListener.java @@ -441,14 +441,18 @@ public class StreamEventsApiListener @Override public void onChangeMerged(ChangeMergedListener.Event ev) { try { - ChangeNotes notes = getNotes(ev.getChange()); - Change change = notes.getChange(); - ChangeMergedEvent event = new ChangeMergedEvent(change); + ChangeMergedEvent event; + Change change; + try (ReadonlyRequestWindow window = PerThreadCache.openReadonlyRequestWindow()) { + ChangeNotes notes = getNotes(ev.getChange()); + change = notes.getChange(); + event = new ChangeMergedEvent(change); - event.change = changeAttributeSupplier(change, notes); - event.submitter = accountAttributeSupplier(ev.getWho()); - event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); - event.newRev = ev.getNewRevisionId(); + event.change = changeAttributeSupplier(change, notes); + event.submitter = accountAttributeSupplier(ev.getWho()); + event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); + event.newRev = ev.getNewRevisionId(); + } dispatcher.run(d -> d.postEvent(change, event)); } catch (OrmException e) { diff --git a/java/com/google/gerrit/server/extensions/events/ChangeMerged.java b/java/com/google/gerrit/server/extensions/events/ChangeMerged.java index 7b814aed0f..1f14db399f 100644 --- a/java/com/google/gerrit/server/extensions/events/ChangeMerged.java +++ b/java/com/google/gerrit/server/extensions/events/ChangeMerged.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; @@ -52,14 +54,18 @@ public class ChangeMerged { if (listeners.isEmpty()) { return; } + try { - Event event = - new Event( - util.changeInfo(change), - util.revisionInfo(change.getProject(), ps), - util.accountInfo(merger), - newRevisionId, - when); + Event event; + try (ReadonlyRequestWindow window = PerThreadCache.openReadonlyRequestWindow()) { + event = + new Event( + util.changeInfo(change), + util.revisionInfo(change.getProject(), ps), + util.accountInfo(merger), + newRevisionId, + when); + } listeners.runEach(l -> l.onChangeMerged(event)); } catch (PatchListObjectTooLargeException e) { logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); diff --git a/java/com/google/gerrit/server/restapi/change/Submit.java b/java/com/google/gerrit/server/restapi/change/Submit.java index a775c9399f..0839534d8a 100644 --- a/java/com/google/gerrit/server/restapi/change/Submit.java +++ b/java/com/google/gerrit/server/restapi/change/Submit.java @@ -43,6 +43,8 @@ import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.PatchSetUtil; import com.google.gerrit.server.ProjectUtil; import com.google.gerrit.server.account.AccountResolver; +import com.google.gerrit.server.cache.PerThreadCache; +import com.google.gerrit.server.cache.PerThreadCache.ReadonlyRequestWindow; import com.google.gerrit.server.change.ChangeJson; import com.google.gerrit.server.change.ChangeResource; import com.google.gerrit.server.change.RevisionResource; @@ -214,7 +216,8 @@ public class Submit try (MergeOp op = mergeOpProvider.get()) { ReviewDb db = dbProvider.get(); op.merge(db, change, submitter, true, input, false); - try { + try (ReadonlyRequestWindow readonlyRequestWindow = + PerThreadCache.openReadonlyRequestWindow()) { change = changeNotesFactory.createChecked(db, change.getProject(), change.getId()).getChange(); } catch (NoSuchChangeException e) { |