Skip to content

Commit d2844e0

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 elastic#10614. This commit will make any attempt to inject unannotated dynamic settings to generate a giuce error.
1 parent 573caca commit d2844e0

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
@@ -27,6 +27,7 @@
2727
import org.elasticsearch.cluster.routing.allocation.decider.*;
2828
import org.elasticsearch.cluster.service.InternalClusterService;
2929
import org.elasticsearch.common.inject.AbstractModule;
30+
import org.elasticsearch.common.inject.util.Providers;
3031
import org.elasticsearch.discovery.DiscoverySettings;
3132
import org.elasticsearch.discovery.zen.ZenDiscovery;
3233
import org.elasticsearch.indices.breaker.HierarchyCircuitBreakerService;
@@ -109,9 +110,13 @@ public void addDynamicSetting(String setting, Validator validator) {
109110
clusterDynamicSettings.addDynamicSetting(setting, validator);
110111
}
111112

112-
113113
@Override
114114
protected void configure() {
115115
bind(DynamicSettings.class).annotatedWith(ClusterDynamicSettings.class).toInstance(clusterDynamicSettings);
116+
117+
// Bind to null provider just in case somebody will forget to supply @ClusterDynamicSetting or @IndexDynamicSetting annotations
118+
// This will cause any attempt to inject a unannotated DynamicSettings to fail with Guice error, instead of silently
119+
// injecting an empty copy of dynamic settings
120+
bind(DynamicSettings.class).toProvider(Providers.<DynamicSettings>of(null));
116121
}
117122
}

0 commit comments

Comments
 (0)