AMBARI-7946. Stale configs indicators disappearing very long for clients if restarting service via API (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/995e0889 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/995e0889 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/995e0889 Branch: refs/heads/branch-1.7.0 Commit: 995e0889bf2094d9855c60d26083457484acb42e Parents: 8aefc79 Author: Andrew Onishuk <[email protected]> Authored: Fri Oct 24 19:39:31 2014 +0300 Committer: Andrew Onishuk <[email protected]> Committed: Fri Oct 24 19:39:31 2014 +0300 ---------------------------------------------------------------------- .../ambari/server/agent/HeartBeatHandler.java | 8 ++- .../server/agent/TestHeartbeatHandler.java | 68 ++++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/995e0889/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 fa633c1..8a81b19 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 @@ -377,7 +377,13 @@ public class HeartBeatHandler { scHost.updateActualConfigs(report.getConfigurationTags()); scHost.setRestartRequired(false); } - + // Necessary for resetting clients stale configs after starting service + if ((RoleCommand.INSTALL.toString().equals(report.getRoleCommand()) || + (RoleCommand.CUSTOM_COMMAND.toString().equals(report.getRoleCommand()) && + "INSTALL".equals(report.getCustomCommand()))) && svcComp.isClientComponent()){ + scHost.updateActualConfigs(report.getConfigurationTags()); + scHost.setRestartRequired(false); + } if (RoleCommand.CUSTOM_COMMAND.toString().equals(report.getRoleCommand()) && !("START".equals(report.getCustomCommand()) || "STOP".equals(report.getCustomCommand()))) { http://git-wip-us.apache.org/repos/asf/ambari/blob/995e0889/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java index 8c975d6..6e78b1d 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java @@ -272,6 +272,74 @@ public class TestHeartbeatHandler { @Test @SuppressWarnings("unchecked") + public void testRestartRequiredAfterInstallClient() throws Exception { + Cluster cluster = getDummyCluster(); + + @SuppressWarnings("serial") + Set<String> hostNames = new HashSet<String>(){{ + add(DummyHostname1); + }}; + clusters.mapHostsToCluster(hostNames, DummyCluster); + Service hdfs = cluster.addService(HDFS); + hdfs.persist(); + hdfs.addServiceComponent(HDFS_CLIENT).persist(); + hdfs.getServiceComponent(HDFS_CLIENT).addServiceComponentHost(DummyHostname1).persist(); + + ActionQueue aq = new ActionQueue(); + + ServiceComponentHost serviceComponentHost = clusters.getCluster(DummyCluster).getService(HDFS). + getServiceComponent(HDFS_CLIENT).getServiceComponentHost(DummyHostname1); + + serviceComponentHost.setState(State.INSTALLED); + serviceComponentHost.setRestartRequired(true); + + HeartBeat hb = new HeartBeat(); + hb.setResponseId(0); + hb.setNodeStatus(new HostStatus(Status.HEALTHY, DummyHostStatus)); + hb.setHostname(DummyHostname1); + + + List<CommandReport> reports = new ArrayList<CommandReport>(); + CommandReport cr = new CommandReport(); + cr.setActionId(StageUtils.getActionId(requestId, stageId)); + cr.setServiceName(HDFS); + cr.setRoleCommand("INSTALL"); + cr.setCustomCommand("EXECUTION_COMMAND"); + cr.setTaskId(1); + cr.setRole(HDFS_CLIENT); + cr.setStatus("COMPLETED"); + cr.setStdErr(""); + cr.setStdOut(""); + cr.setExitCode(215); + cr.setClusterName(DummyCluster); + cr.setConfigurationTags(new HashMap<String, Map<String,String>>() {{ + put("global", new HashMap<String,String>() {{ put("tag", "version1"); }}); + }}); + reports.add(cr); + hb.setReports(reports); + + final HostRoleCommand command = new HostRoleCommand(DummyHostname1, + Role.DATANODE, null, null); + + ActionManager am = getMockActionManager(); + expect(am.getTasks(anyObject(List.class))).andReturn( + new ArrayList<HostRoleCommand>() {{ + add(command); + add(command); + }}); + replay(am); + + HeartBeatHandler handler = getHeartBeatHandler(am, aq); + handler.handleHeartBeat(hb); + + Assert.assertNotNull(serviceComponentHost.getActualConfigs()); + Assert.assertFalse(serviceComponentHost.isRestartRequired()); + Assert.assertEquals(serviceComponentHost.getActualConfigs().size(), 1); + + } + + @Test + @SuppressWarnings("unchecked") public void testHeartbeatCustomCommandWithConfigs() throws Exception { Cluster cluster = getDummyCluster();
