SLIDER-1023 Configure AM via appconf/components/slider-appmaster slider.* options
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/8803886f Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/8803886f Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/8803886f Branch: refs/heads/develop Commit: 8803886f3b3d9d452b9a5607acf02dd9ac4a3d93 Parents: ee6fd4b Author: Steve Loughran <[email protected]> Authored: Mon Dec 14 17:31:09 2015 +0000 Committer: Steve Loughran <[email protected]> Committed: Mon Dec 14 17:31:09 2015 +0000 ---------------------------------------------------------------------- .../apache/slider/core/conf/MapOperations.java | 17 +++++++++++++++++ .../slider/server/appmaster/SliderAppMaster.java | 19 ++++++++++++++++++- .../slider/core/conf/TestConfTreeResolve.groovy | 12 +++++++++++- 3 files changed, 46 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/8803886f/slider-core/src/main/java/org/apache/slider/core/conf/MapOperations.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/core/conf/MapOperations.java b/slider-core/src/main/java/org/apache/slider/core/conf/MapOperations.java index e58178c..3235a5f 100644 --- a/slider-core/src/main/java/org/apache/slider/core/conf/MapOperations.java +++ b/slider-core/src/main/java/org/apache/slider/core/conf/MapOperations.java @@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -324,4 +325,20 @@ public class MapOperations implements Map<String, String> { long totalMinutes = days * 24 * 60 + hours * 24 + minutes; return totalMinutes * 60 + seconds; } + + /** + * Get all entries with a specific prefix + * @param prefix prefix + * @return a prefixed map, possibly empty + */ + public Map<String, String> prefixedWith(String prefix) { + + Map<String, String> prefixed = new HashMap<>(size()); + for (Entry<String, String> entry: entrySet()) { + if (entry.getKey().startsWith(prefix)) { + prefixed.put(entry.getKey(), entry.getValue()); + } + } + return prefixed; + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/8803886f/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java index 3868920..a268c97 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java @@ -626,11 +626,28 @@ public class SliderAppMaster extends AbstractSliderLaunchedService log.info("Deploying cluster {}:", instanceDefinition); + // and resolve it + AggregateConf resolvedInstance = new AggregateConf( instanceDefinition); + resolvedInstance.resolve(); + stateForProviders.setApplicationName(clustername); Configuration serviceConf = getConfig(); - securityConfiguration = new SecurityConfiguration(serviceConf, instanceDefinition, clustername); + // extend AM configuration with component resource + MapOperations amConfiguration = getInstanceDefinition() + .getAppConfOperations().getComponent(COMPONENT_AM); + // and patch configuration with prefix + Map<String, String> sliderAppConfKeys = amConfiguration.prefixedWith("slider."); + for (Map.Entry<String, String> entry : sliderAppConfKeys.entrySet()) { + String k = entry.getKey(); + String v = entry.getValue(); + boolean exists = serviceConf.get(k) != null; + log.info("{} {} to {}", (exists ? "Overwriting" : "Setting"), k, v); + serviceConf.set(k, v); + } + + securityConfiguration = new SecurityConfiguration(serviceConf, resolvedInstance, clustername); // obtain security state securityEnabled = securityConfiguration.isSecurityEnabled(); // set the global security flag for the instance definition http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/8803886f/slider-core/src/test/groovy/org/apache/slider/core/conf/TestConfTreeResolve.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/core/conf/TestConfTreeResolve.groovy b/slider-core/src/test/groovy/org/apache/slider/core/conf/TestConfTreeResolve.groovy index 156ae71..4d6cbbd 100644 --- a/slider-core/src/test/groovy/org/apache/slider/core/conf/TestConfTreeResolve.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/core/conf/TestConfTreeResolve.groovy @@ -107,6 +107,16 @@ class TestConfTreeResolve extends Assert { DEFAULT_CHAOS_MONKEY_INTERVAL_HOURS, DEFAULT_CHAOS_MONKEY_INTERVAL_MINUTES, 0); - assert monkeyInterval == 60; + assert monkeyInterval == 60L; + } + + @Test + public void testPrefix() throws Throwable { + def orig = ExampleConfResources.loadResource(overridden) + ConfTreeOperations cto = new ConfTreeOperations(orig) + cto.resolve() + def prefixed = cto.getComponent("worker").prefixedWith("g") + assert prefixed.size() == 2 + assert prefixed["g1"] == "overridden-by-worker" } }
