You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2014/02/13 21:54:51 UTC

git commit: AMBARI-4490. If Ganglia is not installed, server logs hundreds of error messages. (Dmytro Shkvyra via mahadev)

Updated Branches:
  refs/heads/trunk 38cd87d82 -> fdfe81086


AMBARI-4490. If Ganglia is not installed, server logs hundreds of error messages. (Dmytro Shkvyra via mahadev)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fdfe8108
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fdfe8108
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fdfe8108

Branch: refs/heads/trunk
Commit: fdfe81086b2a46d0977b77b0b94447f7261f1aff
Parents: 38cd87d
Author: Mahadev Konar <ma...@apache.org>
Authored: Thu Feb 13 12:54:27 2014 -0800
Committer: Mahadev Konar <ma...@apache.org>
Committed: Thu Feb 13 12:54:37 2014 -0800

----------------------------------------------------------------------
 .../internal/AbstractProviderModule.java        | 55 +++++++++++++++++++-
 .../internal/JMXHostProviderTest.java           |  3 +-
 2 files changed, 55 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/fdfe8108/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
index f39893c..3053998 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
@@ -233,6 +233,41 @@ public abstract class AbstractProviderModule implements ProviderModule, Resource
     return clusterJmxPorts.get(componentName);
   }
 
+  /**Post process property value. If value has one ore some substrings
+   * started with "${" and ended with "}" these substrings will replace
+   * with properties from current propertiesMap. It is doing recursively.
+   * @param key - properties name
+   * @param value - properties value
+   * @param properties - map with properties
+   */
+  private String postProcessPropertyValue(String key, String value, Map<String, String> properties, Set<String> prevProps) {
+      if (value != null && key != null && value.contains("${")){
+          if (prevProps == null) prevProps = new HashSet<String>();
+          if (prevProps.contains(key)){
+            return value;
+          }
+          prevProps.add(key);
+          String refValueString = value;
+          Map<String, String> refMap = new HashMap<String, String>();
+          while(refValueString.contains("${")) {
+              int startValueRef = refValueString.indexOf("${") + 2;
+              int endValueRef = refValueString.indexOf("}");
+              String valueRef = refValueString.substring(startValueRef, endValueRef);
+              refValueString = refValueString.substring(endValueRef+1);
+              String trueValue = (String) postProcessPropertyValue(valueRef, properties.get(valueRef), properties, prevProps);
+              if (trueValue != null){
+               refMap.put("${"+valueRef+"}", trueValue);
+              } 
+          }
+          for (String keyRef : refMap.keySet()){
+            refValueString = refMap.get(keyRef);
+            value = ((String)value).replace(keyRef, refValueString);
+          }
+          properties.put(key, value);
+    }
+    return value;
+  } 
+  
   // ----- GangliaHostProvider -----------------------------------------------
 
   @Override
@@ -581,12 +616,28 @@ public abstract class AbstractProviderModule implements ProviderModule, Resource
     Map<String, String> mConfigs = new HashMap<String, String>();
     if (configResources != null) {
       for (Resource res : configResources) {
+       Map<String, String> evalutedProperties = null;                      
         for (String key : keys.keySet()) {
           String value = (String) res.getPropertyValue
             (PropertyHelper.getPropertyId(PROPERTIES_CATEGORY, keys.get(key)));
+          if (value != null && value.contains("${"))
+            if (evalutedProperties == null){
+              evalutedProperties = new HashMap<String, String>();
+              Map<String, Object> properties = res.getPropertiesMap().get(PROPERTIES_CATEGORY);
+              for (Map.Entry<String, Object> entry : properties.entrySet()) {
+                String keyString = entry.getKey();
+                Object object = entry.getValue();
+                String valueString;
+                if (object != null && object instanceof String){
+                  valueString = (String)object;
+                  evalutedProperties.put(keyString, valueString);
+                  postProcessPropertyValue(keyString, valueString, evalutedProperties, null);
+                }
+              }              
+            }
+          value = postProcessPropertyValue(keys.get(key), value, evalutedProperties, null);
           LOG.debug("PROPERTY -> key: " + keys.get(key) + ", " +
-            "value: " + value);
-
+          "value: " + value);
           mConfigs.put(key, value);
         }
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fdfe8108/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
index 1a1bad6..0b5f660 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
@@ -151,8 +151,9 @@ public class JMXHostProviderTest {
 
     // Create configs
     Map<String, String> configs = new HashMap<String, String>();
-    configs.put(NAMENODE_PORT, "localhost:70070");
+    configs.put(NAMENODE_PORT, "localhost:${ambari.dfs.datanode.http.port}");
     configs.put(DATANODE_PORT, "localhost:70075");
+    configs.put("ambari.dfs.datanode.http.port", "70070");
     ConfigurationRequest cr = new ConfigurationRequest(clusterName,
       "hdfs-site", "version1", configs);
     controller.createConfiguration(cr);