AMBARI-5935. Maintenance state and status commands perf improvements. (mpapirkovskyy)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1b038795 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1b038795 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1b038795 Branch: refs/heads/trunk Commit: 1b038795381cae1a796d4904422e9bd622b3aa80 Parents: 1a59711 Author: Myroslav Papirkovskyy <mpapyrkovs...@hortonworks.com> Authored: Thu May 29 18:14:11 2014 +0300 Committer: Myroslav Papirkovskyy <mpapyrkovs...@hortonworks.com> Committed: Fri May 30 17:39:02 2014 +0300 ---------------------------------------------------------------------- .../apache/ambari/server/agent/HeartBeatHandler.java | 2 +- .../apache/ambari/server/agent/HeartbeatMonitor.java | 12 ++++++++++-- .../server/controller/MaintenanceStateHelper.java | 6 +----- .../ambari/server/agent/TestHeartbeatMonitor.java | 14 ++++++++++++++ .../server/controller/MaintenanceStateHelperTest.java | 6 +----- 5 files changed, 27 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/1b038795/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java index c376bcd..364cdaa 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java @@ -417,7 +417,7 @@ public class HeartBeatHandler { || prevState.equals(State.STARTING) || prevState.equals(State.STOPPING) || prevState.equals(State.UNKNOWN)) { - scHost.setState(liveState); + scHost.setState(liveState); //TODO direct status set breaks state machine sometimes !!! if (!prevState.equals(liveState)) { LOG.info("State of service component " + componentName + " of service " + status.getServiceName() http://git-wip-us.apache.org/repos/asf/ambari/blob/1b038795/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java index 2dddd20..5fa4062 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java @@ -181,8 +181,16 @@ public class HeartbeatMonitor implements Runnable { for (Cluster cl : clusters.getClustersForHost(hostname)) { for (ServiceComponentHost sch : cl.getServiceComponentHosts(hostname)) { - StatusCommand statusCmd = createStatusCommand(hostname, cl, sch); - cmds.add(statusCmd); + switch (sch.getState()) { + case INIT: + case INSTALLING: + //don't send commands until component is installed at least + continue; + default: + StatusCommand statusCmd = createStatusCommand(hostname, cl, sch); + cmds.add(statusCmd); + } + } } return cmds; http://git-wip-us.apache.org/repos/asf/ambari/blob/1b038795/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java index 3e4b149..191c647 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java @@ -85,11 +85,7 @@ public class MaintenanceStateHelper { public MaintenanceState getEffectiveState(ServiceComponentHost sch) throws AmbariException { Cluster cluster = clusters.getCluster(sch.getClusterName()); - Map<String, Host> map = clusters.getHostsForCluster(cluster.getClusterName()); - if (null == map) - return MaintenanceState.OFF; - - Host host = map.get(sch.getHostName()); + Host host = clusters.getHost(sch.getHostName()); return getEffectiveState(sch, host); } http://git-wip-us.apache.org/repos/asf/ambari/blob/1b038795/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java index 79d0e7e..a5e4294 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java @@ -136,6 +136,10 @@ public class TestHeartbeatMonitor { hdfs.addServiceComponent(Role.SECONDARY_NAMENODE.name()).persist(); hdfs.getServiceComponent(Role.SECONDARY_NAMENODE.name()).addServiceComponentHost(hostname1).persist(); + hdfs.getServiceComponent(Role.DATANODE.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + hdfs.getServiceComponent(Role.NAMENODE.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + hdfs.getServiceComponent(Role.SECONDARY_NAMENODE.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + ActionQueue aq = new ActionQueue(); ActionManager am = mock(ActionManager.class); HeartbeatMonitor hm = new HeartbeatMonitor(clusters, aq, am, @@ -223,6 +227,12 @@ public class TestHeartbeatMonitor { hdfs.getServiceComponent(Role.HDFS_CLIENT.name()).addServiceComponentHost (hostname2).persist(); + hdfs.getServiceComponent(Role.DATANODE.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + hdfs.getServiceComponent(Role.NAMENODE.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + hdfs.getServiceComponent(Role.SECONDARY_NAMENODE.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + hdfs.getServiceComponent(Role.HDFS_CLIENT.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + hdfs.getServiceComponent(Role.HDFS_CLIENT.name()).getServiceComponentHost(hostname2).setState(State.INSTALLED); + ActionQueue aq = new ActionQueue(); ActionManager am = mock(ActionManager.class); HeartbeatMonitor hm = new HeartbeatMonitor(clusters, aq, am, @@ -301,6 +311,10 @@ public class TestHeartbeatMonitor { hdfs.addServiceComponent(Role.SECONDARY_NAMENODE.name()).persist(); hdfs.getServiceComponent(Role.SECONDARY_NAMENODE.name()).addServiceComponentHost(hostname1).persist(); + hdfs.getServiceComponent(Role.DATANODE.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + hdfs.getServiceComponent(Role.NAMENODE.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + hdfs.getServiceComponent(Role.SECONDARY_NAMENODE.name()).getServiceComponentHost(hostname1).setState(State.INSTALLED); + ActionQueue aqMock = mock(ActionQueue.class); ArgumentCaptor<AgentCommand> commandCaptor=ArgumentCaptor. forClass(AgentCommand.class); http://git-wip-us.apache.org/repos/asf/ambari/blob/1b038795/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java index 5fc66a6..08ccc87 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java @@ -248,11 +248,7 @@ public class MaintenanceStateHelperTest { expect(clusters.getCluster("c1")).andReturn(cluster).anyTimes(); expect(cluster.getClusterName()).andReturn("c1").anyTimes(); expect(cluster.getClusterId()).andReturn(1L).anyTimes(); - expect(clusters.getHostsForCluster("c1")).andReturn( - new HashMap<String, Host>() {{ - put("h1", host); - }} - ).anyTimes(); + expect(clusters.getHost("h1")).andReturn(host).anyTimes(); expect(sch.getHostName()).andReturn("h1").anyTimes(); expect(sch.getServiceName()).andReturn("HDFS").anyTimes(); expect(cluster.getService("HDFS")).andReturn(service).anyTimes();