Elasticsearch: Base the default number of shards on ES version
Before Elasticsearch 7.0, the default number of shards was 5. Since version 6, there is a warning about that default number changing to 1 starting from 7.0.0. The related Issue 9768 first reported about it. Set the default number of shards to 1 starting with 7.0, to remove that index creation warning with V7, thus fit with what Elasticsearch 7.0+ expects. Stick to the previous default for versions earlier than 7, to not potentially jeopardize existing deployments based on ES 6 or 5. Making this value non-default requires a corresponding configuration change on the Elasticsearch server side. And changing the number of shards for the latter is a non-trivial procedure. [1] introduces that and is already part of the Gerrit documentation. [1] https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-concepts.html#getting-started-shards-and-replicas Bug: Issue 10499 Change-Id: I9e91c471b48c4c4c893927c153a5661dfccc2bcb
This commit is contained in:
@@ -2930,7 +2930,7 @@ Sets the number of shards to use per index. Refer to the
|
||||
link:https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-concepts.html#getting-started-shards-and-replicas[
|
||||
Elasticsearch documentation] for details.
|
||||
+
|
||||
Defaults to 5.
|
||||
Defaults to 5 for Elasticsearch versions 5 and 6, and to 1 starting with Elasticsearch 7.
|
||||
|
||||
[[elasticsearch.numberOfReplicas]]elasticsearch.numberOfReplicas::
|
||||
+
|
||||
|
||||
@@ -162,7 +162,7 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> {
|
||||
}
|
||||
|
||||
// Recreate the index.
|
||||
String indexCreationFields = concatJsonString(getSettings(), getMappings());
|
||||
String indexCreationFields = concatJsonString(getSettings(client.adapter()), getMappings());
|
||||
response =
|
||||
performRequest(
|
||||
"PUT", indexName + client.adapter().includeTypeNameParam(), indexCreationFields);
|
||||
@@ -177,8 +177,8 @@ abstract class AbstractElasticIndex<K, V> implements Index<K, V> {
|
||||
|
||||
protected abstract String getMappings();
|
||||
|
||||
private String getSettings() {
|
||||
return gson.toJson(ImmutableMap.of(SETTINGS, ElasticSetting.createSetting(config)));
|
||||
private String getSettings(ElasticQueryAdapter adapter) {
|
||||
return gson.toJson(ImmutableMap.of(SETTINGS, ElasticSetting.createSetting(config, adapter)));
|
||||
}
|
||||
|
||||
protected abstract String getId(V v);
|
||||
|
||||
@@ -43,7 +43,7 @@ class ElasticConfiguration {
|
||||
static final String KEY_NUMBER_OF_REPLICAS = "numberOfReplicas";
|
||||
static final String DEFAULT_PORT = "9200";
|
||||
static final String DEFAULT_USERNAME = "elastic";
|
||||
static final int DEFAULT_NUMBER_OF_SHARDS = 5;
|
||||
static final int DEFAULT_NUMBER_OF_SHARDS = 0;
|
||||
static final int DEFAULT_NUMBER_OF_REPLICAS = 1;
|
||||
|
||||
private final Config cfg;
|
||||
@@ -101,4 +101,11 @@ class ElasticConfiguration {
|
||||
String getIndexName(String name, int schemaVersion) {
|
||||
return String.format("%s%s_%04d", prefix, name, schemaVersion);
|
||||
}
|
||||
|
||||
int getNumberOfShards(ElasticQueryAdapter adapter) {
|
||||
if (numberOfShards == DEFAULT_NUMBER_OF_SHARDS) {
|
||||
return adapter.getDefaultNumberOfShards();
|
||||
}
|
||||
return numberOfShards;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ public class ElasticQueryAdapter {
|
||||
private final boolean useV5Type;
|
||||
private final boolean useV6Type;
|
||||
private final boolean omitType;
|
||||
private final int defaultNumberOfShards;
|
||||
|
||||
private final String searchFilteringName;
|
||||
private final String indicesExistParams;
|
||||
@@ -40,6 +41,7 @@ public class ElasticQueryAdapter {
|
||||
this.useV5Type = !version.isV6OrLater();
|
||||
this.useV6Type = version.isV6();
|
||||
this.omitType = version.isV7OrLater();
|
||||
this.defaultNumberOfShards = version.isV7OrLater() ? 1 : 5;
|
||||
this.versionDiscoveryUrl = version.isV6OrLater() ? "/%s*" : "/%s*/_aliases";
|
||||
this.searchFilteringName = "_source";
|
||||
this.indicesExistParams =
|
||||
@@ -92,6 +94,10 @@ public class ElasticQueryAdapter {
|
||||
return omitType;
|
||||
}
|
||||
|
||||
int getDefaultNumberOfShards() {
|
||||
return defaultNumberOfShards;
|
||||
}
|
||||
|
||||
String getType() {
|
||||
return getType("");
|
||||
}
|
||||
|
||||
@@ -22,18 +22,18 @@ class ElasticSetting {
|
||||
private static final ImmutableMap<String, String> CUSTOM_CHAR_MAPPING =
|
||||
ImmutableMap.of("\\u002E", "\\u0020", "\\u005F", "\\u0020");
|
||||
|
||||
static SettingProperties createSetting(ElasticConfiguration config) {
|
||||
return new ElasticSetting.Builder().addCharFilter().addAnalyzer().build(config);
|
||||
static SettingProperties createSetting(ElasticConfiguration config, ElasticQueryAdapter adapter) {
|
||||
return new ElasticSetting.Builder().addCharFilter().addAnalyzer().build(config, adapter);
|
||||
}
|
||||
|
||||
static class Builder {
|
||||
private final ImmutableMap.Builder<String, FieldProperties> fields =
|
||||
new ImmutableMap.Builder<>();
|
||||
|
||||
SettingProperties build(ElasticConfiguration config) {
|
||||
SettingProperties build(ElasticConfiguration config, ElasticQueryAdapter adapter) {
|
||||
SettingProperties properties = new SettingProperties();
|
||||
properties.analysis = fields.build();
|
||||
properties.numberOfShards = config.numberOfShards;
|
||||
properties.numberOfShards = config.getNumberOfShards(adapter);
|
||||
properties.numberOfReplicas = config.numberOfReplicas;
|
||||
return properties;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user