Don't open new database connections in ChangeBatchIndexer

In the environment where this is used (Reindex), we already have a
Provider<ReviewDb> available, so just use it instead of tying up
another database connection.

Change-Id: Ib32bebbed7297fe9922221055b928418ad464d1c
This commit is contained in:
Dave Borowitz
2013-10-02 16:18:15 -07:00
parent 848a6bdf31
commit 29b29e5f26

View File

@@ -33,8 +33,8 @@ import com.google.gerrit.server.git.MultiProgressMonitor;
import com.google.gerrit.server.git.MultiProgressMonitor.Task; import com.google.gerrit.server.git.MultiProgressMonitor.Task;
import com.google.gerrit.server.patch.PatchListLoader; import com.google.gerrit.server.patch.PatchListLoader;
import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.ChangeData;
import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Provider;
import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.diff.DiffFormatter; import org.eclipse.jgit.diff.DiffFormatter;
@@ -101,17 +101,17 @@ public class ChangeBatchIndexer {
} }
} }
private final SchemaFactory<ReviewDb> schemaFactory; private final Provider<ReviewDb> db;
private final GitRepositoryManager repoManager; private final GitRepositoryManager repoManager;
private final ListeningScheduledExecutorService executor; private final ListeningScheduledExecutorService executor;
private final ChangeIndexer.Factory indexerFactory; private final ChangeIndexer.Factory indexerFactory;
@Inject @Inject
ChangeBatchIndexer(SchemaFactory<ReviewDb> schemaFactory, ChangeBatchIndexer(Provider<ReviewDb> db,
GitRepositoryManager repoManager, GitRepositoryManager repoManager,
@IndexExecutor ListeningScheduledExecutorService executor, @IndexExecutor ListeningScheduledExecutorService executor,
ChangeIndexer.Factory indexerFactory) { ChangeIndexer.Factory indexerFactory) {
this.schemaFactory = schemaFactory; this.db = db;
this.repoManager = repoManager; this.repoManager = repoManager;
this.executor = executor; this.executor = executor;
this.indexerFactory = indexerFactory; this.indexerFactory = indexerFactory;
@@ -201,27 +201,22 @@ public class ChangeBatchIndexer {
@Override @Override
public Void call() throws Exception { public Void call() throws Exception {
Multimap<ObjectId, ChangeData> byId = ArrayListMultimap.create(); Multimap<ObjectId, ChangeData> byId = ArrayListMultimap.create();
ReviewDb db = schemaFactory.open(); Repository repo = repoManager.openRepository(project);
try { try {
Repository repo = repoManager.openRepository(project); Map<String, Ref> refs = repo.getAllRefs();
try { for (Change c : db.get().changes().byProject(project)) {
Map<String, Ref> refs = repo.getAllRefs(); Ref r = refs.get(c.currentPatchSetId().toRefName());
for (Change c : db.changes().byProject(project)) { if (r != null) {
Ref r = refs.get(c.currentPatchSetId().toRefName()); byId.put(r.getObjectId(), new ChangeData(c));
if (r != null) {
byId.put(r.getObjectId(), new ChangeData(c));
}
} }
new ProjectIndexer(indexer, byId, repo, done, failed, verboseWriter)
.call();
} finally {
repo.close();
// TODO(dborowitz): Opening all repositories in a live server may be
// wasteful; see if we can determine which ones it is safe to close
// with RepositoryCache.close(repo).
} }
new ProjectIndexer(indexer, byId, repo, done, failed, verboseWriter)
.call();
} finally { } finally {
db.close(); repo.close();
// TODO(dborowitz): Opening all repositories in a live server may be
// wasteful; see if we can determine which ones it is safe to close
// with RepositoryCache.close(repo).
} }
return null; return null;
} }