@@ -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