Skip to content

Commit 8b94529

Browse files
committed
Allow float settings to be configured with other settings as default
1 parent 4ed1a00 commit 8b94529

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,8 +1367,16 @@ public static Setting<Float> floatSetting(String key, float defaultValue, Proper
13671367
}
13681368

13691369
public static Setting<Float> floatSetting(String key, float defaultValue, float minValue, Property... properties) {
1370+
return new Setting<>(key, Float.toString(defaultValue), floatParser(key, minValue, properties), properties);
1371+
}
1372+
1373+
public static Setting<Float> floatSetting(String key, Setting<Float> fallbackSetting, float minValue, Property... properties) {
1374+
return new Setting<>(key, fallbackSetting, floatParser(key, minValue, properties), properties);
1375+
}
1376+
1377+
private static Function<String, Float> floatParser(String key, float minValue, Property... properties) {
13701378
final boolean isFiltered = isFiltered(properties);
1371-
return new Setting<>(key, Float.toString(defaultValue), (s) -> {
1379+
return (s) -> {
13721380
float value = Float.parseFloat(s);
13731381
if (value < minValue) {
13741382
String err = "Failed to parse value"
@@ -1380,7 +1388,7 @@ public static Setting<Float> floatSetting(String key, float defaultValue, float
13801388
throw new IllegalArgumentException(err);
13811389
}
13821390
return value;
1383-
}, properties);
1391+
};
13841392
}
13851393

13861394
private static boolean isFiltered(Property[] properties) {

server/src/test/java/org/elasticsearch/common/settings/SettingTests.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,28 @@ public void testFilteredBooleanSetting() {
387387
assertNull(e.getCause());
388388
}
389389

390+
public void testFloatSettingWithOtherSettingAsDefault() {
391+
float defaultValue = randomFloat();
392+
Setting<Float> defaultSetting = Setting.floatSetting("float_val.default", defaultValue);
393+
Setting<Float> floatSetting = Setting.floatSetting("float_val", defaultSetting, Float.MIN_VALUE);
394+
assertThat(floatSetting.get(Settings.builder().build()), equalTo(defaultValue));
395+
float configuredDefaultValue = randomValueOtherThan(defaultValue, ESTestCase::randomFloat);
396+
assertThat(
397+
floatSetting.get(Settings.builder().put("float_val.default", configuredDefaultValue).build()),
398+
equalTo(configuredDefaultValue)
399+
);
400+
float configuredSettingValue = randomValueOtherThanMany(
401+
v -> v != configuredDefaultValue && v != defaultValue,
402+
ESTestCase::randomFloat
403+
);
404+
assertThat(
405+
floatSetting.get(
406+
Settings.builder().put("float_val.default", configuredDefaultValue).put("float_val", configuredSettingValue).build()
407+
),
408+
equalTo(configuredSettingValue)
409+
);
410+
}
411+
390412
private enum TestEnum {
391413
ON,
392414
OFF

0 commit comments

Comments
 (0)