Skip to content

Commit 4fd8177

Browse files
Fix for GET /_migration/deprecations doesn't check deprecated affix settings correctly (#137976)
Fix for GET /_migration/deprecations doesn't check deprecated affix settings correctly Closes #137008
1 parent 5eb536e commit 4fd8177

File tree

3 files changed

+62
-5
lines changed

3 files changed

+62
-5
lines changed

docs/changelog/137976.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
pr: 137976
2+
summary: Fix for GET /_migration/deprecations doesn't check deprecated affix settings
3+
correctly
4+
area: Infra/Core
5+
type: bug
6+
issues:
7+
- 137008

x-pack/plugin/deprecation/src/main/java/org/elasticsearch/xpack/deprecation/NodeDeprecationChecks.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,22 +139,30 @@ static DeprecationIssue checkRemovedSetting(
139139
String additionalDetailMessage,
140140
DeprecationIssue.Level deprecationLevel
141141
) {
142-
if (removedSetting.exists(clusterSettings) == false && removedSetting.exists(nodeSettings) == false) {
142+
boolean existsInClusterSettings = removedSetting.exists(clusterSettings);
143+
boolean existsInNodeSettings = removedSetting.exists(nodeSettings);
144+
if (existsInClusterSettings == false && existsInNodeSettings == false) {
143145
return null;
144146
}
145147
final String removedSettingKey = removedSetting.getKey();
146148
// read setting to force the deprecation warning
147-
if (removedSetting.exists(clusterSettings)) {
148-
removedSetting.get(clusterSettings);
149+
Settings settings;
150+
if (existsInClusterSettings) {
151+
settings = clusterSettings;
149152
} else {
150-
removedSetting.get(nodeSettings);
153+
settings = nodeSettings;
154+
}
155+
if (removedSetting instanceof Setting.AffixSetting<?> affixSetting) {
156+
affixSetting.getAsMap(settings);
157+
} else {
158+
removedSetting.get(settings);
151159
}
152160

153161
final String message = String.format(Locale.ROOT, "Setting [%s] is deprecated", removedSettingKey);
154162
final String details = additionalDetailMessage == null
155163
? String.format(Locale.ROOT, "Remove the [%s] setting.", removedSettingKey)
156164
: String.format(Locale.ROOT, "Remove the [%s] setting. %s", removedSettingKey, additionalDetailMessage);
157-
boolean canAutoRemoveSetting = removedSetting.exists(clusterSettings) && removedSetting.exists(nodeSettings) == false;
165+
boolean canAutoRemoveSetting = existsInClusterSettings && existsInNodeSettings == false;
158166
Map<String, Object> meta = createMetaMapForRemovableSettings(canAutoRemoveSetting, removedSettingKey);
159167
return new DeprecationIssue(deprecationLevel, message, url, details, false, meta);
160168
}

x-pack/plugin/deprecation/src/test/java/org/elasticsearch/xpack/deprecation/NodeDeprecationChecksTests.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,48 @@ public void testRemovedSetting() {
7777
assertThat(issue.getUrl(), equalTo("https://removed-setting.example.com"));
7878
}
7979

80+
public void testRemovedAffixSetting() {
81+
final Settings clusterSettings = Settings.EMPTY;
82+
final Settings nodeSettings = Settings.builder().put("node.removed_setting.a.value", "value").build();
83+
final Setting<?> removedSetting = Setting.affixKeySetting(
84+
"node.removed_setting.",
85+
"value",
86+
key -> Setting.simpleString(key, Setting.Property.NodeScope)
87+
);
88+
final DeprecationIssue issue = NodeDeprecationChecks.checkRemovedSetting(
89+
clusterSettings,
90+
nodeSettings,
91+
removedSetting,
92+
"https://removed-setting.example.com",
93+
"Some detail.",
94+
DeprecationIssue.Level.CRITICAL
95+
);
96+
assertThat(issue, not(nullValue()));
97+
assertThat(issue.getLevel(), equalTo(DeprecationIssue.Level.CRITICAL));
98+
assertThat(issue.getMessage(), equalTo("Setting [node.removed_setting.*.value] is deprecated"));
99+
assertThat(issue.getDetails(), equalTo("Remove the [node.removed_setting.*.value] setting. Some detail."));
100+
assertThat(issue.getUrl(), equalTo("https://removed-setting.example.com"));
101+
}
102+
103+
public void testRemovedGroupSetting() {
104+
final Settings clusterSettings = Settings.EMPTY;
105+
final Settings nodeSettings = Settings.builder().put("node.removed_setting.v", "value").build();
106+
final Setting<?> removedSetting = Setting.groupSetting("node.removed_setting.", Setting.Property.NodeScope);
107+
final DeprecationIssue issue = NodeDeprecationChecks.checkRemovedSetting(
108+
clusterSettings,
109+
nodeSettings,
110+
removedSetting,
111+
"https://removed-setting.example.com",
112+
"Some detail.",
113+
DeprecationIssue.Level.CRITICAL
114+
);
115+
assertThat(issue, not(nullValue()));
116+
assertThat(issue.getLevel(), equalTo(DeprecationIssue.Level.CRITICAL));
117+
assertThat(issue.getMessage(), equalTo("Setting [node.removed_setting.] is deprecated"));
118+
assertThat(issue.getDetails(), equalTo("Remove the [node.removed_setting.] setting. Some detail."));
119+
assertThat(issue.getUrl(), equalTo("https://removed-setting.example.com"));
120+
}
121+
80122
public void testMultipleRemovedSettings() {
81123
final Settings clusterSettings = Settings.EMPTY;
82124
final Settings nodeSettings = Settings.builder()

0 commit comments

Comments
 (0)