Use change notes instead of index lookup when possible
Don't perform index lookup for change notes creation, as it is readily
available in ChangeData for has:a_depends-on operand. This change
improves the performance of "change:<> has:a_depends-on" by 2ms against
ES index backend (i.e. on avg took 16ms before and 14ms after this
change over 50 samples).
Change-Id: I404fea1ebc42beb8679cbc923bf8ba70aa55cbf8
diff --git a/src/main/java/com/googlesource/gerrit/plugins/depends/on/ChangeMessageStore.java b/src/main/java/com/googlesource/gerrit/plugins/depends/on/ChangeMessageStore.java
index a125a88..0bc8122 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/depends/on/ChangeMessageStore.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/depends/on/ChangeMessageStore.java
@@ -89,14 +89,22 @@
return loadWithOrder(cid).stream().collect(Collectors.toSet());
}
+ public Set<DependsOn> load(ChangeNotes changeNotes) throws StorageException {
+ return loadWithOrder(changeNotes).stream().collect(Collectors.toSet());
+ }
+
public List<DependsOn> loadWithOrder(Change.Id cid) throws StorageException {
- ChangeNotes changeNote;
+ ChangeNotes changeNotes;
try {
- changeNote = changeNotesFactory.createCheckedUsingIndexLookup(cid);
+ changeNotes = changeNotesFactory.createCheckedUsingIndexLookup(cid);
} catch (NoSuchChangeException e) {
return Collections.emptyList();
}
- for (ChangeMessage message : Lists.reverse(cmUtil.byChange(changeNote))) {
+ return loadWithOrder(changeNotes);
+ }
+
+ public List<DependsOn> loadWithOrder(ChangeNotes changeNotes) throws StorageException {
+ for (ChangeMessage message : Lists.reverse(cmUtil.byChange(changeNotes))) {
Optional<List<DependsOn>> deps = Comment.from(message.getMessage());
if (deps.isPresent()) {
return deps.get();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/depends/on/HasDependsOnOperator.java b/src/main/java/com/googlesource/gerrit/plugins/depends/on/HasDependsOnOperator.java
index b9d1e15..cb9e4ac 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/depends/on/HasDependsOnOperator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/depends/on/HasDependsOnOperator.java
@@ -32,7 +32,7 @@
@Override
public boolean match(ChangeData change) {
- return !changeMessageStore.load(change.getId()).isEmpty();
+ return !changeMessageStore.load(change.notes()).isEmpty();
}
@Override