Skip to content

Commit 606d374

Browse files
committed
Add strong typing through Settings
1 parent abbec9b commit 606d374

File tree

7 files changed

+43
-46
lines changed

7 files changed

+43
-46
lines changed

server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ public void validate(final Integer value) {
166166
}
167167

168168
@Override
169-
public void validate(final Integer numRoutingShards, final Map<Setting<?>, Object> settings) {
170-
int numShards = (int) settings.get(INDEX_NUMBER_OF_SHARDS_SETTING);
169+
public void validate(final Integer numRoutingShards, final Settings settings) {
170+
int numShards = INDEX_NUMBER_OF_SHARDS_SETTING.get(settings);
171171
if (numRoutingShards < numShards) {
172172
throw new IllegalArgumentException("index.number_of_routing_shards [" + numRoutingShards
173173
+ "] must be >= index.number_of_shards [" + numShards + "]");

server/src/main/java/org/elasticsearch/cluster/routing/allocation/DiskThresholdSettings.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.Iterator;
3232
import java.util.List;
3333
import java.util.Locale;
34-
import java.util.Map;
3534

3635
/**
3736
* A container to keep settings for disk thresholds up to date with cluster setting changes.
@@ -109,9 +108,9 @@ public void validate(String value) {
109108
}
110109

111110
@Override
112-
public void validate(final String value, final Map<Setting<?>, Object> settings) {
113-
final String highWatermarkRaw = (String) settings.get(CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_WATERMARK_SETTING);
114-
final String floodStageRaw = (String) settings.get(CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_WATERMARK_SETTING);
111+
public void validate(final String value, final Settings settings) {
112+
final String highWatermarkRaw = CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_WATERMARK_SETTING.get(settings);
113+
final String floodStageRaw = CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_WATERMARK_SETTING.get(settings);
115114
doValidate(value, highWatermarkRaw, floodStageRaw);
116115
}
117116

@@ -133,9 +132,9 @@ public void validate(final String value) {
133132
}
134133

135134
@Override
136-
public void validate(final String value, final Map<Setting<?>, Object> settings) {
137-
final String lowWatermarkRaw = (String) settings.get(CLUSTER_ROUTING_ALLOCATION_LOW_DISK_WATERMARK_SETTING);
138-
final String floodStageRaw = (String) settings.get(CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_WATERMARK_SETTING);
135+
public void validate(final String value, final Settings settings) {
136+
final String lowWatermarkRaw = CLUSTER_ROUTING_ALLOCATION_LOW_DISK_WATERMARK_SETTING.get(settings);
137+
final String floodStageRaw = CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_WATERMARK_SETTING.get(settings);
139138
doValidate(lowWatermarkRaw, value, floodStageRaw);
140139
}
141140

@@ -157,9 +156,9 @@ public void validate(final String value) {
157156
}
158157

159158
@Override
160-
public void validate(final String value, final Map<Setting<?>, Object> settings) {
161-
final String lowWatermarkRaw = (String) settings.get(CLUSTER_ROUTING_ALLOCATION_LOW_DISK_WATERMARK_SETTING);
162-
final String highWatermarkRaw = (String) settings.get(CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_WATERMARK_SETTING);
159+
public void validate(final String value, Settings settings) {
160+
final String lowWatermarkRaw = CLUSTER_ROUTING_ALLOCATION_LOW_DISK_WATERMARK_SETTING.get(settings);
161+
final String highWatermarkRaw = CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_WATERMARK_SETTING.get(settings);
163162
doValidate(lowWatermarkRaw, highWatermarkRaw, value);
164163
}
165164

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -433,18 +433,19 @@ private T get(Settings settings, boolean validate) {
433433
T parsed = parser.apply(value);
434434
if (validate) {
435435
final Iterator<Setting<?>> it = validator.settings();
436-
final Map<Setting<?>, Object> map;
436+
final Settings dependentSettings;
437437
if (it.hasNext()) {
438-
map = new HashMap<>();
438+
final Settings.Builder builder = Settings.builder();
439439
while (it.hasNext()) {
440440
final Setting<?> setting = it.next();
441-
map.put(setting, setting.get(settings, false)); // we have to disable validation or we will stack overflow
441+
builder.put(setting.getKey(), setting.getRaw(settings));
442442
}
443+
dependentSettings = builder.build();
443444
} else {
444-
map = Collections.emptyMap();
445+
dependentSettings = Settings.EMPTY;
445446
}
446447
validator.validate(parsed);
447-
validator.validate(parsed, map);
448+
validator.validate(parsed, dependentSettings);
448449
}
449450
return parsed;
450451
} catch (ElasticsearchParseException ex) {
@@ -841,8 +842,8 @@ public Map<String, T> getAsMap(Settings settings) {
841842

842843
/**
843844
* Represents a validator for a setting. The {@link #validate(Object)} method is invoked early in the update setting process with the
844-
* value of this setting for a fail-fast validation. Later on, the {@link #validate(Object, Map)} method is invoked with the value of
845-
* this setting and a map from the settings specified by {@link #settings()}} to their values. All these values come from the same
845+
* value of this setting for a fail-fast validation. Later on, the {@link #validate(Object, Settings)} method is invoked with the value
846+
* of this setting and a {@link Settings} instance containing the dependent settings. All these values come from the same
846847
* {@link Settings} instance.
847848
*
848849
* @param <T> the type of the {@link Setting}
@@ -862,14 +863,14 @@ public interface Validator<T> {
862863
* accepting any value as valid as long as it passes the validation in {@link #validate(Object)}.
863864
*
864865
* @param value the value of this setting
865-
* @param settings a map from the settings specified by {@link #settings()}} to their values
866+
* @param settings the dependent settings
866867
*/
867-
default void validate(T value, Map<Setting<?>, Object> settings) {
868+
default void validate(T value, Settings settings) {
868869
}
869870

870871
/**
871872
* The settings on which the validity of this setting depends. The values of the specified settings are passed to
872-
* {@link #validate(Object, Map)}. By default this returns an empty iterator, indicating that this setting does not depend on any
873+
* {@link #validate(Object, Settings)}. By default this returns an empty iterator, indicating that this setting does not depend on any
873874
* other settings.
874875
*
875876
* @return the settings on which the validity of this setting depends.

server/src/main/java/org/elasticsearch/index/IndexSettings.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import java.util.Iterator;
3939
import java.util.List;
4040
import java.util.Locale;
41-
import java.util.Map;
4241
import java.util.concurrent.TimeUnit;
4342
import java.util.function.Consumer;
4443
import java.util.function.Function;
@@ -317,8 +316,8 @@ public void validate(final String value) {
317316
}
318317

319318
@Override
320-
public void validate(final String value, final Map<Setting<?>, Object> settings) {
321-
final String requiredPipeline = (String) settings.get(IndexSettings.REQUIRED_PIPELINE);
319+
public void validate(final String value, final Settings settings) {
320+
final String requiredPipeline = DEFAULT_PIPELINE.get(settings);
322321
if (value.equals(IngestService.NOOP_PIPELINE_NAME) == false
323322
&& requiredPipeline.equals(IngestService.NOOP_PIPELINE_NAME) == false) {
324323
throw new IllegalArgumentException(
@@ -342,8 +341,8 @@ public void validate(final String value) {
342341
}
343342

344343
@Override
345-
public void validate(final String value, final Map<Setting<?>, Object> settings) {
346-
final String defaultPipeline = (String) settings.get(IndexSettings.DEFAULT_PIPELINE);
344+
public void validate(final String value, final Settings settings) {
345+
final String defaultPipeline = DEFAULT_PIPELINE.get(settings);
347346
if (value.equals(IngestService.NOOP_PIPELINE_NAME) && defaultPipeline.equals(IngestService.NOOP_PIPELINE_NAME) == false) {
348347
throw new IllegalArgumentException(
349348
"index has a required pipeline [" + value + "] and a default pipeline [" + defaultPipeline + "]");

server/src/main/java/org/elasticsearch/threadpool/AutoQueueAdjustingExecutorBuilder.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.Iterator;
3232
import java.util.List;
3333
import java.util.Locale;
34-
import java.util.Map;
3534
import java.util.concurrent.ExecutorService;
3635
import java.util.concurrent.ThreadFactory;
3736

@@ -84,10 +83,10 @@ public void validate(final Integer value) {
8483
}
8584

8685
@Override
87-
public void validate(final Integer value, final Map<Setting<?>, Object> settings) {
88-
if (value > (int) settings.get(tempMaxQueueSizeSetting)) {
86+
public void validate(final Integer value, final Settings settings) {
87+
if (value > tempMaxQueueSizeSetting.get(settings)) {
8988
throw new IllegalArgumentException("Failed to parse value [" + value + "] for setting [" + minSizeKey
90-
+ "] must be <= " + settings.get(tempMaxQueueSizeSetting));
89+
+ "] must be <= " + tempMaxQueueSizeSetting.get(settings));
9190
}
9291
}
9392

@@ -111,10 +110,10 @@ public void validate(Integer value) {
111110
}
112111

113112
@Override
114-
public void validate(final Integer value, final Map<Setting<?>, Object> settings) {
115-
if (value < (int) settings.get(tempMinQueueSizeSetting)) {
113+
public void validate(final Integer value, final Settings settings) {
114+
if (value < tempMinQueueSizeSetting.get(settings)) {
116115
throw new IllegalArgumentException("Failed to parse value [" + value + "] for setting [" + minSizeKey
117-
+ "] must be >= " + settings.get(tempMinQueueSizeSetting));
116+
+ "] must be >= " + tempMinQueueSizeSetting.get(settings));
118117
}
119118
}
120119

server/src/test/java/org/elasticsearch/action/admin/cluster/settings/SettingsUpdaterTests.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.util.HashSet;
3333
import java.util.Iterator;
3434
import java.util.List;
35-
import java.util.Map;
3635
import java.util.Set;
3736
import java.util.concurrent.atomic.AtomicReference;
3837
import java.util.stream.Collectors;
@@ -515,7 +514,7 @@ public void validate(final String value) {
515514
}
516515

517516
@Override
518-
public void validate(final String value, final Map<Setting<?>, Object> settings) {
517+
public void validate(final String value, final Settings settings) {
519518

520519
}
521520

@@ -532,7 +531,7 @@ public void validate(final String value) {
532531
}
533532

534533
@Override
535-
public void validate(final String value, final Map<Setting<?>, Object> settings) {
534+
public void validate(final String value, final Settings settings) {
536535
throw new IllegalArgumentException("Invalid with dependencies setting");
537536
}
538537

@@ -547,9 +546,9 @@ public void validate(final Integer value) {
547546
}
548547

549548
@Override
550-
public void validate(final Integer low, final Map<Setting<?>, Object> settings) {
551-
if (settings.containsKey(SETTING_FOO_HIGH) && low > (int) settings.get(SETTING_FOO_HIGH)) {
552-
throw new IllegalArgumentException("[low]=" + low + " is higher than [high]=" + settings.get(SETTING_FOO_HIGH));
549+
public void validate(final Integer low, final Settings settings) {
550+
if (SETTING_FOO_HIGH.exists(settings) && low > SETTING_FOO_HIGH.get(settings)) {
551+
throw new IllegalArgumentException("[low]=" + low + " is higher than [high]=" + SETTING_FOO_HIGH.get(settings));
553552
}
554553
}
555554

@@ -569,9 +568,9 @@ public void validate(final Integer value) {
569568
}
570569

571570
@Override
572-
public void validate(final Integer high, final Map<Setting<?>, Object> settings) {
573-
if (settings.containsKey(SETTING_FOO_LOW) && high < (int) settings.get(SETTING_FOO_LOW)) {
574-
throw new IllegalArgumentException("[high]=" + high + " is lower than [low]=" + settings.get(SETTING_FOO_LOW));
571+
public void validate(final Integer high, final Settings settings) {
572+
if ((SETTING_FOO_LOW.exists(settings)) && high < SETTING_FOO_LOW.get(settings)) {
573+
throw new IllegalArgumentException("[high]=" + high + " is lower than [low]=" + SETTING_FOO_LOW.get(settings));
575574
}
576575
}
577576

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,12 +214,12 @@ public void validate(final String value) {
214214
}
215215

216216
@Override
217-
public void validate(final String value, final Map<Setting<?>, Object> settings) {
217+
public void validate(final String value, final Settings settings) {
218218
invokedWithDependencies = true;
219219
assertTrue(settings.keySet().contains(BAZ_QUX_SETTING));
220-
assertThat(settings.get(BAZ_QUX_SETTING), equalTo("baz.qux value"));
220+
assertThat(BAZ_QUX_SETTING.get(settings), equalTo("baz.qux value"));
221221
assertTrue(settings.keySet().contains(QUUX_QUUZ_SETTING));
222-
assertThat(settings.get(QUUX_QUUZ_SETTING), equalTo("quux.quuz value"));
222+
assertThat(QUUX_QUUZ_SETTING.get(settings), equalTo("quux.quuz value"));
223223
}
224224

225225
@Override

0 commit comments

Comments
 (0)