Skip to content

Commit 48be51c

Browse files
Fix for GET /_migration/deprecations doesn't check deprecated affix settings correctly (#137976) (#138039)
Fix for GET /_migration/deprecations doesn't check deprecated affix settings correctly Closes #137008
1 parent b09249d commit 48be51c

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
@@ -141,22 +141,30 @@ static DeprecationIssue checkRemovedSetting(
141141
String additionalDetailMessage,
142142
DeprecationIssue.Level deprecationLevel
143143
) {
144-
if (removedSetting.exists(clusterSettings) == false && removedSetting.exists(nodeSettings) == false) {
144+
boolean existsInClusterSettings = removedSetting.exists(clusterSettings);
145+
boolean existsInNodeSettings = removedSetting.exists(nodeSettings);
146+
if (existsInClusterSettings == false && existsInNodeSettings == false) {
145147
return null;
146148
}
147149
final String removedSettingKey = removedSetting.getKey();
148150
// read setting to force the deprecation warning
149-
if (removedSetting.exists(clusterSettings)) {
150-
removedSetting.get(clusterSettings);
151+
Settings settings;
152+
if (existsInClusterSettings) {
153+
settings = clusterSettings;
151154
} else {
152-
removedSetting.get(nodeSettings);
155+
settings = nodeSettings;
156+
}
157+
if (removedSetting instanceof Setting.AffixSetting<?> affixSetting) {
158+
affixSetting.getAsMap(settings);
159+
} else {
160+
removedSetting.get(settings);
153161
}
154162

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

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
@@ -78,6 +78,48 @@ public void testRemovedSetting() {
7878
assertThat(issue.getUrl(), equalTo("https://removed-setting.example.com"));
7979
}
8080

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

0 commit comments

Comments
 (0)