Skip to content

Commit 4968d01

Browse files
authored
Adding a deprecation info API check for fractional byte value settings (#77074)
In 6.2.0 we deprecated support for fractional byte value settings. Support was originally going to be removed altogether in 8.0.0 (see #53927) but that PR was not merged. This commit adds a warning deprecation info check if any fractional byte values settings are found. Relates #42404
1 parent db837e7 commit 4968d01

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ private DeprecationChecks() {
9898
NodeDeprecationChecks::checkImplicitlyDisabledSecurityOnBasicAndTrial,
9999
NodeDeprecationChecks::checkSearchRemoteSettings,
100100
NodeDeprecationChecks::checkMonitoringExporterPassword,
101+
NodeDeprecationChecks::checkFractionalByteValueSettings,
101102
NodeDeprecationChecks::checkFrozenCacheLeniency,
102103
NodeDeprecationChecks::checkSslServerEnabled,
103104
NodeDeprecationChecks::checkSslCertConfiguration,

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

+30-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import org.elasticsearch.common.settings.Setting;
2121
import org.elasticsearch.common.settings.Setting.Property;
2222
import org.elasticsearch.common.settings.Settings;
23-
import org.elasticsearch.common.unit.ByteSizeValue;
2423
import org.elasticsearch.common.ssl.SslConfigurationKeys;
24+
import org.elasticsearch.common.unit.ByteSizeValue;
2525
import org.elasticsearch.common.util.concurrent.EsExecutors;
2626
import org.elasticsearch.common.util.set.Sets;
2727
import org.elasticsearch.core.TimeValue;
@@ -36,9 +36,9 @@
3636
import org.elasticsearch.script.ScriptService;
3737
import org.elasticsearch.threadpool.FixedExecutorBuilder;
3838
import org.elasticsearch.transport.RemoteClusterService;
39-
import org.elasticsearch.xpack.core.DataTier;
4039
import org.elasticsearch.transport.SniffConnectionStrategy;
4140
import org.elasticsearch.transport.TransportService;
41+
import org.elasticsearch.xpack.core.DataTier;
4242
import org.elasticsearch.xpack.core.XPackSettings;
4343
import org.elasticsearch.xpack.core.security.SecurityField;
4444
import org.elasticsearch.xpack.core.security.authc.RealmConfig;
@@ -48,6 +48,7 @@
4848

4949
import java.util.ArrayList;
5050
import java.util.Comparator;
51+
import java.util.HashMap;
5152
import java.util.HashSet;
5253
import java.util.List;
5354
import java.util.Locale;
@@ -671,6 +672,33 @@ static DeprecationIssue checkClusterRoutingAllocationIncludeRelocationsSetting(f
671672
);
672673
}
673674

675+
static DeprecationIssue checkFractionalByteValueSettings(final Settings settings,
676+
final PluginsAndModules pluginsAndModules,
677+
final ClusterState clusterState,
678+
final XPackLicenseState licenseState) {
679+
Map<String, String> fractionalByteSettings = new HashMap<>();
680+
for (String key : settings.keySet()) {
681+
try {
682+
settings.getAsBytesSize(key, ByteSizeValue.ZERO);
683+
String stringValue = settings.get(key);
684+
if (stringValue.contains(".")) {
685+
fractionalByteSettings.put(key, stringValue);
686+
}
687+
} catch (Exception ignoreThis) {
688+
// We expect anything that is not a byte setting to throw an exception, but we don't care about those
689+
}
690+
}
691+
if (fractionalByteSettings.isEmpty()) {
692+
return null;
693+
}
694+
String url = "https://www.elastic.co/guide/en/elasticsearch/reference/master/logging.html#deprecation-logging";
695+
String message = "support for fractional byte size values is deprecated and will be removed in a future release";
696+
String details = "change the following settings to non-fractional values: [" +
697+
fractionalByteSettings.entrySet().stream().map(fractionalByteSetting -> fractionalByteSetting.getKey() + "->" +
698+
fractionalByteSetting.getValue()).collect(Collectors.joining(", ")) + "]";
699+
return new DeprecationIssue(DeprecationIssue.Level.WARNING, message, url, details, false, null);
700+
}
701+
674702
static DeprecationIssue checkFrozenCacheLeniency(final Settings settings,
675703
final PluginsAndModules pluginsAndModules,
676704
final ClusterState clusterState,

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

+28
Original file line numberDiff line numberDiff line change
@@ -963,6 +963,34 @@ public void testImplicitlyConfiguredSecurityOnGoldPlus() {
963963
assertThat(issues, empty());
964964
}
965965

966+
public void testCheckFractionalByteValueSettings() {
967+
String settingKey = "network.tcp.send_buffer_size";
968+
String unit = randomFrom(new String[]{"k", "kb", "m", "mb", "g", "gb", "t", "tb", "p", "pb"});
969+
float value = Math.abs(randomFloat());
970+
String settingValue = value + unit;
971+
String unaffectedSettingKey = "some.other.setting";
972+
String unaffectedSettingValue = "54.32.43mb"; //Not an actual number, so we don't expect to see a deprecation log about it
973+
final Settings nodeSettings =
974+
Settings.builder().put(settingKey, settingValue).put(unaffectedSettingKey, unaffectedSettingValue).build();
975+
final XPackLicenseState licenseState = new XPackLicenseState(Settings.EMPTY, () -> 0);
976+
final ClusterState clusterState = ClusterState.EMPTY_STATE;
977+
final DeprecationIssue expectedIssue = new DeprecationIssue(DeprecationIssue.Level.WARNING,
978+
"support for fractional byte size values is deprecated and will be removed in a future release",
979+
"https://www.elastic.co/guide/en/elasticsearch/reference/master/logging.html#deprecation-logging",
980+
String.format(Locale.ROOT,
981+
"change the following settings to non-fractional values: [%s->%s]",
982+
settingKey,
983+
settingValue),
984+
false, null
985+
);
986+
assertThat(
987+
NodeDeprecationChecks.checkFractionalByteValueSettings(nodeSettings, null, clusterState, licenseState),
988+
equalTo(expectedIssue)
989+
);
990+
assertWarnings(String.format(Locale.ROOT, "Fractional bytes values are deprecated. Use non-fractional bytes values instead: [%s] " +
991+
"found for setting [%s]", settingValue, settingKey));
992+
}
993+
966994
public void testCheckFrozenCacheLeniency() {
967995
String cacheSizeSettingValue = "10gb";
968996
String cacheSizeSettingKey = "xpack.searchable.snapshot.shared_cache.size";

0 commit comments

Comments
 (0)