summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Milanesio <luca.milanesio@gmail.com>2021-10-14 08:15:09 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-10-14 08:15:09 +0000
commita7bcaeb6ee95142abeced1968f52329ca6778cac (patch)
tree119d95e3639fbaad3db5a3e73257a9d666c297fe
parent220d9cf6be1a7498d1bee670ef63911f15c47fbf (diff)
parent3b5bca50d5be1259caf19cd4c1f67aaa088f09bf (diff)
Merge "Reuse the same Repository when listing changes by status" into stable-3.3
-rw-r--r--java/com/google/gerrit/server/notedb/ChangeNotes.java27
-rw-r--r--java/com/google/gerrit/server/query/change/InternalChangeQuery.java1
2 files changed, 27 insertions, 1 deletions
diff --git a/java/com/google/gerrit/server/notedb/ChangeNotes.java b/java/com/google/gerrit/server/notedb/ChangeNotes.java
index 8eb5c5cdaa..047aa0c16a 100644
--- a/java/com/google/gerrit/server/notedb/ChangeNotes.java
+++ b/java/com/google/gerrit/server/notedb/ChangeNotes.java
@@ -66,12 +66,14 @@ import com.google.inject.Singleton;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;
import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
@@ -198,13 +200,14 @@ public class ChangeNotes extends AbstractChangeNotes<ChangeNotes> {
}
public List<ChangeNotes> create(
+ Repository repo,
Project.NameKey project,
Collection<Change.Id> changeIds,
Predicate<ChangeNotes> predicate) {
List<ChangeNotes> notes = new ArrayList<>();
for (Change.Id cid : changeIds) {
try {
- ChangeNotes cn = create(project, cid);
+ ChangeNotes cn = create(repo, project, cid);
if (cn.getChange() != null && predicate.test(cn)) {
notes.add(cn);
}
@@ -217,6 +220,28 @@ public class ChangeNotes extends AbstractChangeNotes<ChangeNotes> {
return notes;
}
+ /* TODO: This is now unused in the Gerrit code-base, however it is kept in the code
+ /* because it is a public method in a stable branch.
+ * It can be removed in master branch where we have more flexibility to change the API
+ * interface.
+ */
+ public List<ChangeNotes> create(
+ Project.NameKey project,
+ Collection<Change.Id> changeIds,
+ Predicate<ChangeNotes> predicate) {
+ try (Repository repo = args.repoManager.openRepository(project)) {
+ return create(repo, project, changeIds, predicate);
+ } catch (RepositoryNotFoundException e) {
+ // The repository does not exist, hence it does not contain
+ // any change.
+ } catch (IOException e) {
+ logger.atWarning().withCause(e).log(
+ "Unable to open project=%s when trying to retrieve changeId=%s from NoteDb",
+ project, changeIds);
+ }
+ return Collections.emptyList();
+ }
+
public ListMultimap<Project.NameKey, ChangeNotes> create(Predicate<ChangeNotes> predicate)
throws IOException {
ListMultimap<Project.NameKey, ChangeNotes> m =
diff --git a/java/com/google/gerrit/server/query/change/InternalChangeQuery.java b/java/com/google/gerrit/server/query/change/InternalChangeQuery.java
index 6605c23da2..1012f4a54e 100644
--- a/java/com/google/gerrit/server/query/change/InternalChangeQuery.java
+++ b/java/com/google/gerrit/server/query/change/InternalChangeQuery.java
@@ -193,6 +193,7 @@ public class InternalChangeQuery extends InternalQuery<ChangeData, InternalChang
List<ChangeNotes> notes =
notesFactory.create(
+ repo,
branch.project(),
changeIds,
cn -> {