You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2016/03/28 16:34:42 UTC
ambari git commit: AMBARI-15564. Use repository version number to
indicate repository to use when installing (ncole)
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();