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

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

relates elastic#36024
relates elastic#26828
  • Loading branch information
jakelandis committed Dec 10, 2018
1 parent 27487c9 commit d9d8556
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ private DeprecationChecks() {
Collections.unmodifiableList(Arrays.asList(
IndexDeprecationChecks::oldIndicesCheck,
IndexDeprecationChecks::delimitedPayloadFilterCheck,
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 @@ -116,4 +119,20 @@ static DeprecationIssue indexNameCheck(IndexMetaData indexMetaData) {
}
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 index.unassigned.node_left.delayed_timeout 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() + " is set to " + value);
}
}
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 @@ -76,4 +77,31 @@ public void testIndexNameCheck(){
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);

final IndexMetaData badIndex = IndexMetaData.builder(indexName)
.settings(settings(Version.CURRENT).put(UnassignedInfo.INDEX_DELAYED_NODE_LEFT_TIMEOUT_SETTING.getKey(), negativeTimeValue))
.numberOfShards(randomIntBetween(1, 100))
.numberOfReplicas(randomIntBetween(1, 15))
.build();
DeprecationIssue expected = new DeprecationIssue(DeprecationIssue.Level.WARNING,
"Negative values for index.unassigned.node_left.delayed_timeout 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 + " is set to " + negativeTimeValue);

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 d9d8556

Please sign in to comment.