From 3b943ab0e837924ca29b7f8f871f6b79ac71dbd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Ar=C3=A8s?= Date: Tue, 15 Nov 2016 13:40:24 -0800 Subject: [PATCH 1/2] Remove injection annotations from constructor in AbstractElasticIndex This constructor is not called by Guice. Change-Id: Ida5248659bdc112f6e171759eec780e591989b5f --- .../google/gerrit/elasticsearch/AbstractElasticIndex.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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 9ca07c2f51..3a23dcc310 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 @@ -27,8 +27,6 @@ import com.google.gerrit.server.index.Index; import com.google.gerrit.server.index.IndexUtils; import com.google.gerrit.server.index.Schema; import com.google.gerrit.server.index.Schema.Values; -import com.google.inject.Inject; -import com.google.inject.assistedinject.Assisted; import org.eclipse.jgit.lib.Config; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -60,11 +58,10 @@ abstract class AbstractElasticIndex implements Index { protected final JestHttpClient client; - @Inject AbstractElasticIndex(@GerritServerConfig Config cfg, FillArgs fillArgs, SitePaths sitePaths, - @Assisted Schema schema) { + Schema schema) { this.fillArgs = fillArgs; this.sitePaths = sitePaths; this.schema = schema; From 3ba6dfe6932297d6edf033456ee211ed76fce698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Ar=C3=A8s?= Date: Tue, 15 Nov 2016 15:12:55 -0800 Subject: [PATCH 2/2] Name Elasticsearch indexes the same way it's done for Lucene Change index is now named 'changes_0001' instead of 'gerrit'. This will enable to have other indexes like the accounts index and multiple versions to support online reindexing. The only difference is Elasticsearch allows to prefix the index name to allow to have use more than one Gerrit server in the same Elasticsearch server. Prefix 'gerrit1_' would result in a change index named 'gerrit1_changes_0001'. Change-Id: I9d089b6a0ce0e708a59e1f322ea1c011f78ffd31 --- Documentation/config-gerrit.txt | 9 +++++---- .../gerrit/elasticsearch/AbstractElasticIndex.java | 11 ++++++----- .../gerrit/elasticsearch/ElasticChangeIndex.java | 3 ++- .../gerrit/elasticsearch/ElasticQueryChangesTest.java | 9 ++++++--- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt index a0b0d1c35b..5597992021 100644 --- a/Documentation/config-gerrit.txt +++ b/Documentation/config-gerrit.txt @@ -2628,12 +2628,13 @@ Elasticsearch server port. + Defauls to `9200`. -[[index.name]]index.name:: +[[index.prefix]]index.prefix:: + -This setting can be used to index changes from multiple Gerrit -instances in a single Elasticsearch cluster. +This setting can be used to prefix index names to allow multiple Gerrit +instances in a single Elasticsearch cluster. Prefix 'gerrit1_' would result in a +change index named 'gerrit1_changes_0001'. + -Defaults to 'gerrit'. +Not set by default. [[ldap]] === Section ldap 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 3a23dcc310..75b1f2e1cc 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 @@ -14,7 +14,6 @@ package com.google.gerrit.elasticsearch; -import static com.google.common.base.MoreObjects.firstNonNull; import static com.google.common.base.Preconditions.checkState; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; @@ -47,7 +46,6 @@ import io.searchbox.indices.DeleteIndex; import io.searchbox.indices.IndicesExists; abstract class AbstractElasticIndex implements Index { - private static final String DEFAULT_INDEX_NAME = "gerrit"; private final Schema schema; private final FillArgs fillArgs; @@ -61,7 +59,8 @@ abstract class AbstractElasticIndex implements Index { AbstractElasticIndex(@GerritServerConfig Config cfg, FillArgs fillArgs, SitePaths sitePaths, - Schema schema) { + Schema schema, + String indexName) { this.fillArgs = fillArgs; this.sitePaths = sitePaths; this.schema = schema; @@ -69,8 +68,10 @@ abstract class AbstractElasticIndex implements Index { String hostname = getRequiredConfigOption(cfg, "hostname"); String port = getRequiredConfigOption(cfg, "port"); - this.indexName = - firstNonNull(cfg.getString("index", null, "name"), DEFAULT_INDEX_NAME); + this.indexName = String.format("%s%s%04d", + Strings.nullToEmpty(cfg.getString("index", null, "prefix")), + indexName, + schema.getVersion()); // By default Elasticsearch has a 1s delay before changes are available in // the index. Setting refresh(true) on calls to the index makes the index 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 2ba7b58e78..e2883ffc53 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 @@ -121,6 +121,7 @@ class ElasticChangeIndex extends AbstractElasticIndex } } + static final String CHANGES_PREFIX = "changes_"; static final String OPEN_CHANGES = "open_changes"; static final String CLOSED_CHANGES = "closed_changes"; @@ -138,7 +139,7 @@ class ElasticChangeIndex extends AbstractElasticIndex FillArgs fillArgs, SitePaths sitePaths, @Assisted Schema schema) { - super(cfg, fillArgs, sitePaths, schema); + super(cfg, fillArgs, sitePaths, schema, CHANGES_PREFIX); this.db = db; this.changeDataFactory = changeDataFactory; mapping = new ChangeMapping(schema); diff --git a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryChangesTest.java b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryChangesTest.java index ed96a67981..78590a1719 100644 --- a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryChangesTest.java +++ b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryChangesTest.java @@ -16,6 +16,7 @@ package com.google.gerrit.elasticsearch; import static com.google.common.base.Preconditions.checkState; import static com.google.common.truth.Truth.assertThat; +import static com.google.gerrit.elasticsearch.ElasticChangeIndex.CHANGES_PREFIX; import static com.google.gerrit.elasticsearch.ElasticChangeIndex.CLOSED_CHANGES; import static com.google.gerrit.elasticsearch.ElasticChangeIndex.OPEN_CHANGES; @@ -51,6 +52,9 @@ public class ElasticQueryChangesTest extends AbstractQueryChangesTest { private static final Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create(); + private static final String INDEX_NAME = + String.format("%s%04d", CHANGES_PREFIX, + ChangeSchemaDefinitions.INSTANCE.getLatest().getVersion()); private static Node node; private static String port; private static File elasticDir; @@ -112,7 +116,7 @@ public class ElasticQueryChangesTest extends AbstractQueryChangesTest { @After public void cleanupIndex() { - node.client().admin().indices().prepareDelete("gerrit").execute(); + node.client().admin().indices().prepareDelete(INDEX_NAME).execute(); createIndexes(); } @@ -135,7 +139,6 @@ public class ElasticQueryChangesTest extends AbstractQueryChangesTest { elasticsearchConfig.setString("index", null, "protocol", "http"); elasticsearchConfig.setString("index", null, "hostname", "localhost"); elasticsearchConfig.setString("index", null, "port", port); - elasticsearchConfig.setString("index", null, "name", "gerrit"); elasticsearchConfig.setBoolean("index", "elasticsearch", "test", true); return Guice.createInjector( new InMemoryModule(elasticsearchConfig, notesMigration)); @@ -151,7 +154,7 @@ public class ElasticQueryChangesTest extends AbstractQueryChangesTest { node.client() .admin() .indices() - .prepareCreate("gerrit") + .prepareCreate(INDEX_NAME) .addMapping(OPEN_CHANGES, gson.toJson(openChangesMapping)) .addMapping(CLOSED_CHANGES, gson.toJson(closedChangesMapping)) .execute()