From b5c07fc917fa526fe1fa83e58b2d58c3cc077c67 Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Mon, 8 Feb 2016 17:44:47 +0100 Subject: [PATCH] InternalChangeQuery: Load changes from notedb if enabled When notedb is enabled we must load changes through ChangeNotes.Factory. If notedb is disabled, we could use ChangeNotes.Factory for loading the changes as well, but ChangeNotes.Factory doesn't support batch loading of changes, hence we still directly access the database here. Change-Id: Ibd26633e6d85b6bc63683a4866ea26b45f8c846a Signed-off-by: Edwin Kempin --- .../query/change/InternalChangeQuery.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java index 7bd4816368..d0f23242ce 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java @@ -34,6 +34,8 @@ import com.google.gerrit.server.index.ChangeIndex; import com.google.gerrit.server.index.IndexCollection; import com.google.gerrit.server.index.IndexConfig; import com.google.gerrit.server.index.Schema; +import com.google.gerrit.server.notedb.ChangeNotes; +import com.google.gerrit.server.notedb.NotesMigration; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.QueryParseException; import com.google.gwtorm.server.OrmException; @@ -83,16 +85,22 @@ public class InternalChangeQuery { private final QueryProcessor qp; private final IndexCollection indexes; private final ChangeData.Factory changeDataFactory; + private final NotesMigration notesMigration; + private final ChangeNotes.Factory notesFactory; @Inject InternalChangeQuery(IndexConfig indexConfig, QueryProcessor queryProcessor, IndexCollection indexes, - ChangeData.Factory changeDataFactory) { + ChangeData.Factory changeDataFactory, + NotesMigration notesMigration, + ChangeNotes.Factory notesFactory) { this.indexConfig = indexConfig; qp = queryProcessor.enforceVisibility(false); this.indexes = indexes; this.changeDataFactory = changeDataFactory; + this.notesMigration = notesMigration; + this.notesFactory = notesFactory; } public InternalChangeQuery setLimit(int n) { @@ -184,6 +192,18 @@ public class InternalChangeQuery { } List cds = new ArrayList<>(hashes.size()); + if (notesMigration.enabled()) { + for (Change.Id cid : changeIds) { + Change c = + notesFactory.create(db, branch.getParentKey(), cid).getChange(); + if (c != null && c.getDest().equals(branch) + && c.getStatus() != Change.Status.MERGED) { + cds.add(changeDataFactory.create(db, c)); + } + } + return cds; + } + for (Change c : db.changes().get(changeIds)) { if (c.getDest().equals(branch) && c.getStatus() != Change.Status.MERGED) { cds.add(changeDataFactory.create(db, c));