Skip to content

Commit 22c88aa

Browse files
committed
Internal: prevent injection of unannotated dynamic settings
Dynamic settings has to be injected into constructor with either @ClusterDynamicSettings or @IndexDynamicSettings. If annotations are not specified an empty instance of Dynamic Settings is injected that can lead to difficult to discover errors such as #10614. This commit will make any attempt to inject unannotated dynamic settings to generate a giuce error.
1 parent 4a94e1f commit 22c88aa

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

src/main/java/org/elasticsearch/cluster/settings/ClusterDynamicSettingsModule.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.elasticsearch.cluster.routing.allocation.allocator.BalancedShardsAllocator;
2727
import org.elasticsearch.cluster.routing.allocation.decider.*;
2828
import org.elasticsearch.common.inject.AbstractModule;
29+
import org.elasticsearch.common.inject.util.Providers;
2930
import org.elasticsearch.discovery.DiscoverySettings;
3031
import org.elasticsearch.discovery.zen.ZenDiscovery;
3132
import org.elasticsearch.indices.breaker.HierarchyCircuitBreakerService;
@@ -112,9 +113,13 @@ public void addDynamicSetting(String setting, Validator validator) {
112113
clusterDynamicSettings.addDynamicSetting(setting, validator);
113114
}
114115

115-
116116
@Override
117117
protected void configure() {
118118
bind(DynamicSettings.class).annotatedWith(ClusterDynamicSettings.class).toInstance(clusterDynamicSettings);
119+
120+
// Bind to null provider just in case somebody will forget to supply @ClusterDynamicSetting or @IndexDynamicSetting annotations
121+
// This will cause any attempt to inject a unannotated DynamicSettings to fail with Guice error, instead of silently
122+
// injecting an empty copy of dynamic settings
123+
bind(DynamicSettings.class).toProvider(Providers.<DynamicSettings>of(null));
119124
}
120125
}

0 commit comments

Comments
 (0)