summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Pursehouse <dpursehouse@collab.net>2018-11-30 16:07:21 +0900
committerMarco Miller <marco.miller@ericsson.com>2018-11-30 11:44:35 -0500
commit499f7fe4f7740aa50673a2d27faba87fcf5911b7 (patch)
treebbd2928b7c54fd79788e282d68454abe5bed4aea
parent0e39a8da59f36f2544b5a66f3e02aea61135c740 (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
-rw-r--r--Documentation/config-gerrit.txt16
-rw-r--r--gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java8
-rw-r--r--gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java10
-rw-r--r--gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticSetting.java10
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 {