De-couple online reindex activation from index module
Gerrit plugins can contribute to submit rules evaluation, that are a part of secondary index. Therefore it is crucial that plugins are loaded prior to triggering of online reindexing. This change de-couples online reindex activation from index module and thus postpones the triggering of online reindexing until after loading of the plugins: 1. Load secondary index 2. Load all plugins 3. Trigger online reindex if needed Bug: Issue 10082 Change-Id: I1706d42cb50eb342c2b9eca076e2def5bd1426c0
This commit is contained in:
parent
5e8ab6a691
commit
020758e134
|
@ -323,6 +323,7 @@ public class GerritServer implements AutoCloseable {
|
|||
cfg.setBoolean("httpd", null, "requestLog", false);
|
||||
cfg.setBoolean("sshd", null, "requestLog", false);
|
||||
cfg.setBoolean("index", "lucene", "testInmemory", true);
|
||||
cfg.setBoolean("index", null, "onlineUpgrade", false);
|
||||
cfg.setString("gitweb", null, "cgi", "");
|
||||
daemon.setEnableHttpd(desc.httpd());
|
||||
daemon.setLuceneModule(LuceneIndexModule.singleVersionAllLatest(0));
|
||||
|
|
|
@ -25,20 +25,15 @@ public class ElasticIndexModule extends AbstractIndexModule {
|
|||
|
||||
public static ElasticIndexModule singleVersionWithExplicitVersions(
|
||||
Map<String, Integer> versions, int threads) {
|
||||
return new ElasticIndexModule(versions, threads, false);
|
||||
return new ElasticIndexModule(versions, threads);
|
||||
}
|
||||
|
||||
public static ElasticIndexModule latestVersionWithOnlineUpgrade() {
|
||||
return new ElasticIndexModule(null, 0, true);
|
||||
public static ElasticIndexModule latestVersion() {
|
||||
return new ElasticIndexModule(null, 0);
|
||||
}
|
||||
|
||||
public static ElasticIndexModule latestVersionWithoutOnlineUpgrade() {
|
||||
return new ElasticIndexModule(null, 0, false);
|
||||
}
|
||||
|
||||
private ElasticIndexModule(
|
||||
Map<String, Integer> singleVersions, int threads, boolean onlineUpgrade) {
|
||||
super(singleVersions, threads, onlineUpgrade);
|
||||
private ElasticIndexModule(Map<String, Integer> singleVersions, int threads) {
|
||||
super(singleVersions, threads);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -28,29 +28,24 @@ import org.eclipse.jgit.lib.Config;
|
|||
|
||||
public class LuceneIndexModule extends AbstractIndexModule {
|
||||
public static LuceneIndexModule singleVersionAllLatest(int threads) {
|
||||
return new LuceneIndexModule(ImmutableMap.<String, Integer>of(), threads, false);
|
||||
return new LuceneIndexModule(ImmutableMap.<String, Integer>of(), threads);
|
||||
}
|
||||
|
||||
public static LuceneIndexModule singleVersionWithExplicitVersions(
|
||||
Map<String, Integer> versions, int threads) {
|
||||
return new LuceneIndexModule(versions, threads, false);
|
||||
return new LuceneIndexModule(versions, threads);
|
||||
}
|
||||
|
||||
public static LuceneIndexModule latestVersionWithOnlineUpgrade() {
|
||||
return new LuceneIndexModule(null, 0, true);
|
||||
}
|
||||
|
||||
public static LuceneIndexModule latestVersionWithoutOnlineUpgrade() {
|
||||
return new LuceneIndexModule(null, 0, false);
|
||||
public static LuceneIndexModule latestVersion() {
|
||||
return new LuceneIndexModule(null, 0);
|
||||
}
|
||||
|
||||
static boolean isInMemoryTest(Config cfg) {
|
||||
return cfg.getBoolean("index", "lucene", "testInmemory", false);
|
||||
}
|
||||
|
||||
private LuceneIndexModule(
|
||||
Map<String, Integer> singleVersions, int threads, boolean onlineUpgrade) {
|
||||
super(singleVersions, threads, onlineUpgrade);
|
||||
private LuceneIndexModule(Map<String, Integer> singleVersions, int threads) {
|
||||
super(singleVersions, threads);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -76,6 +76,7 @@ import com.google.gerrit.server.git.receive.ReceiveCommitsExecutorModule;
|
|||
import com.google.gerrit.server.index.DummyIndexModule;
|
||||
import com.google.gerrit.server.index.IndexModule;
|
||||
import com.google.gerrit.server.index.IndexModule.IndexType;
|
||||
import com.google.gerrit.server.index.OnlineUpgrader;
|
||||
import com.google.gerrit.server.index.VersionManager;
|
||||
import com.google.gerrit.server.mail.SignedTokenEmailTokenVerifier;
|
||||
import com.google.gerrit.server.mail.receive.MailReceiver;
|
||||
|
@ -422,6 +423,11 @@ public class Daemon extends SiteProgram {
|
|||
}
|
||||
modules.add(new SignedTokenEmailTokenVerifier.Module());
|
||||
modules.add(new PluginModule());
|
||||
if (VersionManager.getOnlineUpgrade(config)
|
||||
// Schema upgrade is handled by OnlineNoteDbMigrator in this case.
|
||||
&& !migrateToNoteDb()) {
|
||||
modules.add(new OnlineUpgrader.Module());
|
||||
}
|
||||
modules.add(new PluginRestApiModule());
|
||||
modules.add(new RestCacheAdminModule());
|
||||
modules.add(new GpgModule(config));
|
||||
|
@ -489,19 +495,11 @@ public class Daemon extends SiteProgram {
|
|||
if (luceneModule != null) {
|
||||
return luceneModule;
|
||||
}
|
||||
boolean onlineUpgrade =
|
||||
VersionManager.getOnlineUpgrade(config)
|
||||
// Schema upgrade is handled by OnlineNoteDbMigrator in this case.
|
||||
&& !migrateToNoteDb();
|
||||
switch (indexType) {
|
||||
case LUCENE:
|
||||
return onlineUpgrade
|
||||
? LuceneIndexModule.latestVersionWithOnlineUpgrade()
|
||||
: LuceneIndexModule.latestVersionWithoutOnlineUpgrade();
|
||||
return LuceneIndexModule.latestVersion();
|
||||
case ELASTICSEARCH:
|
||||
return onlineUpgrade
|
||||
? ElasticIndexModule.latestVersionWithOnlineUpgrade()
|
||||
: ElasticIndexModule.latestVersionWithoutOnlineUpgrade();
|
||||
return ElasticIndexModule.latestVersion();
|
||||
default:
|
||||
throw new IllegalStateException("unsupported index.type = " + indexType);
|
||||
}
|
||||
|
|
|
@ -14,8 +14,6 @@
|
|||
|
||||
package com.google.gerrit.server.index;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
|
||||
import com.google.gerrit.index.IndexConfig;
|
||||
import com.google.gerrit.lifecycle.LifecycleModule;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
|
@ -33,16 +31,10 @@ public abstract class AbstractIndexModule extends AbstractModule {
|
|||
|
||||
private final int threads;
|
||||
private final Map<String, Integer> singleVersions;
|
||||
private final boolean onlineUpgrade;
|
||||
|
||||
protected AbstractIndexModule(
|
||||
Map<String, Integer> singleVersions, int threads, boolean onlineUpgrade) {
|
||||
if (singleVersions != null) {
|
||||
checkArgument(!onlineUpgrade, "online upgrade is incompatible with single version map");
|
||||
}
|
||||
protected AbstractIndexModule(Map<String, Integer> singleVersions, int threads) {
|
||||
this.singleVersions = singleVersions;
|
||||
this.threads = threads;
|
||||
this.onlineUpgrade = onlineUpgrade;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -92,9 +84,6 @@ public abstract class AbstractIndexModule extends AbstractModule {
|
|||
Class<? extends VersionManager> versionManagerClass = getVersionManager();
|
||||
bind(VersionManager.class).to(versionManagerClass);
|
||||
listener().to(versionManagerClass);
|
||||
if (onlineUpgrade) {
|
||||
listener().to(OnlineUpgrader.class);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,10 +15,18 @@
|
|||
package com.google.gerrit.server.index;
|
||||
|
||||
import com.google.gerrit.extensions.events.LifecycleListener;
|
||||
import com.google.gerrit.lifecycle.LifecycleModule;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
/** Listener to handle upgrading index schema versions at startup. */
|
||||
public class OnlineUpgrader implements LifecycleListener {
|
||||
public static class Module extends LifecycleModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
listener().to(OnlineUpgrader.class);
|
||||
}
|
||||
}
|
||||
|
||||
private final VersionManager versionManager;
|
||||
|
||||
@Inject
|
||||
|
|
|
@ -57,6 +57,8 @@ import com.google.gerrit.server.git.WorkQueue;
|
|||
import com.google.gerrit.server.git.receive.ReceiveCommitsExecutorModule;
|
||||
import com.google.gerrit.server.index.IndexModule;
|
||||
import com.google.gerrit.server.index.IndexModule.IndexType;
|
||||
import com.google.gerrit.server.index.OnlineUpgrader;
|
||||
import com.google.gerrit.server.index.VersionManager;
|
||||
import com.google.gerrit.server.mail.SignedTokenEmailTokenVerifier;
|
||||
import com.google.gerrit.server.mail.receive.MailReceiver;
|
||||
import com.google.gerrit.server.mail.send.SmtpEmailSender;
|
||||
|
@ -364,9 +366,9 @@ public class WebAppInitializer extends GuiceServletContextListener implements Fi
|
|||
private Module createIndexModule() {
|
||||
switch (indexType) {
|
||||
case LUCENE:
|
||||
return LuceneIndexModule.latestVersionWithOnlineUpgrade();
|
||||
return LuceneIndexModule.latestVersion();
|
||||
case ELASTICSEARCH:
|
||||
return ElasticIndexModule.latestVersionWithOnlineUpgrade();
|
||||
return ElasticIndexModule.latestVersion();
|
||||
default:
|
||||
throw new IllegalStateException("unsupported index.type = " + indexType);
|
||||
}
|
||||
|
@ -405,6 +407,9 @@ public class WebAppInitializer extends GuiceServletContextListener implements Fi
|
|||
}
|
||||
modules.add(H2CacheBasedWebSession.module());
|
||||
modules.add(new HttpPluginModule());
|
||||
if (VersionManager.getOnlineUpgrade(config)) {
|
||||
modules.add(new OnlineUpgrader.Module());
|
||||
}
|
||||
|
||||
AuthConfig authConfig = cfgInjector.getInstance(AuthConfig.class);
|
||||
if (authConfig.getAuthType() == AuthType.OPENID) {
|
||||
|
|
Loading…
Reference in New Issue