Move common intra-Gerrit change queries to their own class

This is intended to replace most or all of the primary database index
queries in ChangeAccess.

Change-Id: I14fad0a46090b9fa3ef125c400c1d0a47d36381d
This commit is contained in:
Dave Borowitz
2014-12-19 15:31:23 -08:00
parent 0669078106
commit 9685a62e33
4 changed files with 68 additions and 28 deletions

View File

@@ -22,11 +22,8 @@ import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.RefNames;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.query.Predicate;
import com.google.gerrit.server.query.QueryParseException;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
import com.google.gerrit.server.query.change.QueryProcessor;
import com.google.gerrit.server.query.change.InternalChangeQuery;
import com.google.gerrit.server.util.MagicBranch;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Provider;
@@ -44,7 +41,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -54,14 +50,14 @@ public class ReceiveCommitsAdvertiseRefsHook implements AdvertiseRefsHook {
.getLogger(ReceiveCommitsAdvertiseRefsHook.class);
private final ReviewDb db;
private final Provider<QueryProcessor> queryProcessor;
private final Provider<InternalChangeQuery> queryProvider;
private final Project.NameKey projectName;
public ReceiveCommitsAdvertiseRefsHook(ReviewDb db,
Provider<QueryProcessor> queryProcessor,
Provider<InternalChangeQuery> queryProvider,
Project.NameKey projectName) {
this.db = db;
this.queryProcessor = queryProcessor;
this.queryProvider = queryProvider;
this.projectName = projectName;
}
@@ -105,7 +101,8 @@ public class ReceiveCommitsAdvertiseRefsHook implements AdvertiseRefsHook {
final int limit = 32;
try {
Set<PatchSet.Id> toGet = Sets.newHashSetWithExpectedSize(limit);
for (ChangeData cd : queryRecentChanges(limit)) {
for (ChangeData cd :
queryProvider.get().setLimit(limit).byProjectOpen(projectName)) {
PatchSet.Id id = cd.change().currentPatchSetId();
if (id != null) {
toGet.add(id);
@@ -174,20 +171,6 @@ public class ReceiveCommitsAdvertiseRefsHook implements AdvertiseRefsHook {
return toInclude;
}
private List<ChangeData> queryRecentChanges(int limit)
throws OrmException {
QueryProcessor qp = queryProcessor.get();
qp.setLimit(limit);
ChangeQueryBuilder qb = qp.getQueryBuilder();
Predicate<ChangeData> p =
Predicate.and(qb.project(projectName.get()), qb.status_open());
try {
return qp.queryChanges(p).changes();
} catch (QueryParseException e) {
throw new OrmException(e);
}
}
private static boolean skip(String name) {
return name.startsWith(RefNames.REFS_CHANGES)
|| name.startsWith(RefNames.REFS_CACHE_AUTOMERGE)