Repository: ambari
Updated Branches:
  refs/heads/branch-dev-patch-upgrade 4e12263b9 -> f99d82118


AMBARI-13423. Distributing patch repo bits should target specific hosts (ncole)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: f99d821189c00310435e9ec1847bb86ee73bdb8f
Parents: 4e12263
Author: Nate Cole <[email protected]>
Authored: Wed Oct 14 12:15:54 2015 -0400
Committer: Nate Cole <[email protected]>
Committed: Wed Oct 14 13:20:55 2015 -0400

----------------------------------------------------------------------
 .../api/services/PersistKeyValueService.java    |  16 ++-
 .../ClusterStackVersionResourceProvider.java    | 140 +++++++++++--------
 .../events/ActionFinalReportReceivedEvent.java  |   1 -
 .../server/state/RepositoryVersionState.java    |  34 ++---
 .../server/state/cluster/ClusterImpl.java       |  22 ++-
 ...ClusterStackVersionResourceProviderTest.java |  18 +--
 6 files changed, 129 insertions(+), 102 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f99d8211/ambari-server/src/main/java/org/apache/ambari/server/api/services/PersistKeyValueService.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/PersistKeyValueService.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/PersistKeyValueService.java
index 9b942e5..d867257 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/PersistKeyValueService.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/PersistKeyValueService.java
@@ -23,7 +23,13 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 
-import javax.ws.rs.*;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 import javax.xml.bind.JAXBException;
 
@@ -74,15 +80,17 @@ public class PersistKeyValueService {
     LOG.info("Returning " + stringRet);
     return stringRet;
   }
-  
+
   @GET
   @Produces("text/plain")
   @Path("{keyName}")
   public String getKey( @PathParam("keyName") String keyName) {
-    LOG.info("Looking for keyName " + keyName);
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("Looking for keyName " + keyName);
+    }
     return persistKeyVal.getValue(keyName);
   }
-  
+
   @GET
   @Produces("text/plain")
   public String getAllKeyValues() throws JAXBException, IOException {

http://git-wip-us.apache.org/repos/asf/ambari/blob/f99d8211/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index 4868ca7..a07a3cf 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -17,10 +17,18 @@
  */
 package org.apache.ambari.server.controller.internal;
 
-import com.google.gson.Gson;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.Provider;
+import static 
org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_LOCATION;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.StaticallyInject;
@@ -49,8 +57,6 @@ import 
org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
 import org.apache.ambari.server.controller.spi.SystemException;
 import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.events.ActionFinalReportReceivedEvent;
-import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
 import org.apache.ambari.server.orm.dao.HostVersionDAO;
 import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
@@ -74,17 +80,10 @@ import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.utils.StageUtils;
 import org.apache.commons.lang.StringUtils;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static 
org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_LOCATION;
+import com.google.gson.Gson;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.Provider;
 
 /**
  * Resource provider for cluster stack versions resources.
@@ -182,9 +181,6 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
   private static Configuration configuration;
 
   @Inject
-  private static AmbariEventPublisher ambariEventPublisher;
-
-  @Inject
   private static Injector injector;
 
   /**
@@ -244,8 +240,10 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
       for (HostVersionEntity hostVersionEntity : 
hostVersionDAO.findByClusterStackAndVersion(
           entity.getClusterEntity().getClusterName(), repoVersionStackId,
           entity.getRepositoryVersion().getVersion())) {
+
         
hostStates.get(hostVersionEntity.getState().name()).add(hostVersionEntity.getHostName());
       }
+
       StackId stackId = new StackId(entity.getRepositoryVersion().getStack());
       RepositoryVersionEntity repoVerEntity = 
repositoryVersionDAO.findByStackAndVersion(
           stackId, entity.getRepositoryVersion().getVersion());
@@ -370,6 +368,8 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
       stageId = 1L;
     }
 
+    boolean hasStage = false;
+
     ArrayList<Stage> stages = new ArrayList<Stage>(batchCount);
     for (int batchId = 1; batchId <= batchCount; batchId++) {
       // Create next stage
@@ -397,12 +397,26 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
       // add the stage that was just created
       stages.add(stage);
 
+      // determine services for the repo
+      Set<String> serviceNames = new HashSet<>();
+      for (RepositoryVersionEntity.Component component : 
repoVersionEnt.getComponents()) {
+        serviceNames.add(component.getService());
+      }
+
       // Populate with commands for host
       for (int i = 0; i < maxTasks && hostIterator.hasNext(); i++) {
         Host host = hostIterator.next();
-        if (hostHasVersionableComponents(cluster, ami, stackId, host)) {
-          addHostVersionInstallCommandsToStage(desiredRepoVersion,
-                  cluster, managementController, ami, stackId, perOsRepos, 
stage, host);
+        if (hostHasVersionableComponents(cluster, serviceNames, ami, stackId, 
host)) {
+          ActionExecutionContext actionContext = 
getHostVersionInstallCommand(desiredRepoVersion,
+                  cluster, managementController, ami, stackId, serviceNames, 
perOsRepos, stage, host);
+          if (null != actionContext) {
+            try {
+              
actionExecutionHelper.get().addExecutionCommandsToStage(actionContext, stage);
+              hasStage = true;
+            } catch (AmbariException e) {
+              throw new SystemException("Cannot modify stage", e);
+            }
+          }
         } else {
           directTransitions.add(host);
         }
@@ -410,6 +424,11 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
       }
     }
 
+    if (!hasStage) {
+      throw new SystemException(String.format("There are no hosts that have 
components to install repository %s",
+          desiredRepoVersion));
+    }
+
     req.addStages(stages);
 
     try {
@@ -432,7 +451,7 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
               desiredRepoVersion, clName), e);
         }
       } else {
-        // Move CSV into INSTALLING state (retry installation)
+        // Move cluster version into INSTALLING state (retry installation)
         cluster.transitionClusterVersion(stackId,
             desiredRepoVersion, RepositoryVersionState.INSTALLING);
       }
@@ -440,24 +459,23 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
       // Will also initialize all Host Versions in an INSTALLING state.
       cluster.transitionHostsToInstalling(clusterVersionEntity);
 
-      // Directly transition host versions to INSTALLED for hosts that don't 
have
+      // Directly transition host versions to NOT_REQUIRED for hosts that 
don't have
       // versionable components
       for(Host host : directTransitions) {
-        transitionHostVersionToInstalled(host, cluster,
-            clusterVersionEntity.getRepositoryVersion().getVersion());
+        transitionHostVersionToNotRequired(host, cluster,
+            clusterVersionEntity.getRepositoryVersion());
       }
 
       req.persist();
-
     } catch (AmbariException e) {
       throw new SystemException("Can not persist request", e);
     }
     return getRequestStatus(req.getRequestStatusResponse());
   }
 
-  private void addHostVersionInstallCommandsToStage(final String 
desiredRepoVersion,
+  private ActionExecutionContext getHostVersionInstallCommand(final String 
desiredRepoVersion,
       Cluster cluster, AmbariManagementController managementController, 
AmbariMetaInfo ami,
-      final StackId stackId, Map<String, List<RepositoryEntity>> perOsRepos, 
Stage stage, Host host)
+      final StackId stackId, Set<String> repoServices, Map<String, 
List<RepositoryEntity>> perOsRepos, Stage stage1, Host host)
           throws SystemException {
     // Determine repositories for host
     final List<RepositoryEntity> repoInfo = perOsRepos.get(host.getOsFamily());
@@ -467,12 +485,19 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
               host.getOsFamily(), desiredRepoVersion, stackId));
     }
 
+
     // determine packages for all services that are installed on host
     List<ServiceOsSpecific.Package> packages = new 
ArrayList<ServiceOsSpecific.Package>();
     Set<String> servicesOnHost = new HashSet<String>();
     List<ServiceComponentHost> components = 
cluster.getServiceComponentHosts(host.getHostName());
     for (ServiceComponentHost component : components) {
-      servicesOnHost.add(component.getServiceName());
+      if (repoServices.isEmpty() || 
repoServices.contains(component.getServiceName())) {
+        servicesOnHost.add(component.getServiceName());
+      }
+    }
+
+    if (servicesOnHost.isEmpty()) {
+      return null;
     }
 
     for (String serviceName : servicesOnHost) {
@@ -484,7 +509,7 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
       }
 
       List<ServiceOsSpecific.Package> packagesForService = 
managementController.getPackagesForServiceHost(info,
-              new HashMap<String, String>(), // Contents are ignored
+              Collections.<String, String>emptyMap(), // Contents are ignored
               host.getOsFamily());
       for (ServiceOsSpecific.Package aPackage : packagesForService) {
         if (! aPackage.getSkipUpgrade()) {
@@ -512,11 +537,8 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
             params);
     
actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout(true)));
 
-    try {
-      actionExecutionHelper.get().addExecutionCommandsToStage(actionContext, 
stage);
-    } catch (AmbariException e) {
-      throw new SystemException("Can not modify stage", e);
-    }
+    return actionContext;
+
   }
 
 
@@ -524,10 +546,15 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
    * Returns true if there is at least one versionable component on host for a 
given
    * stack.
    */
-  private boolean hostHasVersionableComponents(Cluster cluster, AmbariMetaInfo 
ami, StackId stackId,
+  private boolean hostHasVersionableComponents(Cluster cluster, Set<String> 
serviceNames, AmbariMetaInfo ami, StackId stackId,
       Host host) throws SystemException {
     List<ServiceComponentHost> components = 
cluster.getServiceComponentHosts(host.getHostName());
+
     for (ServiceComponentHost component : components) {
+      if (!serviceNames.isEmpty() && 
!serviceNames.contains(component.getServiceName())) {
+        continue;
+      }
+
       ComponentInfo componentInfo;
       try {
         componentInfo = ami.getComponent(stackId.getStackName(),
@@ -545,29 +572,24 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
 
 
   /**
-   *  Sends event for host regarding successful repo version installation
-   *  without actually running any commands on host.
-   *  Transitioning host version to INSTALLED state manually would not be the
-   *  best idea since some additional logic may be bound to event listeners.
+   *  Sets host versions states to not-required.
+   *
+   *  Transitioning host version to NOT_REQUIRED state manually is ok since
+   *  other completion handlers set success/fail states correctly during 
heartbeat.
+   *  The number of NOT_REQUIRED components for a cluster will be low.
    */
-  private void transitionHostVersionToInstalled(Host host, Cluster cluster, 
String version) {
-    LOG.info(String.format("Transitioning version %s on host %s directly to 
installed" +
+  private void transitionHostVersionToNotRequired(Host host, Cluster cluster, 
RepositoryVersionEntity repoVersion) {
+    LOG.info(String.format("Transitioning version %s on host %s directly to 
%s" +
                     " without distributing bits to host since it has no 
versionable components.",
-            version, host.getHostName()));
-    CommandReport report = new CommandReport();
-    report.setRole(INSTALL_PACKAGES_ACTION);
-    report.setStdOut("Skipped distributing bits to host since it has " +
-            "no versionable components installed");
-    report.setStdErr("");
-    // We don't set actual repo version in structured output in order
-    // to avoid confusing server with fake data
-    report.setStructuredOut("{}");
-    report.setExitCode(0);
-    report.setStatus(HostRoleStatus.COMPLETED.toString());
-    ActionFinalReportReceivedEvent event = new ActionFinalReportReceivedEvent(
-            cluster.getClusterId(), host.getHostName(),
-            report, true);
-    ambariEventPublisher.publish(event);
+            repoVersion.getVersion(), host.getHostName(), 
RepositoryVersionState.NOT_REQUIRED));
+
+    for (HostVersionEntity hve : host.getAllHostVersions()) {
+      if (hve.getRepositoryVersion().equals(repoVersion)) {
+        hve.setState(RepositoryVersionState.NOT_REQUIRED);
+        hostVersionDAO.merge(hve);
+      }
+    }
+
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f99d8211/ambari-server/src/main/java/org/apache/ambari/server/events/ActionFinalReportReceivedEvent.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/events/ActionFinalReportReceivedEvent.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/events/ActionFinalReportReceivedEvent.java
index de797f3..e96fb89 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/events/ActionFinalReportReceivedEvent.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/events/ActionFinalReportReceivedEvent.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ambari.server.events;
 
-import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.agent.CommandReport;
 
 /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/f99d8211/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
index b0f85b4..344f358 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
@@ -80,51 +80,41 @@ package org.apache.ambari.server.state;
  */
 public enum RepositoryVersionState {
   /**
+   * Repository version is not required
+   */
+  NOT_REQUIRED,
+  /**
    * Repository version that is in the process of being installed.
    */
-  INSTALLING(2),
+  INSTALLING,
   /**
    * Repository version that is installed and supported but not the active 
version.
    */
-  INSTALLED(3),
+  INSTALLED,
   /**
    * Repository version that during the install process failed to install some 
components.
    */
-  INSTALL_FAILED(0),
+  INSTALL_FAILED,
   /**
    * Repository version that is installed for some components but not for all.
    */
-  OUT_OF_SYNC(1),
+  OUT_OF_SYNC,
   /**
    * Repository version that is installed and supported and is the active 
version.
    */
-  CURRENT(7),
+  CURRENT,
   /**
    * Repository version that is in the process of upgrading to become the 
CURRENT active version,
    * and the previous active version transitions to an INSTALLED state.
    */
-  UPGRADING(5),
+  UPGRADING,
   /**
    * Repository version that during the upgrade process failed to become the 
active version and must be remedied.
    */
-  UPGRADE_FAILED(4),
+  UPGRADE_FAILED,
   /**
    * Repository version that finished upgrading and should be finalized to 
become CURRENT.
    */
-  UPGRADED(6);
-
-  /**
-   * Is used to determine cluster version state.
-   * @see 
org.apache.ambari.server.state.Cluster#recalculateClusterVersionState(String)
-   */
-  private int priority;
-
-  RepositoryVersionState(int priority) {
-    this.priority = priority;
-  }
-
-  public int getPriority() {
-    return priority;
-  }
+  UPGRADED
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f99d8211/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
index e3bb320..8124326 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
@@ -1206,9 +1206,9 @@ public class ClusterImpl implements Cluster {
    * UPGRADE_FAILED: at least one host in UPGRADE_FAILED
    * UPGRADED: all hosts are UPGRADED
    * UPGRADING: at least one host is UPGRADING, and the rest in 
UPGRADING|INSTALLED
-   * INSTALLED: all hosts in INSTALLED
+   * INSTALLED: all hosts in INSTALLED -OR- INSTALLED and NOT_REQUIRED
    * INSTALL_FAILED: at least one host in INSTALL_FAILED
-   * INSTALLING: all hosts in INSTALLING. Notice that if one host is CURRENT 
and another is INSTALLING, then the
+   * INSTALLING: all hosts in INSTALLING -or- INSTALLING and NOT_REQUIRED. 
Notice that if one host is CURRENT and another is INSTALLING, then the
    * effective version will be OUT_OF_SYNC.
    * OUT_OF_SYNC: otherwise
    * @param stateToHosts Map from state to the collection of hosts with that 
state
@@ -1243,12 +1243,24 @@ public class ClusterImpl implements Cluster {
       return RepositoryVersionState.INSTALL_FAILED;
     }
 
-    final int totalINSTALLING = 
stateToHosts.containsKey(RepositoryVersionState.INSTALLING) ? 
stateToHosts.get(RepositoryVersionState.INSTALLING).size() : 0;
-    final int totalINSTALLED = 
stateToHosts.containsKey(RepositoryVersionState.INSTALLED) ? 
stateToHosts.get(RepositoryVersionState.INSTALLED).size() : 0;
-    if (totalINSTALLING + totalINSTALLED == totalHosts) {
+    int totalInstalling = 
stateToHosts.containsKey(RepositoryVersionState.INSTALLING) ? 
stateToHosts.get(RepositoryVersionState.INSTALLING).size() : 0;
+    int totalInstalled = 
stateToHosts.containsKey(RepositoryVersionState.INSTALLED) ? 
stateToHosts.get(RepositoryVersionState.INSTALLED).size() : 0;
+    int totalNotRequired = 
stateToHosts.containsKey(RepositoryVersionState.NOT_REQUIRED) ? 
stateToHosts.get(RepositoryVersionState.NOT_REQUIRED).size() : 0;
+
+    if (totalInstalling + totalInstalled == totalHosts) {
       return RepositoryVersionState.INSTALLING;
     }
 
+    if (totalNotRequired > 0) {
+      if (totalInstalling + totalInstalled + totalNotRequired == totalHosts) {
+        return RepositoryVersionState.INSTALLING;
+      }
+
+      if (totalInstalled + totalNotRequired == totalHosts) {
+        return RepositoryVersionState.INSTALLED;
+      }
+    }
+
     // Also returns when have a mix of CURRENT and 
INSTALLING|INSTALLED|UPGRADING|UPGRADED
     LOG.warn("have a mix of CURRENT and 
INSTALLING|INSTALLED|UPGRADING|UPGRADED host versions, " +
             "returning OUT_OF_SYNC as cluster version. Host version states: " 
+ stateToHosts.toString());

http://git-wip-us.apache.org/repos/asf/ambari/blob/f99d8211/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
index 1819ef9..d3fa977 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
@@ -50,7 +50,6 @@ import org.apache.ambari.server.agent.CommandReport;
 import org.apache.ambari.server.agent.ExecutionCommand;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
-import org.apache.ambari.server.controller.AmbariActionExecutionHelper;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.RequestStatusResponse;
 import org.apache.ambari.server.controller.ResourceProviderFactory;
@@ -61,14 +60,13 @@ import 
org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
 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.ClusterVersionDAO;
-import org.apache.ambari.server.orm.dao.HostDAO;
 import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
 import org.apache.ambari.server.orm.dao.ResourceTypeDAO;
 import org.apache.ambari.server.orm.dao.StackDAO;
 import org.apache.ambari.server.orm.entities.ClusterEntity;
 import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
+import org.apache.ambari.server.orm.entities.HostVersionEntity;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.orm.entities.ResourceEntity;
 import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
@@ -111,13 +109,10 @@ public class ClusterStackVersionResourceProviderTest {
   private RepositoryVersionDAO repositoryVersionDAOMock;
   private ResourceTypeDAO resourceTypeDAO;
   private StackDAO stackDAO;
-  private ClusterDAO clusterDAO;
   private ClusterVersionDAO clusterVersionDAO;
-  private HostDAO hostDAO;
   private ConfigHelper configHelper;
   private Configuration configuration;
   private StageFactory stageFactory;
-  private AmbariActionExecutionHelper actionExecutionHelper;
 
   private String operatingSystemsJson = "[\n" +
           "   {\n" +
@@ -157,8 +152,6 @@ public class ClusterStackVersionResourceProviderTest {
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
     resourceTypeDAO = injector.getInstance(ResourceTypeDAO.class);
     stackDAO = injector.getInstance(StackDAO.class);
-    clusterDAO = injector.getInstance(ClusterDAO.class);
-    hostDAO = injector.getInstance(HostDAO.class);
   }
 
   @After
@@ -175,6 +168,10 @@ public class ClusterStackVersionResourceProviderTest {
     Cluster cluster = createNiceMock(Cluster.class);
     StackId stackId = new StackId("HDP", "2.0.1");
 
+    RepositoryVersionEntity repoVersion = new RepositoryVersionEntity();
+    repoVersion.setId(1l);
+    repoVersion.setOperatingSystems(operatingSystemsJson);
+
     Map<String, Host> hostsForCluster = new HashMap<String, Host>();
     int hostCount = 10;
     for (int i = 0; i < hostCount; i++) {
@@ -184,6 +181,8 @@ public class ClusterStackVersionResourceProviderTest {
       expect(host.getOsFamily()).andReturn("redhat6").anyTimes();
       expect(host.getMaintenanceState(EasyMock.anyLong())).andReturn(
           MaintenanceState.OFF).anyTimes();
+      expect(host.getAllHostVersions()).andReturn(
+          Collections.<HostVersionEntity>emptyList()).anyTimes();
 
       replay(host);
       hostsForCluster.put(hostname, host);
@@ -209,9 +208,6 @@ public class ClusterStackVersionResourceProviderTest {
       add(schAMS);
     }};
 
-    RepositoryVersionEntity repoVersion = new RepositoryVersionEntity();
-    repoVersion.setId(1l);
-    repoVersion.setOperatingSystems(operatingSystemsJson);
 
     ServiceOsSpecific.Package hdfsPackage = new ServiceOsSpecific.Package();
     hdfsPackage.setName("hdfs");

Reply via email to