Repository: ambari Updated Branches: refs/heads/trunk 3b6bea5c9 -> c8d6c9f54
AMBARI-15564. Use repository version number to indicate repository to use when installing (ncole) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c8d6c9f5 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c8d6c9f5 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c8d6c9f5 Branch: refs/heads/trunk Commit: c8d6c9f5467a02a611fd9fb192fa9a08cb43938b Parents: 3b6bea5 Author: Nate Cole <nc...@hortonworks.com> Authored: Thu Mar 24 14:08:58 2016 -0400 Committer: Nate Cole <nc...@hortonworks.com> Committed: Mon Mar 28 10:26:09 2016 -0400 ---------------------------------------------------------------------- .../AmbariCustomCommandExecutionHelper.java | 18 ++- .../AmbariManagementControllerImpl.java | 26 +++ .../server/controller/ClusterRequest.java | 21 ++- .../internal/ClusterResourceProvider.java | 33 ++-- .../internal/ProvisionClusterRequest.java | 38 +++-- .../predicate/ComparisonPredicate.java | 7 +- .../org/apache/ambari/server/state/Cluster.java | 3 +- .../server/state/RepositoryVersionState.java | 8 + .../server/state/cluster/ClusterImpl.java | 10 +- .../ambari/server/topology/AmbariContext.java | 38 +++-- .../ambari/server/topology/TopologyManager.java | 43 +++-- .../AmbariManagementControllerImplTest.java | 158 +++++++++++++------ .../internal/ClusterResourceProviderTest.java | 131 ++++++++++++--- .../server/topology/AmbariContextTest.java | 49 +++--- .../ClusterInstallWithoutStartTest.java | 54 ++++--- .../server/topology/TopologyManagerTest.java | 48 +++--- 16 files changed, 469 insertions(+), 216 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java index 32da5e8..ee7fe7b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java @@ -1044,9 +1044,25 @@ public class AmbariCustomCommandExecutionHelper { * @param cluster the cluster to load the current version * @param jsonArray the array containing stack repo data */ - private void updateBaseUrls(Cluster cluster, JsonArray jsonArray) { + private void updateBaseUrls(Cluster cluster, JsonArray jsonArray) throws AmbariException { ClusterVersionEntity cve = cluster.getCurrentClusterVersion(); + + if (null == cve) { + List<ClusterVersionEntity> list = clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), + RepositoryVersionState.INIT); + + if (!list.isEmpty()) { + if (list.size() > 1) { + throw new AmbariException(String.format("The cluster can only be initialized by one version: %s found", + list.size())); + } else { + cve = list.get(0); + } + } + } + if (null == cve || null == cve.getRepositoryVersion()) { + LOG.info("Cluster {} has no specific Repository Versions. Using stack-defined values", cluster.getClusterName()); return; } http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 23d43aa..e6dd2f7 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -97,6 +97,7 @@ import org.apache.ambari.server.customactions.ActionDefinition; import org.apache.ambari.server.metadata.ActionMetadata; import org.apache.ambari.server.metadata.RoleCommandOrder; import org.apache.ambari.server.orm.dao.ClusterDAO; +import org.apache.ambari.server.orm.dao.ClusterVersionDAO; import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; import org.apache.ambari.server.orm.dao.WidgetDAO; import org.apache.ambari.server.orm.dao.WidgetLayoutDAO; @@ -142,6 +143,7 @@ import org.apache.ambari.server.state.PropertyDependencyInfo; import org.apache.ambari.server.state.PropertyInfo; import org.apache.ambari.server.state.PropertyInfo.PropertyType; import org.apache.ambari.server.state.RepositoryInfo; +import org.apache.ambari.server.state.RepositoryVersionState; import org.apache.ambari.server.state.SecurityType; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponent; @@ -396,6 +398,18 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle throw new StackAccessException("stackName=" + stackId.getStackName() + ", stackVersion=" + stackId.getStackVersion()); } + RepositoryVersionEntity versionEntity = null; + + if (null != request.getRepositoryVersion()) { + versionEntity = repositoryVersionDAO.findByStackAndVersion(stackId, + request.getRepositoryVersion()); + + if (null == versionEntity) { + throw new AmbariException(String.format("Tried to create a cluster on version %s, but that version doesn't exist", + request.getRepositoryVersion())); + } + } + // FIXME add support for desired configs at cluster level boolean foundInvalidHosts = false; @@ -427,6 +441,18 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle } // Create cluster widgets and layouts initializeWidgetsAndLayouts(c, null); + + if (null != versionEntity) { + ClusterVersionDAO clusterVersionDAO = injector.getInstance(ClusterVersionDAO.class); + + ClusterVersionEntity clusterVersion = clusterVersionDAO.findByClusterAndStackAndVersion(request.getClusterName(), stackId, + request.getRepositoryVersion()); + + if (null == clusterVersion) { + c.createClusterVersion(stackId, versionEntity.getVersion(), getAuthName(), RepositoryVersionState.INIT); + } + } + } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/main/java/org/apache/ambari/server/controller/ClusterRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ClusterRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ClusterRequest.java index 5c7548c..4d4fd59 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ClusterRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ClusterRequest.java @@ -18,12 +18,12 @@ package org.apache.ambari.server.controller; -import org.apache.ambari.server.state.SecurityType; - import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.ambari.server.state.SecurityType; + /** * Used for create Cluster */ @@ -55,6 +55,8 @@ public class ClusterRequest { */ private final Map<String, Object> sessionAttributes; + private String repositoryVersion = null; + // ----- Constructors ------------------------------------------------------ @@ -238,4 +240,19 @@ public class ClusterRequest { public void setServiceConfigVersionRequest(ServiceConfigVersionRequest serviceConfigVersionRequest) { this.serviceConfigVersionRequest = serviceConfigVersionRequest; } + + /** + * @param version the repo version to use + */ + public void setRepositoryVersion(String version) { + repositoryVersion = version; + } + + /** + * @return the repo version to use + */ + public String getRepositoryVersion() { + return repositoryVersion; + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java index f7d359c..51c0db9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java @@ -17,7 +17,16 @@ */ package org.apache.ambari.server.controller.internal; -import com.google.gson.Gson; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.ClusterRequest; @@ -37,9 +46,9 @@ 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.security.authorization.AuthorizationException; +import org.apache.ambari.server.security.authorization.AuthorizationHelper; import org.apache.ambari.server.security.authorization.ResourceType; import org.apache.ambari.server.security.authorization.RoleAuthorization; -import org.apache.ambari.server.security.authorization.AuthorizationHelper; import org.apache.ambari.server.state.SecurityType; import org.apache.ambari.server.topology.InvalidTopologyException; import org.apache.ambari.server.topology.InvalidTopologyTemplateException; @@ -49,17 +58,7 @@ import org.apache.ambari.server.topology.TopologyManager; import org.apache.ambari.server.topology.TopologyRequestFactory; import org.springframework.security.core.Authentication; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.apache.ambari.server.controller.internal.ProvisionClusterRequest.PROVISION_ACTION_PROPERTY; +import com.google.gson.Gson; /** @@ -85,6 +84,8 @@ public class ClusterResourceProvider extends AbstractControllerResourceProvider public static final String CREDENTIALS_PROPERTY_ID = PropertyHelper.getPropertyId(null, "credentials"); public static final String SESSION_ATTRIBUTES_PROPERTY_ID = "session_attributes"; + public static final String CLUSTER_REPO_VERSION = "Clusters/repository_version"; + /** * The session attributes property prefix. */ @@ -150,6 +151,7 @@ public class ClusterResourceProvider extends AbstractControllerResourceProvider propertyIds.add(SESSION_ATTRIBUTES_PROPERTY_ID); propertyIds.add(SECURITY_PROPERTY_ID); propertyIds.add(CREDENTIALS_PROPERTY_ID); + propertyIds.add(CLUSTER_REPO_VERSION); } @@ -191,6 +193,7 @@ public class ClusterResourceProvider extends AbstractControllerResourceProvider baseUnsupported.remove("credentials"); baseUnsupported.remove("config_recommendation_strategy"); baseUnsupported.remove("provision_action"); + baseUnsupported.remove(ProvisionClusterRequest.REPO_VERSION_PROPERTY); return checkConfigPropertyIds(baseUnsupported, "Clusters"); } @@ -415,6 +418,10 @@ public class ClusterResourceProvider extends AbstractControllerResourceProvider null, getSessionAttributes(properties)); + if (properties.containsKey(CLUSTER_REPO_VERSION)) { + cr.setRepositoryVersion(properties.get(CLUSTER_REPO_VERSION).toString()); + } + List<ConfigurationRequest> configRequests = getConfigurationRequests("Clusters", properties); ServiceConfigVersionRequest serviceConfigVersionRequest = getServiceConfigVersionRequest("Clusters", properties); http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ProvisionClusterRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ProvisionClusterRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ProvisionClusterRequest.java index a1740fb..3feac55 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ProvisionClusterRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ProvisionClusterRequest.java @@ -17,9 +17,13 @@ */ package org.apache.ambari.server.controller.internal; -import com.google.common.base.Enums; -import com.google.common.base.Strings; -import com.google.common.base.Optional; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.api.predicate.InvalidQueryException; import org.apache.ambari.server.security.encryption.CredentialStoreType; import org.apache.ambari.server.stack.NoSuchStackException; @@ -36,12 +40,9 @@ import org.apache.ambari.server.topology.TopologyValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import com.google.common.base.Enums; +import com.google.common.base.Optional; +import com.google.common.base.Strings; /** * Request for provisioning a cluster. @@ -106,6 +107,12 @@ public class ProvisionClusterRequest extends BaseClusterRequest { public static final String PROVISION_ACTION_PROPERTY = "provision_action"; /** + * The repo version to use + */ + public static final String REPO_VERSION_PROPERTY = "repository_version"; + + + /** * configuration factory */ private static ConfigurationFactory configurationFactory = new ConfigurationFactory(); @@ -129,6 +136,8 @@ public class ProvisionClusterRequest extends BaseClusterRequest { private final ProvisionAction provisionAction; + private String repoVersion; + private final static Logger LOG = LoggerFactory.getLogger(ProvisionClusterRequest.class); /** @@ -142,6 +151,10 @@ public class ProvisionClusterRequest extends BaseClusterRequest { setClusterName(String.valueOf(properties.get( ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID))); + if (properties.containsKey(REPO_VERSION_PROPERTY)) { + repoVersion = properties.get(REPO_VERSION_PROPERTY).toString(); + } + if (properties.containsKey(DEFAULT_PASSWORD_PROPERTY)) { defaultPassword = String.valueOf(properties.get(DEFAULT_PASSWORD_PROPERTY)); } @@ -434,4 +447,11 @@ public class ProvisionClusterRequest extends BaseClusterRequest { return provisionAction; } + /** + * @return the repository version, if any + */ + public String getRepositoryVersion() { + return repoVersion; + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java index cc8cfdb..a36f0fb 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java @@ -18,11 +18,11 @@ package org.apache.ambari.server.controller.predicate; -import org.apache.ambari.server.controller.spi.Resource; - import java.text.NumberFormat; import java.text.ParsePosition; +import org.apache.ambari.server.controller.spi.Resource; + /** * Predicate that compares a given value to a {@link Resource} property. */ @@ -84,7 +84,7 @@ public abstract class ComparisonPredicate<T> extends PropertyPredicate implement else if (propertyValue instanceof String) { Double doubleFromString = stringToDouble((String) propertyValue); if (doubleFromString != null) { - return (int) (doubleValue - doubleFromString); + return doubleValue.compareTo(doubleFromString); } } } @@ -99,6 +99,7 @@ public abstract class ComparisonPredicate<T> extends PropertyPredicate implement if (stringValue == null || stringValue.isEmpty()) { return null; } + ParsePosition parsePosition = new ParsePosition(0); NumberFormat numberFormat = NumberFormat.getInstance(); Number parsedNumber = numberFormat.parse(stringValue, parsePosition); http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java index ddd07f9..128c392 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java @@ -238,7 +238,8 @@ public interface Cluster { * Create a cluster version for the given stack and version, whose initial * state must either be either {@link RepositoryVersionState#UPGRADING} (if no * other cluster version exists) or {@link RepositoryVersionState#INSTALLING} - * (if at exactly one CURRENT cluster version already exists). + * (if at exactly one CURRENT cluster version already exists) or {@link RepositoryVersionState#INIT} + * (if the cluster is being created using a specific repository version). * * @param stackId * Stack ID http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/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 119205a..e02e422 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 @@ -54,6 +54,7 @@ package org.apache.ambari.server.state; * ********************************************* * Start states: CURRENT, INSTALLING * Allowed Transitions: + * INIT -> CURRENT * INSTALLED -> CURRENT * INSTALLING -> INSTALLED | INSTALL_FAILED | OUT_OF_SYNC * INSTALLED -> INSTALLED | INSTALLING | OUT_OF_SYNC @@ -64,6 +65,13 @@ package org.apache.ambari.server.state; */ public enum RepositoryVersionState { /** + * Repository version is initialized, and will transition to current. This is used + * when creating a cluster using a specific version. Transition occurs naturally as + * hosts report CURRENT. + */ + INIT, + + /** * Repository version is not required */ NOT_REQUIRED, http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/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 8d6fec1..878f83b 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 @@ -153,7 +153,7 @@ public class ClusterImpl implements Cluster { */ private static final String CLUSTER_SESSION_ATTRIBUTES_PREFIX = "cluster_session_attributes:"; private static final Set<RepositoryVersionState> ALLOWED_REPOSITORY_STATES = - EnumSet.of(RepositoryVersionState.INSTALLING); + EnumSet.of(RepositoryVersionState.INIT, RepositoryVersionState.INSTALLING); @Inject private Clusters clusters; @@ -1446,11 +1446,13 @@ public class ClusterImpl implements Cluster { return; } } + // Ignore if cluster version is CURRENT or UPGRADE_FAILED if (clusterVersion.getState() != RepositoryVersionState.INSTALL_FAILED && clusterVersion.getState() != RepositoryVersionState.OUT_OF_SYNC && clusterVersion.getState() != RepositoryVersionState.INSTALLING && - clusterVersion.getState() != RepositoryVersionState.INSTALLED) { + clusterVersion.getState() != RepositoryVersionState.INSTALLED && + clusterVersion.getState() != RepositoryVersionState.INIT) { // anything else is not supported as of now return; } @@ -1524,6 +1526,7 @@ public class ClusterImpl implements Cluster { } RepositoryVersionState effectiveClusterVersionState = getEffectiveState(stateToHosts); + if (effectiveClusterVersionState != null && effectiveClusterVersionState != clusterVersion.getState()) { // Any mismatch will be caught while transitioning, and raise an @@ -1735,6 +1738,9 @@ public class ClusterImpl implements Cluster { case OUT_OF_SYNC: allowedStates.add(RepositoryVersionState.INSTALLING); break; + case INIT: + allowedStates.add(RepositoryVersionState.CURRENT); + break; } if (!allowedStates.contains(state)) { http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java index 87225ad..a5e2fa1 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java @@ -18,6 +18,21 @@ package org.apache.ambari.server.topology; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.concurrent.Callable; +import java.util.concurrent.atomic.AtomicLong; + +import javax.inject.Inject; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ClusterNotFoundException; import org.apache.ambari.server.Role; @@ -61,20 +76,6 @@ import org.apache.ambari.server.utils.RetryHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; -import java.util.concurrent.Callable; -import java.util.concurrent.atomic.AtomicLong; - /** * Provides topology related information as well as access to the core Ambari functionality. */ @@ -149,15 +150,18 @@ public class AmbariContext { return getController().getActionManager().getTasks(ids); } - public void createAmbariResources(ClusterTopology topology, String clusterName, SecurityType securityType) { + public void createAmbariResources(ClusterTopology topology, String clusterName, SecurityType securityType, String repoVersion) { Stack stack = topology.getBlueprint().getStack(); - createAmbariClusterResource(clusterName, stack.getName(), stack.getVersion(), securityType); + + createAmbariClusterResource(clusterName, stack.getName(), stack.getVersion(), securityType, repoVersion); createAmbariServiceAndComponentResources(topology, clusterName); } - public void createAmbariClusterResource(String clusterName, String stackName, String stackVersion, SecurityType securityType) { + public void createAmbariClusterResource(String clusterName, String stackName, String stackVersion, SecurityType securityType, String repoVersion) { String stackInfo = String.format("%s-%s", stackName, stackVersion); final ClusterRequest clusterRequest = new ClusterRequest(null, clusterName, null, securityType, stackInfo, null); + clusterRequest.setRepositoryVersion(repoVersion); + try { RetryHelper.executeWithRetry(new Callable<Object>() { @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java index c317162..769fc41 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java @@ -18,21 +18,30 @@ package org.apache.ambari.server.topology; -import com.google.inject.Injector; -import com.google.inject.Singleton; +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.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import javax.inject.Inject; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.actionmanager.HostRoleCommand; -import org.apache.ambari.server.actionmanager.Request; import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorBlueprintProcessor; -import org.apache.ambari.server.controller.ClusterRequest; -import org.apache.ambari.server.controller.KerberosHelper; import org.apache.ambari.server.controller.RequestStatusResponse; import org.apache.ambari.server.controller.internal.ArtifactResourceProvider; import org.apache.ambari.server.controller.internal.CalculatedStatus; import org.apache.ambari.server.controller.internal.CredentialResourceProvider; import org.apache.ambari.server.controller.internal.ProvisionClusterRequest; import org.apache.ambari.server.controller.internal.RequestImpl; -import org.apache.ambari.server.controller.internal.RequestStageContainer; import org.apache.ambari.server.controller.internal.ScaleClusterRequest; import org.apache.ambari.server.controller.internal.Stack; import org.apache.ambari.server.controller.spi.NoSuchParentResourceException; @@ -44,28 +53,13 @@ import org.apache.ambari.server.controller.spi.SystemException; import org.apache.ambari.server.controller.spi.UnsupportedPropertyException; import org.apache.ambari.server.orm.dao.HostRoleCommandStatusSummaryDTO; import org.apache.ambari.server.orm.entities.StageEntity; -import org.apache.ambari.server.security.encryption.CredentialStoreService; -import org.apache.ambari.server.serveraction.kerberos.KerberosOperationException; -import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.SecurityType; import org.apache.ambari.server.state.host.HostImpl; import org.apache.ambari.server.utils.RetryHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; -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.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import com.google.inject.Singleton; /** * Manages all cluster provisioning actions on the cluster topology. @@ -140,6 +134,7 @@ public class TopologyManager { ensureInitialized(); ClusterTopology topology = new ClusterTopologyImpl(ambariContext, request); final String clusterName = request.getClusterName(); + final String repoVersion = request.getRepositoryVersion(); // get the id prior to creating ambari resources which increments the counter Long provisionId = ambariContext.getNextRequestId(); @@ -157,7 +152,7 @@ public class TopologyManager { // create Cluster resource with security_type = KERBEROS, this will trigger cluster Kerberization // upon host install task execution - ambariContext.createAmbariResources(topology, clusterName, SecurityType.KERBEROS); + ambariContext.createAmbariResources(topology, clusterName, SecurityType.KERBEROS, repoVersion); if (securityConfiguration.getDescriptor() != null) { submitKerberosDescriptorAsArtifact(clusterName, securityConfiguration.getDescriptor()); } @@ -168,7 +163,7 @@ public class TopologyManager { } submitCredential(clusterName, credential); } else { - ambariContext.createAmbariResources(topology, clusterName, null); + ambariContext.createAmbariResources(topology, clusterName, null, repoVersion); } long clusterId = ambariContext.getClusterId(clusterName); http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java index ec38f22..8fc1a64 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java @@ -18,15 +18,47 @@ package org.apache.ambari.server.controller; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Maps; -import com.google.gson.Gson; -import com.google.inject.Binder; -import com.google.inject.Guice; -import com.google.inject.Injector; -import com.google.inject.Module; -import com.google.inject.util.Modules; -import junit.framework.Assert; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_DRIVER_FILENAME; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOST_SYS_PREPPED; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JAVA_VERSION; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.NOT_MANAGED_HDFS_PATH_LIST; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_NAME; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_VERSION; +import static org.easymock.EasyMock.anyBoolean; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.capture; +import static org.easymock.EasyMock.captureBoolean; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.createMockBuilder; +import static org.easymock.EasyMock.createNiceMock; +import static org.easymock.EasyMock.createStrictMock; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +import javax.persistence.RollbackException; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ClusterNotFoundException; import org.apache.ambari.server.HostNotFoundException; @@ -42,6 +74,7 @@ import org.apache.ambari.server.controller.internal.RequestStageContainer; import org.apache.ambari.server.controller.spi.Resource; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.dao.ClusterVersionDAO; +import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; import org.apache.ambari.server.orm.entities.ClusterVersionEntity; import org.apache.ambari.server.orm.entities.LdapSyncSpecEntity; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; @@ -60,6 +93,7 @@ import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.PropertyInfo; import org.apache.ambari.server.state.RepositoryInfo; +import org.apache.ambari.server.state.RepositoryVersionState; import org.apache.ambari.server.state.SecurityType; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponent; @@ -67,6 +101,7 @@ import org.apache.ambari.server.state.ServiceComponentHost; import org.apache.ambari.server.state.ServiceInfo; import org.apache.ambari.server.state.ServiceOsSpecific; import org.apache.ambari.server.state.StackId; +import org.apache.ambari.server.state.StackInfo; import org.apache.ambari.server.state.State; import org.easymock.Capture; import org.junit.Before; @@ -75,44 +110,16 @@ import org.junit.Ignore; import org.junit.Test; import org.springframework.security.core.context.SecurityContextHolder; -import javax.persistence.RollbackException; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.inject.Binder; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; +import com.google.inject.util.Modules; -import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_DRIVER_FILENAME; -import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOST_SYS_PREPPED; -import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JAVA_VERSION; -import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_NAME; -import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_VERSION; -import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.NOT_MANAGED_HDFS_PATH_LIST; -import static org.easymock.EasyMock.anyBoolean; -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.capture; -import static org.easymock.EasyMock.captureBoolean; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.createMockBuilder; -import static org.easymock.EasyMock.createNiceMock; -import static org.easymock.EasyMock.createStrictMock; -import static org.easymock.EasyMock.eq; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.expectLastCall; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import junit.framework.Assert; /** * AmbariManagementControllerImpl unit tests @@ -2254,4 +2261,63 @@ public class AmbariManagementControllerImplTest { verify(injector, cluster, clusters, ambariMetaInfo, service, serviceComponent, serviceComponentHost, stackId); } + + @Test + public void testCreateClusterWithRepository() throws Exception { + Injector injector = createNiceMock(Injector.class); + + ClusterVersionDAO clusterVersionDAO = createNiceMock(ClusterVersionDAO.class); + expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class), + anyObject(StackId.class), anyObject(String.class))).andReturn(null).once(); + + RepositoryVersionEntity repoVersion = createNiceMock(RepositoryVersionEntity.class); + RepositoryVersionDAO repoVersionDAO = createNiceMock(RepositoryVersionDAO.class); + expect(repoVersionDAO.findByStackAndVersion(anyObject(StackId.class), + anyObject(String.class))).andReturn(repoVersion).anyTimes(); + + expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null).atLeastOnce(); + expect(injector.getInstance(Gson.class)).andReturn(null); + expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); + expect(injector.getInstance(ClusterVersionDAO.class)).andReturn(clusterVersionDAO); + + Cluster cluster = createNiceMock(Cluster.class); + expect(cluster.getDesiredStackVersion()).andReturn(new StackId("HDP-2.1")).atLeastOnce(); + + // this getting called one time means the cluster version is getting created + cluster.createClusterVersion(anyObject(StackId.class), anyObject(String.class), anyObject(String.class), anyObject(RepositoryVersionState.class)); + expectLastCall().once(); + + expect(clusters.getCluster("c1")).andReturn(cluster).atLeastOnce(); + + StackInfo stackInfo = createNiceMock(StackInfo.class); + expect(stackInfo.getWidgetsDescriptorFileLocation()).andReturn(null).once(); + + expect(ambariMetaInfo.getStack("HDP", "2.1")).andReturn(stackInfo).atLeastOnce(); + + replay(injector, clusters, ambariMetaInfo, stackInfo, cluster, repoVersionDAO, repoVersion, clusterVersionDAO); + + AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); + setAmbariMetaInfo(ambariMetaInfo, controller); + Class<?> c = controller.getClass(); + + Field f = c.getDeclaredField("repositoryVersionDAO"); + f.setAccessible(true); + f.set(controller, repoVersionDAO); + + Properties p = new Properties(); + p.setProperty("", ""); + Configuration configuration = new Configuration(p); + f = c.getDeclaredField("configs"); + f.setAccessible(true); + f.set(controller, configuration); + + ClusterRequest cr = new ClusterRequest(null, "c1", "HDP-2.1", null); + cr.setRepositoryVersion("2.1.1.0-1234"); + controller.createCluster(cr); + + // verification + verify(injector, clusters, ambariMetaInfo, stackInfo, cluster, repoVersionDAO, repoVersion, clusterVersionDAO); + } + + } http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterResourceProviderTest.java index 57cbebc..7292be2 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterResourceProviderTest.java @@ -18,7 +18,32 @@ package org.apache.ambari.server.controller.internal; -import com.google.gson.Gson; +import static org.easymock.EasyMock.anyBoolean; +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.createStrictMock; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.ClusterRequest; import org.apache.ambari.server.controller.ClusterResponse; @@ -53,29 +78,7 @@ import org.junit.Test; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; - -import static org.easymock.EasyMock.anyBoolean; -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.createStrictMock; -import static org.easymock.EasyMock.eq; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.expectLastCall; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; -import static org.junit.Assert.assertEquals; +import com.google.gson.Gson; /** @@ -775,4 +778,84 @@ public class ClusterResourceProviderTest { // verify verify(managementController, response, clusters); } + + @Test + public void testCreateWithRepository() throws Exception { + Authentication authentication = TestAuthenticationFactory.createAdministrator(); + + Resource.Type type = Resource.Type.Cluster; + + AmbariManagementController managementController = createMock(AmbariManagementController.class); + Capture<ClusterRequest> cap = Capture.newInstance(); + + managementController.createCluster(capture(cap)); + expectLastCall(); + + // replay + replay(managementController); + + SecurityContextHolder.getContext().setAuthentication(authentication); + + ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); + + // add the property map to a set for the request. add more maps for multiple creates + Set<Map<String, Object>> propertySet = new LinkedHashSet<Map<String, Object>>(); + + // Cluster 1: create a map of properties for the request + Map<String, Object> properties = new LinkedHashMap<String, Object>(); + properties.put(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID, "Cluster100"); + properties.put(ClusterResourceProvider.CLUSTER_VERSION_PROPERTY_ID, "HDP-0.1"); + properties.put(ClusterResourceProvider.CLUSTER_REPO_VERSION, "2.1.1"); + + propertySet.add(properties); + + // create the request + Request request = PropertyHelper.getCreateRequest(propertySet, null); + + provider.createResources(request); + + // verify + verify(managementController); + + assertTrue(cap.hasCaptured()); + assertNotNull(cap.getValue()); + assertEquals("2.1.1", cap.getValue().getRepositoryVersion()); + } + + @Test + public void testCreateResource_blueprint_withRepoVersion() throws Exception { + Authentication authentication = TestAuthenticationFactory.createAdministrator(); + + Set<Map<String, Object>> requestProperties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); + Map<String, Object> properties = requestProperties.iterator().next(); + properties.put(ProvisionClusterRequest.REPO_VERSION_PROPERTY, "2.1.1"); + + Map<String, String> requestInfoProperties = new HashMap<>(); + requestInfoProperties.put(Request.REQUEST_INFO_BODY_PROPERTY, "{}"); + + // set expectations + expect(request.getProperties()).andReturn(requestProperties).anyTimes(); + expect(request.getRequestInfoProperties()).andReturn(requestInfoProperties).anyTimes(); + + expect(securityFactory.createSecurityConfigurationFromRequest(anyObject(HashMap.class), anyBoolean())).andReturn(null) + .once(); + expect(topologyFactory.createProvisionClusterRequest(properties, null)).andReturn(topologyRequest).once(); + expect(topologyManager.provisionCluster(topologyRequest)).andReturn(requestStatusResponse).once(); + expect(requestStatusResponse.getRequestId()).andReturn(5150L).anyTimes(); + + replayAll(); + SecurityContextHolder.getContext().setAuthentication(authentication); + + RequestStatus requestStatus = provider.createResources(request); + assertEquals(5150L, requestStatus.getRequestResource().getPropertyValue(PropertyHelper.getPropertyId("Requests", "id"))); + assertEquals(Resource.Type.Request, requestStatus.getRequestResource().getType()); + assertEquals("Accepted", requestStatus.getRequestResource().getPropertyValue(PropertyHelper.getPropertyId("Requests", "status"))); + + verifyAll(); + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java index 1613d11..c9182c1 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java @@ -18,8 +18,28 @@ package org.apache.ambari.server.topology; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; +import static org.easymock.EasyMock.capture; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.createNiceMock; +import static org.easymock.EasyMock.createStrictMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.ClusterRequest; import org.apache.ambari.server.controller.ConfigGroupRequest; @@ -50,27 +70,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import static org.easymock.EasyMock.capture; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.createNiceMock; -import static org.easymock.EasyMock.createStrictMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.expectLastCall; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; /** * AmbariContext unit tests @@ -258,7 +259,7 @@ public class AmbariContextTest { replayAll(); // test - context.createAmbariResources(topology, CLUSTER_NAME, null); + context.createAmbariResources(topology, CLUSTER_NAME, null, null); // assertions ClusterRequest clusterRequest = clusterRequestCapture.getValue(); http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java index 6e7c975..0382b03 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java @@ -17,6 +17,33 @@ */ package org.apache.ambari.server.topology; +import static org.apache.ambari.server.controller.internal.ProvisionAction.INSTALL_ONLY; +import static org.easymock.EasyMock.anyLong; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.anyString; +import static org.easymock.EasyMock.capture; +import static org.easymock.EasyMock.createMockBuilder; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.isA; +import static org.easymock.EasyMock.isNull; +import static org.easymock.EasyMock.newCapture; +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.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; + import org.apache.ambari.server.Role; import org.apache.ambari.server.RoleCommand; import org.apache.ambari.server.actionmanager.HostRoleCommand; @@ -50,31 +77,6 @@ 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 java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; -import static org.apache.ambari.server.controller.internal.ProvisionAction.INSTALL_ONLY; -import static org.easymock.EasyMock.anyLong; -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.anyString; -import static org.easymock.EasyMock.capture; -import static org.easymock.EasyMock.createMockBuilder; -import static org.easymock.EasyMock.eq; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.expectLastCall; -import static org.easymock.EasyMock.isA; -import static org.easymock.EasyMock.isNull; -import static org.easymock.EasyMock.newCapture; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; @RunWith(PowerMockRunner.class) @PrepareForTest(AmbariServer.class) @@ -308,7 +310,7 @@ public class ClusterInstallWithoutStartTest { expect(ambariContext.getPersistedTopologyState()).andReturn(persistedState).anyTimes(); //todo: don't ignore param - ambariContext.createAmbariResources(isA(ClusterTopology.class), eq(CLUSTER_NAME), (SecurityType) isNull()); + ambariContext.createAmbariResources(isA(ClusterTopology.class), eq(CLUSTER_NAME), (SecurityType) isNull(), (String)isNull()); expectLastCall().once(); expect(ambariContext.getNextRequestId()).andReturn(1L).once(); expect(ambariContext.isClusterKerberosEnabled(CLUSTER_ID)).andReturn(false).anyTimes(); http://git-wip-us.apache.org/repos/asf/ambari/blob/c8d6c9f5/ambari-server/src/test/java/org/apache/ambari/server/topology/TopologyManagerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/TopologyManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/TopologyManagerTest.java index 91f4993..fd8653c 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/topology/TopologyManagerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/TopologyManagerTest.java @@ -18,6 +18,29 @@ package org.apache.ambari.server.topology; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.capture; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.isA; +import static org.easymock.EasyMock.isNull; +import static org.easymock.EasyMock.newCapture; +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.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; + import org.apache.ambari.server.controller.ClusterRequest; import org.apache.ambari.server.controller.ConfigurationRequest; import org.apache.ambari.server.controller.RequestStatusResponse; @@ -39,29 +62,6 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; - -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.capture; -import static org.easymock.EasyMock.eq; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.expectLastCall; -import static org.easymock.EasyMock.isA; -import static org.easymock.EasyMock.isNull; -import static org.easymock.EasyMock.newCapture; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; - /** * TopologyManager unit tests */ @@ -280,7 +280,7 @@ public class TopologyManagerTest { expect(ambariContext.getPersistedTopologyState()).andReturn(persistedState).anyTimes(); //todo: don't ignore param - ambariContext.createAmbariResources(isA(ClusterTopology.class), eq(CLUSTER_NAME), (SecurityType) isNull()); + ambariContext.createAmbariResources(isA(ClusterTopology.class), eq(CLUSTER_NAME), (SecurityType) isNull(), (String) isNull()); expectLastCall().once(); expect(ambariContext.getNextRequestId()).andReturn(1L).once(); expect(ambariContext.isClusterKerberosEnabled(CLUSTER_ID)).andReturn(false).anyTimes();