You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2013/04/26 22:59:06 UTC
svn commit: r1476403 - in /incubator/ambari/trunk: CHANGES.txt
ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java
ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
Author: ncole
Date: Fri Apr 26 20:59:05 2013
New Revision: 1476403
URL: http://svn.apache.org/r1476403
Log:
AMBARI-2036. Fix to send global configs with status_commands
Modified:
incubator/ambari/trunk/CHANGES.txt
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
Modified: incubator/ambari/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/CHANGES.txt?rev=1476403&r1=1476402&r2=1476403&view=diff
==============================================================================
--- incubator/ambari/trunk/CHANGES.txt (original)
+++ incubator/ambari/trunk/CHANGES.txt Fri Apr 26 20:59:05 2013
@@ -1298,6 +1298,8 @@ Trunk (unreleased changes):
AMBARI-1657. User directories on HDFS do not get created with custom names
provided from Ambari UI. (swagle)
+ AMBARI-2036. Fix to send global configs with status_commands to agents. (ncole)
+
AMBARI-2025. Fix to restrict how UNKNOWN is assigned to a host-component. (ncole)
AMBARI-2013. Fix to delete cluster with components in unknown state. (ncole)
Modified: incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java?rev=1476403&r1=1476402&r2=1476403&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java (original)
+++ incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java Fri Apr 26 20:59:05 2013
@@ -21,12 +21,14 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
+import java.util.HashMap;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.actionmanager.ActionManager;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.Service;
@@ -174,25 +176,53 @@ public class HeartbeatMonitor implements
*/
public List<StatusCommand> generateStatusCommands(String hostname) throws AmbariException {
List<StatusCommand> cmds = new ArrayList<StatusCommand>();
+
for (Cluster cl : fsm.getClustersForHost(hostname)) {
- List<ServiceComponentHost> roleList = cl
- .getServiceComponentHosts(hostname);
- for (ServiceComponentHost sch : roleList) {
+
+ for (ServiceComponentHost sch : cl.getServiceComponentHosts(hostname)) {
String serviceName = sch.getServiceName();
if (LOG.isDebugEnabled()) {
- LOG.debug("Live status will include status of service " + serviceName +
- " of cluster " + cl.getClusterName());
+ LOG.debug("Live status will include status of service " + serviceName + " of cluster " + cl.getClusterName());
}
- Map<String, Config> configs = sch.getDesiredConfigs();
+ Map<String, Map<String, String>> configurations = new TreeMap<String, Map<String, String>>();
- Map<String, Map<String, String>> configurations =
- new TreeMap<String, Map<String, String>>();
+ // get the cluster config for type 'global'
+ // apply service overrides, if the tag is not the same
+ // apply host overrides, if any
+
+ Config clusterConfig = cl.getDesiredConfigByType("global");
+ if (null != clusterConfig) {
+ // cluster config for 'global'
+ Map<String,String> props = new HashMap<String, String>(clusterConfig.getProperties());
+
+ // apply service overrides, only if the tag is not the same (for when service configs are overrides)
+ Service service = cl.getService(sch.getServiceName());
+ Config svcConfig = service.getDesiredConfigs().get("global");
+ if (null != svcConfig && !svcConfig.getVersionTag().equals(clusterConfig.getVersionTag())) {
+ props.putAll(svcConfig.getProperties());
+ }
+
+ // apply host overrides, if any
+ Host host = fsm.getHost(hostname);
+ DesiredConfig dc = host.getDesiredConfigs(cl.getClusterId()).get("global");
+ if (null != dc) {
+ Config hostConfig = cl.getConfig("global", dc.getVersion());
+ if (null != hostConfig) {
+ props.putAll(hostConfig.getProperties());
+ }
+ }
+
+ configurations.put("global", props);
+ }
- for (Config config : configs.values()) {
- if (config.getType().equals("global"))
- configurations.put(config.getType(),
- config.getProperties());
+ // HACK - if any service exists with global tag, and we have none, use
+ // that instead
+ if (configurations.isEmpty()) {
+ Service service = cl.getService(sch.getServiceName());
+ Config config = service.getDesiredConfigs().get("global");
+ if (null != config)
+ configurations.put("global", new HashMap<String,String>(config.getProperties()));
}
StatusCommand statusCmd = new StatusCommand();
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java?rev=1476403&r1=1476402&r2=1476403&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java Fri Apr 26 20:59:05 2013
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.atLeas
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -37,6 +38,8 @@ import org.apache.ambari.server.orm.Guic
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
@@ -103,6 +106,15 @@ public class TestHeartbeatMonitor {
add(hostname1);
add(hostname2);
}};
+
+ ConfigFactory configFactory = injector.getInstance(ConfigFactory.class);
+ Config config = configFactory.createNew(cluster, "global",
+ new HashMap<String,String>() {{ put("a", "b"); }});
+ config.setVersionTag("version1");
+ cluster.addConfig(config);
+ cluster.addDesiredConfig(config);
+
+
clusters.mapHostsToCluster(hostNames, clusterName);
Service hdfs = cluster.addService(serviceName);
hdfs.persist();
@@ -144,10 +156,12 @@ public class TestHeartbeatMonitor {
containsDATANODEStatus |= cmd.getComponentName().equals("DATANODE");
containsNAMENODEStatus |= cmd.getComponentName().equals("NAMENODE");
containsSECONDARY_NAMENODEStatus |= cmd.getComponentName().equals("SECONDARY_NAMENODE");
+ assertTrue(cmd.getConfigurations().size() > 0);
}
assertEquals(true, containsDATANODEStatus);
assertEquals(true, containsNAMENODEStatus);
assertEquals(true, containsSECONDARY_NAMENODEStatus);
+
cmds = hm.generateStatusCommands(hostname2);
assertTrue("HeartbeatMonitor should not generate StatusCommands for host2 because it has no services", cmds.isEmpty());
}