AMBARI-20461 override_uid should set to false when upgrading Ambari 2.1 to 2.2 or newer with custom stacks (dili)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fe029913 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fe029913 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fe029913 Branch: refs/heads/branch-feature-AMBARI-12556 Commit: fe029913c51e5e1287e3a4e014c685f3a6bbf682 Parents: 53f5b63 Author: Di Li <d...@apache.org> Authored: Tue Mar 28 14:54:00 2017 -0400 Committer: Di Li <d...@apache.org> Committed: Tue Mar 28 14:54:00 2017 -0400 ---------------------------------------------------------------------- .../server/upgrade/UpgradeCatalog212.java | 16 +- .../server/upgrade/UpgradeCatalog212Test.java | 148 +++++++++++++++++++ 2 files changed, 163 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/fe029913/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java index 499c726..810451d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java @@ -264,7 +264,11 @@ public class UpgradeCatalog212 extends AbstractUpgradeCatalog { removes.add("override_hbase_uid"); updateConfigurationPropertiesForCluster(cluster, HBASE_ENV, new HashMap<String, String>(), removes, false, true); updateConfigurationPropertiesForCluster(cluster, CLUSTER_ENV, updates, true, false); + } else { + updateOverrideUIDClusterConfig("false", cluster); } + } else { + updateOverrideUIDClusterConfig("false", cluster); } if (hbaseSiteProps != null) { @@ -277,13 +281,23 @@ public class UpgradeCatalog212 extends AbstractUpgradeCatalog { updateConfigurationPropertiesForCluster(cluster, HBASE_SITE, updates, true, false); } } - } } } } } + /** + * Set override_uid to false during the upgrade to retain UIDs already set on the cluster + * This is necessary for upgrading a third party Ambari/stack distribution from + * Ambari version 2.1.0 where HBase does not have override_hbase_uid. + * */ + private void updateOverrideUIDClusterConfig(String toOverride, Cluster cluster) throws AmbariException{ + Map<String, String> updates = new HashMap<String, String>(); + updates.put("override_uid", toOverride); + updateConfigurationPropertiesForCluster(cluster, CLUSTER_ENV, updates, true, false); + } + protected void updateHiveConfigs() throws AmbariException { AmbariManagementController ambariManagementController = injector.getInstance( AmbariManagementController.class); http://git-wip-us.apache.org/repos/asf/ambari/blob/fe029913/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java index 3f7bcc8..a60238a 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java @@ -298,7 +298,155 @@ public class UpgradeCatalog212Test { easyMockSupport.replayAll(); mockInjector.getInstance(UpgradeCatalog212.class).updateHbaseAndClusterConfigurations(); easyMockSupport.verifyAll(); + } + + @Test + public void testUpdateHBaseAdnClusterConfigsTrue() throws Exception { + setupIoCContext(); + EasyMockSupport easyMockSupport = new EasyMockSupport(); + final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class); + final ConfigHelper mockConfigHelper = easyMockSupport.createMock(ConfigHelper.class); + + final Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class); + final Cluster mockClusterExpected = easyMockSupport.createNiceMock(Cluster.class); + + final Map<String, String> propertiesHbaseEnv = new HashMap<String, String>() { + { + put("override_hbase_uid", "true"); + } + }; + + final Config mockHbaseEnv = easyMockSupport.createNiceMock(Config.class); + expect(mockHbaseEnv.getProperties()).andReturn(propertiesHbaseEnv).once(); + final Config mockClusterEnv = easyMockSupport.createNiceMock(Config.class); + + final Map<String, String> propertiesExpectedHbaseEnv = new HashMap<String, String>(); + final Map<String, String> propertiesExpectedClusterEnv = new HashMap<String, String>() {{ + put("override_uid", "true"); + }}; + + final Injector mockInjector = Guice.createInjector(new AbstractModule() { + @Override + protected void configure() { + bind(AmbariManagementController.class).toInstance(mockAmbariManagementController); + bind(ConfigHelper.class).toInstance(mockConfigHelper); + bind(Clusters.class).toInstance(mockClusters); + + bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class)); + bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class)); + } + }); + + expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once(); + expect(mockClusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{ + put("normal", mockClusterExpected); + }}).once(); + + expect(mockClusterExpected.getDesiredConfigByType("cluster-env")).andReturn(mockClusterEnv).atLeastOnce(); + expect(mockClusterExpected.getDesiredConfigByType("hbase-env")).andReturn(mockHbaseEnv).atLeastOnce(); + + expect(mockClusterEnv.getProperties()).andReturn(propertiesExpectedClusterEnv).atLeastOnce(); + expect(mockHbaseEnv.getProperties()).andReturn(propertiesExpectedHbaseEnv).atLeastOnce(); + + easyMockSupport.replayAll(); + mockInjector.getInstance(UpgradeCatalog212.class).updateHbaseAndClusterConfigurations(); + easyMockSupport.verifyAll(); + } + + @Test + public void testUpdateHBaseAdnClusterConfigsNoHBaseEnv() throws Exception { + setupIoCContext(); + EasyMockSupport easyMockSupport = new EasyMockSupport(); + final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class); + final ConfigHelper mockConfigHelper = easyMockSupport.createMock(ConfigHelper.class); + + final Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class); + final Cluster mockClusterExpected = easyMockSupport.createNiceMock(Cluster.class); + + final Config mockClusterEnv = easyMockSupport.createNiceMock(Config.class); + + final Map<String, String> propertiesExpectedClusterEnv = new HashMap<String, String>() {{ + put("override_uid", "false"); + }}; + + final Injector mockInjector = Guice.createInjector(new AbstractModule() { + @Override + protected void configure() { + bind(AmbariManagementController.class).toInstance(mockAmbariManagementController); + bind(ConfigHelper.class).toInstance(mockConfigHelper); + bind(Clusters.class).toInstance(mockClusters); + + bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class)); + bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class)); + } + }); + + expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once(); + expect(mockClusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{ + put("normal", mockClusterExpected); + }}).once(); + + expect(mockClusterExpected.getDesiredConfigByType("cluster-env")).andReturn(mockClusterEnv).atLeastOnce(); + + expect(mockClusterEnv.getProperties()).andReturn(propertiesExpectedClusterEnv).atLeastOnce(); + + easyMockSupport.replayAll(); + mockInjector.getInstance(UpgradeCatalog212.class).updateHbaseAndClusterConfigurations(); + easyMockSupport.verifyAll(); + } + + @Test + public void testUpdateHBaseAdnClusterConfigsNoOverrideHBaseUID() throws Exception { + setupIoCContext(); + EasyMockSupport easyMockSupport = new EasyMockSupport(); + final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class); + final ConfigHelper mockConfigHelper = easyMockSupport.createMock(ConfigHelper.class); + + final Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class); + final Cluster mockClusterExpected = easyMockSupport.createNiceMock(Cluster.class); + + final Map<String, String> propertiesHbaseEnv = new HashMap<String, String>() { + { + put("hbase_user", "hbase"); + } + }; + + final Config mockHbaseEnv = easyMockSupport.createNiceMock(Config.class); + expect(mockHbaseEnv.getProperties()).andReturn(propertiesHbaseEnv).once(); + final Config mockClusterEnv = easyMockSupport.createNiceMock(Config.class); + + final Map<String, String> propertiesExpectedHbaseEnv = new HashMap<String, String>() {{ + put("hbase_user", "hbase"); + }}; + final Map<String, String> propertiesExpectedClusterEnv = new HashMap<String, String>() {{ + put("override_uid", "false"); + }}; + final Injector mockInjector = Guice.createInjector(new AbstractModule() { + @Override + protected void configure() { + bind(AmbariManagementController.class).toInstance(mockAmbariManagementController); + bind(ConfigHelper.class).toInstance(mockConfigHelper); + bind(Clusters.class).toInstance(mockClusters); + + bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class)); + bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class)); + } + }); + + expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once(); + expect(mockClusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{ + put("normal", mockClusterExpected); + }}).once(); + + expect(mockClusterExpected.getDesiredConfigByType("cluster-env")).andReturn(mockClusterEnv).atLeastOnce(); + expect(mockClusterExpected.getDesiredConfigByType("hbase-env")).andReturn(mockHbaseEnv).atLeastOnce(); + + expect(mockClusterEnv.getProperties()).andReturn(propertiesExpectedClusterEnv).atLeastOnce(); + + easyMockSupport.replayAll(); + mockInjector.getInstance(UpgradeCatalog212.class).updateHbaseAndClusterConfigurations(); + easyMockSupport.verifyAll(); } @Test