|
28 | 28 | import org.elasticsearch.common.settings.Settings;
|
29 | 29 | import org.elasticsearch.test.ESTestCase;
|
30 | 30 |
|
| 31 | +import java.util.ArrayList; |
| 32 | +import java.util.List; |
31 | 33 | import java.util.Set;
|
32 | 34 | import java.util.concurrent.atomic.AtomicReference;
|
33 | 35 | import java.util.function.BiFunction;
|
@@ -170,55 +172,91 @@ public void testDeprecationLogging() {
|
170 | 172 | }
|
171 | 173 |
|
172 | 174 | public void testUpdateWithUnknownAndSettings() {
|
173 |
| - runUpdateWithUnknownAndInvalidSettingTest(MetaData.Builder::persistentSettings, MetaData::persistentSettings, false); |
174 |
| - runUpdateWithUnknownAndInvalidSettingTest(MetaData.Builder::transientSettings, MetaData::transientSettings, true); |
175 |
| - } |
| 175 | + final int numberOfDynamicSettings = randomIntBetween(2, 8); |
| 176 | + final List<Setting<String>> dynamicSettings = new ArrayList<>(); |
| 177 | + for (int i = 0; i < numberOfDynamicSettings; i++) { |
| 178 | + final Setting<String> dynamicSetting = Setting.simpleString("dynamic.setting" + i, Property.Dynamic, Property.NodeScope); |
| 179 | + dynamicSettings.add(dynamicSetting); |
| 180 | + } |
176 | 181 |
|
177 |
| - private void runUpdateWithUnknownAndInvalidSettingTest( |
178 |
| - final BiFunction<MetaData.Builder, Settings, MetaData.Builder> metaDataSettingsBuilder, |
179 |
| - final Function<MetaData, Settings> settingsToTest, |
180 |
| - final boolean applyTransient) { |
181 |
| - final Setting<String> dynamicSetting = Setting.simpleString("dynamic.setting", Property.Dynamic, Property.NodeScope); |
182 | 182 | final Setting<String> invalidSetting = Setting.simpleString(
|
183 | 183 | "invalid.setting",
|
184 | 184 | (value, settings) -> {
|
185 | 185 | throw new IllegalArgumentException("invalid");
|
186 | 186 | },
|
187 | 187 | Property.NodeScope);
|
188 |
| - final Settings settings = Settings.builder().put("invalid.setting", "value").put("unknown.setting", "value").build(); |
| 188 | + |
| 189 | + final Settings.Builder existingPersistentSettings = Settings.builder(); |
| 190 | + final Settings.Builder existingTransientSettings = Settings.builder(); |
| 191 | + |
| 192 | + if (randomBoolean()) { |
| 193 | + existingPersistentSettings.put("invalid.setting", "value"); |
| 194 | + } else { |
| 195 | + existingTransientSettings.put("invalid.setting", "value"); |
| 196 | + } |
| 197 | + |
| 198 | + if (randomBoolean()) { |
| 199 | + existingPersistentSettings.put("unknown.setting", "value"); |
| 200 | + } else { |
| 201 | + existingTransientSettings.put("unknown.setting", "value"); |
| 202 | + } |
189 | 203 |
|
190 | 204 | final Set<Setting<?>> knownSettings =
|
191 | 205 | Stream.concat(
|
192 | 206 | ClusterSettings.BUILT_IN_CLUSTER_SETTINGS.stream(),
|
193 |
| - Stream.of(dynamicSetting, invalidSetting)) |
| 207 | + Stream.concat(dynamicSettings.stream(), Stream.of(invalidSetting))) |
194 | 208 | .collect(Collectors.toSet());
|
195 |
| - final ClusterSettings clusterSettings = new ClusterSettings(settings, knownSettings); |
196 |
| - clusterSettings.addSettingsUpdateConsumer(dynamicSetting, s -> {}); |
| 209 | + final ClusterSettings clusterSettings = new ClusterSettings(Settings.EMPTY, knownSettings); |
| 210 | + for (final Setting<String> dynamicSetting : dynamicSettings) { |
| 211 | + clusterSettings.addSettingsUpdateConsumer(dynamicSetting, s -> {}); |
| 212 | + } |
197 | 213 | final SettingsUpdater settingsUpdater = new SettingsUpdater(clusterSettings);
|
198 |
| - final ClusterState clusterState = |
199 |
| - ClusterState |
200 |
| - .builder(new ClusterName("cluster")) |
201 |
| - .metaData(metaDataSettingsBuilder.apply(MetaData.builder(), settings).build()) |
202 |
| - .build(); |
203 |
| - final Settings toApply = Settings.builder().put("dynamic.setting", "value").build(); |
| 214 | + final MetaData.Builder metaDataBuilder = |
| 215 | + MetaData.builder() |
| 216 | + .persistentSettings(existingPersistentSettings.build()) |
| 217 | + .transientSettings(existingTransientSettings.build()); |
| 218 | + final ClusterState clusterState = ClusterState.builder(new ClusterName("cluster")).metaData(metaDataBuilder).build(); |
| 219 | + final Settings.Builder persistentToApply = Settings.builder(); |
| 220 | + final Settings.Builder transientToApply = Settings.builder(); |
| 221 | + for (final Setting<String> dynamicSetting : dynamicSettings) { |
| 222 | + if (randomBoolean()) { |
| 223 | + persistentToApply.put(dynamicSetting.getKey(), "value"); |
| 224 | + } else { |
| 225 | + transientToApply.put(dynamicSetting.getKey(), "value"); |
| 226 | + } |
| 227 | + } |
204 | 228 | final ClusterState clusterStateAfterUpdate;
|
205 |
| - if (applyTransient) { |
206 |
| - clusterStateAfterUpdate = settingsUpdater.updateSettings(clusterState, toApply, Settings.EMPTY, logger); |
| 229 | + clusterStateAfterUpdate = |
| 230 | + settingsUpdater.updateSettings(clusterState, transientToApply.build(), persistentToApply.build(), logger); |
| 231 | + |
| 232 | + if (existingPersistentSettings.keys().contains("invalid.setting")) { |
| 233 | + assertThat( |
| 234 | + clusterStateAfterUpdate.metaData().persistentSettings().keySet(), |
| 235 | + hasItem(ARCHIVED_SETTINGS_PREFIX + "invalid.setting")); |
207 | 236 | } else {
|
208 |
| - clusterStateAfterUpdate = settingsUpdater.updateSettings(clusterState, Settings.EMPTY, toApply, logger); |
| 237 | + assertThat( |
| 238 | + clusterStateAfterUpdate.metaData().transientSettings().keySet(), |
| 239 | + hasItem(ARCHIVED_SETTINGS_PREFIX + "invalid.setting")); |
209 | 240 | }
|
210 | 241 |
|
211 |
| - assertThat( |
212 |
| - settingsToTest.apply(clusterStateAfterUpdate.metaData()).keySet(), hasItem(ARCHIVED_SETTINGS_PREFIX + "invalid.setting")); |
213 |
| - assertThat( |
214 |
| - settingsToTest.apply(clusterStateAfterUpdate.metaData()).keySet(), hasItem(ARCHIVED_SETTINGS_PREFIX + "unknown.setting")); |
215 |
| - if (applyTransient) { |
216 |
| - assertThat(clusterStateAfterUpdate.metaData().transientSettings().keySet(), hasItem("dynamic.setting")); |
217 |
| - assertThat(clusterStateAfterUpdate.metaData().transientSettings().get("dynamic.setting"), equalTo("value")); |
| 242 | + if (existingPersistentSettings.keys().contains("unknown.setting")) { |
| 243 | + assertThat( |
| 244 | + clusterStateAfterUpdate.metaData().persistentSettings().keySet(), |
| 245 | + hasItem(ARCHIVED_SETTINGS_PREFIX + "unknown.setting")); |
218 | 246 | } else {
|
219 |
| - assertThat(clusterStateAfterUpdate.metaData().persistentSettings().keySet(), hasItem("dynamic.setting")); |
220 |
| - assertThat(clusterStateAfterUpdate.metaData().persistentSettings().get("dynamic.setting"), equalTo("value")); |
| 247 | + assertThat( |
| 248 | + clusterStateAfterUpdate.metaData().transientSettings().keySet(), |
| 249 | + hasItem(ARCHIVED_SETTINGS_PREFIX + "unknown.setting")); |
| 250 | + } |
| 251 | + |
| 252 | + for (final Setting<String> dynamicSetting : dynamicSettings) { |
| 253 | + if (persistentToApply.keys().contains(dynamicSetting.getKey())) { |
| 254 | + assertThat(clusterStateAfterUpdate.metaData().persistentSettings().keySet(), hasItem(dynamicSetting.getKey())); |
| 255 | + } else { |
| 256 | + assertThat(clusterStateAfterUpdate.metaData().transientSettings().keySet(), hasItem(dynamicSetting.getKey())); |
| 257 | + } |
221 | 258 | }
|
| 259 | + |
222 | 260 | }
|
223 | 261 |
|
224 | 262 | }
|
0 commit comments