Repository: ambari Updated Branches: refs/heads/trunk f8b83e2f6 -> 37717dd4c
AMBARI-10445. Populate cluster widgets from stack-defined widgets on cluster/service create. Upgrade Catalog changes. (swagle) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/37717dd4 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/37717dd4 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/37717dd4 Branch: refs/heads/trunk Commit: 37717dd4cd55ee75f3f218e6fee20af529cc0f87 Parents: f8b83e2 Author: Siddharth Wagle <swa...@hortonworks.com> Authored: Fri Apr 10 18:46:44 2015 -0700 Committer: Siddharth Wagle <swa...@hortonworks.com> Committed: Fri Apr 10 18:49:57 2015 -0700 ---------------------------------------------------------------------- .../server/upgrade/UpgradeCatalog210.java | 36 +++++++++ .../server/upgrade/UpgradeCatalog210Test.java | 78 ++++++++++++++++++++ 2 files changed, 114 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/37717dd4/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java index d72c9d3..09a8740 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java @@ -22,10 +22,18 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.configuration.Configuration; +import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo; +import org.apache.ambari.server.orm.dao.ClusterDAO; +import org.apache.ambari.server.orm.dao.ClusterServiceDAO; +import org.apache.ambari.server.orm.entities.ClusterEntity; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.Service; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -357,6 +365,32 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { false); } + /** + * Copy cluster & service widgets from stack to DB. + */ + protected void initializeClusterAndServiceWidgets() throws AmbariException { + AmbariManagementController controller = injector.getInstance(AmbariManagementController.class); + Clusters clusters = controller.getClusters(); + if (clusters == null) { + return; + } + + Map<String, Cluster> clusterMap = clusters.getClusters(); + + if (clusterMap != null && !clusterMap.isEmpty()) { + for (Cluster cluster : clusterMap.values()) { + controller.initializeWidgetsAndLayouts(cluster, null); + + Map<String, Service> serviceMap = cluster.getServices(); + if (serviceMap != null && !serviceMap.isEmpty()) { + for (Service service : serviceMap.values()) { + controller.initializeWidgetsAndLayouts(cluster, service); + } + } + } + } + } + // ----- UpgradeCatalog ---------------------------------------------------- /** @@ -425,5 +459,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { @Override protected void executeDMLUpdates() throws AmbariException, SQLException { addNewConfigurationsFromXml(); + // Initialize all default widgets and widget layouts + initializeClusterAndServiceWidgets(); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/37717dd4/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java index af9dcda..6ca7dfd 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java @@ -18,19 +18,29 @@ package org.apache.ambari.server.upgrade; +import com.google.inject.AbstractModule; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.Provider; import com.google.inject.persist.PersistService; +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.orm.DBAccessor; import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo; import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.OperatingSystemInfo; +import org.apache.ambari.server.state.RepositoryInfo; +import org.apache.ambari.server.state.Service; +import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.stack.OsFamily; import org.easymock.Capture; +import org.easymock.EasyMockSupport; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -38,19 +48,25 @@ import org.junit.Test; import javax.persistence.EntityManager; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; import static org.easymock.EasyMock.capture; import static junit.framework.Assert.assertEquals; +import static org.easymock.EasyMock.createMockBuilder; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.createStrictMock; import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; @@ -116,6 +132,68 @@ public class UpgradeCatalog210Test { viewSectionDDL.verify(dbAccessor); } + @Test + public void testExecuteDMLUpdates() throws Exception { + Method addNewConfigurationsFromXml = + AbstractUpgradeCatalog.class.getDeclaredMethod("addNewConfigurationsFromXml"); + Method initializeClusterAndServiceWidgets = + UpgradeCatalog210.class.getDeclaredMethod("initializeClusterAndServiceWidgets"); + + UpgradeCatalog210 upgradeCatalog210 = createMockBuilder(UpgradeCatalog210.class) + .addMockedMethod(addNewConfigurationsFromXml) + .addMockedMethod(initializeClusterAndServiceWidgets) + .createMock(); + + upgradeCatalog210.addNewConfigurationsFromXml(); + expectLastCall().once(); + + upgradeCatalog210.initializeClusterAndServiceWidgets(); + expectLastCall().once(); + + replay(upgradeCatalog210); + + upgradeCatalog210.executeDMLUpdates(); + + verify(upgradeCatalog210); + } + + @Test + public void testInitializeClusterAndServiceWidgets() throws Exception { + final AmbariManagementController controller = createStrictMock(AmbariManagementController.class); + final Clusters clusters = createStrictMock(Clusters.class); + final Cluster cluster = createStrictMock(Cluster.class); + final Service service = createStrictMock(Service.class); + final Map<String, Cluster> clusterMap = Collections.singletonMap("c1", cluster); + final Map<String, Service> services = Collections.singletonMap("HBASE", service); + + + Module module = new Module() { + @Override + public void configure(Binder binder) { + binder.bind(AmbariManagementController.class).toInstance(controller); + binder.bind(Clusters.class).toInstance(clusters); + binder.bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class)); + binder.bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class)); + } + }; + + expect(controller.getClusters()).andReturn(clusters).anyTimes(); + expect(clusters.getClusters()).andReturn(clusterMap).anyTimes(); + controller.initializeWidgetsAndLayouts(cluster, null); + expectLastCall().once(); + + expect(cluster.getServices()).andReturn(services).once(); + controller.initializeWidgetsAndLayouts(cluster, service); + expectLastCall().once(); + + replay(controller, clusters, cluster); + + Injector injector = Guice.createInjector(module); + injector.getInstance(UpgradeCatalog210.class).initializeClusterAndServiceWidgets(); + + verify(controller, clusters, cluster); + } + /** * @param dbAccessor * @return