Skip to content

Commit 897cac6

Browse files
committed
Fix filtering for ListSetting (#26914)
List settings are not correctly filtered out in 5.6 and 6.0. This has been detected by a failing packaging test after #26878 has been merged.
1 parent 62b228c commit 897cac6

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,13 @@ boolean hasComplexMatcher() {
290290
return isGroupSetting();
291291
}
292292

293+
/**
294+
* Returns <code>true</code> iff this setting is a list setting.
295+
*/
296+
boolean isListSetting() {
297+
return false;
298+
}
299+
293300
/**
294301
* Returns the default value string representation for this setting.
295302
* @param settings a settings object for settings that has a default value depending on another setting if available
@@ -699,6 +706,11 @@ boolean hasComplexMatcher() {
699706
return true;
700707
}
701708

709+
@Override
710+
boolean isListSetting() {
711+
return true;
712+
}
713+
702714
@Override
703715
public boolean exists(Settings settings) {
704716
boolean exists = super.exists(settings);

core/src/main/java/org/elasticsearch/common/settings/SettingsModule.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,12 @@ public void configure(Binder binder) {
157157
*/
158158
private void registerSetting(Setting<?> setting) {
159159
if (setting.isFiltered()) {
160-
if (settingsFilterPattern.contains(setting.getKey()) == false) {
161-
registerSettingsFilter(setting.getKey());
160+
final String key = setting.getKey();
161+
if (settingsFilterPattern.contains(key) == false) {
162+
registerSettingsFilter(key);
163+
if (setting.isListSetting()) {
164+
registerSettingsFilter(key + ".*");
165+
}
162166
}
163167
}
164168
if (setting.hasNodeScope() || setting.hasIndexScope()) {

core/src/test/java/org/elasticsearch/common/settings/SettingsModuleTests.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@
2424
import org.joda.time.MonthDay;
2525

2626
import java.util.Arrays;
27-
import java.util.Collections;
27+
import java.util.List;
28+
import java.util.Set;
2829

30+
import static java.util.Collections.emptyList;
31+
import static java.util.Collections.singletonList;
2932
import static org.hamcrest.Matchers.containsString;
3033
import static org.hamcrest.Matchers.is;
3134

@@ -169,6 +172,31 @@ public void testRegisterSettingsFilter() {
169172

170173
}
171174

175+
public void testRegisterListSettingsFilter() {
176+
final Settings settings = Settings.builder()
177+
.put("foo.bar", true)
178+
.put("foo.baz", "one")
179+
.putArray("foo.qux", Arrays.asList("two", "three", "four"))
180+
.build();
181+
182+
final List<Setting<?>> additionalSettings = Arrays.asList(
183+
Setting.simpleString("foo.bar", Property.NodeScope),
184+
Setting.simpleString("foo.baz", Property.NodeScope, Property.Filtered),
185+
Setting.listSetting("foo.qux", singletonList("default"), String::toString, Property.NodeScope, Property.Filtered)
186+
);
187+
188+
final SettingsModule module = new SettingsModule(settings, additionalSettings, emptyList());
189+
190+
final Set<String> filters = module.getSettingsFilter().getPatterns();
191+
assertEquals(3, filters.size());
192+
assertTrue(filters.contains("foo.baz"));
193+
assertTrue(filters.contains("foo.qux"));
194+
assertTrue(filters.contains("foo.qux.*"));
195+
196+
assertInstanceBinding(module, SettingsFilter.class, (s) -> s.filter(settings).size() == 1);
197+
assertInstanceBinding(module, SettingsFilter.class, (s) -> s.filter(settings).getAsMap().containsKey("foo.bar"));
198+
}
199+
172200
public void testMutuallyExclusiveScopes() {
173201
new SettingsModule(Settings.EMPTY, Setting.simpleString("foo.bar", Property.NodeScope));
174202
new SettingsModule(Settings.EMPTY, Setting.simpleString("index.foo.bar", Property.IndexScope));

0 commit comments

Comments
 (0)