Repository: ambari Updated Branches: refs/heads/trunk fd3692ecf -> 5060b4f8c
AMBARI-15692 : AMS-HBase should explicitly set its HBASE_HOME path (avijayan) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5060b4f8 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5060b4f8 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5060b4f8 Branch: refs/heads/trunk Commit: 5060b4f8c13d3746d72138324ad7cbf609462338 Parents: fd3692e Author: Aravindan Vijayan <avija...@hortonworks.com> Authored: Wed Apr 6 14:34:00 2016 -0700 Committer: Aravindan Vijayan <avija...@hortonworks.com> Committed: Wed Apr 6 14:34:07 2016 -0700 ---------------------------------------------------------------------- .../server/upgrade/UpgradeCatalog240.java | 15 ++++- .../0.1.0/configuration/ams-hbase-env.xml | 4 ++ .../server/upgrade/UpgradeCatalog240Test.java | 69 ++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/5060b4f8/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java index 6a1c60c..65dad79 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java @@ -1034,7 +1034,6 @@ public class UpgradeCatalog240 extends AbstractUpgradeCatalog { for (final Cluster cluster : clusterMap.values()) { Config amsEnv = cluster.getDesiredConfigByType("ams-env"); - if (amsEnv != null) { String content = amsEnv.getProperties().get("content"); if (content != null && !content.contains("AMS_INSTANCE_NAME")) { @@ -1044,6 +1043,20 @@ public class UpgradeCatalog240 extends AbstractUpgradeCatalog { updateConfigurationProperties("ams-env", Collections.singletonMap("content", newContent), true, true); } } + + Config amsHBaseEnv = cluster.getDesiredConfigByType("ams-hbase-env"); + if (amsHBaseEnv != null) { + String content = amsHBaseEnv.getProperties().get("content"); + Map<String, String> newProperties = new HashMap<>(); + + if (content != null && !content.contains("HBASE_HOME=")) { + String newContent = content + "\n # Explicitly Setting HBASE_HOME for AMS HBase so that there is no conflict\n" + + "export HBASE_HOME={{ams_hbase_home_dir}}\n"; + newProperties.put("content", newContent); + } + + updateConfigurationPropertiesForCluster(cluster, "ams-hbase-env", newProperties, true, true); + } } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/5060b4f8/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml index 378138b..317fac1 100644 --- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml +++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml @@ -240,6 +240,10 @@ export HBASE_OPTS="$HBASE_OPTS -Djava.library.path=${_HADOOP_NATIVE_LIB}" # Unset HADOOP_HOME to avoid importing HADOOP installed cluster related configs like: /usr/hdp/2.2.0.0-2041/hadoop/conf/ export HADOOP_HOME={{ams_hbase_home_dir}} + +# Explicitly Setting HBASE_HOME for AMS HBase so that there is no conflict +export HBASE_HOME={{ams_hbase_home_dir}} + </value> <value-attributes> <type>content</type> http://git-wip-us.apache.org/repos/asf/ambari/blob/5060b4f8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java index a04fb2f..a583d39 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java @@ -20,6 +20,7 @@ package org.apache.ambari.server.upgrade; import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.anyString; import static org.easymock.EasyMock.capture; import static org.easymock.EasyMock.createMockBuilder; import static org.easymock.EasyMock.createNiceMock; @@ -31,6 +32,7 @@ import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -46,18 +48,29 @@ import java.util.Map; import javax.persistence.EntityManager; +import com.google.common.collect.Maps; +import com.google.gson.Gson; import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.Configuration; +import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.controller.AmbariManagementControllerImpl; +import org.apache.ambari.server.controller.KerberosHelper; +import org.apache.ambari.server.controller.MaintenanceStateHelper; import org.apache.ambari.server.orm.DBAccessor; import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.dao.StackDAO; import org.apache.ambari.server.state.AlertFirmness; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.Config; import org.apache.ambari.server.state.stack.OsFamily; import org.easymock.Capture; import org.easymock.CaptureType; import org.easymock.EasyMock; +import org.easymock.EasyMockSupport; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -411,4 +424,60 @@ public class UpgradeCatalog240Test { String result = upgradeCatalog240.addParam(inputSource, params); Assert.assertEquals(result, expectedSource); } + + @Test + public void testAmsHbaseEnvUpdateConfigs() throws Exception{ + + Map<String, String> oldPropertiesAmsHbaseEnv = new HashMap<String, String>() { + { + put("content", "some_content"); + } + }; + Map<String, String> newPropertiesAmsHbaseEnv = new HashMap<String, String>() { + { + put("content", "some_content"+ "\n # Explicitly Setting HBASE_HOME for AMS HBase so that there is no conflict\n" + + "export HBASE_HOME={{ams_hbase_home_dir}}\n"); + } + }; + EasyMockSupport easyMockSupport = new EasyMockSupport(); + + Clusters clusters = easyMockSupport.createNiceMock(Clusters.class); + final Cluster cluster = easyMockSupport.createNiceMock(Cluster.class); + Config mockAmsHbaseEnv = easyMockSupport.createNiceMock(Config.class); + + expect(clusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{ + put("normal", cluster); + }}).once(); + expect(cluster.getDesiredConfigByType("ams-hbase-env")).andReturn(mockAmsHbaseEnv).atLeastOnce(); + expect(mockAmsHbaseEnv.getProperties()).andReturn(oldPropertiesAmsHbaseEnv).anyTimes(); + + Injector injector = easyMockSupport.createNiceMock(Injector.class); + expect(injector.getInstance(Gson.class)).andReturn(null).anyTimes(); + expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null).anyTimes(); + expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)).anyTimes(); + + replay(injector, clusters, mockAmsHbaseEnv, cluster); + + AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class) + .addMockedMethod("createConfiguration") + .addMockedMethod("getClusters", new Class[] { }) + .addMockedMethod("createConfig") + .withConstructor(createNiceMock(ActionManager.class), clusters, injector) + .createNiceMock(); + + Injector injector2 = easyMockSupport.createNiceMock(Injector.class); + Capture<Map> propertiesCapture = EasyMock.newCapture(); + + expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes(); + expect(controller.getClusters()).andReturn(clusters).anyTimes(); + expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(), + anyObject(Map.class))).andReturn(createNiceMock(Config.class)).once(); + + replay(controller, injector2); + new UpgradeCatalog240(injector2).updateAMSConfigs(); + easyMockSupport.verifyAll(); + + Map<String, String> updatedProperties = propertiesCapture.getValue(); + assertTrue(Maps.difference(newPropertiesAmsHbaseEnv, updatedProperties).areEqual()); + } }