diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java index c813d2b582..a60c552c25 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java @@ -62,6 +62,7 @@ abstract class AbstractElasticIndex implements Index { private final Schema schema; private final FillArgs fillArgs; private final SitePaths sitePaths; + private final String indexNameRaw; protected final String indexName; protected final JestHttpClient client; @@ -82,10 +83,11 @@ abstract class AbstractElasticIndex implements Index { this.queryBuilder = new ElasticQueryBuilder(); this.indexName = String.format( - "%s%s%04d", + "%s%s_%04d", Strings.nullToEmpty(cfg.getString("elasticsearch", null, "prefix")), indexName, schema.getVersion()); + this.indexNameRaw = indexName; this.client = clientBuilder.build(); } @@ -101,7 +103,7 @@ abstract class AbstractElasticIndex implements Index { @Override public void markReady(boolean ready) throws IOException { - IndexUtils.setReady(sitePaths, indexName, schema.getVersion(), ready); + IndexUtils.setReady(sitePaths, indexNameRaw, schema.getVersion(), ready); } @Override diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java index 2a46c40954..f0766bca04 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java @@ -84,7 +84,7 @@ public class ElasticAccountIndex extends AbstractElasticIndex schema) { // No parts of FillArgs are currently required, just use null. - super(cfg, null, sitePaths, schema, clientBuilder, ACCOUNTS_PREFIX); + super(cfg, null, sitePaths, schema, clientBuilder, ACCOUNTS); this.accountCache = accountCache; this.mapping = new AccountMapping(schema); } diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java index 15185a1e92..9692358e96 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java @@ -109,7 +109,7 @@ class ElasticChangeIndex extends AbstractElasticIndex SitePaths sitePaths, JestClientBuilder clientBuilder, @Assisted Schema schema) { - super(cfg, fillArgs, sitePaths, schema, clientBuilder, CHANGES_PREFIX); + super(cfg, fillArgs, sitePaths, schema, clientBuilder, CHANGES); this.db = db; this.changeDataFactory = changeDataFactory; mapping = new ChangeMapping(schema); diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java index e2c34f2bb3..01aa0aa25f 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java @@ -81,7 +81,7 @@ public class ElasticGroupIndex extends AbstractElasticIndex schema) { // No parts of FillArgs are currently required, just use null. - super(cfg, null, sitePaths, schema, clientBuilder, GROUPS_PREFIX); + super(cfg, null, sitePaths, schema, clientBuilder, GROUPS); this.groupCache = groupCache; this.mapping = new GroupMapping(schema); } diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticVersionManager.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticVersionManager.java index 74a6b69c0d..91c1becb74 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticVersionManager.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticVersionManager.java @@ -51,20 +51,10 @@ public class ElasticVersionManager extends AbstractVersionManager implements Lif prefix = MoreObjects.firstNonNull(cfg.getString("index", null, "prefix"), "gerrit"); } - @Override - protected boolean isDirty(Collection> inUse, Version v) { - return !inUse.contains(v); - } - @Override protected > TreeMap> scanVersions( IndexDefinition def, GerritIndexStatus cfg) { TreeMap> versions = new TreeMap<>(); - for (Schema schema : def.getSchemas().values()) { - int v = schema.getVersion(); - versions.put(v, new Version<>(schema, v, cfg.getReady(def.getName(), v))); - } - try { for (String version : versionDiscovery.discover(prefix, def.getName())) { Integer v = Ints.tryParse(version); @@ -72,13 +62,17 @@ public class ElasticVersionManager extends AbstractVersionManager implements Lif log.warn("Unrecognized version in index {}: {}", def.getName(), version); continue; } - if (!versions.containsKey(v)) { - versions.put(v, new Version(null, v, cfg.getReady(def.getName(), v))); - } + versions.put(v, new Version(null, v, true, cfg.getReady(def.getName(), v))); } } catch (IOException e) { log.error("Error scanning index: " + def.getName(), e); } + + for (Schema schema : def.getSchemas().values()) { + int v = schema.getVersion(); + boolean exists = versions.containsKey(v); + versions.put(v, new Version<>(schema, v, exists, cfg.getReady(def.getName(), v))); + } return versions; } } diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneVersionManager.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneVersionManager.java index 04d7d3552d..441a4b77b9 100644 --- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneVersionManager.java +++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneVersionManager.java @@ -39,15 +39,6 @@ import org.slf4j.LoggerFactory; public class LuceneVersionManager extends AbstractVersionManager implements LifecycleListener { private static final Logger log = LoggerFactory.getLogger(LuceneVersionManager.class); - private static class Version extends AbstractVersionManager.Version { - private final boolean exists; - - private Version(Schema schema, int version, boolean exists, boolean ready) { - super(schema, version, ready); - this.exists = exists; - } - } - static Path getDir(SitePaths sitePaths, String prefix, Schema schema) { return sitePaths.index_dir.resolve(String.format("%s%04d", prefix, schema.getVersion())); } @@ -60,13 +51,6 @@ public class LuceneVersionManager extends AbstractVersionManager implements Life super(cfg, sitePaths, defs); } - @Override - protected boolean isDirty( - Collection> inUse, - com.google.gerrit.server.index.AbstractVersionManager.Version v) { - return !inUse.contains(v) && ((Version) v).exists; - } - @Override protected > TreeMap> scanVersions( diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractVersionManager.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractVersionManager.java index 33cca1e160..a0273ce220 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractVersionManager.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractVersionManager.java @@ -35,12 +35,14 @@ public abstract class AbstractVersionManager implements LifecycleListener { public static class Version { public final Schema schema; public final int version; + public final boolean exists; public final boolean ready; - public Version(Schema schema, int version, boolean ready) { + public Version(Schema schema, int version, boolean exists, boolean ready) { checkArgument(schema == null || schema.getVersion() == version); this.schema = schema; this.version = version; + this.exists = exists; this.ready = ready; } } @@ -179,11 +181,13 @@ public abstract class AbstractVersionManager implements LifecycleListener { } } - protected abstract boolean isDirty(Collection> inUse, Version v); - protected abstract > TreeMap> scanVersions( IndexDefinition def, GerritIndexStatus cfg); + private boolean isDirty(Collection> inUse, Version v) { + return !inUse.contains(v) && v.exists; + } + private boolean isLatestIndexVersion(String name, OnlineReindexer reindexer) { int readVersion = defs.get(name).getIndexCollection().getSearchIndex().getSchema().getVersion(); return reindexer == null || reindexer.getVersion() == readVersion;