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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user