Skip to content

Commit 9b36a43

Browse files
authored
Add deprecation check for tracing.apm.* settings for upgrade assistant (#119850)
All usages of tracing.apm.* settings will be presented as a single deprecation issue. Relates to #ES-10293 (backport of #119773)
1 parent 6ba9972 commit 9b36a43

File tree

3 files changed

+100
-8
lines changed

3 files changed

+100
-8
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ private DeprecationChecks() {}
8888
NodeDeprecationChecks::checkLifecyleStepMasterTimeoutSetting,
8989
NodeDeprecationChecks::checkEqlEnabledSetting,
9090
NodeDeprecationChecks::checkNodeAttrData,
91-
NodeDeprecationChecks::checkWatcherBulkConcurrentRequestsSetting
91+
NodeDeprecationChecks::checkWatcherBulkConcurrentRequestsSetting,
92+
NodeDeprecationChecks::checkTracingApmSettings
9293
);
9394

9495
static List<BiFunction<IndexMetadata, ClusterState, DeprecationIssue>> INDEX_SETTINGS_CHECKS = List.of(

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

Lines changed: 75 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
import java.util.stream.Collectors;
3636
import java.util.stream.Stream;
3737

38+
import static org.elasticsearch.common.settings.Setting.Property.Deprecated;
39+
import static org.elasticsearch.common.settings.Setting.Property.NodeScope;
40+
import static org.elasticsearch.common.settings.Setting.Property.OperatorDynamic;
3841
import static org.elasticsearch.xpack.core.security.authc.RealmSettings.RESERVED_REALM_AND_DOMAIN_NAME_PREFIX;
3942

4043
public class NodeDeprecationChecks {
@@ -96,15 +99,13 @@ static DeprecationIssue checkRemovedSetting(
9699
return null;
97100
}
98101
final String removedSettingKey = removedSetting.getKey();
99-
Object removedSettingValue = removedSetting.exists(clusterSettings)
100-
? removedSetting.get(clusterSettings)
101-
: removedSetting.get(nodeSettings);
102-
String value;
103-
if (removedSettingValue instanceof TimeValue) {
104-
value = ((TimeValue) removedSettingValue).getStringRep();
102+
// read setting to force the deprecation warning
103+
if (removedSetting.exists(clusterSettings)) {
104+
removedSetting.get(clusterSettings);
105105
} else {
106-
value = removedSettingValue.toString();
106+
removedSetting.get(nodeSettings);
107107
}
108+
108109
final String message = String.format(Locale.ROOT, "Setting [%s] is deprecated", removedSettingKey);
109110
final String details = additionalDetailMessage == null
110111
? String.format(Locale.ROOT, "Remove the [%s] setting.", removedSettingKey)
@@ -114,6 +115,45 @@ static DeprecationIssue checkRemovedSetting(
114115
return new DeprecationIssue(deprecationLevel, message, url, details, false, meta);
115116
}
116117

118+
static DeprecationIssue checkMultipleRemovedSettings(
119+
final Settings clusterSettings,
120+
final Settings nodeSettings,
121+
final List<Setting<?>> removedSettings,
122+
final String url,
123+
String additionalDetailMessage,
124+
DeprecationIssue.Level deprecationLevel
125+
) {
126+
127+
var removedSettingsRemaining = removedSettings.stream().filter(s -> s.exists(clusterSettings) || s.exists(nodeSettings)).toList();
128+
if (removedSettingsRemaining.isEmpty()) {
129+
return null;
130+
}
131+
if (removedSettingsRemaining.size() == 1) {
132+
Setting<?> removedSetting = removedSettingsRemaining.get(0);
133+
return checkRemovedSetting(clusterSettings, nodeSettings, removedSetting, url, additionalDetailMessage, deprecationLevel);
134+
}
135+
136+
// read settings to force the deprecation warning
137+
removedSettingsRemaining.forEach(s -> {
138+
if (s.exists(clusterSettings)) {
139+
s.get(clusterSettings);
140+
} else {
141+
s.get(nodeSettings);
142+
}
143+
});
144+
145+
var removedSettingKeysRemaining = removedSettingsRemaining.stream().map(Setting::getKey).sorted().toList();
146+
final String message = String.format(Locale.ROOT, "Settings %s are deprecated", removedSettingKeysRemaining);
147+
final String details = additionalDetailMessage == null
148+
? String.format(Locale.ROOT, "Remove each setting in %s.", removedSettingKeysRemaining)
149+
: String.format(Locale.ROOT, "Remove each setting in %s. %s", removedSettingKeysRemaining, additionalDetailMessage);
150+
151+
var canAutoRemoveSettings = removedSettingsRemaining.stream()
152+
.allMatch(s -> s.exists(clusterSettings) && s.exists(nodeSettings) == false);
153+
var meta = createMetaMapForRemovableSettings(canAutoRemoveSettings, removedSettingKeysRemaining);
154+
return new DeprecationIssue(deprecationLevel, message, url, details, false, meta);
155+
}
156+
117157
static DeprecationIssue checkMultipleDataPaths(
118158
Settings nodeSettings,
119159
PluginsAndModules plugins,
@@ -967,4 +1007,32 @@ static DeprecationIssue checkWatcherBulkConcurrentRequestsSetting(
9671007
DeprecationIssue.Level.WARNING
9681008
);
9691009
}
1010+
1011+
static DeprecationIssue checkTracingApmSettings(
1012+
final Settings settings,
1013+
final PluginsAndModules pluginsAndModules,
1014+
final ClusterState clusterState,
1015+
final XPackLicenseState licenseState
1016+
) {
1017+
String url = "https://ela.st/es-deprecation-9-tracing-apm-settings";
1018+
Setting.Property[] properties = { NodeScope, OperatorDynamic, Deprecated };
1019+
List<Setting<?>> tracingApmSettings = List.of(
1020+
Setting.prefixKeySetting("tracing.apm.agent.", key -> Setting.simpleString(key, properties)),
1021+
Setting.stringListSetting("tracing.apm.names.include", properties),
1022+
Setting.stringListSetting("tracing.apm.names.exclude", properties),
1023+
Setting.stringListSetting("tracing.apm.sanitize_field_names", properties),
1024+
Setting.boolSetting("tracing.apm.enabled", false, properties),
1025+
SecureSetting.secureString("tracing.apm.api_key", null, Deprecated),
1026+
SecureSetting.secureString("tracing.apm.secret_token", null, Deprecated)
1027+
);
1028+
return checkMultipleRemovedSettings(
1029+
clusterState.metadata().settings(),
1030+
settings,
1031+
tracingApmSettings,
1032+
url,
1033+
"[tracing.apm.*] settings are no longer accepted as of 9.0.0"
1034+
+ " and should be replaced by [telemetry.*] or [telemetry.tracing.*] settings.",
1035+
DeprecationIssue.Level.CRITICAL
1036+
);
1037+
}
9701038
}

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

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

79+
public void testMultipleRemovedSettings() {
80+
final Settings clusterSettings = Settings.EMPTY;
81+
final Settings nodeSettings = Settings.builder()
82+
.put("node.removed_setting1", "value")
83+
.put("node.removed_setting2", "value")
84+
.build();
85+
final Setting<?> removedSetting1 = Setting.simpleString("node.removed_setting1");
86+
final Setting<?> removedSetting2 = Setting.simpleString("node.removed_setting2");
87+
final DeprecationIssue issue = NodeDeprecationChecks.checkMultipleRemovedSettings(
88+
clusterSettings,
89+
nodeSettings,
90+
shuffledList(List.of(removedSetting1, removedSetting2)),
91+
"https://removed-setting.example.com",
92+
"Some detail.",
93+
DeprecationIssue.Level.CRITICAL
94+
);
95+
assertThat(issue, not(nullValue()));
96+
assertThat(issue.getLevel(), equalTo(DeprecationIssue.Level.CRITICAL));
97+
assertThat(issue.getMessage(), equalTo("Settings [node.removed_setting1, node.removed_setting2] are deprecated"));
98+
assertThat(issue.getDetails(), equalTo("Remove each setting in [node.removed_setting1, node.removed_setting2]. Some detail."));
99+
assertThat(issue.getUrl(), equalTo("https://removed-setting.example.com"));
100+
}
101+
79102
public void testMultipleDataPaths() {
80103
final Settings settings = Settings.builder().putList("path.data", Arrays.asList("d1", "d2")).build();
81104
final XPackLicenseState licenseState = new XPackLicenseState(() -> 0);

0 commit comments

Comments
 (0)