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
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
index 8e80977..3cab0d7 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
@@ -33,8 +33,8 @@
import com.google.gerrit.server.git.MultiProgressMonitor.Task;
import com.google.gerrit.server.patch.PatchListLoader;
import com.google.gerrit.server.query.change.ChangeData;
-import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject;
+import com.google.inject.Provider;
import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.diff.DiffFormatter;
@@ -101,17 +101,17 @@
}
}
- private final SchemaFactory<ReviewDb> schemaFactory;
+ private final Provider<ReviewDb> db;
private final GitRepositoryManager repoManager;
private final ListeningScheduledExecutorService executor;
private final ChangeIndexer.Factory indexerFactory;
@Inject
- ChangeBatchIndexer(SchemaFactory<ReviewDb> schemaFactory,
+ ChangeBatchIndexer(Provider<ReviewDb> db,
GitRepositoryManager repoManager,
@IndexExecutor ListeningScheduledExecutorService executor,
ChangeIndexer.Factory indexerFactory) {
- this.schemaFactory = schemaFactory;
+ this.db = db;
this.repoManager = repoManager;
this.executor = executor;
this.indexerFactory = indexerFactory;
@@ -201,27 +201,22 @@
@Override
public Void call() throws Exception {
Multimap<ObjectId, ChangeData> byId = ArrayListMultimap.create();
- ReviewDb db = schemaFactory.open();
+ Repository repo = repoManager.openRepository(project);
try {
- Repository repo = repoManager.openRepository(project);
- try {
- Map<String, Ref> refs = repo.getAllRefs();
- for (Change c : db.changes().byProject(project)) {
- Ref r = refs.get(c.currentPatchSetId().toRefName());
- if (r != null) {
- byId.put(r.getObjectId(), new ChangeData(c));
- }
+ Map<String, Ref> refs = repo.getAllRefs();
+ for (Change c : db.get().changes().byProject(project)) {
+ Ref r = refs.get(c.currentPatchSetId().toRefName());
+ 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 {
- 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;
}