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"
   }
 }

Reply via email to