http://git-wip-us.apache.org/repos/asf/ambari/blob/746df034/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java index 66a4ade..bb1cb46 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java @@ -70,6 +70,7 @@ import org.apache.ambari.server.orm.entities.HostStateEntity; import org.apache.ambari.server.orm.entities.HostVersionEntity; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity; +import org.apache.ambari.server.orm.entities.StackEntity; import org.apache.ambari.server.state.AgentVersion; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; @@ -100,7 +101,6 @@ import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; -import com.google.gson.Gson; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; @@ -187,7 +187,8 @@ public class ClusterTest { } private void createDefaultCluster() throws Exception { - clusters.addCluster("c1"); + StackId stackId = new StackId("HDP-0.1"); + clusters.addCluster("c1", stackId); c1 = clusters.getCluster("c1"); Assert.assertEquals("c1", c1.getClusterName()); Assert.assertEquals(1, c1.getClusterId()); @@ -211,21 +212,26 @@ public class ClusterTest { host1.persist(); host2.persist(); - StackId stackId = new StackId("HDP-0.1"); - c1.setDesiredStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - c1.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); - c1.transitionClusterVersion(stackId.getStackName(), stackId.getStackVersion(), RepositoryVersionState.CURRENT); + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); + c1.transitionClusterVersion(stackId, stackId.getStackVersion(), + RepositoryVersionState.CURRENT); clusters.mapHostToCluster("h1", "c1"); clusters.mapHostToCluster("h2", "c1"); ClusterVersionDAOMock.failOnCurrentVersionState = false; } public ClusterEntity createDummyData() { + StackEntity stackEntity = new StackEntity(); + stackEntity.setStackName("HDP"); + stackEntity.setStackVersion("0.1"); + ClusterEntity clusterEntity = new ClusterEntity(); clusterEntity.setClusterId(1L); clusterEntity.setClusterName("test_cluster1"); clusterEntity.setClusterInfo("test_cluster_info1"); + clusterEntity.setDesiredStack(stackEntity); HostEntity host1 = new HostEntity(); HostEntity host2 = new HostEntity(); @@ -262,10 +268,11 @@ public class ClusterTest { clusterServiceEntity.setClusterEntity(clusterEntity); clusterServiceEntity.setServiceComponentDesiredStateEntities( Collections.EMPTY_LIST); + ServiceDesiredStateEntity stateEntity = mock(ServiceDesiredStateEntity.class); - Gson gson = new Gson(); - when(stateEntity.getDesiredStackVersion()).thenReturn(gson.toJson(new StackId("HDP-0.1"), - StackId.class)); + + when(stateEntity.getDesiredStack()).thenReturn(stackEntity); + clusterServiceEntity.setServiceDesiredStateEntity(stateEntity); List<ClusterServiceEntity> clusterServiceEntities = new ArrayList<ClusterServiceEntity>(); clusterServiceEntities.add(clusterServiceEntity); @@ -273,23 +280,25 @@ public class ClusterTest { return clusterEntity; } - private void checkStackVersionState(String stack, String version, RepositoryVersionState state) { + private void checkStackVersionState(StackId stackId, String version, RepositoryVersionState state) { Collection<ClusterVersionEntity> allClusterVersions = c1.getAllClusterVersions(); for (ClusterVersionEntity entity : allClusterVersions) { - if (entity.getRepositoryVersion().getStack().equals(stack) - && entity.getRepositoryVersion().getVersion().equals(version)) { + StackId repoVersionStackId = new StackId(entity.getRepositoryVersion().getStack()); + if (repoVersionStackId.equals(stackId) + && repoVersionStackId.getStackVersion().equals(version)) { assertEquals(state, entity.getState()); } } } - private void assertStateException(String stack, String version, RepositoryVersionState transitionState, + private void assertStateException(StackId stackId, String version, + RepositoryVersionState transitionState, RepositoryVersionState stateAfter) { try { - c1.transitionClusterVersion(stack, version, transitionState); + c1.transitionClusterVersion(stackId, version, transitionState); Assert.fail(); } catch (AmbariException e) {} - checkStackVersionState(stack, version, stateAfter); + checkStackVersionState(stackId, version, stateAfter); assertNotNull(c1.getCurrentClusterVersion()); } @@ -308,7 +317,7 @@ public class ClusterTest { * @return Cluster that was created */ private Cluster createClusterForRU(String clusterName, StackId stackId, Map<String, String> hostAttributes) throws Exception { - clusters.addCluster(clusterName); + clusters.addCluster(clusterName, stackId); Cluster cluster = clusters.getCluster(clusterName); Assert.assertEquals(clusterName, cluster.getClusterName()); Assert.assertEquals(1, cluster.getClusterId()); @@ -511,14 +520,14 @@ public class ClusterTest { @Test public void testGetHostState() throws Exception { createDefaultCluster(); - + Assert.assertEquals(HostState.INIT, clusters.getHost("h1").getState()); } @Test public void testSetHostState() throws Exception { createDefaultCluster(); - + clusters.getHost("h1").setState(HostState.HEARTBEAT_LOST); Assert.assertEquals(HostState.HEARTBEAT_LOST, clusters.getHost("h1").getState()); @@ -528,7 +537,7 @@ public class ClusterTest { public void testHostEvent() throws Exception, InvalidStateTransitionException { createDefaultCluster(); - + HostInfo hostInfo = new HostInfo(); hostInfo.setHostName("h1"); hostInfo.setInterfaces("fip_4"); @@ -576,6 +585,8 @@ public class ClusterTest { @Test public void testBasicClusterSetup() throws Exception { + StackId stackVersion = new StackId("HDP-1.2.0"); + createDefaultCluster(); String clusterName = "c2"; @@ -587,7 +598,7 @@ public class ClusterTest { // Expected } - clusters.addCluster(clusterName); + clusters.addCluster(clusterName, stackVersion); Cluster c2 = clusters.getCluster(clusterName); Assert.assertNotNull(c2); @@ -598,11 +609,7 @@ public class ClusterTest { Assert.assertEquals("foo2", c2.getClusterName()); Assert.assertNotNull(c2.getDesiredStackVersion()); - Assert.assertEquals("", c2.getDesiredStackVersion().getStackId()); - - StackId stackVersion = new StackId("HDP-1.0"); - c2.setDesiredStackVersion(stackVersion); - Assert.assertEquals("HDP-1.0", c2.getDesiredStackVersion().getStackId()); + Assert.assertEquals("HDP-1.2.0", c2.getDesiredStackVersion().getStackId()); } @Test @@ -798,7 +805,7 @@ public class ClusterTest { public void testClusterRecovery() throws AmbariException { ClusterEntity entity = createDummyData(); ClusterStateEntity clusterStateEntity = new ClusterStateEntity(); - clusterStateEntity.setCurrentStackVersion("{\"stackName\":\"HDP\",\"stackVersion\":\"0.1\"}"); + clusterStateEntity.setCurrentStack(entity.getDesiredStack()); entity.setClusterStateEntity(clusterStateEntity); ClusterImpl cluster = new ClusterImpl(entity, injector); Service service = cluster.getService("HDFS"); @@ -1128,99 +1135,161 @@ public class ClusterTest { String stack = "HDP"; String version = "0.2"; - helper.getOrCreateRepositoryVersion(stack, version); - c1.createClusterVersion(stack, version, "admin", RepositoryVersionState.INSTALLING); - - assertStateException(stack, version, RepositoryVersionState.CURRENT, RepositoryVersionState.INSTALLING); - assertStateException(stack, version, RepositoryVersionState.UPGRADING, RepositoryVersionState.INSTALLING); - assertStateException(stack, version, RepositoryVersionState.UPGRADED, RepositoryVersionState.INSTALLING); - assertStateException(stack, version, RepositoryVersionState.UPGRADE_FAILED, RepositoryVersionState.INSTALLING); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.INSTALL_FAILED); - checkStackVersionState(stack, version, RepositoryVersionState.INSTALL_FAILED); - - assertStateException(stack, version, RepositoryVersionState.CURRENT, RepositoryVersionState.INSTALL_FAILED); - assertStateException(stack, version, RepositoryVersionState.INSTALLED, RepositoryVersionState.INSTALL_FAILED); - assertStateException(stack, version, RepositoryVersionState.UPGRADING, RepositoryVersionState.INSTALL_FAILED); - assertStateException(stack, version, RepositoryVersionState.UPGRADED, RepositoryVersionState.INSTALL_FAILED); - assertStateException(stack, version, RepositoryVersionState.UPGRADE_FAILED, RepositoryVersionState.INSTALL_FAILED); - assertStateException(stack, version, RepositoryVersionState.OUT_OF_SYNC, RepositoryVersionState.INSTALL_FAILED); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.INSTALLING); - checkStackVersionState(stack, version, RepositoryVersionState.INSTALLING); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.INSTALLED); - checkStackVersionState(stack, version, RepositoryVersionState.INSTALLED); - - assertStateException(stack, version, RepositoryVersionState.CURRENT, RepositoryVersionState.INSTALLED); - assertStateException(stack, version, RepositoryVersionState.UPGRADE_FAILED, RepositoryVersionState.INSTALLED); - assertStateException(stack, version, RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.INSTALLED); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.OUT_OF_SYNC); - checkStackVersionState(stack, version, RepositoryVersionState.OUT_OF_SYNC); - - assertStateException(stack, version, RepositoryVersionState.CURRENT, RepositoryVersionState.OUT_OF_SYNC); - assertStateException(stack, version, RepositoryVersionState.INSTALLED, RepositoryVersionState.OUT_OF_SYNC); - assertStateException(stack, version, RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.OUT_OF_SYNC); - assertStateException(stack, version, RepositoryVersionState.UPGRADING, RepositoryVersionState.OUT_OF_SYNC); - assertStateException(stack, version, RepositoryVersionState.UPGRADED, RepositoryVersionState.OUT_OF_SYNC); - assertStateException(stack, version, RepositoryVersionState.UPGRADE_FAILED, RepositoryVersionState.OUT_OF_SYNC); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.INSTALLING); - checkStackVersionState(stack, version, RepositoryVersionState.INSTALLING); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.INSTALLED); - checkStackVersionState(stack, version, RepositoryVersionState.INSTALLED); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.UPGRADING); - checkStackVersionState(stack, version, RepositoryVersionState.UPGRADING); - - assertStateException(stack, version, RepositoryVersionState.CURRENT, RepositoryVersionState.UPGRADING); - assertStateException(stack, version, RepositoryVersionState.INSTALLED, RepositoryVersionState.UPGRADING); - assertStateException(stack, version, RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.UPGRADING); - assertStateException(stack, version, RepositoryVersionState.OUT_OF_SYNC, RepositoryVersionState.UPGRADING); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.UPGRADE_FAILED); - checkStackVersionState(stack, version, RepositoryVersionState.UPGRADE_FAILED); - - assertStateException(stack, version, RepositoryVersionState.CURRENT, RepositoryVersionState.UPGRADE_FAILED); - assertStateException(stack, version, RepositoryVersionState.INSTALLED, RepositoryVersionState.UPGRADE_FAILED); - assertStateException(stack, version, RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.UPGRADE_FAILED); - assertStateException(stack, version, RepositoryVersionState.UPGRADED, RepositoryVersionState.UPGRADE_FAILED); - assertStateException(stack, version, RepositoryVersionState.OUT_OF_SYNC, RepositoryVersionState.UPGRADE_FAILED); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.UPGRADING); - checkStackVersionState(stack, version, RepositoryVersionState.UPGRADING); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.UPGRADED); - checkStackVersionState(stack, version, RepositoryVersionState.UPGRADED); - - assertStateException(stack, version, RepositoryVersionState.INSTALLED, RepositoryVersionState.UPGRADED); - assertStateException(stack, version, RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.UPGRADED); - assertStateException(stack, version, RepositoryVersionState.UPGRADING, RepositoryVersionState.UPGRADED); - assertStateException(stack, version, RepositoryVersionState.UPGRADE_FAILED, RepositoryVersionState.UPGRADED); - assertStateException(stack, version, RepositoryVersionState.OUT_OF_SYNC, RepositoryVersionState.UPGRADED); - - c1.transitionClusterVersion(stack, version, RepositoryVersionState.CURRENT); - checkStackVersionState(stack, version, RepositoryVersionState.CURRENT); - checkStackVersionState("HDP", "0.1", RepositoryVersionState.INSTALLED); + StackId stackId = new StackId(stack, version); + + helper.getOrCreateRepositoryVersion(stackId, version); + c1.createClusterVersion(stackId, version, "admin", + RepositoryVersionState.INSTALLING); + + assertStateException(stackId, version, RepositoryVersionState.CURRENT, + RepositoryVersionState.INSTALLING); + assertStateException(stackId, version, RepositoryVersionState.UPGRADING, + RepositoryVersionState.INSTALLING); + assertStateException(stackId, version, RepositoryVersionState.UPGRADED, + RepositoryVersionState.INSTALLING); + assertStateException(stackId, version, + RepositoryVersionState.UPGRADE_FAILED, + RepositoryVersionState.INSTALLING); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.INSTALL_FAILED); + checkStackVersionState(stackId, version, + RepositoryVersionState.INSTALL_FAILED); + + assertStateException(stackId, version, RepositoryVersionState.CURRENT, + RepositoryVersionState.INSTALL_FAILED); + assertStateException(stackId, version, RepositoryVersionState.INSTALLED, + RepositoryVersionState.INSTALL_FAILED); + assertStateException(stackId, version, RepositoryVersionState.UPGRADING, + RepositoryVersionState.INSTALL_FAILED); + assertStateException(stackId, version, RepositoryVersionState.UPGRADED, + RepositoryVersionState.INSTALL_FAILED); + assertStateException(stackId, version, + RepositoryVersionState.UPGRADE_FAILED, + RepositoryVersionState.INSTALL_FAILED); + assertStateException(stackId, version, RepositoryVersionState.OUT_OF_SYNC, + RepositoryVersionState.INSTALL_FAILED); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.INSTALLING); + checkStackVersionState(stackId, version, RepositoryVersionState.INSTALLING); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.INSTALLED); + checkStackVersionState(stackId, version, RepositoryVersionState.INSTALLED); + + assertStateException(stackId, version, RepositoryVersionState.CURRENT, + RepositoryVersionState.INSTALLED); + assertStateException(stackId, version, + RepositoryVersionState.UPGRADE_FAILED, RepositoryVersionState.INSTALLED); + assertStateException(stackId, version, + RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.INSTALLED); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.OUT_OF_SYNC); + checkStackVersionState(stackId, version, RepositoryVersionState.OUT_OF_SYNC); + + assertStateException(stackId, version, RepositoryVersionState.CURRENT, + RepositoryVersionState.OUT_OF_SYNC); + assertStateException(stackId, version, RepositoryVersionState.INSTALLED, + RepositoryVersionState.OUT_OF_SYNC); + assertStateException(stackId, version, + RepositoryVersionState.INSTALL_FAILED, + RepositoryVersionState.OUT_OF_SYNC); + assertStateException(stackId, version, RepositoryVersionState.UPGRADING, + RepositoryVersionState.OUT_OF_SYNC); + assertStateException(stackId, version, RepositoryVersionState.UPGRADED, + RepositoryVersionState.OUT_OF_SYNC); + assertStateException(stackId, version, + RepositoryVersionState.UPGRADE_FAILED, + RepositoryVersionState.OUT_OF_SYNC); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.INSTALLING); + checkStackVersionState(stackId, version, RepositoryVersionState.INSTALLING); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.INSTALLED); + checkStackVersionState(stackId, version, RepositoryVersionState.INSTALLED); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.UPGRADING); + checkStackVersionState(stackId, version, RepositoryVersionState.UPGRADING); + + assertStateException(stackId, version, RepositoryVersionState.CURRENT, + RepositoryVersionState.UPGRADING); + assertStateException(stackId, version, RepositoryVersionState.INSTALLED, + RepositoryVersionState.UPGRADING); + assertStateException(stackId, version, + RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.UPGRADING); + assertStateException(stackId, version, RepositoryVersionState.OUT_OF_SYNC, + RepositoryVersionState.UPGRADING); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.UPGRADE_FAILED); + checkStackVersionState(stackId, version, + RepositoryVersionState.UPGRADE_FAILED); + + assertStateException(stackId, version, RepositoryVersionState.CURRENT, + RepositoryVersionState.UPGRADE_FAILED); + assertStateException(stackId, version, RepositoryVersionState.INSTALLED, + RepositoryVersionState.UPGRADE_FAILED); + assertStateException(stackId, version, + RepositoryVersionState.INSTALL_FAILED, + RepositoryVersionState.UPGRADE_FAILED); + assertStateException(stackId, version, RepositoryVersionState.UPGRADED, + RepositoryVersionState.UPGRADE_FAILED); + assertStateException(stackId, version, RepositoryVersionState.OUT_OF_SYNC, + RepositoryVersionState.UPGRADE_FAILED); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.UPGRADING); + checkStackVersionState(stackId, version, RepositoryVersionState.UPGRADING); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.UPGRADED); + checkStackVersionState(stackId, version, RepositoryVersionState.UPGRADED); + + assertStateException(stackId, version, RepositoryVersionState.INSTALLED, + RepositoryVersionState.UPGRADED); + assertStateException(stackId, version, + RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.UPGRADED); + assertStateException(stackId, version, RepositoryVersionState.UPGRADING, + RepositoryVersionState.UPGRADED); + assertStateException(stackId, version, + RepositoryVersionState.UPGRADE_FAILED, RepositoryVersionState.UPGRADED); + assertStateException(stackId, version, RepositoryVersionState.OUT_OF_SYNC, + RepositoryVersionState.UPGRADED); + + c1.transitionClusterVersion(stackId, version, + RepositoryVersionState.CURRENT); + checkStackVersionState(stackId, version, RepositoryVersionState.CURRENT); + + checkStackVersionState(new StackId("HDP", "0.1"), "0.1", + RepositoryVersionState.INSTALLED); // The only CURRENT state should not be changed - assertStateException(stack, version, RepositoryVersionState.INSTALLED, RepositoryVersionState.CURRENT); + assertStateException(stackId, version, RepositoryVersionState.INSTALLED, + RepositoryVersionState.CURRENT); } @Test public void testTransitionClusterVersionTransactionFail() throws Exception { createDefaultCluster(); - helper.getOrCreateRepositoryVersion("HDP", "0.2"); - c1.createClusterVersion("HDP", "0.2", "admin", RepositoryVersionState.INSTALLING); - c1.transitionClusterVersion("HDP", "0.2", RepositoryVersionState.INSTALLED); - c1.transitionClusterVersion("HDP", "0.2", RepositoryVersionState.UPGRADING); - c1.transitionClusterVersion("HDP", "0.2", RepositoryVersionState.UPGRADED); + StackId stackId = new StackId("HDP", "0.2"); + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c1.createClusterVersion(stackId, "0.2", "admin", + RepositoryVersionState.INSTALLING); + c1.transitionClusterVersion(stackId, "0.2", + RepositoryVersionState.INSTALLED); + c1.transitionClusterVersion(stackId, "0.2", + RepositoryVersionState.UPGRADING); + c1.transitionClusterVersion(stackId, "0.2", RepositoryVersionState.UPGRADED); try { ClusterVersionDAOMock.failOnCurrentVersionState = true; - c1.transitionClusterVersion("HDP", "0.2", RepositoryVersionState.CURRENT); + c1.transitionClusterVersion(stackId, "0.2", + RepositoryVersionState.CURRENT); Assert.fail(); } catch (AmbariException e) { @@ -1236,12 +1305,17 @@ public class ClusterTest { public void testInferHostVersions() throws Exception { createDefaultCluster(); - helper.getOrCreateRepositoryVersion("HDP", "0.2"); - c1.createClusterVersion("HDP", "0.2", "admin", RepositoryVersionState.INSTALLING); + StackId stackId = new StackId("HDP", "0.2"); + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c1.createClusterVersion(stackId, "0.2", "admin", + RepositoryVersionState.INSTALLING); ClusterVersionEntity entityHDP2 = null; for (ClusterVersionEntity entity : c1.getAllClusterVersions()) { - if (entity.getRepositoryVersion().getStack().equals("HDP") - && entity.getRepositoryVersion().getVersion().equals("0.2")) { + StackEntity repoVersionStackEntity = entity.getRepositoryVersion().getStack(); + StackId repoVersionStackId = new StackId(repoVersionStackEntity); + + if (repoVersionStackId.getStackName().equals("HDP") + && repoVersionStackId.getStackVersion().equals("0.2")) { entityHDP2 = entity; break; } @@ -1258,8 +1332,9 @@ public class ClusterTest { boolean checked = false; for (HostVersionEntity entity : hostVersionsH1After) { - if (entity.getRepositoryVersion().getStack().equals("HDP") - && entity.getRepositoryVersion().getVersion().equals("0.2")) { + StackEntity repoVersionStackEntity = entity.getRepositoryVersion().getStack(); + if (repoVersionStackEntity.getStackName().equals("HDP") + && repoVersionStackEntity.getStackVersion().equals("0.2")) { assertEquals(RepositoryVersionState.INSTALLING, entity.getState()); checked = true; break; @@ -1275,8 +1350,9 @@ public class ClusterTest { checked = false; for (HostVersionEntity entity : hostVersionsH1After) { - if (entity.getRepositoryVersion().getStack().equals("HDP") - && entity.getRepositoryVersion().getVersion().equals("0.2")) { + StackEntity repoVersionStackEntity = entity.getRepositoryVersion().getStack(); + if (repoVersionStackEntity.getStackName().equals("HDP") + && repoVersionStackEntity.getStackVersion().equals("0.2")) { assertEquals(RepositoryVersionState.INSTALLING, entity.getState()); checked = true; break; @@ -1298,10 +1374,12 @@ public class ClusterTest { // Phase 1: Install bits during distribution StackId stackId = new StackId("HDP-0.1"); final String stackVersion = "1.0-1000"; - RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId.getStackId(), + RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion( + stackId, stackVersion); // Because the cluster already has a Cluster Version, an additional stack must init with INSTALLING - c1.createClusterVersion(stackId.getStackId(), stackVersion, "admin", RepositoryVersionState.INSTALLING); + c1.createClusterVersion(stackId, stackVersion, "admin", + RepositoryVersionState.INSTALLING); c1.setCurrentStackVersion(stackId); HostVersionEntity hv1 = helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLING); @@ -1309,64 +1387,77 @@ public class ClusterTest { c1.recalculateClusterVersionState(stackVersion); //Should remain in its current state - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.INSTALLING); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.INSTALLING); h2.setState(HostState.UNHEALTHY); c1.recalculateClusterVersionState(stackVersion); // In order for the states to be accurately reflected, the host health status should not impact the status // of the host_version. - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.INSTALLING); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.INSTALLING); // Retry by going back to INSTALLING - c1.transitionClusterVersion(stackId.getStackId(), stackVersion, RepositoryVersionState.INSTALLING); + c1.transitionClusterVersion(stackId, stackVersion, + RepositoryVersionState.INSTALLING); h2.setState(HostState.HEALTHY); hv2.setState(RepositoryVersionState.INSTALLED); hostVersionDAO.merge(hv2); c1.recalculateClusterVersionState(stackVersion); - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.INSTALLING); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.INSTALLING); // Make one host fail hv1.setState(RepositoryVersionState.INSTALL_FAILED); hostVersionDAO.merge(hv1); c1.recalculateClusterVersionState(stackVersion); - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.INSTALL_FAILED); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.INSTALL_FAILED); // Retry by going back to INSTALLING - c1.transitionClusterVersion(stackId.getStackId(), stackVersion, RepositoryVersionState.INSTALLING); + c1.transitionClusterVersion(stackId, stackVersion, + RepositoryVersionState.INSTALLING); // Now, all hosts are in INSTALLED hv1.setState(RepositoryVersionState.INSTALLED); hostVersionDAO.merge(hv1); c1.recalculateClusterVersionState(stackVersion); - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.INSTALLED); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.INSTALLED); // Phase 2: Upgrade stack hv1.setState(RepositoryVersionState.UPGRADING); hostVersionDAO.merge(hv1); c1.recalculateClusterVersionState(stackVersion); - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.UPGRADING); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.UPGRADING); hv2.setState(RepositoryVersionState.UPGRADING); hostVersionDAO.merge(hv2); c1.recalculateClusterVersionState(stackVersion); - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.UPGRADING); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.UPGRADING); hv2.setState(RepositoryVersionState.UPGRADE_FAILED); hostVersionDAO.merge(hv2); c1.recalculateClusterVersionState(stackVersion); - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.UPGRADE_FAILED); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.UPGRADE_FAILED); // Retry by going back to UPGRADING - c1.transitionClusterVersion(stackId.getStackId(), stackVersion, RepositoryVersionState.UPGRADING); + c1.transitionClusterVersion(stackId, stackVersion, + RepositoryVersionState.UPGRADING); hv2.setState(RepositoryVersionState.UPGRADED); hostVersionDAO.merge(hv2); c1.recalculateClusterVersionState(stackVersion); - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.UPGRADING); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.UPGRADING); // Now both hosts are UPGRADED hv1.setState(RepositoryVersionState.UPGRADED); hostVersionDAO.merge(hv1); c1.recalculateClusterVersionState(stackVersion); - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.UPGRADED); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.UPGRADED); // Set both hosts to CURRENT hv1.setState(RepositoryVersionState.CURRENT); @@ -1374,7 +1465,8 @@ public class ClusterTest { hv2.setState(RepositoryVersionState.CURRENT); hostVersionDAO.merge(hv2); c1.recalculateClusterVersionState(stackVersion); - checkStackVersionState(stackId.getStackId(), stackVersion, RepositoryVersionState.CURRENT); + checkStackVersionState(stackId, stackVersion, + RepositoryVersionState.CURRENT); } @Test @@ -1388,34 +1480,41 @@ public class ClusterTest { h2.setState(HostState.HEALTHY); StackId stackId = new StackId("HDP-0.1"); - RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId.getStackId(), + RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion( + stackId, "1.0-1000"); - c1.createClusterVersion(stackId.getStackId(), "1.0-1000", "admin", RepositoryVersionState.INSTALLING); + c1.createClusterVersion(stackId, "1.0-1000", "admin", + RepositoryVersionState.INSTALLING); c1.setCurrentStackVersion(stackId); c1.recalculateAllClusterVersionStates(); - checkStackVersionState(stackId.getStackId(), "1.0-1000", RepositoryVersionState.INSTALLING); - checkStackVersionState(stackId.getStackId(), "1.0-2086", RepositoryVersionState.CURRENT); + checkStackVersionState(stackId, "1.0-1000", + RepositoryVersionState.INSTALLING); + checkStackVersionState(stackId, "1.0-2086", RepositoryVersionState.CURRENT); HostVersionEntity hv1 = helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLING); HostVersionEntity hv2 = helper.createHostVersion("h2", repositoryVersionEntity, RepositoryVersionState.INSTALLING); c1.recalculateAllClusterVersionStates(); - checkStackVersionState(stackId.getStackId(), "1.0-1000", RepositoryVersionState.INSTALLING); - checkStackVersionState(stackId.getStackId(), "1.0-2086", RepositoryVersionState.CURRENT); + checkStackVersionState(stackId, "1.0-1000", + RepositoryVersionState.INSTALLING); + checkStackVersionState(stackId, "1.0-2086", RepositoryVersionState.CURRENT); hv1.setState(RepositoryVersionState.INSTALL_FAILED); hostVersionDAO.merge(hv1); c1.recalculateAllClusterVersionStates(); - checkStackVersionState(stackId.getStackId(), "1.0-1000", RepositoryVersionState.INSTALL_FAILED); - checkStackVersionState(stackId.getStackId(), "1.0-2086", RepositoryVersionState.CURRENT); + checkStackVersionState(stackId, "1.0-1000", + RepositoryVersionState.INSTALL_FAILED); + checkStackVersionState(stackId, "1.0-2086", RepositoryVersionState.CURRENT); // Retry by going back to INSTALLING - c1.transitionClusterVersion(stackId.getStackId(), "1.0-1000", RepositoryVersionState.INSTALLING); + c1.transitionClusterVersion(stackId, "1.0-1000", + RepositoryVersionState.INSTALLING); hv1.setState(RepositoryVersionState.CURRENT); hostVersionDAO.merge(hv1); c1.recalculateAllClusterVersionStates(); - checkStackVersionState(stackId.getStackId(), "1.0-1000", RepositoryVersionState.OUT_OF_SYNC); - checkStackVersionState(stackId.getStackId(), "1.0-2086", RepositoryVersionState.CURRENT); + checkStackVersionState(stackId, "1.0-1000", + RepositoryVersionState.OUT_OF_SYNC); + checkStackVersionState(stackId, "1.0-2086", RepositoryVersionState.CURRENT); } /** @@ -1470,7 +1569,7 @@ public class ClusterTest { if (versionedComponentCount > 0) { // On the first component with a version, a RepoVersion should have been created - RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId.getStackId(), v1); + RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, v1); Assert.assertNotNull(repositoryVersion); Assert.assertTrue(clusterVersions != null && clusterVersions.size() == 1); @@ -1512,23 +1611,26 @@ public class ClusterTest { Collection<HostVersionEntity> hostVersions = hostVersionDAO.findAll(); Assert.assertEquals(hostVersions.size(), clusters.getHosts().size()); - HostVersionEntity h4Version1 = hostVersionDAO.findByClusterStackVersionAndHost(clusterName, stackId.getStackId(), v1, "h-4"); + HostVersionEntity h4Version1 = hostVersionDAO.findByClusterStackVersionAndHost(clusterName, stackId, v1, "h-4"); Assert.assertNotNull(h4Version1); Assert.assertEquals(h4Version1.getState(), RepositoryVersionState.CURRENT); // Distribute bits for a new repo String v2 = "2.2.0-456"; - RepositoryVersionEntity rv2 = helper.getOrCreateRepositoryVersion(stackId.getStackId(), v2); + RepositoryVersionEntity rv2 = helper.getOrCreateRepositoryVersion(stackId, + v2); for(String hostName : clusters.getHostsForCluster(clusterName).keySet()) { HostEntity host = hostDAO.findByName(hostName); HostVersionEntity hve = new HostVersionEntity(hostName, rv2, RepositoryVersionState.INSTALLED); hve.setHostEntity(host); hostVersionDAO.create(hve); } - cluster.createClusterVersion(stackId.getStackId(), v2, "admin", RepositoryVersionState.INSTALLING); - cluster.transitionClusterVersion(stackId.getStackId(), v2, RepositoryVersionState.INSTALLED); + cluster.createClusterVersion(stackId, v2, "admin", + RepositoryVersionState.INSTALLING); + cluster.transitionClusterVersion(stackId, v2, + RepositoryVersionState.INSTALLED); - ClusterVersionEntity cv2 = clusterVersionDAO.findByClusterAndStackAndVersion(clusterName, stackId.getStackId(), v2); + ClusterVersionEntity cv2 = clusterVersionDAO.findByClusterAndStackAndVersion(clusterName, stackId, v2); Assert.assertNotNull(cv2); Assert.assertEquals(cv2.getState(), RepositoryVersionState.INSTALLED); @@ -1540,7 +1642,7 @@ public class ClusterTest { schHost5Serv3CompB.persist(); // Host 5 will be in OUT_OF_SYNC, so redistribute bits to it so that it reaches a state of INSTALLED - HostVersionEntity h5Version2 = hostVersionDAO.findByClusterStackVersionAndHost(clusterName, stackId.getStackId(), v2, "h-5"); + HostVersionEntity h5Version2 = hostVersionDAO.findByClusterStackVersionAndHost(clusterName, stackId, v2, "h-5"); Assert.assertNotNull(h5Version2); Assert.assertEquals(h5Version2.getState(), RepositoryVersionState.OUT_OF_SYNC); @@ -1578,13 +1680,13 @@ public class ClusterTest { if (versionedComponentCount > 0) { // On the first component with a version, a RepoVersion should have been created - RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId.getStackId(), v2); + RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, v2); Assert.assertNotNull(repositoryVersion); Assert.assertTrue(clusterVersions != null && clusterVersions.size() == 2); // First component to report a version should cause the ClusterVersion to go to UPGRADING if (versionedComponentCount == 1 && i < (hostComponentStates.size() - 1)) { - cv2 = clusterVersionDAO.findByClusterAndStackAndVersion(clusterName, stackId.getStackId(), v2); + cv2 = clusterVersionDAO.findByClusterAndStackAndVersion(clusterName, stackId, v2); Assert.assertEquals(cv2.getState(), RepositoryVersionState.UPGRADING); } } @@ -1592,10 +1694,10 @@ public class ClusterTest { // Last component to report a version should still keep the ClusterVersion in UPGRADING because // hosts 3 and 5 only have Ganglia and the HostVersion will remain in INSTALLED - cv2 = clusterVersionDAO.findByClusterAndStackAndVersion(clusterName, stackId.getStackId(), v2); + cv2 = clusterVersionDAO.findByClusterAndStackAndVersion(clusterName, stackId, v2); Assert.assertEquals(cv2.getState(), RepositoryVersionState.UPGRADING); - Collection<HostVersionEntity> v2HostVersions = hostVersionDAO.findByClusterStackAndVersion(clusterName, stackId.getStackId(), v2); + Collection<HostVersionEntity> v2HostVersions = hostVersionDAO.findByClusterStackAndVersion(clusterName, stackId, v2); Assert.assertEquals(v2HostVersions.size(), clusters.getHostsForCluster(clusterName).size()); for (HostVersionEntity hve : v2HostVersions) { if (hve.getHostName().equals("h-3") || hve.getHostName().equals("h-5")) { @@ -1608,8 +1710,10 @@ public class ClusterTest { @Test public void testTransitionNonReportableHost() throws Exception { + StackId stackId = new StackId("HDP-2.0.5"); + String clusterName = "c1"; - clusters.addCluster(clusterName); + clusters.addCluster(clusterName, stackId); Cluster c1 = clusters.getCluster(clusterName); Assert.assertEquals(clusterName, c1.getClusterName()); Assert.assertEquals(1, c1.getClusterId()); @@ -1632,14 +1736,16 @@ public class ClusterTest { String v1 = "2.0.5-1"; String v2 = "2.0.5-2"; - StackId stackId = new StackId("HDP-2.0.5"); c1.setDesiredStackVersion(stackId); - RepositoryVersionEntity rve1 = helper.getOrCreateRepositoryVersion(stackId.getStackName(), v1); - RepositoryVersionEntity rve2 = helper.getOrCreateRepositoryVersion(stackId.getStackName(), v2); + RepositoryVersionEntity rve1 = helper.getOrCreateRepositoryVersion(stackId, + v1); + RepositoryVersionEntity rve2 = helper.getOrCreateRepositoryVersion(stackId, + v2); c1.setCurrentStackVersion(stackId); - c1.createClusterVersion(stackId.getStackName(), v1, "admin", RepositoryVersionState.UPGRADING); - c1.transitionClusterVersion(stackId.getStackName(), v1, RepositoryVersionState.CURRENT); + c1.createClusterVersion(stackId, v1, "admin", + RepositoryVersionState.UPGRADING); + c1.transitionClusterVersion(stackId, v1, RepositoryVersionState.CURRENT); clusters.mapHostToCluster("h-1", clusterName); clusters.mapHostToCluster("h-2", clusterName); @@ -1658,12 +1764,13 @@ public class ClusterTest { List<HostVersionEntity> entities = hostVersionDAO.findByClusterAndHost(clusterName, "h-3"); assertTrue("Expected no host versions", null == entities || 0 == entities.size()); - c1.createClusterVersion(stackId.getStackName(), v2, "admin", RepositoryVersionState.INSTALLING); - c1.transitionClusterVersion(stackId.getStackName(), v2, RepositoryVersionState.INSTALLED); - c1.transitionClusterVersion(stackId.getStackName(), v2, RepositoryVersionState.UPGRADING); - c1.transitionClusterVersion(stackId.getStackName(), v2, RepositoryVersionState.UPGRADED); + c1.createClusterVersion(stackId, v2, "admin", + RepositoryVersionState.INSTALLING); + c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.INSTALLED); + c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.UPGRADING); + c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.UPGRADED); - c1.transitionClusterVersion(stackId.getStackName(), v2, RepositoryVersionState.CURRENT); + c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.CURRENT); entities = hostVersionDAO.findByClusterAndHost(clusterName, "h-3"); @@ -1677,8 +1784,9 @@ public class ClusterTest { * and we add a new host to cluster. On a new host, both CURRENT and OUT_OF_SYNC host * versions should be present */ + StackId stackId = new StackId("HDP-2.0.5"); String clusterName = "c1"; - clusters.addCluster(clusterName); + clusters.addCluster(clusterName, stackId); final Cluster c1 = clusters.getCluster(clusterName); Assert.assertEquals(clusterName, c1.getClusterName()); Assert.assertEquals(1, c1.getClusterId()); @@ -1702,15 +1810,16 @@ public class ClusterTest { String v1 = "2.0.5-1"; String v2 = "2.0.5-2"; - StackId stackId = new StackId("HDP-2.0.5"); c1.setDesiredStackVersion(stackId); - RepositoryVersionEntity rve1 = helper.getOrCreateRepositoryVersion(stackId.getStackId() - , v1); - RepositoryVersionEntity rve2 = helper.getOrCreateRepositoryVersion(stackId.getStackId(), v2); + RepositoryVersionEntity rve1 = helper.getOrCreateRepositoryVersion(stackId, + v1); + RepositoryVersionEntity rve2 = helper.getOrCreateRepositoryVersion(stackId, + v2); c1.setCurrentStackVersion(stackId); - c1.createClusterVersion(stackId.getStackId(), v1, "admin", RepositoryVersionState.UPGRADING); - c1.transitionClusterVersion(stackId.getStackId(), v1, RepositoryVersionState.CURRENT); + c1.createClusterVersion(stackId, v1, "admin", + RepositoryVersionState.UPGRADING); + c1.transitionClusterVersion(stackId, v1, RepositoryVersionState.CURRENT); clusters.mapHostToCluster("h-1", clusterName); clusters.mapHostToCluster("h-2", clusterName); @@ -1722,9 +1831,10 @@ public class ClusterTest { sc.addServiceComponentHost("h-1"); sc.addServiceComponentHost("h-2"); - c1.createClusterVersion(stackId.getStackId(), v2, "admin", RepositoryVersionState.INSTALLING); - c1.transitionClusterVersion(stackId.getStackId(), v2, RepositoryVersionState.INSTALLED); - c1.transitionClusterVersion(stackId.getStackId(), v2, RepositoryVersionState.OUT_OF_SYNC); + c1.createClusterVersion(stackId, v2, "admin", + RepositoryVersionState.INSTALLING); + c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.INSTALLED); + c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.OUT_OF_SYNC); clusters.mapHostToCluster(h3, clusterName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/746df034/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java index d771eba..7cb7679 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java @@ -29,6 +29,7 @@ import junit.framework.Assert; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ServiceComponentNotFoundException; import org.apache.ambari.server.ServiceNotFoundException; +import org.apache.ambari.server.events.listeners.upgrade.HostVersionOutOfSyncListener; import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.OrmTestHelper; @@ -44,14 +45,18 @@ import org.apache.ambari.server.state.ServiceComponentHostFactory; import org.apache.ambari.server.state.ServiceFactory; import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.State; +import org.easymock.EasyMock; import org.junit.After; import org.junit.Before; import org.junit.Test; +import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; +import com.google.inject.Module; import com.google.inject.persist.PersistService; +import com.google.inject.util.Modules; /** * Tests AMBARI-9738 which produced a deadlock during read and writes between @@ -88,16 +93,19 @@ public class ClustersDeadlockTest { @Before public void setup() throws Exception { - injector = Guice.createInjector(new InMemoryDefaultTestModule()); + injector = Guice.createInjector(Modules.override( + new InMemoryDefaultTestModule()).with(new MockModule())); + injector.getInstance(GuiceJpaInitializer.class); injector.injectMembers(this); - clusters.addCluster(CLUSTER_NAME); StackId stackId = new StackId("HDP-0.1"); + clusters.addCluster(CLUSTER_NAME, stackId); + cluster = clusters.getCluster(CLUSTER_NAME); - cluster.setDesiredStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - cluster.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); // install HDFS installService("HDFS"); @@ -114,7 +122,7 @@ public class ClustersDeadlockTest { * * @throws Exception */ - @Test(timeout = 35000) + @Test(timeout = 40000) public void testDeadlockWhileMappingHosts() throws Exception { List<Thread> threads = new ArrayList<Thread>(); for (int i = 0; i < NUMBER_OF_THREADS; i++) { @@ -143,7 +151,7 @@ public class ClustersDeadlockTest { * * @throws Exception */ - @Test(timeout = 35000) + @Test(timeout = 40000) public void testDeadlockWhileMappingHostsWithExistingServices() throws Exception { List<Thread> threads = new ArrayList<Thread>(); @@ -169,7 +177,7 @@ public class ClustersDeadlockTest { * * @throws Exception */ - @Test(timeout = 35000) + @Test(timeout = 40000) public void testDeadlockWhileUnmappingHosts() throws Exception { List<Thread> threads = new ArrayList<Thread>(); for (int i = 0; i < NUMBER_OF_THREADS; i++) { @@ -363,4 +371,20 @@ public class ClustersDeadlockTest { sch.persist(); return sch; } + + /** + * + */ + private class MockModule implements Module { + /** + * + */ + @Override + public void configure(Binder binder) { + // this listener gets in the way of actually testing the concurrency + // between the threads; it slows them down too much, so mock it out + binder.bind(HostVersionOutOfSyncListener.class).toInstance( + EasyMock.createNiceMock(HostVersionOutOfSyncListener.class)); + } + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/746df034/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java index 20eafe0..ce1fd34 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java @@ -116,12 +116,14 @@ public class ClustersTest { @Test public void testAddAndGetCluster() throws AmbariException { + StackId stackId = new StackId("HDP-2.1.1"); + String c1 = "foo"; String c2 = "foo"; - clusters.addCluster(c1); + clusters.addCluster(c1, stackId); try { - clusters.addCluster(c1); + clusters.addCluster(c1, stackId); fail("Exception should be thrown on invalid add"); } catch (AmbariException e) { @@ -129,7 +131,7 @@ public class ClustersTest { } try { - clusters.addCluster(c2); + clusters.addCluster(c2, stackId); fail("Exception should be thrown on invalid add"); } catch (AmbariException e) { @@ -137,7 +139,7 @@ public class ClustersTest { } c2 = "foo2"; - clusters.addCluster(c2); + clusters.addCluster(c2, stackId); Assert.assertNotNull(clusters.getCluster(c1)); Assert.assertNotNull(clusters.getCluster(c2)); @@ -218,21 +220,27 @@ public class ClustersTest { // Expected } - clusters.addCluster(c1); - clusters.addCluster(c2); + StackId stackId = new StackId("HDP-0.1"); + + clusters.addCluster(c1, stackId); + clusters.addCluster(c2, stackId); Cluster cluster1 = clusters.getCluster(c1); Cluster cluster2 = clusters.getCluster(c2); Assert.assertNotNull(clusters.getCluster(c1)); Assert.assertNotNull(clusters.getCluster(c2)); - StackId stackId = new StackId("HDP-0.1"); + cluster1.setDesiredStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - cluster1.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); - cluster1.transitionClusterVersion(stackId.getStackName(), stackId.getStackVersion(), RepositoryVersionState.CURRENT); + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + cluster1.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); + cluster1.transitionClusterVersion(stackId, stackId.getStackVersion(), + RepositoryVersionState.CURRENT); cluster2.setDesiredStackVersion(stackId); - cluster2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); - cluster2.transitionClusterVersion(stackId.getStackName(), stackId.getStackVersion(), RepositoryVersionState.CURRENT); + cluster2.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); + cluster2.transitionClusterVersion(stackId, stackId.getStackVersion(), + RepositoryVersionState.CURRENT); try { clusters.mapHostToCluster(h1, c1); @@ -307,20 +315,26 @@ public class ClustersTest { String h1 = "h1"; String h2 = "h2"; String h3 = "h3"; - clusters.addCluster(c1); - clusters.addCluster(c2); + + StackId stackId = new StackId("HDP-0.1"); + + clusters.addCluster(c1, stackId); + clusters.addCluster(c2, stackId); Cluster cluster1 = clusters.getCluster(c1); Cluster cluster2 = clusters.getCluster(c2); Assert.assertNotNull(clusters.getCluster(c1)); Assert.assertNotNull(clusters.getCluster(c2)); - StackId stackId = new StackId("HDP-0.1"); - cluster1.setDesiredStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - cluster1.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); - cluster1.transitionClusterVersion(stackId.getStackName(), stackId.getStackVersion(), RepositoryVersionState.CURRENT); + + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + cluster1.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); + cluster1.transitionClusterVersion(stackId, stackId.getStackVersion(), + RepositoryVersionState.CURRENT); cluster2.setDesiredStackVersion(stackId); - cluster2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); - cluster2.transitionClusterVersion(stackId.getStackName(), stackId.getStackVersion(), RepositoryVersionState.CURRENT); + cluster2.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); + cluster2.transitionClusterVersion(stackId, stackId.getStackVersion(), + RepositoryVersionState.CURRENT); clusters.addHost(h1); clusters.addHost(h2); clusters.addHost(h3); @@ -344,15 +358,18 @@ public class ClustersTest { final String h1 = "h1"; final String h2 = "h2"; - clusters.addCluster(c1); + StackId stackId = new StackId("HDP-0.1"); + clusters.addCluster(c1, stackId); Cluster cluster = clusters.getCluster(c1); - StackId stackId = new StackId("HDP-0.1"); + cluster.setDesiredStackVersion(stackId); cluster.setCurrentStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - cluster.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); - cluster.transitionClusterVersion(stackId.getStackName(), stackId.getStackVersion(), RepositoryVersionState.CURRENT); + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); + cluster.transitionClusterVersion(stackId, stackId.getStackVersion(), + RepositoryVersionState.CURRENT); final Config config1 = injector.getInstance(ConfigFactory.class).createNew(cluster, "t1", new HashMap<String, String>() {{ @@ -479,14 +496,18 @@ public class ClustersTest { Assert.assertTrue(e.getMessage().contains("Cluster not found")); } - clusters.addCluster(c1); + clusters.addCluster(c1, stackId); clusters.setCurrentStackVersion(c1, stackId); Assert.assertNotNull(clusters.getCluster(c1)); ClusterStateEntity entity = injector.getInstance(ClusterStateDAO.class).findByPK(clusters.getCluster(c1).getClusterId()); Assert.assertNotNull(entity); - Assert.assertTrue(entity.getCurrentStackVersion().contains(stackId.getStackName()) && - entity.getCurrentStackVersion().contains(stackId.getStackVersion())); + + Assert.assertTrue(entity.getCurrentStack().getStackName().equals( + stackId.getStackName()) + && entity.getCurrentStack().getStackVersion().equals( + stackId.getStackVersion())); + Assert.assertTrue(clusters.getCluster(c1).getCurrentStackVersion().getStackName().equals(stackId.getStackName())); Assert.assertTrue( clusters.getCluster(c1).getCurrentStackVersion().getStackVersion().equals(stackId.getStackVersion())); http://git-wip-us.apache.org/repos/asf/ambari/blob/746df034/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java index 27b2a0e..4248d13 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java @@ -359,11 +359,13 @@ public class HostTest { public void testHostDesiredConfig() throws Exception { AmbariMetaInfo metaInfo = injector.getInstance(AmbariMetaInfo.class); - clusters.addCluster("c1"); - Cluster c1 = clusters.getCluster("c1"); StackId stackId = new StackId("HDP-0.1"); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - c1.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); + clusters.addCluster("c1", stackId); + Cluster c1 = clusters.getCluster("c1"); + + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); Assert.assertEquals("c1", c1.getClusterName()); Assert.assertEquals(1, c1.getClusterId()); clusters.addHost("h1"); @@ -420,7 +422,8 @@ public class HostTest { public void testHostMaintenance() throws Exception { AmbariMetaInfo metaInfo = injector.getInstance(AmbariMetaInfo.class); - clusters.addCluster("c1"); + StackId stackId = new StackId("HDP-0.1"); + clusters.addCluster("c1", stackId); Cluster c1 = clusters.getCluster("c1"); Assert.assertEquals("c1", c1.getClusterName()); Assert.assertEquals(1, c1.getClusterId()); @@ -435,9 +438,10 @@ public class HostTest { host.setHostAttributes(hostAttributes); host.persist(); - StackId stackId = new StackId("HDP-0.1"); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - c1.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); + + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); c1.setDesiredStackVersion(stackId); clusters.mapHostToCluster("h1", "c1"); http://git-wip-us.apache.org/repos/asf/ambari/blob/746df034/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java index 137575e..fde1945 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java @@ -109,15 +109,16 @@ public class ServiceComponentHostTest { injector = Guice.createInjector(new InMemoryDefaultTestModule()); injector.getInstance(GuiceJpaInitializer.class); injector.injectMembers(this); - clusters.addCluster("C1"); + StackId stackId = new StackId("HDP-0.1"); + clusters.addCluster("C1", stackId); clusters.addHost("h1"); setOsFamily(clusters.getHost("h1"), "redhat", "5.9"); clusters.getHost("h1").persist(); - StackId stackId = new StackId("HDP-0.1"); + Cluster c1 = clusters.getCluster("C1"); - c1.setDesiredStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - c1.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); clusters.mapHostToCluster("h1","C1"); } @@ -190,7 +191,7 @@ public class ServiceComponentHostTest { Assert.assertFalse( impl.getDesiredStackVersion().getStackId().isEmpty()); - Assert.assertTrue(impl.getStackVersion().getStackId().isEmpty()); + Assert.assertFalse(impl.getStackVersion().getStackId().isEmpty()); return impl; } @@ -263,7 +264,6 @@ public class ServiceComponentHostTest { boolean checkStack = false; if (startEventType == ServiceComponentHostEventType.HOST_SVCCOMP_INSTALL) { checkStack = true; - impl.setStackVersion(null); } Assert.assertEquals(startState, @@ -515,14 +515,14 @@ public class ServiceComponentHostTest { createNewServiceComponentHost("HDFS", "NAMENODE", "h1", false); sch.setDesiredState(State.INSTALLED); sch.setState(State.INSTALLING); - sch.setStackVersion(new StackId("HDP-1.0.0")); - sch.setDesiredStackVersion(new StackId("HDP-1.1.0")); + sch.setStackVersion(new StackId("HDP-1.2.0")); + sch.setDesiredStackVersion(new StackId("HDP-1.2.0")); Assert.assertEquals(State.INSTALLING, sch.getState()); Assert.assertEquals(State.INSTALLED, sch.getDesiredState()); - Assert.assertEquals("HDP-1.0.0", + Assert.assertEquals("HDP-1.2.0", sch.getStackVersion().getStackId()); - Assert.assertEquals("HDP-1.1.0", + Assert.assertEquals("HDP-1.2.0", sch.getDesiredStackVersion().getStackId()); } @@ -532,8 +532,8 @@ public class ServiceComponentHostTest { createNewServiceComponentHost("HDFS", "NAMENODE", "h1", false); sch.setDesiredState(State.INSTALLED); sch.setState(State.INSTALLING); - sch.setStackVersion(new StackId("HDP-1.0.0")); - sch.setDesiredStackVersion(new StackId("HDP-1.1.0")); + sch.setStackVersion(new StackId("HDP-1.2.0")); + sch.setDesiredStackVersion(new StackId("HDP-1.2.0")); Cluster cluster = clusters.getCluster("C1"); @@ -567,7 +567,7 @@ public class ServiceComponentHostTest { createNewServiceComponentHost("HDFS", "DATANODE", "h1", false); sch.setDesiredState(State.INSTALLED); sch.setState(State.INSTALLING); - sch.setStackVersion(new StackId("HDP-1.0.0")); + sch.setStackVersion(new StackId("HDP-1.2.0")); ServiceComponentHostResponse r = sch.convertToResponse(); Assert.assertEquals("HDFS", r.getServiceName()); @@ -576,7 +576,7 @@ public class ServiceComponentHostTest { Assert.assertEquals("C1", r.getClusterName()); Assert.assertEquals(State.INSTALLED.toString(), r.getDesiredState()); Assert.assertEquals(State.INSTALLING.toString(), r.getLiveState()); - Assert.assertEquals("HDP-1.0.0", r.getStackVersion()); + Assert.assertEquals("HDP-1.2.0", r.getStackVersion()); Assert.assertFalse(r.isStaleConfig()); @@ -715,16 +715,17 @@ public class ServiceComponentHostTest { String stackVersion="HDP-2.0.6"; String clusterName = "c2"; String hostName = "h3"; + StackId stackId = new StackId(stackVersion); - clusters.addCluster(clusterName); + clusters.addCluster(clusterName, stackId); clusters.addHost(hostName); setOsFamily(clusters.getHost(hostName), "redhat", "5.9"); clusters.getHost(hostName).persist(); Cluster c2 = clusters.getCluster(clusterName); - StackId stackId = new StackId(stackVersion); - c2.setDesiredStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - c2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); + + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c2.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); clusters.mapHostToCluster(hostName, clusterName); Cluster cluster = clusters.getCluster(clusterName); @@ -942,15 +943,17 @@ public class ServiceComponentHostTest { String clusterName = "c2"; String hostName = "h3"; - clusters.addCluster(clusterName); + StackId stackId = new StackId(stackVersion); + + clusters.addCluster(clusterName, stackId); clusters.addHost(hostName); setOsFamily(clusters.getHost(hostName), "redhat", "5.9"); clusters.getHost(hostName).persist(); Cluster c2 = clusters.getCluster(clusterName); - StackId stackId = new StackId(stackVersion); - c2.setDesiredStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - c2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); + + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c2.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); clusters.mapHostToCluster(hostName, clusterName); @@ -1076,15 +1079,17 @@ public class ServiceComponentHostTest { String clusterName = "c2"; String hostName = "h3"; - clusters.addCluster(clusterName); + StackId stackId = new StackId(stackVersion); + + clusters.addCluster(clusterName, stackId); clusters.addHost(hostName); setOsFamily(clusters.getHost(hostName), "redhat", "5.9"); clusters.getHost(hostName).persist(); Cluster c2 = clusters.getCluster(clusterName); - StackId stackId = new StackId(stackVersion); - c2.setDesiredStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - c2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); + + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c2.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); clusters.mapHostToCluster(hostName, clusterName); HostEntity hostEntity = hostDAO.findByName(hostName); Assert.assertNotNull(hostEntity); @@ -1119,8 +1124,9 @@ public class ServiceComponentHostTest { String stackVersion="HDP-2.0.6"; String clusterName = "c2"; String hostName = "h3"; + StackId stackId = new StackId(stackVersion); - clusters.addCluster(clusterName); + clusters.addCluster(clusterName, stackId); clusters.addHost(hostName); setOsFamily(clusters.getHost(hostName), "redhat", "5.9"); clusters.getHost(hostName).persist(); @@ -1128,10 +1134,11 @@ public class ServiceComponentHostTest { Assert.assertNotNull(hostEntity); Cluster c2 = clusters.getCluster(clusterName); - StackId stackId = new StackId(stackVersion); + c2.setDesiredStackVersion(stackId); - helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion()); - c2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING); + helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); + c2.createClusterVersion(stackId, stackId.getStackVersion(), "admin", + RepositoryVersionState.UPGRADING); clusters.mapHostToCluster(hostName, clusterName); Cluster cluster = clusters.getCluster(clusterName); http://git-wip-us.apache.org/repos/asf/ambari/blob/746df034/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog150Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog150Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog150Test.java index 37328e8..39dd815 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog150Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog150Test.java @@ -22,11 +22,13 @@ import javax.persistence.EntityManager; import junit.framework.Assert; import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.dao.ClusterDAO; import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO; import org.apache.ambari.server.orm.dao.KeyValueDAO; +import org.apache.ambari.server.orm.dao.StackDAO; import org.apache.ambari.server.orm.entities.ClusterConfigEntity; import org.apache.ambari.server.orm.entities.ClusterConfigMappingEntity; import org.apache.ambari.server.orm.entities.ClusterEntity; @@ -35,7 +37,9 @@ import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity; import org.apache.ambari.server.orm.entities.HostEntity; import org.apache.ambari.server.orm.entities.KeyValueEntity; import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity; +import org.apache.ambari.server.orm.entities.StackEntity; import org.apache.ambari.server.state.HostComponentAdminState; +import org.apache.ambari.server.state.StackId; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -48,15 +52,28 @@ public class UpgradeCatalog150Test { private Injector injector; private final String CLUSTER_NAME = "c1"; private final String HOST_NAME = "h1"; - private final String DESIRED_STACK_VERSION = "{\"stackName\":\"HDP\",\"stackVersion\":\"1.3.4\"}"; + + public static final StackId DESIRED_STACK = new StackId("HDP", "1.3.4"); private UpgradeCatalogHelper upgradeCatalogHelper; + private StackEntity desiredStackEntity; @Before public void setup() throws Exception { injector = Guice.createInjector(new InMemoryDefaultTestModule()); injector.getInstance(GuiceJpaInitializer.class); upgradeCatalogHelper = injector.getInstance(UpgradeCatalogHelper.class); + + // inject AmbariMetaInfo to ensure that stacks get populated in the DB + injector.getInstance(AmbariMetaInfo.class); + + // load the stack entity + StackDAO stackDAO = injector.getInstance(StackDAO.class); + + desiredStackEntity = stackDAO.find(DESIRED_STACK.getStackName(), + DESIRED_STACK.getStackVersion()); + + Assert.assertNotNull(desiredStackEntity); } @After @@ -87,9 +104,9 @@ public class UpgradeCatalog150Test { @Test public void testAddHistoryServer() throws AmbariException { final ClusterEntity clusterEntity = upgradeCatalogHelper.createCluster( - injector, CLUSTER_NAME, DESIRED_STACK_VERSION); + injector, CLUSTER_NAME, desiredStackEntity); final ClusterServiceEntity clusterServiceEntityMR = upgradeCatalogHelper.addService( - injector, clusterEntity, "MAPREDUCE", DESIRED_STACK_VERSION); + injector, clusterEntity, "MAPREDUCE", desiredStackEntity); final HostEntity hostEntity = upgradeCatalogHelper.createHost(injector, clusterEntity, HOST_NAME); @@ -98,7 +115,7 @@ public class UpgradeCatalog150Test { public void run() { upgradeCatalogHelper.addComponent(injector, clusterEntity, clusterServiceEntityMR, hostEntity, "JOBTRACKER", - DESIRED_STACK_VERSION); + desiredStackEntity); } }); @@ -109,7 +126,7 @@ public class UpgradeCatalog150Test { @Test public void testProcessDecommissionedDatanodes() throws Exception { ClusterEntity clusterEntity = upgradeCatalogHelper.createCluster(injector, - CLUSTER_NAME, DESIRED_STACK_VERSION); + CLUSTER_NAME, desiredStackEntity); ClusterServiceEntity clusterServiceEntity = upgradeCatalogHelper.createService( injector, clusterEntity, "HDFS"); HostEntity hostEntity = upgradeCatalogHelper.createHost(injector, @@ -121,6 +138,7 @@ public class UpgradeCatalog150Test { componentDesiredStateEntity.setServiceName(clusterServiceEntity.getServiceName()); componentDesiredStateEntity.setClusterServiceEntity(clusterServiceEntity); componentDesiredStateEntity.setComponentName("DATANODE"); + componentDesiredStateEntity.setDesiredStack(desiredStackEntity); //componentDesiredStateDAO.create(componentDesiredStateEntity); @@ -136,6 +154,7 @@ public class UpgradeCatalog150Test { hostComponentDesiredStateEntity.setServiceName(clusterServiceEntity.getServiceName()); hostComponentDesiredStateEntity.setServiceComponentDesiredStateEntity(componentDesiredStateEntity); hostComponentDesiredStateEntity.setHostEntity(hostEntity); + hostComponentDesiredStateEntity.setDesiredStack(desiredStackEntity); hostComponentDesiredStateDAO.create(hostComponentDesiredStateEntity); @@ -157,6 +176,9 @@ public class UpgradeCatalog150Test { configEntity.setTag("1394147791230"); configEntity.setData("{\"datanodes\":\"" + HOST_NAME + "\"}"); configEntity.setTimestamp(System.currentTimeMillis()); + configEntity.setStack(desiredStackEntity); + configEntity.setStack(clusterEntity.getDesiredStack()); + clusterDAO.createConfig(configEntity); UpgradeCatalog150 upgradeCatalog150 = injector.getInstance(UpgradeCatalog150.class); @@ -179,10 +201,10 @@ public class UpgradeCatalog150Test { ClusterDAO clusterDAO = injector.getInstance(ClusterDAO.class); ClusterEntity clusterEntity = upgradeCatalogHelper.createCluster(injector, - CLUSTER_NAME, DESIRED_STACK_VERSION); + CLUSTER_NAME, desiredStackEntity); ClusterServiceEntity clusterServiceEntityMR = upgradeCatalogHelper.addService( - injector, clusterEntity, "HDFS", DESIRED_STACK_VERSION); + injector, clusterEntity, "HDFS", desiredStackEntity); Long clusterId = clusterEntity.getClusterId(); http://git-wip-us.apache.org/repos/asf/ambari/blob/746df034/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java index 2bf6d96..377c0f7 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java @@ -69,6 +69,7 @@ import javax.persistence.criteria.Root; import javax.persistence.metamodel.SingularAttribute; import org.apache.ambari.server.AmbariException; +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; @@ -86,6 +87,7 @@ import org.apache.ambari.server.orm.dao.PrivilegeDAO; import org.apache.ambari.server.orm.dao.ResourceDAO; import org.apache.ambari.server.orm.dao.ResourceTypeDAO; import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO; +import org.apache.ambari.server.orm.dao.StackDAO; import org.apache.ambari.server.orm.dao.UserDAO; import org.apache.ambari.server.orm.dao.ViewDAO; import org.apache.ambari.server.orm.dao.ViewInstanceDAO; @@ -108,6 +110,7 @@ import org.apache.ambari.server.orm.entities.PrivilegeEntity; import org.apache.ambari.server.orm.entities.ResourceEntity; import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity; import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntityPK; +import org.apache.ambari.server.orm.entities.StackEntity; import org.apache.ambari.server.orm.entities.UserEntity; import org.apache.ambari.server.orm.entities.ViewEntity; import org.apache.ambari.server.orm.entities.ViewInstanceEntity; @@ -141,7 +144,8 @@ public class UpgradeCatalog170Test { private final String CLUSTER_NAME = "c1"; private final String SERVICE_NAME = "HDFS"; private final String HOST_NAME = "h1"; - private final String DESIRED_STACK_VERSION = "{\"stackName\":\"HDP\",\"stackVersion\":\"2.0.6\"}"; + + public static final StackId DESIRED_STACK = new StackId("HDP", "2.0.6"); Provider<EntityManager> entityManagerProvider = createStrictMock(Provider.class); EntityManager entityManager = createNiceMock(EntityManager.class); @@ -480,10 +484,17 @@ public class UpgradeCatalog170Test { ClusterConfigMappingEntity configMappingEntity = createNiceMock(ClusterConfigMappingEntity.class); ClusterStateEntity clusterStateEntity = createNiceMock(ClusterStateEntity.class); + StackEntity stackEntity = createNiceMock(StackEntity.class); + expect(stackEntity.getStackName()).andReturn( + CLUSTER_STATE_STACK_HDP_2_1.getStackName()); + + expect(stackEntity.getStackVersion()).andReturn( + CLUSTER_STATE_STACK_HDP_2_1.getStackVersion()); + expect(clusterEntity.getClusterId()).andReturn(1L).anyTimes(); expect(clusterEntity.getConfigMappingEntities()).andReturn(Collections.singleton(configMappingEntity)).times(2); expect(clusterEntity.getClusterStateEntity()).andReturn(clusterStateEntity).anyTimes(); - expect(clusterStateEntity.getCurrentStackVersion()).andReturn(CLUSTER_STATE_STACK_HDP_2_1); + expect(clusterStateEntity.getCurrentStack()).andReturn(stackEntity); expect(configMappingEntity.getType()).andReturn(YARN_SITE).anyTimes(); expect(configMappingEntity.isSelected()).andReturn(1).anyTimes(); expect(configMappingEntity.getTag()).andReturn("version1"); @@ -518,7 +529,7 @@ public class UpgradeCatalog170Test { replay(jobsView, showJobsKeyValue, user); replay(userEntity1, userEntity2, userPrincipal1, userPrincipal2, userPrivileges1, userPrivileges2); replay(viewRegistry, viewUsePermission, adminPermission); - replay(clusterEntity, configEntity, configMappingEntity, clusterStateEntity); + replay(clusterEntity, configEntity, configMappingEntity, clusterStateEntity, stackEntity); Class<?> c = AbstractUpgradeCatalog.class; Field f = c.getDeclaredField("configuration"); @@ -545,29 +556,47 @@ public class UpgradeCatalog170Test { ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO = injector.getInstance(ServiceComponentDesiredStateDAO.class); HostComponentDesiredStateDAO hostComponentDesiredStateDAO = injector.getInstance(HostComponentDesiredStateDAO.class); HostComponentStateDAO hostComponentStateDAO = injector.getInstance(HostComponentStateDAO.class); + StackDAO stackDAO = injector.getInstance(StackDAO.class); + + // inject AmbariMetaInfo to ensure that stacks get populated in the DB + injector.getInstance(AmbariMetaInfo.class); + + StackEntity desiredStackEntity = stackDAO.find( + DESIRED_STACK.getStackName(), + DESIRED_STACK.getStackVersion()); + + assertNotNull(desiredStackEntity); final ClusterEntity clusterEntity = upgradeCatalogHelper.createCluster( - injector, CLUSTER_NAME, DESIRED_STACK_VERSION); + injector, CLUSTER_NAME, desiredStackEntity); + final ClusterServiceEntity clusterServiceEntityHDFS = upgradeCatalogHelper.addService( - injector, clusterEntity, "HDFS", DESIRED_STACK_VERSION); + injector, clusterEntity, "HDFS", desiredStackEntity); + final ClusterServiceEntity clusterServiceEntityHIVE = upgradeCatalogHelper.addService( - injector, clusterEntity, "HIVE", DESIRED_STACK_VERSION); + injector, clusterEntity, "HIVE", desiredStackEntity); + final ClusterServiceEntity clusterServiceEntityHCATALOG = upgradeCatalogHelper.addService( - injector, clusterEntity, "HCATALOG", DESIRED_STACK_VERSION); + injector, clusterEntity, "HCATALOG", desiredStackEntity); + final ClusterServiceEntity clusterServiceEntityWEBHCAT = upgradeCatalogHelper.addService( - injector, clusterEntity, "WEBHCAT", DESIRED_STACK_VERSION); + injector, clusterEntity, "WEBHCAT", desiredStackEntity); + final HostEntity hostEntity = upgradeCatalogHelper.createHost(injector, clusterEntity, HOST_NAME); + upgradeCatalogHelper.addComponent(injector, clusterEntity, - clusterServiceEntityHDFS, hostEntity, "NAMENODE", DESIRED_STACK_VERSION); + clusterServiceEntityHDFS, hostEntity, "NAMENODE", desiredStackEntity); + upgradeCatalogHelper.addComponent(injector, clusterEntity, - clusterServiceEntityHIVE, hostEntity, "HIVE_SERVER", - DESIRED_STACK_VERSION); + clusterServiceEntityHIVE, hostEntity, "HIVE_SERVER", desiredStackEntity); + upgradeCatalogHelper.addComponent(injector, clusterEntity, - clusterServiceEntityHCATALOG, hostEntity, "HCAT", DESIRED_STACK_VERSION); + clusterServiceEntityHCATALOG, hostEntity, "HCAT", desiredStackEntity); + upgradeCatalogHelper.addComponent(injector, clusterEntity, clusterServiceEntityWEBHCAT, hostEntity, "WEBHCAT_SERVER", - DESIRED_STACK_VERSION); + desiredStackEntity); upgradeCatalog170.moveHcatalogIntoHiveService(); @@ -597,8 +626,19 @@ public class UpgradeCatalog170Test { @Test public void updateClusterProvisionState() throws AmbariException { + StackDAO stackDAO = injector.getInstance(StackDAO.class); + + // inject AmbariMetaInfo to ensure that stacks get populated in the DB + injector.getInstance(AmbariMetaInfo.class); + + StackEntity desiredStackEntity = stackDAO.find( + DESIRED_STACK.getStackName(), DESIRED_STACK.getStackVersion()); + + assertNotNull(desiredStackEntity); + ClusterEntity clusterEntity = upgradeCatalogHelper.createCluster(injector, - CLUSTER_NAME, DESIRED_STACK_VERSION); + CLUSTER_NAME, desiredStackEntity); + UpgradeCatalog170 upgradeCatalog170 = injector.getInstance(UpgradeCatalog170.class); upgradeCatalog170.updateClusterProvisionState(); //action http://git-wip-us.apache.org/repos/asf/ambari/blob/746df034/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java index 96d5134..804aa60 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java @@ -58,6 +58,7 @@ import org.apache.ambari.server.orm.dao.ClusterServiceDAO; import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO; import org.apache.ambari.server.orm.dao.HostComponentStateDAO; import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO; +import org.apache.ambari.server.orm.dao.StackDAO; import org.apache.ambari.server.orm.entities.ClusterEntity; import org.apache.ambari.server.orm.entities.ClusterServiceEntity; import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity; @@ -67,6 +68,7 @@ import org.apache.ambari.server.orm.entities.HostComponentStateEntityPK; import org.apache.ambari.server.orm.entities.HostEntity; import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity; import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntityPK; +import org.apache.ambari.server.orm.entities.StackEntity; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; @@ -99,7 +101,8 @@ import com.google.inject.persist.PersistService; public class UpgradeCatalog200Test { private final String CLUSTER_NAME = "c1"; private final String HOST_NAME = "h1"; - private final String DESIRED_STACK_VERSION = "{\"stackName\":\"HDP\",\"stackVersion\":\"2.0.6\"}"; + + private final StackId DESIRED_STACK = new StackId("HDP", "2.0.6"); private Injector injector; private Provider<EntityManager> entityManagerProvider = createStrictMock(Provider.class); @@ -536,19 +539,27 @@ public class UpgradeCatalog200Test { HostComponentDesiredStateDAO hostComponentDesiredStateDAO = injector.getInstance(HostComponentDesiredStateDAO.class); HostComponentStateDAO hostComponentStateDAO = injector.getInstance(HostComponentStateDAO.class); ClusterServiceDAO clusterServiceDao = injector.getInstance(ClusterServiceDAO.class); + StackDAO stackDAO = injector.getInstance(StackDAO.class); + + // inject AmbariMetaInfo to ensure that stacks get populated in the DB + injector.getInstance(AmbariMetaInfo.class); + + StackEntity stackEntity = stackDAO.find(DESIRED_STACK.getStackName(), + DESIRED_STACK.getStackVersion()); + + assertNotNull(stackEntity); final ClusterEntity clusterEntity = upgradeCatalogHelper.createCluster( - injector, CLUSTER_NAME, DESIRED_STACK_VERSION); + injector, CLUSTER_NAME, stackEntity); final ClusterServiceEntity clusterServiceEntityNagios = upgradeCatalogHelper.addService( - injector, clusterEntity, "NAGIOS", DESIRED_STACK_VERSION); + injector, clusterEntity, "NAGIOS", stackEntity); final HostEntity hostEntity = upgradeCatalogHelper.createHost(injector, clusterEntity, HOST_NAME); upgradeCatalogHelper.addComponent(injector, clusterEntity, - clusterServiceEntityNagios, hostEntity, "NAGIOS_SERVER", - DESIRED_STACK_VERSION); + clusterServiceEntityNagios, hostEntity, "NAGIOS_SERVER", stackEntity); ServiceComponentDesiredStateEntityPK pkNagiosServer = new ServiceComponentDesiredStateEntityPK(); pkNagiosServer.setComponentName("NAGIOS_SERVER");