You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by st...@apache.org on 2016/03/31 16:39:50 UTC

ambari git commit: AMBARI-15643. During cluster creation using Blueprints the cluster creation request has incorrect COMPLETED state instead of PENDING. (stoader)

Repository: ambari
Updated Branches:
  refs/heads/branch-2.2 da7f5aaca -> 426894805


AMBARI-15643. During cluster creation using Blueprints the cluster creation request has incorrect COMPLETED state instead of PENDING. (stoader)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/42689480
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/42689480
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/42689480

Branch: refs/heads/branch-2.2
Commit: 4268948058773a2800e37f25d3f87d40f053618b
Parents: da7f5aa
Author: Toader, Sebastian <st...@hortonworks.com>
Authored: Thu Mar 31 16:39:29 2016 +0200
Committer: Toader, Sebastian <st...@hortonworks.com>
Committed: Thu Mar 31 16:39:29 2016 +0200

----------------------------------------------------------------------
 .../internal/RequestResourceProvider.java       |   2 +-
 .../internal/RequestResourceProviderTest.java   | 133 +++++++++++++++++--
 2 files changed, 124 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/42689480/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
index d00ce58..dab67b9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
@@ -509,7 +509,7 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
     LogicalRequest logicalRequest = topologyManager.getRequest(entity.getRequestId());
 
     CalculatedStatus status = CalculatedStatus.statusFromStageSummary(summary, summary.keySet());
-    if (summary.isEmpty() && (logicalRequest == null || logicalRequest.hasCompleted())) {
+    if (summary.isEmpty() && logicalRequest == null) {
 
       // summary might be empty due to delete host have cleared all HostRoleCommands
       // or due to hosts haven't registered yet with the cluster when the cluster is provisioned

http://git-wip-us.apache.org/repos/asf/ambari/blob/42689480/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
index 4a76a1c..3d73772 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
@@ -18,16 +18,6 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
-
 import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Collection;
@@ -48,6 +38,7 @@ import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.api.services.BaseRequest;
 import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.AmbariServer;
 import org.apache.ambari.server.controller.ExecuteActionRequest;
 import org.apache.ambari.server.controller.RequestStatusResponse;
 import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
@@ -63,17 +54,39 @@ import org.apache.ambari.server.orm.dao.RequestDAO;
 import org.apache.ambari.server.orm.entities.RequestEntity;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.topology.ClusterTopology;
+import org.apache.ambari.server.topology.HostGroupInfo;
 import org.apache.ambari.server.topology.LogicalRequest;
 import org.apache.ambari.server.topology.TopologyManager;
+import org.apache.ambari.server.topology.TopologyRequest;
 import org.easymock.Capture;
 import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.easymock.PowerMock;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.capture;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
 
 /**
  * RequestResourceProvider tests.
  */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(AmbariServer.class)
 public class RequestResourceProviderTest {
 
   private RequestDAO requestDAO;
@@ -87,6 +100,8 @@ public class RequestResourceProviderTest {
     hrcDAO = createNiceMock(HostRoleCommandDAO.class);
     topologyManager = createNiceMock(TopologyManager.class);
 
+    reset(topologyManager);
+
     //todo: add assertions for topology manager interactions
     expect(topologyManager.getStageSummaries(EasyMock.<Long>anyObject())).andReturn(
         Collections.<Long, HostRoleCommandStatusSummaryDTO>emptyMap()).anyTimes();
@@ -1262,4 +1277,102 @@ public class RequestResourceProviderTest {
     // verify
     verify(managementController, actionManager, clusters, requestMock, requestDAO, hrcDAO);
   }
+
+  @Test
+  public void testGetLogicalRequestStatusWithNoTasks() throws Exception {
+    // Given
+    Resource.Type type = Resource.Type.Request;
+
+    AmbariManagementController managementController = createMock(AmbariManagementController.class);
+    ActionManager actionManager = createNiceMock(ActionManager.class);
+
+    Clusters clusters = createNiceMock(Clusters.class);
+
+    RequestEntity requestMock = createNiceMock(RequestEntity.class);
+
+    expect(requestMock.getRequestContext()).andReturn("this is a context").anyTimes();
+    expect(requestMock.getRequestId()).andReturn(100L).anyTimes();
+    Capture<Collection<Long>> requestIdsCapture = Capture.newInstance();
+
+
+    ClusterTopology topology = createNiceMock(ClusterTopology.class);
+    expect(topology.getClusterId()).andReturn(2L).anyTimes();
+
+    Long clusterId = 2L;
+    String clusterName = "cluster1";
+    Cluster cluster = createNiceMock(Cluster.class);
+    expect(cluster.getClusterId()).andReturn(clusterId).anyTimes();
+    expect(cluster.getClusterName()).andReturn(clusterName).anyTimes();
+
+    expect(managementController.getActionManager()).andReturn(actionManager).anyTimes();
+    expect(managementController.getClusters()).andReturn(clusters).anyTimes();
+    expect(clusters.getCluster(eq(clusterName))).andReturn(cluster).anyTimes();
+    expect(clusters.getClusterById(clusterId)).andReturn(cluster).anyTimes();
+    expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Lists.newArrayList(requestMock));
+    expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn(
+      Collections.<Long, HostRoleCommandStatusSummaryDTO>emptyMap()).anyTimes();
+
+    TopologyRequest topologyRequest = createNiceMock(TopologyRequest.class);
+    expect(topologyRequest.getHostGroupInfo()).andReturn(Collections.<String, HostGroupInfo>emptyMap()).anyTimes();
+    expect(topologyRequest.getBlueprint()).andReturn(null).anyTimes();
+
+
+
+    PowerMock.mockStatic(AmbariServer.class);
+    expect(AmbariServer.getController()).andReturn(managementController).anyTimes();
+
+    PowerMock.replayAll(
+      topologyRequest,
+      topology,
+      managementController,
+      clusters);
+
+
+    LogicalRequest logicalRequest = new LogicalRequest(200L, topologyRequest, topology);
+
+    reset(topologyManager);
+
+    expect(topologyManager.getRequest(100L)).andReturn(logicalRequest).anyTimes();
+    expect(topologyManager.getRequests(eq(Collections.singletonList(100L)))).andReturn(
+      Collections.singletonList(logicalRequest)).anyTimes();
+    expect(topologyManager.getStageSummaries(EasyMock.<Long>anyObject())).andReturn(
+      Collections.<Long, HostRoleCommandStatusSummaryDTO>emptyMap()).anyTimes();
+
+    replay(actionManager, requestMock, requestDAO, hrcDAO, topologyManager);
+
+    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
+      type,
+      PropertyHelper.getPropertyIds(type),
+      PropertyHelper.getKeyPropertyIds(type),
+      managementController);
+
+    Set<String> propertyIds = ImmutableSet.of(
+      RequestResourceProvider.REQUEST_ID_PROPERTY_ID,
+      RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID,
+      RequestResourceProvider.REQUEST_PROGRESS_PERCENT_ID
+    );
+
+    Predicate predicate = new PredicateBuilder().
+      property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100").
+      toPredicate();
+
+    Request request = PropertyHelper.getReadRequest(propertyIds);
+
+    // When
+    Set<Resource> resources = provider.getResources(request, predicate);
+
+    // Then
+
+
+    // verify
+    PowerMock.verifyAll();
+    verify(actionManager, requestMock, requestDAO, hrcDAO, topologyManager);
+
+    Assert.assertEquals(1, resources.size());
+    for (Resource resource : resources) {
+      Assert.assertEquals(100L, (long)(Long) resource.getPropertyValue(RequestResourceProvider.REQUEST_ID_PROPERTY_ID));
+      Assert.assertEquals("PENDING", resource.getPropertyValue(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID));
+      Assert.assertEquals(0.0, resource.getPropertyValue(RequestResourceProvider.REQUEST_PROGRESS_PERCENT_ID));
+    }
+  }
 }