From ff0eeb3d1ada2b1b7b4a0d0643831996aadc6143 Mon Sep 17 00:00:00 2001 From: kimchy Date: Thu, 16 Dec 2010 05:02:24 +0200 Subject: [PATCH] improve getting setting as array, automatically support comma delimited values under the exact setting --- .../common/settings/ImmutableSettings.java | 20 ++++++++++++------- .../common/settings/Settings.java | 9 ++++++++- .../zen/ping/unicast/UnicastZenPing.java | 5 ----- .../ec2/AwsEc2UnicastHostsProvider.java | 6 +----- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/common/settings/ImmutableSettings.java b/modules/elasticsearch/src/main/java/org/elasticsearch/common/settings/ImmutableSettings.java index b503cf171ed..ff7e3863a82 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/common/settings/ImmutableSettings.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/common/settings/ImmutableSettings.java @@ -22,6 +22,8 @@ package org.elasticsearch.common.settings; import org.elasticsearch.common.Booleans; import org.elasticsearch.common.Classes; import org.elasticsearch.common.Strings; +import org.elasticsearch.common.collect.ImmutableMap; +import org.elasticsearch.common.collect.Lists; import org.elasticsearch.common.io.Streams; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -43,7 +45,6 @@ import java.util.*; import java.util.concurrent.TimeUnit; import static org.elasticsearch.common.Strings.*; -import static org.elasticsearch.common.collect.Lists.*; import static org.elasticsearch.common.unit.ByteSizeValue.*; import static org.elasticsearch.common.unit.SizeValue.*; import static org.elasticsearch.common.unit.TimeValue.*; @@ -51,18 +52,18 @@ import static org.elasticsearch.common.unit.TimeValue.*; /** * An immutable implementation of {@link Settings}. * - * @author kimchy (Shay Banon) + * @author kimchy (shay.banon) */ @ThreadSafe @Immutable public class ImmutableSettings implements Settings { - private Map settings; + private ImmutableMap settings; private transient ClassLoader classLoader; private ImmutableSettings(Map settings, ClassLoader classLoader) { - this.settings = settings; + this.settings = ImmutableMap.copyOf(settings); this.classLoader = classLoader == null ? buildClassLoader() : classLoader; } @@ -70,8 +71,8 @@ public class ImmutableSettings implements Settings { return this.classLoader; } - @Override public Map getAsMap() { - return Collections.unmodifiableMap(this.settings); + @Override public ImmutableMap getAsMap() { + return this.settings; } @Override public Settings getComponentSettings(Class component) { @@ -228,7 +229,12 @@ public class ImmutableSettings implements Settings { } @Override public String[] getAsArray(String settingPrefix, String[] defaultArray) throws SettingsException { - List result = newArrayList(); + List result = Lists.newArrayList(); + + if (get(settingPrefix) != null) { + Collections.addAll(result, Strings.commaDelimitedListToStringArray(get(settingPrefix))); + } + int counter = 0; while (true) { String value = get(settingPrefix + '.' + (counter++)); diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/common/settings/Settings.java b/modules/elasticsearch/src/main/java/org/elasticsearch/common/settings/Settings.java index 80b49775cb1..5e5c44be02c 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/common/settings/Settings.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/common/settings/Settings.java @@ -19,6 +19,7 @@ package org.elasticsearch.common.settings; +import org.elasticsearch.common.collect.ImmutableMap; import org.elasticsearch.common.unit.ByteSizeValue; import org.elasticsearch.common.unit.SizeValue; import org.elasticsearch.common.unit.TimeValue; @@ -63,7 +64,7 @@ public interface Settings { /** * The settings as a {@link java.util.Map}. */ - Map getAsMap(); + ImmutableMap getAsMap(); /** * Returns the setting value associated with the setting key. @@ -210,6 +211,9 @@ public interface Settings { * The values associated with a setting prefix as an array. The settings array is in the format of: * settingPrefix.[index]. * + *

It will also automatically load a comma separated list under the settingPrefix and merge with + * the numbered format. + * * @param settingPrefix The setting prefix to load the array by * @return The setting array values * @throws SettingsException @@ -220,6 +224,9 @@ public interface Settings { * The values associated with a setting prefix as an array. The settings array is in the format of: * settingPrefix.[index]. * + *

It will also automatically load a comma separated list under the settingPrefix and merge with + * the numbered format. + * * @param settingPrefix The setting prefix to load the array by * @return The setting array values * @throws SettingsException diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/discovery/zen/ping/unicast/UnicastZenPing.java b/modules/elasticsearch/src/main/java/org/elasticsearch/discovery/zen/ping/unicast/UnicastZenPing.java index b25019f8813..4de4a80891a 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/discovery/zen/ping/unicast/UnicastZenPing.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/discovery/zen/ping/unicast/UnicastZenPing.java @@ -24,7 +24,6 @@ import org.elasticsearch.ElasticSearchIllegalArgumentException; import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.node.DiscoveryNodes; -import org.elasticsearch.common.Strings; import org.elasticsearch.common.collect.Lists; import org.elasticsearch.common.component.AbstractLifecycleComponent; import org.elasticsearch.common.io.stream.StreamInput; @@ -89,10 +88,6 @@ public class UnicastZenPing extends AbstractLifecycleComponent implemen this.clusterName = clusterName; List hosts = Lists.newArrayList(componentSettings.getAsArray("hosts")); - if (componentSettings.get("hosts") != null) { - hosts.addAll(Strings.commaDelimitedListToSet(componentSettings.get("hosts"))); - } - logger.debug("using initial hosts {}", hosts); List nodes = Lists.newArrayList(); diff --git a/plugins/cloud/aws/src/main/java/org/elasticsearch/discovery/ec2/AwsEc2UnicastHostsProvider.java b/plugins/cloud/aws/src/main/java/org/elasticsearch/discovery/ec2/AwsEc2UnicastHostsProvider.java index 44e9ddd2d5f..c3643a5d476 100644 --- a/plugins/cloud/aws/src/main/java/org/elasticsearch/discovery/ec2/AwsEc2UnicastHostsProvider.java +++ b/plugins/cloud/aws/src/main/java/org/elasticsearch/discovery/ec2/AwsEc2UnicastHostsProvider.java @@ -69,11 +69,7 @@ public class AwsEc2UnicastHostsProvider extends AbstractComponent implements Uni this.ports = componentSettings.get("ports", "9300-9302"); this.bindAnyGroup = componentSettings.getAsBoolean("any_group", true); - Set groups = Sets.newHashSet(componentSettings.getAsArray("groups")); - if (componentSettings.get("groups") != null) { - groups.addAll(Strings.commaDelimitedListToSet(componentSettings.get("groups"))); - } - this.groups = ImmutableSet.copyOf(groups); + this.groups = ImmutableSet.copyOf(componentSettings.getAsArray("groups")); Set availabilityZones = Sets.newHashSet(componentSettings.getAsArray("availability_zones")); if (componentSettings.get("availability_zones") != null) {