VisibleRefFilter Avoid touching the database for drafts
This is an analogous problem to the one with search results fixed in Ie54b9e2d. VisibleRefFilter is a little trickier because it was using ChangeCache, which only returned Changes, not the reviewer set. Change SearchingChangeCacheImpl to cache a different value type and return ChangeDatas from its search method so we can use the cached ReviewerSet where appropriate. Unfortunately for the Reindex program we still need to support not having a SearchingChangeCacheImpl, which means we have a completely separate codepath for reading changes from the database. Change-Id: Ic432a8e48a2bafc8d142b84b25101d95ffb674b7
This commit is contained in:
@@ -24,10 +24,11 @@ import com.google.gerrit.reviewdb.client.RefNames;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.IdentifiedUser;
|
||||
import com.google.gerrit.server.account.AccountResolver;
|
||||
import com.google.gerrit.server.git.ChangeCache;
|
||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||
import com.google.gerrit.server.git.SearchingChangeCacheImpl;
|
||||
import com.google.gerrit.server.git.TagCache;
|
||||
import com.google.gerrit.server.git.VisibleRefFilter;
|
||||
import com.google.gerrit.server.notedb.ChangeNotes;
|
||||
import com.google.gerrit.server.project.ProjectControl;
|
||||
import com.google.gerrit.sshd.CommandMetaData;
|
||||
import com.google.gerrit.sshd.SshCommand;
|
||||
@@ -59,7 +60,10 @@ public class LsUserRefs extends SshCommand {
|
||||
private TagCache tagCache;
|
||||
|
||||
@Inject
|
||||
private ChangeCache changeCache;
|
||||
private ChangeNotes.Factory changeNotesFactory;
|
||||
|
||||
@Inject
|
||||
private SearchingChangeCacheImpl changeCache;
|
||||
|
||||
@Option(name = "--project", aliases = {"-p"}, metaVar = "PROJECT",
|
||||
required = true, usage = "project for which the refs should be listed")
|
||||
@@ -95,9 +99,10 @@ public class LsUserRefs extends SshCommand {
|
||||
try (Repository repo = repoManager.openRepository(
|
||||
userProjectControl.getProject().getNameKey())) {
|
||||
try {
|
||||
Map<String, Ref> refsMap =
|
||||
new VisibleRefFilter(tagCache, changeCache, repo, userProjectControl,
|
||||
db, true).filter(repo.getRefDatabase().getRefs(ALL), false);
|
||||
Map<String, Ref> refsMap = new VisibleRefFilter(
|
||||
tagCache, changeNotesFactory, changeCache, repo,
|
||||
userProjectControl, db, true)
|
||||
.filter(repo.getRefDatabase().getRefs(ALL), false);
|
||||
|
||||
for (final String ref : refsMap.keySet()) {
|
||||
if (!onlyRefsHeads || ref.startsWith(RefNames.REFS_HEADS)) {
|
||||
|
||||
@@ -17,13 +17,14 @@ package com.google.gerrit.sshd.commands;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.gerrit.extensions.registration.DynamicSet;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.git.ChangeCache;
|
||||
import com.google.gerrit.server.git.SearchingChangeCacheImpl;
|
||||
import com.google.gerrit.server.git.TagCache;
|
||||
import com.google.gerrit.server.git.TransferConfig;
|
||||
import com.google.gerrit.server.git.UploadPackMetricsHook;
|
||||
import com.google.gerrit.server.git.VisibleRefFilter;
|
||||
import com.google.gerrit.server.git.validators.UploadValidationException;
|
||||
import com.google.gerrit.server.git.validators.UploadValidators;
|
||||
import com.google.gerrit.server.notedb.ChangeNotes;
|
||||
import com.google.gerrit.sshd.AbstractGitCommand;
|
||||
import com.google.gerrit.sshd.SshSession;
|
||||
import com.google.inject.Inject;
|
||||
@@ -47,7 +48,10 @@ final class Upload extends AbstractGitCommand {
|
||||
private TagCache tagCache;
|
||||
|
||||
@Inject
|
||||
private ChangeCache changeCache;
|
||||
private ChangeNotes.Factory changeNotesFactory;
|
||||
|
||||
@Inject
|
||||
private SearchingChangeCacheImpl changeCache;
|
||||
|
||||
@Inject
|
||||
private DynamicSet<PreUploadHook> preUploadHooks;
|
||||
@@ -68,8 +72,10 @@ final class Upload extends AbstractGitCommand {
|
||||
}
|
||||
|
||||
final UploadPack up = new UploadPack(repo);
|
||||
up.setAdvertiseRefsHook(new VisibleRefFilter(tagCache, changeCache, repo,
|
||||
projectControl, db, true));
|
||||
up.setAdvertiseRefsHook(
|
||||
new VisibleRefFilter(
|
||||
tagCache, changeNotesFactory, changeCache, repo, projectControl, db,
|
||||
true));
|
||||
up.setPackConfig(config.getPackConfig());
|
||||
up.setTimeout(config.getTimeout());
|
||||
up.setPostUploadHook(uploadMetrics);
|
||||
|
||||
Reference in New Issue
Block a user