From 4292cabf5634ddf94786d43ebdecbd1a45b20e33 Mon Sep 17 00:00:00 2001 From: Nate Cole Date: Wed, 30 May 2018 17:06:21 -0400 Subject: [PATCH] [AMBARI-23989] Provide Patch or Maint Flag to Command JSON --- .../libraries/functions/upgrade_summary.py | 5 +++-- .../apache/ambari/server/state/UpgradeContext.java | 11 +++++++++++ .../ambari/server/state/UpgradeContextTest.java | 9 ++++++++- ambari-server/src/test/python/TestStackFeature.py | 9 ++++++--- ambari-server/src/test/python/TestStackSelect.py | 6 ++++-- ambari-server/src/test/python/TestUpgradeSummary.py | 6 ++++-- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py b/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py index e231d49509e..0b300671b2d 100644 --- a/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py +++ b/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py @@ -22,7 +22,7 @@ from resource_management.libraries.script.script import Script from resource_management.libraries.functions.constants import Direction -UpgradeSummary = namedtuple("UpgradeSummary", "type direction orchestration is_revert services is_downgrade_allowed") +UpgradeSummary = namedtuple("UpgradeSummary", "type direction orchestration is_revert services is_downgrade_allowed is_switch_bits") UpgradeServiceSummary = namedtuple("UpgradeServiceSummary", "service_name source_stack source_version target_stack target_version") @@ -101,7 +101,8 @@ def get_upgrade_summary(): return UpgradeSummary(type=upgrade_summary["type"], direction=upgrade_summary["direction"], orchestration=upgrade_summary["orchestration"], is_revert = upgrade_summary["isRevert"], services = service_summary_dict, - is_downgrade_allowed=upgrade_summary["isDowngradeAllowed"]) + is_downgrade_allowed=upgrade_summary["isDowngradeAllowed"], + is_switch_bits=upgrade_summary["isSwitchBits"]) def get_downgrade_from_version(service_name = None): diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java index d5fd7295dca..c016bc628be 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java @@ -971,6 +971,10 @@ public UpgradeSummary getUpgradeSummary() { summary.isDowngradeAllowed = isDowngradeAllowed(); + // !!! a) if we are reverting, that can only happen via PATCH or MAINT + // b) if orchestration is a revertible type (on upgrade) + summary.isSwitchBits = m_isRevert || m_orchestration.isRevertable(); + summary.services = new HashMap<>(); for (String serviceName : m_services) { @@ -1435,6 +1439,13 @@ public static class UpgradeSummary { @SerializedName("services") public Map services; + + /** + * MAINT or PATCH upgrades are meant to just be switching the bits and no other + * incompatible changes. + */ + @SerializedName("isSwitchBits") + public boolean isSwitchBits = false; } /** diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeContextTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeContextTest.java index b38b2721fad..badd3405b0f 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeContextTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeContextTest.java @@ -127,8 +127,11 @@ public void setup() throws Exception { expect(m_sourceRepositoryVersion.getId()).andReturn(1L).anyTimes(); expect(m_sourceRepositoryVersion.getStackId()).andReturn(new StackId("HDP", "2.6")).anyTimes(); + expect(m_sourceRepositoryVersion.getVersion()).andReturn("2.6.0.0").anyTimes(); + expect(m_targetRepositoryVersion.getId()).andReturn(99L).anyTimes(); expect(m_targetRepositoryVersion.getStackId()).andReturn(new StackId("HDP", "2.6")).anyTimes(); + expect(m_targetRepositoryVersion.getVersion()).andReturn("2.6.0.2").anyTimes(); UpgradeHistoryEntity upgradeHistoryEntity = createNiceMock(UpgradeHistoryEntity.class); expect(upgradeHistoryEntity.getServiceName()).andReturn(HDFS_SERVICE_NAME).anyTimes(); @@ -153,7 +156,8 @@ public void setup() throws Exception { expect(m_completedRevertableUpgrade.getUpgradePackage()).andReturn(null).anyTimes(); RepositoryVersionEntity hdfsRepositoryVersion = createNiceMock(RepositoryVersionEntity.class); - + expect(hdfsRepositoryVersion.getId()).andReturn(1L).anyTimes(); + expect(hdfsRepositoryVersion.getStackId()).andReturn(new StackId("HDP-2.6")).anyTimes(); expect(m_hdfsService.getDesiredRepositoryVersion()).andReturn(hdfsRepositoryVersion).anyTimes(); expect(m_zookeeperService.getDesiredRepositoryVersion()).andReturn(hdfsRepositoryVersion).anyTimes(); expect(m_cluster.getService(HDFS_SERVICE_NAME)).andReturn(m_hdfsService).anyTimes(); @@ -202,6 +206,7 @@ public void testFullUpgrade() throws Exception { assertEquals(RepositoryType.STANDARD, context.getOrchestrationType()); assertEquals(1, context.getSupportedServices().size()); assertFalse(context.isPatchRevert()); + assertFalse(context.getUpgradeSummary().isSwitchBits); verifyAll(); } @@ -248,6 +253,7 @@ public void testPatchUpgrade() throws Exception { assertEquals(RepositoryType.PATCH, context.getOrchestrationType()); assertEquals(1, context.getSupportedServices().size()); assertFalse(context.isPatchRevert()); + assertTrue(context.getUpgradeSummary().isSwitchBits); verifyAll(); } @@ -332,6 +338,7 @@ public void testRevert() throws Exception { assertEquals(RepositoryType.PATCH, context.getOrchestrationType()); assertEquals(1, context.getSupportedServices().size()); assertTrue(context.isPatchRevert()); + assertTrue(context.getUpgradeSummary().isSwitchBits); verifyAll(); } diff --git a/ambari-server/src/test/python/TestStackFeature.py b/ambari-server/src/test/python/TestStackFeature.py index 35c4df88dca..09d2d8cbf24 100644 --- a/ambari-server/src/test/python/TestStackFeature.py +++ b/ambari-server/src/test/python/TestStackFeature.py @@ -196,7 +196,8 @@ def _get_cluster_upgrade_restart_json(): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", - "isDowngradeAllowed": True + "isDowngradeAllowed": True, + "isSwitchBits": False } } @@ -234,7 +235,8 @@ def _get_cluster_downgrade_restart_json(): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", - "isDowngradeAllowed": True + "isDowngradeAllowed": True, + "isSwitchBits": False } } @@ -273,7 +275,8 @@ def _get_cluster_downgrade_stop_json(): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", - "isDowngradeAllowed": True + "isDowngradeAllowed": True, + "isSwitchBits": False } } diff --git a/ambari-server/src/test/python/TestStackSelect.py b/ambari-server/src/test/python/TestStackSelect.py index c8429054eab..f8c5b8b635c 100644 --- a/ambari-server/src/test/python/TestStackSelect.py +++ b/ambari-server/src/test/python/TestStackSelect.py @@ -161,7 +161,8 @@ def _get_incomplete_cluster_simple_upgrade_json(): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", - "isDowngradeAllowed": True + "isDowngradeAllowed": True, + "isSwitchBits": False } } @@ -200,7 +201,8 @@ def _get_cluster_simple_upgrade_json(): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", - "isDowngradeAllowed": True + "isDowngradeAllowed": True, + "isSwitchBits": False } } diff --git a/ambari-server/src/test/python/TestUpgradeSummary.py b/ambari-server/src/test/python/TestUpgradeSummary.py index ae4aca9bfd4..a117f1ae6ed 100644 --- a/ambari-server/src/test/python/TestUpgradeSummary.py +++ b/ambari-server/src/test/python/TestUpgradeSummary.py @@ -97,7 +97,8 @@ def _get_cluster_simple_upgrade_json(): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", - "isDowngradeAllowed": True + "isDowngradeAllowed": True, + "isSwitchBits": False } } @@ -134,6 +135,7 @@ def _get_cluster_simple_downgrade_json(): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", - "isDowngradeAllowed": True + "isDowngradeAllowed": True, + "isSwitchBits": False } }