Remove static stuff in MarvelSettings

Original commit: elastic/x-pack-elasticsearch@e534397299
This commit is contained in:
Tanguy Leroux 2015-09-25 18:03:34 +02:00 committed by uboness
parent 78d006dbcc
commit 72675e711d
5 changed files with 140 additions and 168 deletions

View File

@ -7,6 +7,7 @@ package org.elasticsearch.marvel;
import org.elasticsearch.client.Client;
import org.elasticsearch.cluster.ClusterModule;
import org.elasticsearch.cluster.settings.Validator;
import org.elasticsearch.common.component.LifecycleComponent;
import org.elasticsearch.common.inject.Module;
import org.elasticsearch.common.logging.ESLogger;
@ -18,7 +19,6 @@ import org.elasticsearch.marvel.agent.exporter.ExporterModule;
import org.elasticsearch.marvel.agent.exporter.Exporters;
import org.elasticsearch.marvel.agent.renderer.RendererModule;
import org.elasticsearch.marvel.agent.settings.MarvelModule;
import org.elasticsearch.marvel.agent.settings.MarvelSetting;
import org.elasticsearch.marvel.agent.settings.MarvelSettings;
import org.elasticsearch.marvel.license.LicenseModule;
import org.elasticsearch.marvel.license.LicenseService;
@ -32,6 +32,7 @@ import org.elasticsearch.tribe.TribeService;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
public class MarvelPlugin extends Plugin {
@ -110,9 +111,8 @@ public class MarvelPlugin extends Plugin {
public void onModule(ClusterModule module) {
Exporters.registerDynamicSettings(module);
// MarvelSettingsService
for (MarvelSetting setting : MarvelSettings.dynamicSettings()) {
module.registerClusterDynamicSetting(setting.dynamicSettingName(), setting.dynamicValidator());
for (Map.Entry<String, Validator> setting : MarvelSettings.dynamicSettings().entrySet()) {
module.registerClusterDynamicSetting(setting.getKey(), setting.getValue());
}
}
}

View File

@ -6,7 +6,6 @@
package org.elasticsearch.marvel.agent.settings;
import org.elasticsearch.ElasticsearchParseException;
import org.elasticsearch.cluster.settings.Validator;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
@ -17,15 +16,15 @@ public abstract class MarvelSetting<V> {
private final String name;
private final String description;
private final boolean dynamic;
private final V defaultValue;
private volatile V value;
MarvelSetting(String name, String description, V defaultValue, boolean dynamic) {
MarvelSetting(String name, String description, V defaultValue) {
this.name = name;
this.description = description;
this.defaultValue = defaultValue;
this.value = defaultValue;
this.dynamic = dynamic;
}
abstract boolean onRefresh(Settings settings);
@ -42,6 +41,10 @@ public abstract class MarvelSetting<V> {
return value;
}
public V getDefaultValue() {
return defaultValue;
}
public synchronized void setValue(V value) {
this.value = value;
}
@ -50,47 +53,35 @@ public abstract class MarvelSetting<V> {
return getValue() != null ? getValue().toString() : "null";
}
public boolean isDynamic() {
return dynamic;
}
public String dynamicSettingName() {
return getName();
}
public Validator dynamicValidator() {
return Validator.EMPTY;
}
@Override
public String toString() {
return "marvel setting [" + getName() + " : " + getValueAsString() + "]";
}
public static BooleanSetting booleanSetting(String name, Boolean defaultValue, String description, boolean dynamic) {
return new BooleanSetting(name, description, defaultValue, dynamic);
public static BooleanSetting booleanSetting(String name, Boolean defaultValue, String description) {
return new BooleanSetting(name, description, defaultValue);
}
public static StringSetting stringSetting(String name, String defaultValue, String description, boolean dynamic) {
return new StringSetting(name, description, defaultValue, dynamic);
public static StringSetting stringSetting(String name, String defaultValue, String description) {
return new StringSetting(name, description, defaultValue);
}
public static StringArraySetting arraySetting(String name, String[] defaultValue, String description, boolean dynamic) {
return new StringArraySetting(name, description, defaultValue, dynamic);
public static StringArraySetting arraySetting(String name, String[] defaultValue, String description) {
return new StringArraySetting(name, description, defaultValue);
}
public static TimeValueSetting timeSetting(String name, TimeValue defaultValue, String description, boolean dynamic) {
return new TimeValueSetting(name, description, defaultValue, dynamic);
public static TimeValueSetting timeSetting(String name, TimeValue defaultValue, String description) {
return new TimeValueSetting(name, description, defaultValue);
}
public static TimeoutValueSetting timeoutSetting(String name, TimeValue defaultTimeoutValue, String description, boolean dynamic) {
return new TimeoutValueSetting(name, description, defaultTimeoutValue, dynamic);
public static TimeoutValueSetting timeoutSetting(String name, TimeValue defaultTimeoutValue, String description) {
return new TimeoutValueSetting(name, description, defaultTimeoutValue);
}
static class BooleanSetting extends MarvelSetting<Boolean> {
BooleanSetting(String name, String description, Boolean defaultValue, boolean dynamic) {
super(name, description, defaultValue, dynamic);
BooleanSetting(String name, String description, Boolean defaultValue) {
super(name, description, defaultValue);
}
@Override
@ -102,17 +93,12 @@ public abstract class MarvelSetting<V> {
}
return false;
}
@Override
public Validator dynamicValidator() {
return Validator.BOOLEAN;
}
}
static class StringSetting extends MarvelSetting<String> {
StringSetting(String name, String description, String defaultValue, boolean dynamic) {
super(name, description, defaultValue, dynamic);
StringSetting(String name, String description, String defaultValue) {
super(name, description, defaultValue);
}
@Override
@ -128,8 +114,8 @@ public abstract class MarvelSetting<V> {
static class StringArraySetting extends MarvelSetting<String[]> {
StringArraySetting(String name, String description, String[] defaultValue, boolean dynamic) {
super(name, description, defaultValue, dynamic);
StringArraySetting(String name, String description, String[] defaultValue) {
super(name, description, defaultValue);
}
@Override
@ -142,12 +128,6 @@ public abstract class MarvelSetting<V> {
return false;
}
@Override
public String dynamicSettingName() {
// array settings
return super.dynamicSettingName() + ".*";
}
@Override
public String getValueAsString() {
return Strings.arrayToCommaDelimitedString(getValue());
@ -156,8 +136,8 @@ public abstract class MarvelSetting<V> {
static class TimeValueSetting extends MarvelSetting<TimeValue> {
TimeValueSetting(String name, String description, TimeValue defaultValue, boolean dynamic) {
super(name, description, defaultValue, dynamic);
TimeValueSetting(String name, String description, TimeValue defaultValue) {
super(name, description, defaultValue);
}
@Override
@ -184,22 +164,12 @@ public abstract class MarvelSetting<V> {
}
return null;
}
@Override
public Validator dynamicValidator() {
return Validator.TIME;
}
}
static class TimeoutValueSetting extends TimeValueSetting {
TimeoutValueSetting(String name, String description, TimeValue defaultValue, boolean dynamic) {
super(name, description, defaultValue, dynamic);
}
@Override
public Validator dynamicValidator() {
return Validator.TIMEOUT;
TimeoutValueSetting(String name, String description, TimeValue defaultValue) {
super(name, description, defaultValue);
}
}
}

View File

@ -5,6 +5,7 @@
*/
package org.elasticsearch.marvel.agent.settings;
import org.elasticsearch.cluster.settings.Validator;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.component.AbstractComponent;
import org.elasticsearch.common.inject.Inject;
@ -13,7 +14,10 @@ import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.marvel.MarvelPlugin;
import org.elasticsearch.node.settings.NodeSettingsService;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static org.elasticsearch.marvel.agent.settings.MarvelSetting.*;
@ -37,60 +41,74 @@ public class MarvelSettings extends AbstractComponent implements NodeSettingsSer
public static final String COLLECTORS = PREFIX + "collectors";
public static final String LICENSE_GRACE_PERIOD = PREFIX + "license.grace.period";
private static Map<String, ? extends MarvelSetting> MARVEL_SETTINGS = Collections.EMPTY_MAP;
static {
Map<String, MarvelSetting> map = new HashMap<>();
map.put(INTERVAL, timeSetting(INTERVAL, TimeValue.timeValueSeconds(10),
"Sampling interval between two collections (default to 10s)", true));
map.put(STARTUP_DELAY, timeSetting(STARTUP_DELAY, null,
"Waiting time before the agent start to collect data (default to sampling interval)", false));
map.put(INDEX_STATS_TIMEOUT, timeoutSetting(INDEX_STATS_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting index statistics (default to 10m)", true));
map.put(INDICES_STATS_TIMEOUT, timeoutSetting(INDICES_STATS_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting total indices statistics (default to 10m)", true));
map.put(INDICES, arraySetting(INDICES, Strings.EMPTY_ARRAY,
"List of indices names whose stats will be exported (default to all indices)", true));
map.put(CLUSTER_STATE_TIMEOUT, timeoutSetting(CLUSTER_STATE_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting the cluster state (default to 10m)", true));
map.put(CLUSTER_STATS_TIMEOUT, timeoutSetting(CLUSTER_STATS_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting the cluster statistics (default to 10m)", true));
map.put(INDEX_RECOVERY_TIMEOUT, timeoutSetting(INDEX_RECOVERY_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting the recovery information (default to 10m)", true));
map.put(INDEX_RECOVERY_ACTIVE_ONLY, booleanSetting(INDEX_RECOVERY_ACTIVE_ONLY, Boolean.FALSE,
"Flag to indicate if only active recoveries should be collected (default to false: all recoveries are collected)", true));
map.put(COLLECTORS, arraySetting(COLLECTORS, Strings.EMPTY_ARRAY,
"List of collectors allowed to collect data (default to all)", false));
map.put(LICENSE_GRACE_PERIOD, timeSetting(LICENSE_GRACE_PERIOD, MAX_LICENSE_GRACE_PERIOD,
"Period during which the agent continues to collect data even if the license is expired (default to 7 days, cannot be greater than 7 days)", false));
MARVEL_SETTINGS = Collections.unmodifiableMap(map);
}
private Map<String, ? extends MarvelSetting> settings = Collections.EMPTY_MAP;
@Inject
public MarvelSettings(Settings clusterSettings, NodeSettingsService nodeSettingsService) {
super(clusterSettings);
logger.trace("initializing marvel settings:");
updateSettings(clusterSettings, false);
logger.trace("initializing marvel settings");
this.settings = defaultSettings();
logger.trace("updating marvel settings with cluster settings");
updateSettings(clusterSettings);
logger.trace("registering the service as a node settings listener");
nodeSettingsService.addListener(this);
}
private Map<String, MarvelSetting> defaultSettings() {
Map<String, MarvelSetting> map = new HashMap<>();
map.put(INTERVAL, timeSetting(INTERVAL, TimeValue.timeValueSeconds(10),
"Sampling interval between two collections (default to 10s)"));
map.put(STARTUP_DELAY, timeSetting(STARTUP_DELAY, null,
"Waiting time before the agent start to collect data (default to sampling interval)"));
map.put(INDEX_STATS_TIMEOUT, timeoutSetting(INDEX_STATS_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting index statistics (default to 10m)"));
map.put(INDICES_STATS_TIMEOUT, timeoutSetting(INDICES_STATS_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting total indices statistics (default to 10m)"));
map.put(INDICES, arraySetting(INDICES, Strings.EMPTY_ARRAY,
"List of indices names whose stats will be exported (default to all indices)"));
map.put(CLUSTER_STATE_TIMEOUT, timeoutSetting(CLUSTER_STATE_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting the cluster state (default to 10m)"));
map.put(CLUSTER_STATS_TIMEOUT, timeoutSetting(CLUSTER_STATS_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting the cluster statistics (default to 10m)"));
map.put(INDEX_RECOVERY_TIMEOUT, timeoutSetting(INDEX_RECOVERY_TIMEOUT, TimeValue.timeValueMinutes(10),
"Timeout value when collecting the recovery information (default to 10m)"));
map.put(INDEX_RECOVERY_ACTIVE_ONLY, booleanSetting(INDEX_RECOVERY_ACTIVE_ONLY, Boolean.FALSE,
"Flag to indicate if only active recoveries should be collected (default to false: all recoveries are collected)"));
map.put(COLLECTORS, arraySetting(COLLECTORS, Strings.EMPTY_ARRAY,
"List of collectors allowed to collect data (default to all)"));
map.put(LICENSE_GRACE_PERIOD, timeSetting(LICENSE_GRACE_PERIOD, MAX_LICENSE_GRACE_PERIOD,
"Period during which the agent continues to collect data even if the license is expired (default to 7 days, cannot be greater than 7 days)"));
return Collections.unmodifiableMap(map);
}
public static Map<String, Validator> dynamicSettings() {
Map<String, Validator> dynamics = new HashMap<>();
dynamics.put(INTERVAL, Validator.TIME);
dynamics.put(INDEX_STATS_TIMEOUT, Validator.TIMEOUT);
dynamics.put(INDICES_STATS_TIMEOUT, Validator.TIMEOUT);
dynamics.put(INDICES + ".*", Validator.EMPTY);
dynamics.put(CLUSTER_STATE_TIMEOUT, Validator.TIMEOUT);
dynamics.put(CLUSTER_STATS_TIMEOUT, Validator.TIMEOUT);
dynamics.put(INDEX_RECOVERY_TIMEOUT, Validator.TIMEOUT);
dynamics.put(INDEX_RECOVERY_ACTIVE_ONLY, Validator.BOOLEAN);
return dynamics;
}
@Override
public void onRefreshSettings(Settings clusterSettings) {
if (clusterSettings.names() == null || clusterSettings.names().isEmpty()) {
return;
}
updateSettings(clusterSettings, true);
updateSettings(clusterSettings);
}
private synchronized void updateSettings(Settings clusterSettings, boolean dynamicOnly) {
for (MarvelSetting setting : settings()) {
if (!dynamicOnly || setting.isDynamic()) {
if (setting.onRefresh(clusterSettings)) {
logger.info("{} updated", setting);
}
private void updateSettings(Settings clusterSettings) {
for (MarvelSetting setting : settings.values()) {
if (setting.onRefresh(clusterSettings)) {
logger.info("{} updated", setting);
}
}
}
@ -101,8 +119,8 @@ public class MarvelSettings extends AbstractComponent implements NodeSettingsSer
* @param name The given name
* @return The associated setting, null if not found
*/
synchronized MarvelSetting getSetting(String name) {
MarvelSetting setting = MARVEL_SETTINGS.get(name);
MarvelSetting getSetting(String name) {
MarvelSetting setting = settings.get(name);
if (setting == null) {
throw new IllegalArgumentException("no marvel setting initialized for [" + name + "]");
}
@ -123,18 +141,8 @@ public class MarvelSettings extends AbstractComponent implements NodeSettingsSer
return (T) setting.getValue();
}
public static Collection<? extends MarvelSetting> settings() {
return MARVEL_SETTINGS.values();
}
public static synchronized Collection<MarvelSetting> dynamicSettings() {
List<MarvelSetting> list = new ArrayList<>();
for (MarvelSetting setting : settings()) {
if (setting.isDynamic()) {
list.add(setting);
}
}
return list;
Collection<? extends MarvelSetting> settings() {
return settings.values();
}
public TimeValue interval() {

View File

@ -23,9 +23,8 @@ public class MarvelSettingTests extends ESTestCase {
if (randomBoolean()) {
defaultValue = randomBoolean();
}
boolean dynamic = randomBoolean();
MarvelSetting.BooleanSetting setting = MarvelSetting.booleanSetting(name, defaultValue, description, dynamic);
MarvelSetting.BooleanSetting setting = MarvelSetting.booleanSetting(name, defaultValue, description);
assertThat(setting.getName(), equalTo(name));
assertThat(setting.getDescription(), equalTo(description));
assertThat(setting.getValue(), equalTo(defaultValue));
@ -43,11 +42,10 @@ public class MarvelSettingTests extends ESTestCase {
String description = randomAsciiOfLength(20);
TimeValue defaultValue = null;
if (randomBoolean()) {
defaultValue = randomParsedTimeValue();
defaultValue = newRandomTimeValue();
}
boolean dynamic = randomBoolean();
MarvelSetting.TimeValueSetting setting = MarvelSetting.timeSetting(name, defaultValue, description, dynamic);
MarvelSetting.TimeValueSetting setting = MarvelSetting.timeSetting(name, defaultValue, description);
assertThat(setting.getName(), equalTo(name));
assertThat(setting.getDescription(), equalTo(description));
if (defaultValue == null) {
@ -59,11 +57,11 @@ public class MarvelSettingTests extends ESTestCase {
setting.onRefresh(settingsBuilder().put(name, 15000L).build());
assertThat(setting.getValue().millis(), equalTo(15000L));
TimeValue updated = randomParsedTimeValue();
TimeValue updated = newRandomTimeValue();
setting.onRefresh(settingsBuilder().put(name, updated.toString()).build());
assertThat(setting.getValue().millis(), equalTo(updated.millis()));
updated = randomParsedTimeValue();
updated = newRandomTimeValue();
setting.onRefresh(settingsBuilder().put(name, updated.toString()).build());
assertThat(setting.getValue().millis(), equalTo(updated.millis()));
}
@ -76,9 +74,8 @@ public class MarvelSettingTests extends ESTestCase {
if (randomBoolean()) {
defaultValue = randomAsciiOfLength(15);
}
boolean dynamic = randomBoolean();
MarvelSetting.StringSetting setting = MarvelSetting.stringSetting(name, defaultValue, description, dynamic);
MarvelSetting.StringSetting setting = MarvelSetting.stringSetting(name, defaultValue, description);
assertThat(setting.getName(), equalTo(name));
assertThat(setting.getDescription(), equalTo(description));
if (defaultValue == null) {
@ -107,9 +104,8 @@ public class MarvelSettingTests extends ESTestCase {
if (randomBoolean()) {
defaultValue = randomStringArray();
}
boolean dynamic = randomBoolean();
MarvelSetting.StringArraySetting setting = MarvelSetting.arraySetting(name, defaultValue, description, dynamic);
MarvelSetting.StringArraySetting setting = MarvelSetting.arraySetting(name, defaultValue, description);
assertThat(setting.getName(), equalTo(name));
assertThat(setting.getDescription(), equalTo(description));
if (defaultValue == null) {
@ -130,7 +126,7 @@ public class MarvelSettingTests extends ESTestCase {
assertArrayEquals(setting.getValue(), updated);
}
private TimeValue randomParsedTimeValue() {
private TimeValue newRandomTimeValue() {
return TimeValue.parseTimeValue(randomFrom("10ms", "1.5s", "1.5m", "1.5h", "1.5d", "1000d"), null, getClass().getSimpleName() + ".unit");
}

View File

@ -8,30 +8,24 @@ package org.elasticsearch.marvel.agent.settings;
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequestBuilder;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.license.plugin.LicensePlugin;
import org.elasticsearch.marvel.MarvelPlugin;
import org.elasticsearch.marvel.test.MarvelIntegTestCase;
import org.elasticsearch.node.Node;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.test.ESIntegTestCase;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collection;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
import static org.hamcrest.Matchers.*;
@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.TEST, numDataNodes = 1)
public class MarvelSettingsTests extends MarvelIntegTestCase {
private final TimeValue startUp = randomParsedTimeValue();
private final TimeValue interval = randomParsedTimeValue();
private final TimeValue indexStatsTimeout = randomParsedTimeValue();
private final TimeValue startUp = newRandomTimeValue();
private final TimeValue interval = newRandomTimeValue();
private final TimeValue indexStatsTimeout = newRandomTimeValue();
private final String[] indices = randomStringArray();
private final TimeValue clusterStateTimeout = randomParsedTimeValue();
private final TimeValue clusterStatsTimeout = randomParsedTimeValue();
private final TimeValue recoveryTimeout = randomParsedTimeValue();
private final TimeValue clusterStateTimeout = newRandomTimeValue();
private final TimeValue clusterStatsTimeout = newRandomTimeValue();
private final TimeValue recoveryTimeout = newRandomTimeValue();
private final Boolean recoveryActiveOnly = randomBoolean();
private final String[] collectors = randomStringArray();
private final TimeValue licenseGracePeriod = randomExpirationDelay();
@ -61,12 +55,7 @@ public class MarvelSettingsTests extends MarvelIntegTestCase {
}
@Test
public void testMarvelSettingService() throws Exception {
logger.info("--> printing marvel settings values");
for (MarvelSetting setting : MarvelSettings.settings()) {
logger.info("\t{}", setting);
}
public void testMarvelSettings() throws Exception {
logger.info("--> testing marvel settings service initialization");
for (final MarvelSettings marvelSettings : internalCluster().getInstances(MarvelSettings.class)) {
assertThat(marvelSettings.startUpDelay().millis(), equalTo(startUp.millis()));
@ -79,31 +68,37 @@ public class MarvelSettingsTests extends MarvelIntegTestCase {
assertThat(marvelSettings.recoveryActiveOnly(), equalTo(recoveryActiveOnly));
assertArrayEquals(marvelSettings.collectors(), collectors);
assertThat(marvelSettings.licenseExpirationGracePeriod().millis(), allOf(greaterThanOrEqualTo(0L), lessThanOrEqualTo(MarvelSettings.MAX_LICENSE_GRACE_PERIOD.millis())));
for (final MarvelSetting setting : MarvelSettings.dynamicSettings()) {
assertThat(marvelSettings.getSettingValue(setting.getName()), equalTo(setting.getValue()));
}
}
logger.info("--> testing marvel dynamic settings update");
for (final MarvelSetting setting : MarvelSettings.dynamicSettings()) {
for (String setting : MarvelSettings.dynamicSettings().keySet()) {
Object updated = null;
Settings.Builder transientSettings = Settings.builder();
if (setting instanceof MarvelSetting.TimeValueSetting) {
updated = randomParsedTimeValue();
transientSettings.put(setting.getName(), updated);
} else if (setting instanceof MarvelSetting.BooleanSetting) {
updated = randomBoolean();
transientSettings.put(setting.getName(), updated);
if (setting.endsWith(".*")) {
setting = setting.substring(0, setting.lastIndexOf('.'));
}
} else if (setting instanceof MarvelSetting.StringSetting) {
updated = randomAsciiOfLength(10);
transientSettings.put(setting.getName(), updated);
} else if (setting instanceof MarvelSetting.StringArraySetting) {
updated = randomStringArray();
transientSettings.putArray(setting.getName(), (String[]) updated);
switch (setting) {
case MarvelSettings.INTERVAL:
case MarvelSettings.INDEX_STATS_TIMEOUT:
case MarvelSettings.INDICES_STATS_TIMEOUT:
case MarvelSettings.CLUSTER_STATE_TIMEOUT:
case MarvelSettings.CLUSTER_STATS_TIMEOUT:
case MarvelSettings.INDEX_RECOVERY_TIMEOUT:
updated = newRandomTimeValue();
transientSettings.put(setting, updated);
break;
case MarvelSettings.INDEX_RECOVERY_ACTIVE_ONLY:
updated = randomBoolean();
transientSettings.put(setting, updated);
break;
case MarvelSettings.INDICES:
updated = randomStringArray();
transientSettings.putArray(setting, (String[]) updated);
break;
default:
fail("unknown dynamic setting [" + setting +"]");
}
logger.info("--> updating {} to value [{}]", setting, updated);
@ -111,25 +106,28 @@ public class MarvelSettingsTests extends MarvelIntegTestCase {
// checking that the value has been correctly updated on all marvel settings services
final Object expected = updated;
final String finalSetting = setting;
assertBusy(new Runnable() {
@Override
public void run() {
for (final MarvelSettings marvelSettings : internalCluster().getInstances(MarvelSettings.class)) {
MarvelSetting current = marvelSettings.getSetting(setting.getName());
MarvelSetting current = marvelSettings.getSetting(finalSetting);
Object value = current.getValue();
logger.info("--> {} in {}", current, marvelSettings);
if (setting instanceof MarvelSetting.TimeValueSetting) {
if (current instanceof MarvelSetting.TimeValueSetting) {
assertThat(((TimeValue) value).millis(), equalTo(((TimeValue) expected).millis()));
} else if (setting instanceof MarvelSetting.BooleanSetting) {
} else if (current instanceof MarvelSetting.BooleanSetting) {
assertThat((Boolean) value, equalTo((Boolean) expected));
} else if (setting instanceof MarvelSetting.StringSetting) {
} else if (current instanceof MarvelSetting.StringSetting) {
assertThat((String) value, equalTo((String) expected));
} else if (setting instanceof MarvelSetting.StringArraySetting) {
} else if (current instanceof MarvelSetting.StringArraySetting) {
assertArrayEquals((String[]) value, (String[]) expected);
} else {
fail("unable to check value for unknown dynamic setting [" + finalSetting + "]");
}
}
}
@ -147,7 +145,7 @@ public class MarvelSettingsTests extends MarvelIntegTestCase {
return requestBuilder;
}
private TimeValue randomParsedTimeValue() {
private TimeValue newRandomTimeValue() {
return TimeValue.parseTimeValue(randomFrom("30m", "1h", "3h", "5h", "7h", "10h", "1d"), null, getClass().getSimpleName());
}
@ -162,6 +160,6 @@ public class MarvelSettingsTests extends MarvelIntegTestCase {
}
private TimeValue randomExpirationDelay() {
return randomBoolean() ? randomParsedTimeValue() : TimeValue.timeValueHours(randomIntBetween(-10, 10) * 24);
return randomBoolean() ? newRandomTimeValue() : TimeValue.timeValueHours(randomIntBetween(-10, 10) * 24);
}
}