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