You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2017/05/31 20:12:42 UTC

[11/50] [abbrv] ambari git commit: AMBARI-20958 - Host Version on Finalization Must Be Scoped Correctly Based on Upgrade Type (jonathanhurley)

http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 576f308..e2d9cc6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -973,7 +973,7 @@ public class UpgradeResourceProviderTest {
     requestProps.clear();
     // Now perform a downgrade
     requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
-    requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2");
+    requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.0");
     requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_direction");
     requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
     requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.2.2.3");
@@ -992,8 +992,9 @@ public class UpgradeResourceProviderTest {
       }
     }
     assertNotNull(upgrade);
-    assertEquals("Downgrade groups reduced from 3 to 2", 2, upgrade.getUpgradeGroups().size());
-    group = upgrade.getUpgradeGroups().get(1);
+    List<UpgradeGroupEntity> groups = upgrade.getUpgradeGroups();
+    assertEquals("Downgrade groups reduced from 3 to 2", 1, groups.size());
+    group = upgrade.getUpgradeGroups().get(0);
     assertEquals("Execution items increased from 1 to 2", 2, group.getItems().size());
   }
 
@@ -1060,7 +1061,7 @@ public class UpgradeResourceProviderTest {
         assertEquals(oldStack, sc.getDesiredStackId());
 
         for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
-          assertEquals(oldStack.getStackVersion(), sch.getVersion());
+          assertEquals(repoVersionEntity2110.getVersion(), sch.getVersion());
         }
       }
     }
@@ -1100,14 +1101,10 @@ public class UpgradeResourceProviderTest {
     assertFalse(oldStack.equals(newStack));
 
     for (Service s : cluster.getServices().values()) {
-      assertEquals(newStack, s.getDesiredStackId());
+      assertEquals(repoVersionEntity2200, s.getDesiredRepositoryVersion());
 
       for (ServiceComponent sc : s.getServiceComponents().values()) {
-        assertEquals(newStack, sc.getDesiredStackId());
-
-        for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
-          assertEquals(newStack.getStackVersion(), sch.getVersion());
-        }
+        assertEquals(repoVersionEntity2200, sc.getDesiredRepositoryVersion());
       }
     }
   }
@@ -1568,7 +1565,7 @@ public class UpgradeResourceProviderTest {
 
     component = service.getServiceComponent("DRPC_SERVER");
     assertNotNull(component);
-    assertEquals("UNKNOWN", component.getDesiredVersion());
+    assertEquals(repoVersionEntity2110, component.getDesiredRepositoryVersion());
 
     hostComponent = component.getServiceComponentHost("h1");
     assertEquals(UpgradeState.NONE, hostComponent.getUpgradeState());

http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
index a74a1d2..e2e68fc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ambari.server.events.listeners.upgrade;
 
-import static org.easymock.EasyMock.anyString;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
 
@@ -28,6 +27,7 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.events.HostComponentVersionAdvertisedEvent;
 import org.apache.ambari.server.events.publishers.VersionEventPublisher;
 import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.entities.HostVersionEntity;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.orm.entities.UpgradeEntity;
 import org.apache.ambari.server.state.Cluster;
@@ -63,6 +63,7 @@ public class StackVersionListenerTest extends EasyMockSupport {
   private static final String UNKNOWN_VERSION = "UNKNOWN";
   private static final String VALID_PREVIOUS_VERSION = "2.2.0.0";
   private static final RepositoryVersionEntity DUMMY_REPOSITORY_VERSION_ENTITY = new RepositoryVersionEntity();
+  private static final HostVersionEntity DUMMY_HOST_VERSION_ENTITY = new HostVersionEntity();
   private static final UpgradeEntity DUMMY_UPGRADE_ENTITY = new UpgradeEntity();
   public static final String STACK_NAME = "HDP-2.4.0.0";
   public static final String STACK_VERSION = "2.4.0.0";
@@ -72,7 +73,6 @@ public class StackVersionListenerTest extends EasyMockSupport {
   private Service service;
   private ServiceComponent serviceComponent;
   private VersionEventPublisher publisher = new VersionEventPublisher();
-  private AmbariMetaInfo ambariMetaInfo;
   private ComponentInfo componentInfo;
   private StackId stackId;
 
@@ -91,14 +91,6 @@ public class StackVersionListenerTest extends EasyMockSupport {
     componentInfo = createNiceMock(ComponentInfo.class);
     stackId = createNiceMock(StackId.class);
 
-    ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
-
-    expect(ambariMetaInfoProvider.get()).andReturn(ambariMetaInfo);
-    expect(ambariMetaInfo.getComponent(anyString(),anyString(),anyString(),anyString())).andReturn(componentInfo);
-
-    expect(cluster.getDesiredStackVersion()).andReturn(stackId).atLeastOnce();
-    expect(stackId.getStackName()).andReturn(STACK_NAME);
-    expect(stackId.getStackVersion()).andReturn(STACK_VERSION);
     expect(cluster.getClusterId()).andReturn(CLUSTER_ID);
 
     expect(cluster.getService(SERVICE_NAME)).andReturn(service).atLeastOnce();
@@ -139,7 +131,7 @@ public class StackVersionListenerTest extends EasyMockSupport {
     expect(serviceComponent.isVersionAdvertised()).andReturn(Boolean.TRUE);
     sch.setVersion(VALID_NEW_VERSION);
     expectLastCall().once();
-    expect(sch.recalculateHostVersionState()).andReturn(DUMMY_REPOSITORY_VERSION_ENTITY).once();
+    expect(sch.recalculateHostVersionState()).andReturn(DUMMY_HOST_VERSION_ENTITY).once();
 
     replayAll();
 
@@ -152,7 +144,7 @@ public class StackVersionListenerTest extends EasyMockSupport {
     expect(serviceComponent.isVersionAdvertised()).andReturn(Boolean.TRUE);
     sch.setVersion(VALID_NEW_VERSION);
     expectLastCall().once();
-    expect(sch.recalculateHostVersionState()).andReturn(DUMMY_REPOSITORY_VERSION_ENTITY).once();
+    expect(sch.recalculateHostVersionState()).andReturn(DUMMY_HOST_VERSION_ENTITY).once();
 
     replayAll();
 
@@ -182,7 +174,7 @@ public class StackVersionListenerTest extends EasyMockSupport {
     expectLastCall().once();
     sch.setVersion(VALID_NEW_VERSION);
     expectLastCall().once();
-    expect(sch.recalculateHostVersionState()).andReturn(DUMMY_REPOSITORY_VERSION_ENTITY).once();
+    expect(sch.recalculateHostVersionState()).andReturn(DUMMY_HOST_VERSION_ENTITY).once();
 
     replayAll();
 
@@ -208,6 +200,8 @@ public class StackVersionListenerTest extends EasyMockSupport {
 
   @Test
   public void testSetUpgradeStateToCompleteWhenUpgradeIsInProgressAndNewVersionIsEqualToComponentDesiredVersion() {
+    expect(cluster.getUpgradeInProgress()).andReturn(DUMMY_UPGRADE_ENTITY);
+
     expect(sch.getVersion()).andReturn(VALID_PREVIOUS_VERSION);
     expect(sch.getUpgradeState()).andReturn(UpgradeState.IN_PROGRESS);
     expect(serviceComponent.isVersionAdvertised()).andReturn(Boolean.TRUE);
@@ -221,6 +215,20 @@ public class StackVersionListenerTest extends EasyMockSupport {
   }
 
   @Test
+  public void testSetUpgradeStateToNoneWhenNoUpgradeAndNewVersionIsEqualToComponentDesiredVersion() {
+    expect(sch.getVersion()).andReturn(VALID_PREVIOUS_VERSION);
+    expect(sch.getUpgradeState()).andReturn(UpgradeState.IN_PROGRESS);
+    expect(serviceComponent.isVersionAdvertised()).andReturn(Boolean.TRUE);
+    sch.setUpgradeState(UpgradeState.NONE);
+    expectLastCall().once();
+
+    expect(serviceComponent.getDesiredVersion()).andStubReturn(VALID_NEW_VERSION);
+    replayAll();
+
+    sendEventAndVerify(VALID_NEW_VERSION);
+  }
+
+  @Test
   public void testSetUpgradeStateToVersionMismatchWhenUpgradeIsInProgressAndNewVersionIsNotEqualToComponentDesiredVersion() {
     expect(sch.getVersion()).andReturn(VALID_PREVIOUS_VERSION);
     expect(sch.getUpgradeState()).andReturn(UpgradeState.IN_PROGRESS);
@@ -228,6 +236,9 @@ public class StackVersionListenerTest extends EasyMockSupport {
     sch.setUpgradeState(UpgradeState.VERSION_MISMATCH);
     expectLastCall().once();
 
+    sch.setVersion(VALID_NEW_VERSION);
+    expectLastCall().once();
+
     expect(serviceComponent.getDesiredVersion()).andStubReturn(VALID_PREVIOUS_VERSION);
     replayAll();
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/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 6f06f43..38c9d1c 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
@@ -26,10 +26,8 @@ import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.lang.reflect.Field;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -110,7 +108,6 @@ import org.apache.commons.lang.StringUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.ArgumentCaptor;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -443,12 +440,14 @@ public class ClusterTest {
    * @param hostAttributes Host Attributes
    * @throws Exception
    */
-  private void addHost(String hostName, Map<String, String> hostAttributes) throws Exception {
+  private Host addHost(String hostName, Map<String, String> hostAttributes) throws Exception {
     clusters.addHost(hostName);
     Host host = clusters.getHost(hostName);
     host.setIPv4("ipv4");
     host.setIPv6("ipv6");
     host.setHostAttributes(hostAttributes);
+
+    return host;
   }
 
   /**
@@ -1640,14 +1639,16 @@ public class ClusterTest {
   }
 
   /**
-   * Comprehensive test for transitionHostVersion and recalculateClusterVersion.
-   * It creates a cluster with 3 hosts and 3 services, one of which does not advertise a version.
-   * It then verifies that all 3 hosts have a version of CURRENT, and so does the cluster.
-   * It then adds one more host with a component, so its HostVersion will initialize in CURRENT.
-   * Next, it distributes a repo so that it is INSTALLED on the 4 hosts.
-   * It then adds one more host, whose HostVersion will be OUT_OF_SYNC for the new repo.
-   * After redistributing bits again, it simulates an RU.
-   * Finally, some of the hosts will end up with a HostVersion in UPGRADED, and others still in INSTALLED.
+   * Comprehensive test for host versions. It creates a cluster with 3 hosts and
+   * 3 services, one of which does not advertise a version. It then verifies
+   * that all 3 hosts have a version of CURRENT, and so does the cluster. It
+   * then adds one more host with a component, so its HostVersion will
+   * initialize in CURRENT. Next, it distributes a repo so that it is INSTALLED
+   * on the 4 hosts. It then adds one more host, whose HostVersion will be
+   * OUT_OF_SYNC for the new repo. After redistributing bits again, it simulates
+   * an RU. Finally, some of the hosts will end up with a HostVersion in
+   * UPGRADED, and others still in INSTALLED.
+   *
    * @throws Exception
    */
   @Test
@@ -1736,13 +1737,21 @@ public class ClusterTest {
 
     // Add one more Host, with only Ganglia on it. It should have a HostVersion in NOT_REQUIRED for v2,
     // as Ganglia isn't versionable
-    addHost("h-5", hostAttributes);
+    Host host5 = addHost("h-5", hostAttributes);
     clusters.mapAndPublishHostsToCluster(Collections.singleton("h-5"), clusterName);
+
+    // verify that the new host version was added for the existing repo
+    HostVersionEntity h5Version1 = hostVersionDAO.findHostVersionByHostAndRepository(host5.getHostEntity(), rv1);
+    HostVersionEntity h5Version2 = hostVersionDAO.findHostVersionByHostAndRepository(host5.getHostEntity(), rv2);
+
+    Assert.assertEquals(RepositoryVersionState.NOT_REQUIRED, h5Version1.getState());
+    Assert.assertEquals(RepositoryVersionState.NOT_REQUIRED, h5Version2.getState());
+
     ServiceComponentHost schHost5Serv3CompB = serviceComponentHostFactory.createNew(sc3CompB, "h-5");
     sc3CompB.addServiceComponentHost(schHost5Serv3CompB);
 
     // 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, v2, "h-5");
+    h5Version2 = hostVersionDAO.findByClusterStackVersionAndHost(clusterName, stackId, v2, "h-5");
     Assert.assertNotNull(h5Version2);
     Assert.assertEquals(RepositoryVersionState.NOT_REQUIRED, h5Version2.getState());
 
@@ -1897,84 +1906,13 @@ public class ClusterTest {
     List<HostVersionEntity> entities = hostVersionDAO.findByClusterAndHost(clusterName, "h-3");
     assertTrue("Expected no host versions", null == entities || 0 == entities.size());
 
-    c1.transitionHostVersionState(hostEntity, repositoryVersion, c1.getDesiredStackVersion());
+    List<ServiceComponentHost> componentsOnHost3 = c1.getServiceComponentHosts("h-3");
+    componentsOnHost3.iterator().next().recalculateHostVersionState();
 
     entities = hostVersionDAO.findByClusterAndHost(clusterName, "h-3");
-
     assertEquals(1, entities.size());
   }
 
-  @Test
-  public void testTransitionHostVersionState_OutOfSync_BlankCurrent() throws Exception {
-    /**
-     * Checks case when there are 2 cluster stack versions present (CURRENT and OUT_OF_SYNC),
-     * 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, stackId);
-    final Cluster c1 = clusters.getCluster(clusterName);
-    Assert.assertEquals(clusterName, c1.getClusterName());
-
-    clusters.addHost("h-1");
-    clusters.addHost("h-2");
-    String h3 = "h-3";
-    clusters.addHost(h3);
-
-    for (String hostName : new String[] { "h-1", "h-2", h3}) {
-      Host h = clusters.getHost(hostName);
-      h.setIPv4("ipv4");
-      h.setIPv6("ipv6");
-
-      Map<String, String> hostAttributes = new HashMap<>();
-      hostAttributes.put("os_family", "redhat");
-      hostAttributes.put("os_release_version", "5.9");
-      h.setHostAttributes(hostAttributes);
-    }
-
-    String v1 = "2.0.5-1";
-    String v2 = "2.0.5-2";
-    c1.setDesiredStackVersion(stackId);
-    RepositoryVersionEntity rve1 = helper.getOrCreateRepositoryVersion(stackId,
-        v1);
-    RepositoryVersionEntity rve2 = helper.getOrCreateRepositoryVersion(stackId,
-        v2);
-
-    c1.setCurrentStackVersion(stackId);
-
-    clusters.mapHostToCluster("h-1", clusterName);
-    clusters.mapHostToCluster("h-2", clusterName);
-
-    RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
-
-    Service service = c1.addService("ZOOKEEPER", repositoryVersion);
-    ServiceComponent sc = service.addServiceComponent("ZOOKEEPER_SERVER");
-    sc.addServiceComponentHost("h-1");
-    sc.addServiceComponentHost("h-2");
-
-    clusters.mapHostToCluster(h3, clusterName);
-
-    // This method is usually called when we receive heartbeat from new host
-    HostEntity hostEntity3 = mock(HostEntity.class);
-    when(hostEntity3.getHostName()).thenReturn(h3);
-
-    // HACK: to workaround issue with NullPointerException at
-    // org.eclipse.persistence.internal.sessions.MergeManager.registerObjectForMergeCloneIntoWorkingCopy(MergeManager.java:1037)
-    // during hostVersionDAO.merge()
-    HostVersionDAO hostVersionDAOMock = mock(HostVersionDAO.class);
-    Field field = ClusterImpl.class.getDeclaredField("hostVersionDAO");
-    field.setAccessible(true);
-    field.set(c1, hostVersionDAOMock);
-
-    ArgumentCaptor<HostVersionEntity> hostVersionCaptor = ArgumentCaptor.forClass(HostVersionEntity.class);
-
-    c1.transitionHostVersionState(hostEntity3, rve1, stackId);
-
-    verify(hostVersionDAOMock).merge(hostVersionCaptor.capture());
-    assertEquals(hostVersionCaptor.getValue().getState(), RepositoryVersionState.CURRENT);
-  }
-
   /**
    * Tests that an existing configuration can be successfully updated without
    * creating a new version.