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");
