Skip to content

Commit 39c2dd8

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

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
@@ -87,7 +87,8 @@ private DeprecationChecks() {}
8787
NodeDeprecationChecks::checkLifecyleStepMasterTimeoutSetting,
8888
NodeDeprecationChecks::checkEqlEnabledSetting,
8989
NodeDeprecationChecks::checkNodeAttrData,
90-
NodeDeprecationChecks::checkWatcherBulkConcurrentRequestsSetting
90+
NodeDeprecationChecks::checkWatcherBulkConcurrentRequestsSetting,
91+
NodeDeprecationChecks::checkTracingApmSettings
9192
);
9293

9394
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
@@ -34,6 +34,9 @@
3434
import java.util.stream.Collectors;
3535
import java.util.stream.Stream;
3636

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

3942
public class NodeDeprecationChecks {
@@ -95,15 +98,13 @@ static DeprecationIssue checkRemovedSetting(
9598
return null;
9699
}
97100
final String removedSettingKey = removedSetting.getKey();
98-
Object removedSettingValue = removedSetting.exists(clusterSettings)
99-
? removedSetting.get(clusterSettings)
100-
: removedSetting.get(nodeSettings);
101-
String value;
102-
if (removedSettingValue instanceof TimeValue) {
103-
value = ((TimeValue) removedSettingValue).getStringRep();
101+
// read setting to force the deprecation warning
102+
if (removedSetting.exists(clusterSettings)) {
103+
removedSetting.get(clusterSettings);
104104
} else {
105-
value = removedSettingValue.toString();
105+
removedSetting.get(nodeSettings);
106106
}
107+
107108
final String message = String.format(Locale.ROOT, "Setting [%s] is deprecated", removedSettingKey);
108109
final String details = additionalDetailMessage == null
109110
? String.format(Locale.ROOT, "Remove the [%s] setting.", removedSettingKey)
@@ -113,6 +114,45 @@ static DeprecationIssue checkRemovedSetting(
113114
return new DeprecationIssue(deprecationLevel, message, url, details, false, meta);
114115
}
115116

117+
static DeprecationIssue checkMultipleRemovedSettings(
118+
final Settings clusterSettings,
119+
final Settings nodeSettings,
120+
final List<Setting<?>> removedSettings,
121+
final String url,
122+
String additionalDetailMessage,
123+
DeprecationIssue.Level deprecationLevel
124+
) {
125+
126+
var removedSettingsRemaining = removedSettings.stream().filter(s -> s.exists(clusterSettings) || s.exists(nodeSettings)).toList();
127+
if (removedSettingsRemaining.isEmpty()) {
128+
return null;
129+
}
130+
if (removedSettingsRemaining.size() == 1) {
131+
Setting<?> removedSetting = removedSettingsRemaining.get(0);
132+
return checkRemovedSetting(clusterSettings, nodeSettings, removedSetting, url, additionalDetailMessage, deprecationLevel);
133+
}
134+
135+
// read settings to force the deprecation warning
136+
removedSettingsRemaining.forEach(s -> {
137+
if (s.exists(clusterSettings)) {
138+
s.get(clusterSettings);
139+
} else {
140+
s.get(nodeSettings);
141+
}
142+
});
143+
144+
var removedSettingKeysRemaining = removedSettingsRemaining.stream().map(Setting::getKey).sorted().toList();
145+
final String message = String.format(Locale.ROOT, "Settings %s are deprecated", removedSettingKeysRemaining);
146+
final String details = additionalDetailMessage == null
147+
? String.format(Locale.ROOT, "Remove each setting in %s.", removedSettingKeysRemaining)
148+
: String.format(Locale.ROOT, "Remove each setting in %s. %s", removedSettingKeysRemaining, additionalDetailMessage);
149+
150+
var canAutoRemoveSettings = removedSettingsRemaining.stream()
151+
.allMatch(s -> s.exists(clusterSettings) && s.exists(nodeSettings) == false);
152+
var meta = createMetaMapForRemovableSettings(canAutoRemoveSettings, removedSettingKeysRemaining);
153+
return new DeprecationIssue(deprecationLevel, message, url, details, false, meta);
154+
}
155+
116156
static DeprecationIssue checkMultipleDataPaths(
117157
Settings nodeSettings,
118158
PluginsAndModules plugins,
@@ -944,4 +984,32 @@ static DeprecationIssue checkWatcherBulkConcurrentRequestsSetting(
944984
DeprecationIssue.Level.WARNING
945985
);
946986
}
987+
988+
static DeprecationIssue checkTracingApmSettings(
989+
final Settings settings,
990+
final PluginsAndModules pluginsAndModules,
991+
final ClusterState clusterState,
992+
final XPackLicenseState licenseState
993+
) {
994+
String url = "https://ela.st/es-deprecation-9-tracing-apm-settings";
995+
Setting.Property[] properties = { NodeScope, OperatorDynamic, Deprecated };
996+
List<Setting<?>> tracingApmSettings = List.of(
997+
Setting.prefixKeySetting("tracing.apm.agent.", key -> Setting.simpleString(key, properties)),
998+
Setting.stringListSetting("tracing.apm.names.include", properties),
999+
Setting.stringListSetting("tracing.apm.names.exclude", properties),
1000+
Setting.stringListSetting("tracing.apm.sanitize_field_names", properties),
1001+
Setting.boolSetting("tracing.apm.enabled", false, properties),
1002+
SecureSetting.secureString("tracing.apm.api_key", null, Deprecated),
1003+
SecureSetting.secureString("tracing.apm.secret_token", null, Deprecated)
1004+
);
1005+
return checkMultipleRemovedSettings(
1006+
clusterState.metadata().settings(),
1007+
settings,
1008+
tracingApmSettings,
1009+
url,
1010+
"[tracing.apm.*] settings are no longer accepted as of 9.0.0"
1011+
+ " and should be replaced by [telemetry.*] or [telemetry.tracing.*] settings.",
1012+
DeprecationIssue.Level.CRITICAL
1013+
);
1014+
}
9471015
}

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
@@ -75,6 +75,29 @@ public void testRemovedSetting() {
7575
assertThat(issue.getUrl(), equalTo("https://removed-setting.example.com"));
7676
}
7777

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

0 commit comments

Comments
 (0)