summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Milanesio <luca.milanesio@gmail.com>2022-04-12 14:55:40 +0100
committerLuca Milanesio <luca.milanesio@gmail.com>2022-04-29 13:47:30 +0100
commitbba801e223d64e26a0ef7537fef7935db3ca46de (patch)
treeb742f888a420f8814bd6ce380bb075330846a2f9
parentb23b8491dfa609438390f5735f2a3a63c94bbe47 (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
-rw-r--r--java/com/google/gerrit/server/events/StreamEventsApiListener.java18
-rw-r--r--java/com/google/gerrit/server/extensions/events/ChangeMerged.java20
-rw-r--r--java/com/google/gerrit/server/restapi/change/Submit.java5
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) {