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("httpd", null, "requestLog", false);
|
||||||
cfg.setBoolean("sshd", null, "requestLog", false);
|
cfg.setBoolean("sshd", null, "requestLog", false);
|
||||||
cfg.setBoolean("index", "lucene", "testInmemory", true);
|
cfg.setBoolean("index", "lucene", "testInmemory", true);
|
||||||
|
cfg.setBoolean("index", null, "onlineUpgrade", false);
|
||||||
cfg.setString("gitweb", null, "cgi", "");
|
cfg.setString("gitweb", null, "cgi", "");
|
||||||
daemon.setEnableHttpd(desc.httpd());
|
daemon.setEnableHttpd(desc.httpd());
|
||||||
daemon.setLuceneModule(LuceneIndexModule.singleVersionAllLatest(0));
|
daemon.setLuceneModule(LuceneIndexModule.singleVersionAllLatest(0));
|
||||||
|
|
|
@ -25,20 +25,15 @@ public class ElasticIndexModule extends AbstractIndexModule {
|
||||||
|
|
||||||
public static ElasticIndexModule singleVersionWithExplicitVersions(
|
public static ElasticIndexModule singleVersionWithExplicitVersions(
|
||||||
Map<String, Integer> versions, int threads) {
|
Map<String, Integer> versions, int threads) {
|
||||||
return new ElasticIndexModule(versions, threads, false);
|
return new ElasticIndexModule(versions, threads);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ElasticIndexModule latestVersionWithOnlineUpgrade() {
|
public static ElasticIndexModule latestVersion() {
|
||||||
return new ElasticIndexModule(null, 0, true);
|
return new ElasticIndexModule(null, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ElasticIndexModule latestVersionWithoutOnlineUpgrade() {
|
private ElasticIndexModule(Map<String, Integer> singleVersions, int threads) {
|
||||||
return new ElasticIndexModule(null, 0, false);
|
super(singleVersions, threads);
|
||||||
}
|
|
||||||
|
|
||||||
private ElasticIndexModule(
|
|
||||||
Map<String, Integer> singleVersions, int threads, boolean onlineUpgrade) {
|
|
||||||
super(singleVersions, threads, onlineUpgrade);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -28,29 +28,24 @@ import org.eclipse.jgit.lib.Config;
|
||||||
|
|
||||||
public class LuceneIndexModule extends AbstractIndexModule {
|
public class LuceneIndexModule extends AbstractIndexModule {
|
||||||
public static LuceneIndexModule singleVersionAllLatest(int threads) {
|
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(
|
public static LuceneIndexModule singleVersionWithExplicitVersions(
|
||||||
Map<String, Integer> versions, int threads) {
|
Map<String, Integer> versions, int threads) {
|
||||||
return new LuceneIndexModule(versions, threads, false);
|
return new LuceneIndexModule(versions, threads);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LuceneIndexModule latestVersionWithOnlineUpgrade() {
|
public static LuceneIndexModule latestVersion() {
|
||||||
return new LuceneIndexModule(null, 0, true);
|
return new LuceneIndexModule(null, 0);
|
||||||
}
|
|
||||||
|
|
||||||
public static LuceneIndexModule latestVersionWithoutOnlineUpgrade() {
|
|
||||||
return new LuceneIndexModule(null, 0, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean isInMemoryTest(Config cfg) {
|
static boolean isInMemoryTest(Config cfg) {
|
||||||
return cfg.getBoolean("index", "lucene", "testInmemory", false);
|
return cfg.getBoolean("index", "lucene", "testInmemory", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private LuceneIndexModule(
|
private LuceneIndexModule(Map<String, Integer> singleVersions, int threads) {
|
||||||
Map<String, Integer> singleVersions, int threads, boolean onlineUpgrade) {
|
super(singleVersions, threads);
|
||||||
super(singleVersions, threads, onlineUpgrade);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.DummyIndexModule;
|
||||||
import com.google.gerrit.server.index.IndexModule;
|
import com.google.gerrit.server.index.IndexModule;
|
||||||
import com.google.gerrit.server.index.IndexModule.IndexType;
|
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.index.VersionManager;
|
||||||
import com.google.gerrit.server.mail.SignedTokenEmailTokenVerifier;
|
import com.google.gerrit.server.mail.SignedTokenEmailTokenVerifier;
|
||||||
import com.google.gerrit.server.mail.receive.MailReceiver;
|
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 SignedTokenEmailTokenVerifier.Module());
|
||||||
modules.add(new PluginModule());
|
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 PluginRestApiModule());
|
||||||
modules.add(new RestCacheAdminModule());
|
modules.add(new RestCacheAdminModule());
|
||||||
modules.add(new GpgModule(config));
|
modules.add(new GpgModule(config));
|
||||||
|
@ -489,19 +495,11 @@ public class Daemon extends SiteProgram {
|
||||||
if (luceneModule != null) {
|
if (luceneModule != null) {
|
||||||
return luceneModule;
|
return luceneModule;
|
||||||
}
|
}
|
||||||
boolean onlineUpgrade =
|
|
||||||
VersionManager.getOnlineUpgrade(config)
|
|
||||||
// Schema upgrade is handled by OnlineNoteDbMigrator in this case.
|
|
||||||
&& !migrateToNoteDb();
|
|
||||||
switch (indexType) {
|
switch (indexType) {
|
||||||
case LUCENE:
|
case LUCENE:
|
||||||
return onlineUpgrade
|
return LuceneIndexModule.latestVersion();
|
||||||
? LuceneIndexModule.latestVersionWithOnlineUpgrade()
|
|
||||||
: LuceneIndexModule.latestVersionWithoutOnlineUpgrade();
|
|
||||||
case ELASTICSEARCH:
|
case ELASTICSEARCH:
|
||||||
return onlineUpgrade
|
return ElasticIndexModule.latestVersion();
|
||||||
? ElasticIndexModule.latestVersionWithOnlineUpgrade()
|
|
||||||
: ElasticIndexModule.latestVersionWithoutOnlineUpgrade();
|
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException("unsupported index.type = " + indexType);
|
throw new IllegalStateException("unsupported index.type = " + indexType);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,8 +14,6 @@
|
||||||
|
|
||||||
package com.google.gerrit.server.index;
|
package com.google.gerrit.server.index;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
|
||||||
|
|
||||||
import com.google.gerrit.index.IndexConfig;
|
import com.google.gerrit.index.IndexConfig;
|
||||||
import com.google.gerrit.lifecycle.LifecycleModule;
|
import com.google.gerrit.lifecycle.LifecycleModule;
|
||||||
import com.google.gerrit.server.config.GerritServerConfig;
|
import com.google.gerrit.server.config.GerritServerConfig;
|
||||||
|
@ -33,16 +31,10 @@ public abstract class AbstractIndexModule extends AbstractModule {
|
||||||
|
|
||||||
private final int threads;
|
private final int threads;
|
||||||
private final Map<String, Integer> singleVersions;
|
private final Map<String, Integer> singleVersions;
|
||||||
private final boolean onlineUpgrade;
|
|
||||||
|
|
||||||
protected AbstractIndexModule(
|
protected AbstractIndexModule(Map<String, Integer> singleVersions, int threads) {
|
||||||
Map<String, Integer> singleVersions, int threads, boolean onlineUpgrade) {
|
|
||||||
if (singleVersions != null) {
|
|
||||||
checkArgument(!onlineUpgrade, "online upgrade is incompatible with single version map");
|
|
||||||
}
|
|
||||||
this.singleVersions = singleVersions;
|
this.singleVersions = singleVersions;
|
||||||
this.threads = threads;
|
this.threads = threads;
|
||||||
this.onlineUpgrade = onlineUpgrade;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -92,9 +84,6 @@ public abstract class AbstractIndexModule extends AbstractModule {
|
||||||
Class<? extends VersionManager> versionManagerClass = getVersionManager();
|
Class<? extends VersionManager> versionManagerClass = getVersionManager();
|
||||||
bind(VersionManager.class).to(versionManagerClass);
|
bind(VersionManager.class).to(versionManagerClass);
|
||||||
listener().to(versionManagerClass);
|
listener().to(versionManagerClass);
|
||||||
if (onlineUpgrade) {
|
|
||||||
listener().to(OnlineUpgrader.class);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,10 +15,18 @@
|
||||||
package com.google.gerrit.server.index;
|
package com.google.gerrit.server.index;
|
||||||
|
|
||||||
import com.google.gerrit.extensions.events.LifecycleListener;
|
import com.google.gerrit.extensions.events.LifecycleListener;
|
||||||
|
import com.google.gerrit.lifecycle.LifecycleModule;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
/** Listener to handle upgrading index schema versions at startup. */
|
/** Listener to handle upgrading index schema versions at startup. */
|
||||||
public class OnlineUpgrader implements LifecycleListener {
|
public class OnlineUpgrader implements LifecycleListener {
|
||||||
|
public static class Module extends LifecycleModule {
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
listener().to(OnlineUpgrader.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private final VersionManager versionManager;
|
private final VersionManager versionManager;
|
||||||
|
|
||||||
@Inject
|
@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.git.receive.ReceiveCommitsExecutorModule;
|
||||||
import com.google.gerrit.server.index.IndexModule;
|
import com.google.gerrit.server.index.IndexModule;
|
||||||
import com.google.gerrit.server.index.IndexModule.IndexType;
|
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.SignedTokenEmailTokenVerifier;
|
||||||
import com.google.gerrit.server.mail.receive.MailReceiver;
|
import com.google.gerrit.server.mail.receive.MailReceiver;
|
||||||
import com.google.gerrit.server.mail.send.SmtpEmailSender;
|
import com.google.gerrit.server.mail.send.SmtpEmailSender;
|
||||||
|
@ -364,9 +366,9 @@ public class WebAppInitializer extends GuiceServletContextListener implements Fi
|
||||||
private Module createIndexModule() {
|
private Module createIndexModule() {
|
||||||
switch (indexType) {
|
switch (indexType) {
|
||||||
case LUCENE:
|
case LUCENE:
|
||||||
return LuceneIndexModule.latestVersionWithOnlineUpgrade();
|
return LuceneIndexModule.latestVersion();
|
||||||
case ELASTICSEARCH:
|
case ELASTICSEARCH:
|
||||||
return ElasticIndexModule.latestVersionWithOnlineUpgrade();
|
return ElasticIndexModule.latestVersion();
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException("unsupported index.type = " + indexType);
|
throw new IllegalStateException("unsupported index.type = " + indexType);
|
||||||
}
|
}
|
||||||
|
@ -405,6 +407,9 @@ public class WebAppInitializer extends GuiceServletContextListener implements Fi
|
||||||
}
|
}
|
||||||
modules.add(H2CacheBasedWebSession.module());
|
modules.add(H2CacheBasedWebSession.module());
|
||||||
modules.add(new HttpPluginModule());
|
modules.add(new HttpPluginModule());
|
||||||
|
if (VersionManager.getOnlineUpgrade(config)) {
|
||||||
|
modules.add(new OnlineUpgrader.Module());
|
||||||
|
}
|
||||||
|
|
||||||
AuthConfig authConfig = cfgInjector.getInstance(AuthConfig.class);
|
AuthConfig authConfig = cfgInjector.getInstance(AuthConfig.class);
|
||||||
if (authConfig.getAuthType() == AuthType.OPENID) {
|
if (authConfig.getAuthType() == AuthType.OPENID) {
|
||||||
|
|
Loading…
Reference in New Issue