Merge "Add secondary index implementation using SolrCloud"
This commit is contained in:
@@ -14,9 +14,6 @@
|
||||
|
||||
package com.google.gerrit.pgm;
|
||||
|
||||
import static com.google.gerrit.lucene.IndexVersionCheck.SCHEMA_VERSIONS;
|
||||
import static com.google.gerrit.lucene.IndexVersionCheck.gerritIndexConfig;
|
||||
import static com.google.gerrit.lucene.LuceneChangeIndex.LUCENE_VERSION;
|
||||
import static com.google.gerrit.server.schema.DataSourceProvider.Context.MULTI_USER;
|
||||
|
||||
import com.google.common.base.Stopwatch;
|
||||
@@ -41,16 +38,19 @@ import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.cache.CacheRemovalListener;
|
||||
import com.google.gerrit.server.cache.h2.DefaultCacheFactory;
|
||||
import com.google.gerrit.server.config.SitePaths;
|
||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||
import com.google.gerrit.server.git.MultiProgressMonitor;
|
||||
import com.google.gerrit.server.git.MultiProgressMonitor.Task;
|
||||
import com.google.gerrit.server.index.ChangeIndex;
|
||||
import com.google.gerrit.server.index.ChangeIndexer;
|
||||
import com.google.gerrit.server.index.IndexExecutor;
|
||||
import com.google.gerrit.server.index.IndexModule;
|
||||
import com.google.gerrit.server.index.IndexModule.IndexType;
|
||||
import com.google.gerrit.server.index.NoIndexModule;
|
||||
import com.google.gerrit.server.patch.PatchListCacheImpl;
|
||||
import com.google.gerrit.server.patch.PatchListLoader;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.solr.SolrIndexModule;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.gwtorm.server.SchemaFactory;
|
||||
import com.google.inject.AbstractModule;
|
||||
@@ -61,8 +61,6 @@ import com.google.inject.Provider;
|
||||
import com.google.inject.ProvisionException;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.store.FSDirectory;
|
||||
import org.eclipse.jgit.diff.DiffEntry;
|
||||
import org.eclipse.jgit.diff.DiffFormatter;
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
@@ -78,14 +76,11 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.revwalk.RevObject;
|
||||
import org.eclipse.jgit.revwalk.RevTree;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
import org.eclipse.jgit.storage.file.FileBasedConfig;
|
||||
import org.eclipse.jgit.util.FS;
|
||||
import org.eclipse.jgit.util.io.DisabledOutputStream;
|
||||
import org.kohsuke.args4j.Option;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Collections;
|
||||
@@ -112,24 +107,24 @@ public class Reindex extends SiteProgram {
|
||||
|
||||
private Injector dbInjector;
|
||||
private Injector sysInjector;
|
||||
private SitePaths sitePaths;
|
||||
|
||||
@Override
|
||||
public int run() throws Exception {
|
||||
mustHaveValidSite();
|
||||
dbInjector = createDbInjector(MULTI_USER);
|
||||
if (!IndexModule.isEnabled(dbInjector)) {
|
||||
throw die("Secondary index not enabled");
|
||||
if (IndexModule.getIndexType(dbInjector) == IndexType.SQL) {
|
||||
throw die("index.type must be configured (or not SQL)");
|
||||
}
|
||||
|
||||
LifecycleManager dbManager = new LifecycleManager();
|
||||
dbManager.add(dbInjector);
|
||||
dbManager.start();
|
||||
sitePaths = dbInjector.getInstance(SitePaths.class);
|
||||
|
||||
sysInjector = createSysInjector();
|
||||
|
||||
// Delete before any index may be created depending on this data.
|
||||
deleteAll();
|
||||
|
||||
sysInjector = createSysInjector();
|
||||
LifecycleManager sysManager = new LifecycleManager();
|
||||
sysManager.add(sysInjector);
|
||||
sysManager.start();
|
||||
@@ -145,7 +140,18 @@ public class Reindex extends SiteProgram {
|
||||
private Injector createSysInjector() {
|
||||
List<Module> modules = Lists.newArrayList();
|
||||
modules.add(PatchListCacheImpl.module());
|
||||
modules.add(new LuceneIndexModule(false, threads, dryRun));
|
||||
AbstractModule changeIndexModule;
|
||||
switch (IndexModule.getIndexType(dbInjector)) {
|
||||
case LUCENE:
|
||||
changeIndexModule = new LuceneIndexModule(false, threads, dryRun);
|
||||
break;
|
||||
case SOLR:
|
||||
changeIndexModule = new SolrIndexModule(false, threads);
|
||||
break;
|
||||
default:
|
||||
changeIndexModule = new NoIndexModule();
|
||||
}
|
||||
modules.add(changeIndexModule);
|
||||
modules.add(new ReviewDbModule());
|
||||
modules.add(new AbstractModule() {
|
||||
@SuppressWarnings("rawtypes")
|
||||
@@ -206,19 +212,8 @@ public class Reindex extends SiteProgram {
|
||||
if (dryRun) {
|
||||
return;
|
||||
}
|
||||
for (String index : SCHEMA_VERSIONS.keySet()) {
|
||||
File file = new File(sitePaths.index_dir, index);
|
||||
if (file.exists()) {
|
||||
Directory dir = FSDirectory.open(file);
|
||||
try {
|
||||
for (String name : dir.listAll()) {
|
||||
dir.deleteFile(name);
|
||||
}
|
||||
} finally {
|
||||
dir.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
ChangeIndex index = sysInjector.getInstance(ChangeIndex.class);
|
||||
index.deleteAll();
|
||||
}
|
||||
|
||||
private int indexAll() throws Exception {
|
||||
@@ -480,14 +475,7 @@ public class Reindex extends SiteProgram {
|
||||
if (dryRun) {
|
||||
return;
|
||||
}
|
||||
FileBasedConfig cfg =
|
||||
new FileBasedConfig(gerritIndexConfig(sitePaths), FS.detect());
|
||||
cfg.load();
|
||||
|
||||
for (Map.Entry<String, Integer> e : SCHEMA_VERSIONS.entrySet()) {
|
||||
cfg.setInt("index", e.getKey(), "schemaVersion", e.getValue());
|
||||
}
|
||||
cfg.setEnum("lucene", null, "version", LUCENE_VERSION);
|
||||
cfg.save();
|
||||
ChangeIndex index = sysInjector.getInstance(ChangeIndex.class);
|
||||
index.finishIndex();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user