You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by mp...@apache.org on 2014/05/30 16:39:00 UTC

[2/2] git commit: AMBARI-5935. Maintenance state and status commands perf improvements. (mpapirkovskyy)

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 <mp...@hortonworks.com>
Authored: Thu May 29 18:14:11 2014 +0300
Committer: Myroslav Papirkovskyy <mp...@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();