diff options
author | David Pursehouse <dpursehouse@collab.net> | 2018-11-30 16:07:21 +0900 |
---|---|---|
committer | Marco Miller <marco.miller@ericsson.com> | 2018-11-30 11:44:35 -0500 |
commit | 499f7fe4f7740aa50673a2d27faba87fcf5911b7 (patch) | |
tree | bbd2928b7c54fd79788e282d68454abe5bed4aea | |
parent | 0e39a8da59f36f2544b5a66f3e02aea61135c740 (diff) |
Allow to set Elasticsearch number of shards and replicas
In the current latest version of Elasticsearch, the number of shards
and replicas are set to 5 and 1 respectively if not explicitly set.
From version 7, the default number of shards will be changed to 1, and
to continue using 5 it must be explicitly set when creating the index.
Explicitly set the values when creating the index, but allow them to be
changed in the gerrit.config. Default the new configurations to 5 and 1
to be consistent with the current defaults.
Bug: Issue 9768
Change-Id: Ia6bc925757f7bf4450d4c8feb21cf838671344f8
4 files changed, 38 insertions, 6 deletions
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt index 549401442c..32b1954b18 100644 --- a/Documentation/config-gerrit.txt +++ b/Documentation/config-gerrit.txt @@ -2932,6 +2932,22 @@ The value is in the usual time-unit format like `1 m`, `5 m`. + Defaults to `30000 ms`. +[[elasticsearch.numberOfShards]]elasticsearch.numberOfShards:: ++ +Sets the number of shards to use per index. Refer to the +link:https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html#getting-started-shards-and-replicas[ +Elasticsearch documentation] for details. ++ +Defaults to 5. + +[[elasticsearch.numberOfReplicas]]elasticsearch.numberOfReplicas:: ++ +Sets the number of replicas to use per index. Refer to the +link:https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html#getting-started-shards-and-replicas[ +Elasticsearch documentation] for details. ++ +Defaults to 1. + ==== Elasticsearch Security When security is enabled in Elasticsearch, the username and password must be provided. 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 dc8d18752d..06a30b5b60 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 @@ -82,6 +82,7 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> { return content; } + private final ElasticConfiguration config; private final Schema<V> schema; private final SitePaths sitePaths; private final String indexNameRaw; @@ -93,17 +94,18 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> { protected final ElasticQueryBuilder queryBuilder; AbstractElasticIndex( - ElasticConfiguration cfg, + ElasticConfiguration config, SitePaths sitePaths, Schema<V> schema, ElasticRestClientProvider client, String indexName, String indexType) { + this.config = config; this.sitePaths = sitePaths; this.schema = schema; this.gson = new GsonBuilder().setFieldNamingPolicy(LOWER_CASE_WITH_UNDERSCORES).create(); this.queryBuilder = new ElasticQueryBuilder(); - this.indexName = cfg.getIndexName(indexName, schema.getVersion()); + this.indexName = config.getIndexName(indexName, schema.getVersion()); this.indexNameRaw = indexName; this.client = client; this.type = client.adapter().getType(indexType); @@ -174,7 +176,7 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> { protected abstract String getMappings(); private String getSettings() { - return gson.toJson(ImmutableMap.of(SETTINGS, ElasticSetting.createSetting())); + return gson.toJson(ImmutableMap.of(SETTINGS, ElasticSetting.createSetting(config))); } protected abstract String getId(V v); diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java index dce28019f7..cd7456713c 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java @@ -41,9 +41,13 @@ class ElasticConfiguration { static final String KEY_MAX_RETRY_TIMEOUT = "maxRetryTimeout"; static final String KEY_PREFIX = "prefix"; static final String KEY_SERVER = "server"; + static final String KEY_NUMBER_OF_SHARDS = "numberOfShards"; + static final String KEY_NUMBER_OF_REPLICAS = "numberOfReplicas"; static final String DEFAULT_PORT = "9200"; static final String DEFAULT_USERNAME = "elastic"; static final int DEFAULT_MAX_RETRY_TIMEOUT_MS = 30000; + static final int DEFAULT_NUMBER_OF_SHARDS = 5; + static final int DEFAULT_NUMBER_OF_REPLICAS = 1; static final TimeUnit MAX_RETRY_TIMEOUT_UNIT = TimeUnit.MILLISECONDS; private final Config cfg; @@ -52,6 +56,8 @@ class ElasticConfiguration { final String username; final String password; final int maxRetryTimeout; + final int numberOfShards; + final int numberOfReplicas; final String prefix; @Inject @@ -72,6 +78,10 @@ class ElasticConfiguration { DEFAULT_MAX_RETRY_TIMEOUT_MS, MAX_RETRY_TIMEOUT_UNIT); this.prefix = Strings.nullToEmpty(cfg.getString(SECTION_ELASTICSEARCH, null, KEY_PREFIX)); + this.numberOfShards = + cfg.getInt(SECTION_ELASTICSEARCH, null, KEY_NUMBER_OF_SHARDS, DEFAULT_NUMBER_OF_SHARDS); + this.numberOfReplicas = + cfg.getInt(SECTION_ELASTICSEARCH, null, KEY_NUMBER_OF_REPLICAS, DEFAULT_NUMBER_OF_REPLICAS); this.hosts = new ArrayList<>(); for (String server : cfg.getStringList(SECTION_ELASTICSEARCH, null, KEY_SERVER)) { try { diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticSetting.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticSetting.java index 8dc8e8e893..98c313c78a 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticSetting.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticSetting.java @@ -22,17 +22,19 @@ class ElasticSetting { private static final ImmutableMap<String, String> CUSTOM_CHAR_MAPPING = ImmutableMap.of("\\u002E", "\\u0020", "\\u005F", "\\u0020"); - static SettingProperties createSetting() { - return new ElasticSetting.Builder().addCharFilter().addAnalyzer().build(); + static SettingProperties createSetting(ElasticConfiguration config) { + return new ElasticSetting.Builder().addCharFilter().addAnalyzer().build(config); } static class Builder { private final ImmutableMap.Builder<String, FieldProperties> fields = new ImmutableMap.Builder<>(); - SettingProperties build() { + SettingProperties build(ElasticConfiguration config) { SettingProperties properties = new SettingProperties(); properties.analysis = fields.build(); + properties.numberOfShards = config.numberOfShards; + properties.numberOfReplicas = config.numberOfReplicas; return properties; } @@ -71,6 +73,8 @@ class ElasticSetting { static class SettingProperties { Map<String, FieldProperties> analysis; + Integer numberOfShards; + Integer numberOfReplicas; } static class FieldProperties { |