Skip to content

Commit 2e3db51

Browse files
authored
Do not reference values for filtered settings (#48066) (#48518)
1 parent 5228956 commit 2e3db51

File tree

2 files changed

+212
-33
lines changed

2 files changed

+212
-33
lines changed

server/src/main/java/org/elasticsearch/common/settings/Setting.java

Lines changed: 100 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -449,11 +449,13 @@ private T get(Settings settings, boolean validate) {
449449
} catch (ElasticsearchParseException ex) {
450450
throw new IllegalArgumentException(ex.getMessage(), ex);
451451
} catch (NumberFormatException ex) {
452-
throw new IllegalArgumentException("Failed to parse value [" + value + "] for setting [" + getKey() + "]", ex);
452+
String err = "Failed to parse value" + (isFiltered() ? "" : " [" + value + "]") + " for setting [" + getKey() + "]";
453+
throw new IllegalArgumentException(err, ex);
453454
} catch (IllegalArgumentException ex) {
454455
throw ex;
455456
} catch (Exception t) {
456-
throw new IllegalArgumentException("Failed to parse value [" + value + "] for setting [" + getKey() + "]", t);
457+
String err = "Failed to parse value" + (isFiltered() ? "" : " [" + value + "]") + " for setting [" + getKey() + "]";
458+
throw new IllegalArgumentException(err, t);
457459
}
458460
}
459461

@@ -957,8 +959,9 @@ public Settings getValue(Settings current, Settings previous) {
957959
try {
958960
validator.accept(currentSettings);
959961
} catch (Exception | AssertionError e) {
960-
throw new IllegalArgumentException("illegal value can't update [" + key + "] from ["
961-
+ previousSettings + "] to [" + currentSettings+ "]", e);
962+
String err = "illegal value can't update [" + key + "]" +
963+
(isFiltered() ? "" : " from [" + previousSettings + "] to [" + currentSettings+ "]");
964+
throw new IllegalArgumentException(err, e);
962965
}
963966
return currentSettings;
964967
}
@@ -1012,8 +1015,12 @@ public T getValue(Settings current, Settings previous) {
10121015
accept.accept(inst);
10131016
return inst;
10141017
} catch (Exception | AssertionError e) {
1015-
throw new IllegalArgumentException("illegal value can't update [" + key + "] from [" + value + "] to [" + newValue + "]",
1016-
e);
1018+
if (isFiltered()) {
1019+
throw new IllegalArgumentException("illegal value can't update [" + key + "]");
1020+
} else {
1021+
throw new IllegalArgumentException("illegal value can't update [" + key + "] from [" + value + "] to [" +
1022+
newValue + "]", e);
1023+
}
10171024
}
10181025
}
10191026

@@ -1036,32 +1043,41 @@ public static Setting<Float> floatSetting(String key, float defaultValue, float
10361043
return new Setting<>(key, (s) -> Float.toString(defaultValue), (s) -> {
10371044
float value = Float.parseFloat(s);
10381045
if (value < minValue) {
1039-
throw new IllegalArgumentException("Failed to parse value [" + s + "] for setting [" + key + "] must be >= " + minValue);
1046+
String err = "Failed to parse value" +
1047+
(isFiltered(properties) ? "" : " [" + s + "]") + " for setting [" + key + "] must be >= " + minValue;
1048+
throw new IllegalArgumentException(err);
10401049
}
10411050
return value;
10421051
}, properties);
10431052
}
10441053

1054+
private static boolean isFiltered(Property[] properties) {
1055+
return properties != null && Arrays.asList(properties).contains(Property.Filtered);
1056+
}
1057+
10451058
public static Setting<Integer> intSetting(String key, int defaultValue, int minValue, int maxValue, Property... properties) {
1046-
return new Setting<>(key, (s) -> Integer.toString(defaultValue), (s) -> parseInt(s, minValue, maxValue, key), properties);
1059+
return new Setting<>(key, (s) -> Integer.toString(defaultValue),
1060+
(s) -> parseInt(s, minValue, maxValue, key, isFiltered(properties)), properties);
10471061
}
10481062

10491063
public static Setting<Integer> intSetting(String key, int defaultValue, int minValue, Property... properties) {
1050-
return new Setting<>(key, (s) -> Integer.toString(defaultValue), (s) -> parseInt(s, minValue, key), properties);
1064+
return new Setting<>(key, (s) -> Integer.toString(defaultValue), (s) -> parseInt(s, minValue, key, isFiltered(properties)),
1065+
properties);
10511066
}
10521067

10531068
public static Setting<Integer> intSetting(String key, Setting<Integer> fallbackSetting, int minValue, Property... properties) {
1054-
return new Setting<>(key, fallbackSetting, (s) -> parseInt(s, minValue, key), properties);
1069+
return new Setting<>(key, fallbackSetting, (s) -> parseInt(s, minValue, key, isFiltered(properties)), properties);
10551070
}
10561071

10571072
public static Setting<Integer> intSetting(String key, Setting<Integer> fallbackSetting, int minValue, Validator<Integer> validator,
10581073
Property... properties) {
1059-
return new Setting<>(new SimpleKey(key), fallbackSetting, fallbackSetting::getRaw, (s) -> parseInt(s, minValue, key),validator,
1060-
properties);
1074+
return new Setting<>(new SimpleKey(key), fallbackSetting, fallbackSetting::getRaw,
1075+
(s) -> parseInt(s, minValue, key, isFiltered(properties)),validator, properties);
10611076
}
10621077

10631078
public static Setting<Long> longSetting(String key, long defaultValue, long minValue, Property... properties) {
1064-
return new Setting<>(key, (s) -> Long.toString(defaultValue), (s) -> parseLong(s, minValue, key), properties);
1079+
return new Setting<>(key, (s) -> Long.toString(defaultValue), (s) -> parseLong(s, minValue, key, isFiltered(properties)),
1080+
properties);
10651081
}
10661082

10671083
public static Setting<String> simpleString(String key, Property... properties) {
@@ -1102,24 +1118,39 @@ public static Setting<String> simpleString(String key, String defaultValue, Prop
11021118
}
11031119

11041120
public static int parseInt(String s, int minValue, String key) {
1105-
return parseInt(s, minValue, Integer.MAX_VALUE, key);
1121+
return parseInt(s, minValue, Integer.MAX_VALUE, key, false);
1122+
}
1123+
1124+
public static int parseInt(String s, int minValue, String key, boolean isFiltered) {
1125+
return parseInt(s, minValue, Integer.MAX_VALUE, key, isFiltered);
11061126
}
11071127

11081128
public static int parseInt(String s, int minValue, int maxValue, String key) {
1129+
return parseInt(s, minValue, maxValue, key, false);
1130+
}
1131+
1132+
static int parseInt(String s, int minValue, int maxValue, String key, boolean isFiltered) {
11091133
int value = Integer.parseInt(s);
11101134
if (value < minValue) {
1111-
throw new IllegalArgumentException("Failed to parse value [" + s + "] for setting [" + key + "] must be >= " + minValue);
1135+
String err = "Failed to parse value" + (isFiltered ? "" : " [" + s + "]") + " for setting [" + key + "] must be >= " + minValue;
1136+
throw new IllegalArgumentException(err);
11121137
}
11131138
if (value > maxValue) {
1114-
throw new IllegalArgumentException("Failed to parse value [" + s + "] for setting [" + key + "] must be <= " + maxValue);
1139+
String err = "Failed to parse value" + (isFiltered ? "" : " [" + s + "]") + " for setting [" + key + "] must be <= " + maxValue;
1140+
throw new IllegalArgumentException(err);
11151141
}
11161142
return value;
11171143
}
11181144

11191145
public static long parseLong(String s, long minValue, String key) {
1146+
return parseLong(s, minValue, key, false);
1147+
}
1148+
1149+
static long parseLong(String s, long minValue, String key, boolean isFiltered) {
11201150
long value = Long.parseLong(s);
11211151
if (value < minValue) {
1122-
throw new IllegalArgumentException("Failed to parse value [" + s + "] for setting [" + key + "] must be >= " + minValue);
1152+
String err = "Failed to parse value" + (isFiltered ? "" : " [" + s + "]") + " for setting [" + key + "] must be >= " + minValue;
1153+
throw new IllegalArgumentException(err);
11231154
}
11241155
return value;
11251156
}
@@ -1137,15 +1168,27 @@ public static Setting<Integer> intSetting(String key, int defaultValue, Property
11371168
}
11381169

11391170
public static Setting<Boolean> boolSetting(String key, boolean defaultValue, Property... properties) {
1140-
return new Setting<>(key, (s) -> Boolean.toString(defaultValue), Booleans::parseBoolean, properties);
1171+
return new Setting<>(key, (s) -> Boolean.toString(defaultValue), b -> parseBoolean(b, key, isFiltered(properties)), properties);
11411172
}
11421173

11431174
public static Setting<Boolean> boolSetting(String key, Setting<Boolean> fallbackSetting, Property... properties) {
1144-
return new Setting<>(key, fallbackSetting, Booleans::parseBoolean, properties);
1175+
return new Setting<>(key, fallbackSetting, b -> parseBoolean(b, key, isFiltered(properties)), properties);
11451176
}
11461177

11471178
public static Setting<Boolean> boolSetting(String key, Function<Settings, String> defaultValueFn, Property... properties) {
1148-
return new Setting<>(key, defaultValueFn, Booleans::parseBoolean, properties);
1179+
return new Setting<>(key, defaultValueFn, b -> parseBoolean(b, key, isFiltered(properties)), properties);
1180+
}
1181+
1182+
static boolean parseBoolean(String b, String key, boolean isFiltered) {
1183+
try {
1184+
return Booleans.parseBoolean(b);
1185+
} catch (IllegalArgumentException ex) {
1186+
if (isFiltered) {
1187+
throw new IllegalArgumentException("Failed to parse value for setting [" + key + "]");
1188+
} else {
1189+
throw ex;
1190+
}
1191+
}
11491192
}
11501193

11511194
public static Setting<ByteSizeValue> byteSizeSetting(String key, ByteSizeValue value, Property... properties) {
@@ -1406,31 +1449,42 @@ public static Setting<TimeValue> timeSetting(
14061449
simpleKey,
14071450
fallbackSetting,
14081451
fallbackSetting::getRaw,
1409-
minTimeValueParser(key, minValue),
1452+
minTimeValueParser(key, minValue, isFiltered(properties)),
14101453
v -> {},
14111454
properties);
14121455
}
14131456

14141457
public static Setting<TimeValue> timeSetting(
14151458
final String key, Function<Settings, TimeValue> defaultValue, final TimeValue minValue, final Property... properties) {
14161459
final SimpleKey simpleKey = new SimpleKey(key);
1417-
return new Setting<>(simpleKey, s -> defaultValue.apply(s).getStringRep(), minTimeValueParser(key, minValue), properties);
1460+
return new Setting<>(simpleKey, s -> defaultValue.apply(s).getStringRep(),
1461+
minTimeValueParser(key, minValue, isFiltered(properties)), properties);
14181462
}
14191463

14201464
public static Setting<TimeValue> timeSetting(
14211465
final String key, TimeValue defaultValue, final TimeValue minValue, final TimeValue maxValue, final Property... properties) {
14221466
final SimpleKey simpleKey = new SimpleKey(key);
1423-
return new Setting<>(simpleKey, s -> defaultValue.getStringRep(), minMaxTimeValueParser(key, minValue, maxValue), properties);
1467+
return new Setting<>(simpleKey, s -> defaultValue.getStringRep(),
1468+
minMaxTimeValueParser(key, minValue, maxValue, isFiltered(properties)), properties);
14241469
}
14251470

1426-
private static Function<String, TimeValue> minTimeValueParser(final String key, final TimeValue minValue) {
1471+
private static Function<String, TimeValue> minTimeValueParser(final String key, final TimeValue minValue, boolean isFiltered) {
14271472
return s -> {
1428-
final TimeValue value = TimeValue.parseTimeValue(s, null, key);
1473+
TimeValue value;
1474+
try {
1475+
value = TimeValue.parseTimeValue(s, null, key);
1476+
} catch (RuntimeException ex) {
1477+
if (isFiltered) {
1478+
throw new IllegalArgumentException("failed to parse value for setting [" + key + "] as a time value");
1479+
} else {
1480+
throw ex;
1481+
}
1482+
}
14291483
if (value.millis() < minValue.millis()) {
14301484
final String message = String.format(
14311485
Locale.ROOT,
1432-
"failed to parse value [%s] for setting [%s], must be >= [%s]",
1433-
s,
1486+
"failed to parse value%s for setting [%s], must be >= [%s]",
1487+
isFiltered ? "" : " [" + s + "]",
14341488
key,
14351489
minValue.getStringRep());
14361490
throw new IllegalArgumentException(message);
@@ -1440,14 +1494,23 @@ private static Function<String, TimeValue> minTimeValueParser(final String key,
14401494
}
14411495

14421496
private static Function<String, TimeValue> minMaxTimeValueParser(
1443-
final String key, final TimeValue minValue, final TimeValue maxValue) {
1497+
final String key, final TimeValue minValue, final TimeValue maxValue, boolean isFiltered) {
14441498
return s -> {
1445-
final TimeValue value = minTimeValueParser(key, minValue).apply(s);
1499+
TimeValue value;
1500+
try {
1501+
value = minTimeValueParser(key, minValue, isFiltered).apply(s);
1502+
} catch (RuntimeException ex) {
1503+
if (isFiltered) {
1504+
throw new IllegalArgumentException("failed to parse value for setting [" + key + "] as a time value");
1505+
} else {
1506+
throw ex;
1507+
}
1508+
}
14461509
if (value.millis() > maxValue.millis()) {
14471510
final String message = String.format(
14481511
Locale.ROOT,
1449-
"failed to parse value [%s] for setting [%s], must be <= [%s]",
1450-
s,
1512+
"failed to parse value%s for setting [%s], must be <= [%s]",
1513+
isFiltered ? "" : " [" + s + "]",
14511514
key,
14521515
maxValue.getStringRep());
14531516
throw new IllegalArgumentException(message);
@@ -1488,10 +1551,14 @@ public static Setting<Double> doubleSetting(String key, double defaultValue, dou
14881551
return new Setting<>(key, (s) -> Double.toString(defaultValue), (s) -> {
14891552
final double d = Double.parseDouble(s);
14901553
if (d < minValue) {
1491-
throw new IllegalArgumentException("Failed to parse value [" + s + "] for setting [" + key + "] must be >= " + minValue);
1554+
String err = "Failed to parse value" + (isFiltered(properties) ? "" : " [" + s + "]") + " for setting [" + key +
1555+
"] must be >= " + minValue;
1556+
throw new IllegalArgumentException(err);
14921557
}
14931558
if (d > maxValue) {
1494-
throw new IllegalArgumentException("Failed to parse value [" + s + "] for setting [" + key + "] must be <= " + maxValue);
1559+
String err = "Failed to parse value" + (isFiltered(properties) ? "" : " [" + s + "]") + " for setting [" + key +
1560+
"] must be <= " + maxValue;
1561+
throw new IllegalArgumentException(err);
14951562
}
14961563
return d;
14971564
}, properties);

0 commit comments

Comments
 (0)