Skip to content

Commit

Permalink
deprecation info API: negative index.unassigned.node_left.delayed_tim…
Browse files Browse the repository at this point in the history
…eout (#36454)

This commit adds support to check for negative values for index setting
`index.unassigned.node_left.delayed_timeout` for the deprecation info API.

relates #36024
relates #26828
  • Loading branch information
jakelandis committed Dec 13, 2018
1 parent d36ee09 commit 52fee63
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ private DeprecationChecks() {
IndexDeprecationChecks::oldIndicesCheck,
IndexDeprecationChecks::delimitedPayloadFilterCheck,
IndexDeprecationChecks::percolatorUnmappedFieldsAsStringCheck,
IndexDeprecationChecks::indexNameCheck
IndexDeprecationChecks::indexNameCheck,
IndexDeprecationChecks::nodeLeftDelayedTimeCheck
));

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@
import org.elasticsearch.Version;
import org.elasticsearch.cluster.metadata.IndexMetaData;
import org.elasticsearch.cluster.metadata.MappingMetaData;
import org.elasticsearch.cluster.routing.UnassignedInfo;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.analysis.AnalysisRegistry;
import org.elasticsearch.xpack.core.deprecation.DeprecationIssue;

Expand Down Expand Up @@ -128,5 +131,22 @@ static DeprecationIssue percolatorUnmappedFieldsAsStringCheck(IndexMetaData inde
"] been removed in favor of [index.percolator.map_unmapped_fields_as_text].");
}
return null;
}

static DeprecationIssue nodeLeftDelayedTimeCheck(IndexMetaData indexMetaData) {
String setting = UnassignedInfo.INDEX_DELAYED_NODE_LEFT_TIMEOUT_SETTING.getKey();
String value = indexMetaData.getSettings().get(setting);
if (Strings.isNullOrEmpty(value) == false) {
TimeValue parsedValue = TimeValue.parseTimeValue(value, setting);
if (parsedValue.getNanos() < 0) {
return new DeprecationIssue(DeprecationIssue.Level.WARNING,
"Negative values for " + setting + " are deprecated and should be set to 0",
"https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-7.0.html" +
"#_literal_index_unassigned_node_left_delayed_timeout_literal_may_no_longer_be_negative",
"The index [" + indexMetaData.getIndex().getName() + "] has [" + setting + "] set to [" + value +
"], but negative values are not allowed");
}
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import org.elasticsearch.Version;
import org.elasticsearch.cluster.metadata.IndexMetaData;
import org.elasticsearch.cluster.routing.UnassignedInfo;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.test.VersionUtils;
Expand Down Expand Up @@ -106,4 +107,33 @@ public void testPercolatorUnmappedFieldsAsStringCheck() {
List<DeprecationIssue> noIssues = DeprecationChecks.filterChecks(INDEX_SETTINGS_CHECKS, c -> c.apply(goodIndex));
assertTrue(noIssues.isEmpty());
}

public void testNodeLeftDelayedTimeCheck() {
String negativeTimeValue = "-" + randomPositiveTimeValue();
String indexName = randomAlphaOfLengthBetween(0, 10);
String setting = UnassignedInfo.INDEX_DELAYED_NODE_LEFT_TIMEOUT_SETTING.getKey();

final IndexMetaData badIndex = IndexMetaData.builder(indexName)
.settings(settings(Version.CURRENT).put(setting, negativeTimeValue))
.numberOfShards(randomIntBetween(1, 100))
.numberOfReplicas(randomIntBetween(1, 15))
.build();
DeprecationIssue expected = new DeprecationIssue(DeprecationIssue.Level.WARNING,
"Negative values for " + setting + " are deprecated and should be set to 0",
"https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-7.0.html" +
"#_literal_index_unassigned_node_left_delayed_timeout_literal_may_no_longer_be_negative",
"The index [" + indexName + "] has [" + setting + "] set to [" + negativeTimeValue +
"], but negative values are not allowed");

List<DeprecationIssue> issues = DeprecationChecks.filterChecks(INDEX_SETTINGS_CHECKS, c -> c.apply(badIndex));
assertEquals(singletonList(expected), issues);

final IndexMetaData goodIndex = IndexMetaData.builder(indexName)
.settings(settings(Version.CURRENT))
.numberOfShards(randomIntBetween(1, 100))
.numberOfReplicas(randomIntBetween(1, 15))
.build();
List<DeprecationIssue> noIssues = DeprecationChecks.filterChecks(INDEX_SETTINGS_CHECKS, c -> c.apply(goodIndex));
assertTrue(noIssues.isEmpty());
}
}

0 comments on commit 52fee63

Please sign in to comment.