Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 102DD200BBB for ; Thu, 10 Nov 2016 18:01:15 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 0EAB3160B01; Thu, 10 Nov 2016 17:01:15 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 2EDC4160AF7 for ; Thu, 10 Nov 2016 18:01:14 +0100 (CET) Received: (qmail 63649 invoked by uid 500); 10 Nov 2016 17:01:13 -0000 Mailing-List: contact commits-help@ambari.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ambari-dev@ambari.apache.org Delivered-To: mailing list commits@ambari.apache.org Received: (qmail 63640 invoked by uid 99); 10 Nov 2016 17:01:13 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 10 Nov 2016 17:01:13 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 2C462E01F4; Thu, 10 Nov 2016 17:01:13 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ncole@apache.org To: commits@ambari.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: ambari git commit: Merge branch 'branch-feature-AMBARI-18634' into trunk Date: Thu, 10 Nov 2016 17:01:13 +0000 (UTC) archived-at: Thu, 10 Nov 2016 17:01:15 -0000 Repository: ambari Updated Branches: refs/heads/branch-2.5 3b530582b -> ba7457b7b Merge branch 'branch-feature-AMBARI-18634' into trunk Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ba7457b7 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ba7457b7 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ba7457b7 Branch: refs/heads/branch-2.5 Commit: ba7457b7b0680ed1db58d8acb93ce29904c69a5e Parents: 3b53058 Author: Nate Cole Authored: Thu Nov 10 11:10:37 2016 -0500 Committer: Nate Cole Committed: Thu Nov 10 11:13:37 2016 -0500 ---------------------------------------------------------------------- .../ambari/server/checks/CheckDescription.java | 6 ++- .../server/checks/HostMaintenanceModeCheck.java | 14 +++++- .../checks/HostMaintenanceModeCheckTest.java | 47 ++++++++++++++++++++ 3 files changed, 63 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/ba7457b7/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java index a56b08d..fbc4be1 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java @@ -66,7 +66,9 @@ public class CheckDescription { "Hosts in Maintenance Mode will be excluded from the upgrade.", new ImmutableMap.Builder() .put(AbstractCheckDescriptor.DEFAULT, - "There are hosts in Maintenance Mode which excludes them from being upgraded.").build()); + "There are hosts in Maintenance Mode which excludes them from being upgraded.") + .put(HostMaintenanceModeCheck.KEY_CANNOT_START_HOST_ORDERED, + "The following hosts cannot be in Maintenance Mode: {{fails}}.").build()); public static CheckDescription HOSTS_MASTER_MAINTENANCE = new CheckDescription("HOSTS_MASTER_MAINTENANCE", PrereqCheckType.HOST, @@ -296,7 +298,7 @@ public class CheckDescription { new ImmutableMap.Builder() .put(AbstractCheckDescriptor.DEFAULT, "HiveServer2 does not currently support rolling upgrades. HiveServer2 will be upgraded, however existing queries which have not completed will fail and need to be resubmitted after HiveServer2 has been upgraded.").build()); - + public static CheckDescription SERVICES_STORM_ROLLING_WARNING = new CheckDescription("SERVICES_STORM_ROLLING_WARNING", PrereqCheckType.SERVICE, "Storm Downtime During Upgrade", http://git-wip-us.apache.org/repos/asf/ambari/blob/ba7457b7/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java index 5e7bdef..88d9de6 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java @@ -26,6 +26,7 @@ import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; +import org.apache.ambari.server.state.stack.upgrade.UpgradeType; import com.google.inject.Singleton; @@ -42,6 +43,8 @@ import com.google.inject.Singleton; @UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 7.0f, required = true) public class HostMaintenanceModeCheck extends AbstractCheckDescriptor { + public static final String KEY_CANNOT_START_HOST_ORDERED = "cannot_upgrade_mm_hosts"; + /** * Constructor. */ @@ -69,8 +72,15 @@ public class HostMaintenanceModeCheck extends AbstractCheckDescriptor { // for any host in MM, produce a warning if (!prerequisiteCheck.getFailedOn().isEmpty()) { - prerequisiteCheck.setStatus(PrereqCheckStatus.WARNING); - prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); + PrereqCheckStatus status = request.getUpgradeType() == UpgradeType.HOST_ORDERED ? + PrereqCheckStatus.FAIL : PrereqCheckStatus.WARNING; + prerequisiteCheck.setStatus(status); + + String failReason = request.getUpgradeType() == UpgradeType.HOST_ORDERED ? + getFailReason(KEY_CANNOT_START_HOST_ORDERED, prerequisiteCheck, request) : + getFailReason(prerequisiteCheck, request); + + prerequisiteCheck.setFailReason(failReason); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/ba7457b7/ambari-server/src/test/java/org/apache/ambari/server/checks/HostMaintenanceModeCheckTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostMaintenanceModeCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostMaintenanceModeCheckTest.java index 0e14376..0362c87 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostMaintenanceModeCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostMaintenanceModeCheckTest.java @@ -28,6 +28,7 @@ import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; +import org.apache.ambari.server.state.stack.upgrade.UpgradeType; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; @@ -84,4 +85,50 @@ public class HostMaintenanceModeCheckTest { hostMaintenanceModeCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.WARNING, check.getStatus()); } + + @Test + public void testPerformHostOrdered() throws Exception { + final HostMaintenanceModeCheck hostMaintenanceModeCheck = new HostMaintenanceModeCheck(); + hostMaintenanceModeCheck.clustersProvider = new Provider() { + + @Override + public Clusters get() { + return clusters; + } + }; + + final Cluster cluster = Mockito.mock(Cluster.class); + Mockito.when(cluster.getClusterId()).thenReturn(1L); + Mockito.when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP", "2.2")); + Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster); + + final List hosts = new ArrayList<>(); + final Host host1 = Mockito.mock(Host.class); + final Host host2 = Mockito.mock(Host.class); + final Host host3 = Mockito.mock(Host.class); + + Mockito.when(host1.getMaintenanceState(1L)).thenReturn(MaintenanceState.OFF); + Mockito.when(host2.getMaintenanceState(1L)).thenReturn(MaintenanceState.OFF); + Mockito.when(host3.getMaintenanceState(1L)).thenReturn(MaintenanceState.OFF); + Mockito.when(host1.getHostName()).thenReturn("h1"); + Mockito.when(host2.getHostName()).thenReturn("h2"); + Mockito.when(host3.getHostName()).thenReturn("h3"); + + hosts.add(host1); + hosts.add(host2); + hosts.add(host3); + + Mockito.when(cluster.getHosts()).thenReturn(hosts); + + PrerequisiteCheck check = new PrerequisiteCheck(null, null); + hostMaintenanceModeCheck.perform(check, new PrereqCheckRequest("cluster")); + Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); + + // put a host into MM in order to trigger the warning + check = new PrerequisiteCheck(null, null); + Mockito.when(host3.getMaintenanceState(1L)).thenReturn(MaintenanceState.ON); + hostMaintenanceModeCheck.perform(check, new PrereqCheckRequest("cluster", UpgradeType.HOST_ORDERED)); + Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); + Assert.assertEquals("The following hosts cannot be in Maintenance Mode: h3.", check.getFailReason()); + } }