Skip to content

Commit

Permalink
Fix null value usage for index.number_of_routing_shards setting. (ela…
Browse files Browse the repository at this point in the history
…stic#76175)

Backporting  elastic#76069 to 7.x branch.

Ensure that the same number of routing shards is used for new indices
when `index.number_of_routing_shards` is not specified and `null` as value is specified.

Without this change if no index.number_of_routing_shards has been specified then
logic inside the MetadataCreateIndexService#getIndexNumberOfRoutingShards(...) kicks and
calculates a default based on number of primary shards use that as the true number of routing shards.
If a value is specified (including null) then the value the true number of routing shards is
determined from the IndexMetadata.INDEX_NUMBER_OF_ROUTING_SHARDS_SETTING setting and
in the case of when null is specified then the default value is gathered from
the IndexMetadata.INDEX_NUMBER_OF_SHARDS_SETTING setting.

Closes elastic#75139

Co-authored-by: Martijn van Groningen <[email protected]>
  • Loading branch information
elasticsearchmachine and martijnvg authored Aug 5, 2021
1 parent f92cb78 commit 43e4b89
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -879,7 +879,9 @@ static int getIndexNumberOfRoutingShards(Settings indexSettings, @Nullable Index
// in this case we either have no index to recover from or
// we have a source index with 1 shard and without an explicit split factor
// or one that is valid in that case we can split into whatever and auto-generate a new factor.
if (IndexMetadata.INDEX_NUMBER_OF_ROUTING_SHARDS_SETTING.exists(indexSettings)) {
// (Don't use IndexMetadata.INDEX_NUMBER_OF_ROUTING_SHARDS_SETTING.get(indexSettings) here, otherwise
// we get the default value when `null` has been provided as value)
if (indexSettings.get(IndexMetadata.INDEX_NUMBER_OF_ROUTING_SHARDS_SETTING.getKey()) != null) {
routingNumShards = IndexMetadata.INDEX_NUMBER_OF_ROUTING_SHARDS_SETTING.get(indexSettings);
} else {
routingNumShards = calculateNumRoutingShards(numTargetShards, indexVersionCreated);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,29 @@ public void testGetIndexNumberOfRoutingShardsWhenExplicitlyConfigured() {
assertThat(targetRoutingNumberOfShards, is(9));
}

public void testGetIndexNumberOfRoutingShardsNullVsNotDefined() {
int numberOfPrimaryShards = randomIntBetween(1, 16);
Settings indexSettings = settings(Version.CURRENT)
.put(INDEX_NUMBER_OF_ROUTING_SHARDS_SETTING.getKey(), (String) null)
.put(INDEX_NUMBER_OF_SHARDS_SETTING.getKey(), numberOfPrimaryShards)
.build();
int targetRoutingNumberOfShardsWithNull = getIndexNumberOfRoutingShards(indexSettings, null);
indexSettings = settings(Version.CURRENT)
.put(INDEX_NUMBER_OF_SHARDS_SETTING.getKey(), numberOfPrimaryShards)
.build();
int targetRoutingNumberOfShardsWithNotDefined = getIndexNumberOfRoutingShards(indexSettings, null);
assertThat(targetRoutingNumberOfShardsWithNull, is(targetRoutingNumberOfShardsWithNotDefined));
}

public void testGetIndexNumberOfRoutingShardsNull() {
Settings indexSettings = settings(Version.CURRENT)
.put(INDEX_NUMBER_OF_ROUTING_SHARDS_SETTING.getKey(), (String) null)
.put(INDEX_NUMBER_OF_SHARDS_SETTING.getKey(), 2)
.build();
int targetRoutingNumberOfShardsWithNull = getIndexNumberOfRoutingShards(indexSettings, null);
assertThat(targetRoutingNumberOfShardsWithNull, is(1024));
}

public void testGetIndexNumberOfRoutingShardsYieldsSourceNumberOfShards() {
Settings indexSettings = Settings.builder()
.put(INDEX_NUMBER_OF_SHARDS_SETTING.getKey(), 3)
Expand Down

0 comments on commit 43e4b89

Please sign in to comment.