You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2017/05/31 20:12:32 UTC
[01/50] [abbrv] ambari git commit: AMBARI-20923. Repositories must be
resolved correctly when installing new components (ncole)
Repository: ambari
Updated Branches:
refs/heads/trunk dc30b4e36 -> fb2076c71
AMBARI-20923. Repositories must be resolved correctly when installing new components (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8782cf69
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8782cf69
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8782cf69
Branch: refs/heads/trunk
Commit: 8782cf69160dae3d3894d7d93a6eb3f2c384e237
Parents: d84abbf
Author: Nate Cole <nc...@hortonworks.com>
Authored: Wed May 3 13:28:13 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Wed May 3 15:28:40 2017 -0400
----------------------------------------------------------------------
.../libraries/script/script.py | 20 +++--
.../ambari/server/agent/CommandRepository.java | 14 ++++
.../ambari/server/agent/ExecutionCommand.java | 6 ++
.../AmbariCustomCommandExecutionHelper.java | 83 +++++++++++++-------
.../AmbariManagementControllerImpl.java | 6 +-
.../ServiceComponentDesiredStateEntity.java | 16 ++--
.../ambari/server/topology/AmbariContext.java | 4 +-
.../AmbariCustomCommandExecutionHelperTest.java | 74 ++++++++++++++++-
.../upgrades/UpgradeActionTest.java | 42 +---------
.../custom_actions/TestInstallPackages.py | 70 +++++++++++++++++
10 files changed, 249 insertions(+), 86 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/ambari-common/src/main/python/resource_management/libraries/script/script.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/script/script.py b/ambari-common/src/main/python/resource_management/libraries/script/script.py
index 0dd9c02..75a1dd4 100644
--- a/ambari-common/src/main/python/resource_management/libraries/script/script.py
+++ b/ambari-common/src/main/python/resource_management/libraries/script/script.py
@@ -463,14 +463,22 @@ class Script(object):
version is passed from the server, use that as an absolute truth.
"""
- # two different command types put things in different objects. WHY.
- # package_version is the form W_X_Y_Z_nnnn
- package_version = default("roleParams/package_version", None)
- if not package_version:
- package_version = default("hostLevelParams/package_version", None)
-
package_delimiter = '-' if OSCheck.is_ubuntu_family() else '_'
+ # repositoryFile is the truth
+ # package_version should be made to the form W_X_Y_Z_nnnn
+ package_version = default("repositoryFile/repoVersion", None)
+ if package_version is not None:
+ package_version = package_version.replace('.', package_delimiter).replace('-', package_delimiter)
+
+ # TODO remove legacy checks
+ if package_version is None:
+ package_version = default("roleParams/package_version", None)
+
+ # TODO remove legacy checks
+ if package_version is None:
+ package_version = default("hostLevelParams/package_version", None)
+
# The cluster effective version comes down when the version is known after the initial
# install. In that case we should not be guessing which version when invoking INSTALL, but
# use the supplied version to build the package_version
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
index 849d6fb..3d96122 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.state.RepositoryInfo;
+import org.apache.commons.lang.builder.ToStringBuilder;
import com.google.gson.annotations.SerializedName;
@@ -165,6 +166,19 @@ public class CommandRepository {
public String getBaseUrl() {
return m_baseUrl;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return new ToStringBuilder(null)
+ .append("os", m_osType)
+ .append("name", m_repoName)
+ .append("id", m_repoId)
+ .append("baseUrl", m_baseUrl)
+ .toString();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
index bd62cbb..63eb660 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
@@ -431,6 +431,8 @@ public class ExecutionCommand extends AgentCommand {
String STACK_NAME = "stack_name";
String SERVICE_TYPE = "service_type";
String STACK_VERSION = "stack_version";
+ @Deprecated
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
String SERVICE_REPO_INFO = "service_repo_info";
String PACKAGE_LIST = "package_list";
String JDK_LOCATION = "jdk_location";
@@ -481,6 +483,8 @@ public class ExecutionCommand extends AgentCommand {
/**
* The key indicating that the package_version string is available
*/
+ @Deprecated
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
String PACKAGE_VERSION = "package_version";
/**
@@ -495,6 +499,8 @@ public class ExecutionCommand extends AgentCommand {
* The agent will return this value back in its response so the repository
* can be looked up and possibly have its version updated.
*/
+ @Deprecated
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
String REPO_VERSION_ID = "repository_version_id";
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/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 d6905fb..1d43093 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
@@ -78,6 +78,7 @@ import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.metadata.ActionMetadata;
import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
+import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
@@ -182,6 +183,10 @@ public class AmbariCustomCommandExecutionHelper {
@Inject
private HostRoleCommandDAO hostRoleCommandDAO;
+ @Inject
+ private ServiceComponentDesiredStateDAO serviceComponentDAO;
+
+
private Map<String, Map<String, Map<String, String>>> configCredentialsForService = new HashMap<>();
protected static final String SERVICE_CHECK_COMMAND_NAME = "SERVICE_CHECK";
@@ -399,6 +404,11 @@ public class AmbariCustomCommandExecutionHelper {
Service clusterService = cluster.getService(serviceName);
execCmd.setCredentialStoreEnabled(String.valueOf(clusterService.isCredentialStoreEnabled()));
+ ServiceComponent component = null;
+ if (StringUtils.isNotBlank(componentName)) {
+ component = clusterService.getServiceComponent(componentName);
+ }
+
// Get the map of service config type to password properties for the service
Map<String, Map<String, String>> configCredentials;
configCredentials = configCredentialsForService.get(clusterService.getName());
@@ -414,7 +424,7 @@ public class AmbariCustomCommandExecutionHelper {
hostLevelParams.put(CUSTOM_COMMAND, commandName);
// Set parameters required for re-installing clients on restart
- hostLevelParams.put(REPO_INFO, getRepoInfo(cluster, host));
+ hostLevelParams.put(REPO_INFO, getRepoInfo(cluster, component, host));
hostLevelParams.put(STACK_NAME, stackId.getStackName());
hostLevelParams.put(STACK_VERSION, stackId.getStackVersion());
@@ -504,7 +514,7 @@ public class AmbariCustomCommandExecutionHelper {
execCmd.setCommandParams(commandParams);
execCmd.setRoleParams(roleParams);
- execCmd.setRepositoryFile(getCommandRepository(cluster, host));
+ execCmd.setRepositoryFile(getCommandRepository(cluster, component, host));
// perform any server side command related logic - eg - set desired states on restart
applyCustomCommandBackendLogic(cluster, serviceName, componentName, commandName, hostName);
@@ -1179,7 +1189,7 @@ public class AmbariCustomCommandExecutionHelper {
* @throws AmbariException if the repository information can not be obtained
*/
@Deprecated
- public String getRepoInfo(Cluster cluster, Host host) throws AmbariException {
+ public String getRepoInfo(Cluster cluster, ServiceComponent component, Host host) throws AmbariException {
Function<List<RepositoryInfo>, JsonArray> function = new Function<List<RepositoryInfo>, JsonArray>() {
@Override
@@ -1188,7 +1198,7 @@ public class AmbariCustomCommandExecutionHelper {
}
};
- final JsonArray gsonList = getBaseUrls(cluster, host, function);
+ final JsonArray gsonList = getBaseUrls(cluster, component, host, function);
if (null == gsonList) {
return "";
@@ -1216,7 +1226,6 @@ public class AmbariCustomCommandExecutionHelper {
if (ose.getOsType().equals(osType) && ose.isAmbariManagedRepos()) {
for (RepositoryEntity re : ose.getRepositories()) {
if (re.getName().equals(repoName) &&
- re.getRepositoryId().equals(repoId) &&
!re.getBaseUrl().equals(baseUrl)) {
obj.addProperty("baseUrl", re.getBaseUrl());
}
@@ -1230,7 +1239,7 @@ public class AmbariCustomCommandExecutionHelper {
}
};
- return updateBaseUrls(cluster, updater).toString();
+ return updateBaseUrls(cluster, component, updater).toString();
}
/**
@@ -1243,7 +1252,7 @@ public class AmbariCustomCommandExecutionHelper {
* @throws AmbariException
*/
@Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
- public CommandRepository getCommandRepository(final Cluster cluster, Host host) throws AmbariException {
+ public CommandRepository getCommandRepository(final Cluster cluster, ServiceComponent component, Host host) throws AmbariException {
Function<List<RepositoryInfo>, List<RepositoryInfo>> function = new Function<List<RepositoryInfo>, List<RepositoryInfo>>() {
@Override
@@ -1253,7 +1262,7 @@ public class AmbariCustomCommandExecutionHelper {
}
};
- final List<RepositoryInfo> repoInfos = getBaseUrls(cluster, host, function);
+ final List<RepositoryInfo> repoInfos = getBaseUrls(cluster, component, host, function);
if (null == repoInfos) {
return null;
@@ -1275,7 +1284,6 @@ public class AmbariCustomCommandExecutionHelper {
for (CommandRepository.Repository commandRepo : command.getRepositories()) {
String osType = commandRepo.getOsType();
- String repoId = commandRepo.getRepoId();
String repoName = commandRepo.getRepoName();
String baseUrl = commandRepo.getBaseUrl();
@@ -1283,7 +1291,6 @@ public class AmbariCustomCommandExecutionHelper {
if (ose.getOsType().equals(osType) && ose.isAmbariManagedRepos()) {
for (RepositoryEntity re : ose.getRepositories()) {
if (re.getName().equals(repoName) &&
- re.getRepositoryId().equals(repoId) &&
!re.getBaseUrl().equals(baseUrl)) {
commandRepo.setBaseUrl(re.getBaseUrl());
}
@@ -1296,7 +1303,7 @@ public class AmbariCustomCommandExecutionHelper {
}
};
- updateBaseUrls(cluster, updater);
+ updateBaseUrls(cluster, component, updater);
return command;
}
@@ -1306,13 +1313,15 @@ public class AmbariCustomCommandExecutionHelper {
* implemenation, this may be removed and called inline in {@link #getCommandRepository(Cluster, Host)}
*
* @param cluster the cluster to isolate the stack
+ * @param component the component
* @param host used to resolve the family for the repositories
* @param function function that will transform the supplied repositories for specific use.
* @return <T> the type as defined by the supplied {@code function}.
* @throws AmbariException
*/
@Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
- private <T> T getBaseUrls(Cluster cluster, Host host, Function<List<RepositoryInfo>, T> function) throws AmbariException {
+ private <T> T getBaseUrls(Cluster cluster, ServiceComponent component, Host host,
+ Function<List<RepositoryInfo>, T> function) throws AmbariException {
String hostOsType = host.getOsType();
String hostOsFamily = host.getOsFamily();
@@ -1354,31 +1363,51 @@ public class AmbariCustomCommandExecutionHelper {
* @param <T> the result after appling the repository version, if found.
*/
@Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
- private <T> T updateBaseUrls(Cluster cluster, BaseUrlUpdater<T> function) throws AmbariException {
- ClusterVersionEntity cve = cluster.getCurrentClusterVersion();
+ private <T> T updateBaseUrls(Cluster cluster, ServiceComponent component, BaseUrlUpdater<T> function) throws AmbariException {
- if (null == cve) {
- List<ClusterVersionEntity> list = clusterVersionDAO.findByClusterAndState(cluster.getClusterName(),
- RepositoryVersionState.INIT);
+ RepositoryVersionEntity repositoryEntity = null;
- 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);
+ // !!! try to find the component repo first
+ if (null != component) {
+ repositoryEntity = component.getDesiredRepositoryVersion();
+ }
+
+ if (null == component) {
+ LOG.info("Service component not passed in, attempt to resolve the repository for cluster {}",
+ cluster.getClusterName());
+ }
+
+ if (null == repositoryEntity) {
+
+ 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()) {
+ repositoryEntity = cve.getRepositoryVersion();
+ } else {
+ LOG.info("Cluster {} has no specific Repository Versions. Using stack-defined values", cluster.getClusterName());
+ }
}
- if (null == cve || null == cve.getRepositoryVersion()) {
+ if (null == repositoryEntity) {
LOG.info("Cluster {} has no specific Repository Versions. Using stack-defined values", cluster.getClusterName());
return function.getDefault();
}
- RepositoryVersionEntity rve = cve.getRepositoryVersion();
-
- return function.apply(rve);
+ return function.apply(repositoryEntity);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/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 8995e51..67ae5d5 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
@@ -2232,6 +2232,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
Service clusterService = cluster.getService(serviceName);
execCmd.setCredentialStoreEnabled(String.valueOf(clusterService.isCredentialStoreEnabled()));
+ ServiceComponent component = clusterService.getServiceComponent(componentName);
+
// Get the map of service config type to password properties for the service
Map<String, Map<String, String>> configCredentials;
configCredentials = configCredentialsForService.get(clusterService.getName());
@@ -2354,7 +2356,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
commandParams.put(ExecutionCommand.KeyNames.REFRESH_TOPOLOGY, "True");
}
- String repoInfo = customCommandExecutionHelper.getRepoInfo(cluster, host);
+ String repoInfo = customCommandExecutionHelper.getRepoInfo(cluster, component, host);
if (LOG.isDebugEnabled()) {
LOG.debug("Sending repo information to agent"
+ ", hostname=" + scHost.getHostName()
@@ -2470,7 +2472,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
execCmd.setCommandParams(commandParams);
execCmd.setAvailableServicesFromServiceInfoMap(ambariMetaInfo.getServices(stackId.getStackName(), stackId.getStackVersion()));
- execCmd.setRepositoryFile(customCommandExecutionHelper.getCommandRepository(cluster, host));
+ execCmd.setRepositoryFile(customCommandExecutionHelper.getCommandRepository(cluster, component, host));
if ((execCmd != null) && (execCmd.getConfigurationTags().containsKey("cluster-env"))) {
LOG.debug("AmbariManagementControllerImpl.createHostAction: created ExecutionCommand for host {}, role {}, roleCommand {}, and command ID {}, with cluster-env tags {}",
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
index eb1b187..6b89c02 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
@@ -123,7 +123,7 @@ public class ServiceComponentDesiredStateEntity {
private Collection<ServiceComponentHistoryEntity> serviceComponentHistory;
@OneToMany(mappedBy = "m_serviceComponentDesiredStateEntity", cascade = { CascadeType.ALL })
- private Collection<ServiceComponentVersionEntity> serviceComponentVersion;
+ private Collection<ServiceComponentVersionEntity> serviceComponentVersions;
public Long getId() {
return id;
@@ -205,22 +205,22 @@ public class ServiceComponentDesiredStateEntity {
/**
- * @param versionEntry the version to add
+ * @param versionEntity the version to add
*/
- public void addVersion(ServiceComponentVersionEntity versionEntry) {
- if (null == serviceComponentVersion) {
- serviceComponentVersion = new ArrayList<>();
+ public void addVersion(ServiceComponentVersionEntity versionEntity) {
+ if (null == serviceComponentVersions) {
+ serviceComponentVersions = new ArrayList<>();
}
- serviceComponentVersion.add(versionEntry);
- versionEntry.setServiceComponentDesiredState(this);
+ serviceComponentVersions.add(versionEntity);
+ versionEntity.setServiceComponentDesiredState(this);
}
/**
* @return the collection of versions for the component
*/
public Collection<ServiceComponentVersionEntity> getVersions() {
- return serviceComponentVersion;
+ return serviceComponentVersions;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/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 4a1e61f..8ae8e54 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
@@ -212,8 +212,8 @@ public class AmbariContext {
Set<ServiceComponentRequest> componentRequests = new HashSet<>();
for (String service : services) {
String credentialStoreEnabled = topology.getBlueprint().getCredentialStoreEnabled(service);
- serviceRequests.add(new ServiceRequest(clusterName, service, null, stackId.getStackId(),
- repositoryVersion, credentialStoreEnabled));
+ serviceRequests.add(new ServiceRequest(clusterName, service, stackId.getStackId(),
+ repositoryVersion, null, credentialStoreEnabled));
for (String component : topology.getBlueprint().getComponents(service)) {
String recoveryEnabled = topology.getBlueprint().getRecoveryEnabled(service, component);
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
index b0d085b..d558c15 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
@@ -37,6 +37,7 @@ import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.actionmanager.Request;
import org.apache.ambari.server.actionmanager.Stage;
+import org.apache.ambari.server.agent.CommandRepository;
import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.internal.ComponentResourceProviderTest;
@@ -49,7 +50,12 @@ import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
+import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
+import org.apache.ambari.server.orm.entities.ServiceComponentVersionEntity;
+import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.security.TestAuthenticationFactory;
import org.apache.ambari.server.security.authorization.AuthorizationException;
import org.apache.ambari.server.state.Cluster;
@@ -60,6 +66,7 @@ import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
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.SecurityType;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
@@ -69,6 +76,7 @@ import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.UserGroupInfo;
import org.apache.ambari.server.state.ValueAttributesInfo;
+import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.topology.TopologyManager;
import org.apache.ambari.server.utils.StageUtils;
import org.easymock.Capture;
@@ -555,8 +563,72 @@ public class AmbariCustomCommandExecutionHelperTest {
}
}
+ @Test
+ public void testCommandRepository() throws Exception {
+ Cluster cluster = clusters.getCluster("c1");
+ Service serviceYARN = cluster.getService("YARN");
+ Service serviceZK = cluster.getService("ZOOKEEPER");
+ ServiceComponent componentRM = serviceYARN.getServiceComponent("RESOURCEMANAGER");
+ ServiceComponent componentZKC = serviceZK.getServiceComponent("ZOOKEEPER_CLIENT");
+ Host host = clusters.getHost("c1-c6401");
+
+ AmbariCustomCommandExecutionHelper helper = injector.getInstance(AmbariCustomCommandExecutionHelper.class);
+ StackDAO stackDAO = injector.getInstance(StackDAO.class);
+ RepositoryVersionDAO repoVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
+ ServiceComponentDesiredStateDAO componentDAO = injector.getInstance(ServiceComponentDesiredStateDAO.class);
+ RepositoryVersionHelper repoVersionHelper = injector.getInstance(RepositoryVersionHelper.class);
+
+ CommandRepository commandRepo = helper.getCommandRepository(cluster, componentRM, host);
+
+ Assert.assertEquals(1, commandRepo.getRepositories().size());
+ CommandRepository.Repository repo = commandRepo.getRepositories().iterator().next();
+ Assert.assertEquals("http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.0", repo.getBaseUrl());
+
+ RepositoryInfo ri = new RepositoryInfo();
+ ri.setBaseUrl("http://foo");
+ ri.setRepoName("HDP");
+ ri.setRepoId("new-id");
+ ri.setOsType("redhat6");
+ String operatingSystems = repoVersionHelper.serializeOperatingSystems(Collections.singletonList(ri));
+
+
+ StackEntity stackEntity = stackDAO.find(cluster.getDesiredStackVersion().getStackName(),
+ cluster.getDesiredStackVersion().getStackVersion());
+
+ RepositoryVersionEntity repositoryVersion = new RepositoryVersionEntity(stackEntity,
+ "2.1.1.1-1234", "2.1.1.1-1234", operatingSystems);
+ repositoryVersion = repoVersionDAO.merge(repositoryVersion);
+
+ // add a repo version associated with a component
+ ServiceComponentDesiredStateEntity componentEntity = componentDAO.findByName(cluster.getClusterId(),
+ serviceYARN.getName(), componentRM.getName());
+
+ ServiceComponentVersionEntity componentVersionEntity = new ServiceComponentVersionEntity();
+ componentVersionEntity.setRepositoryVersion(repositoryVersion);
+ componentVersionEntity.setUserName("admin");
+
+ componentEntity.setDesiredRepositoryVersion(repositoryVersion);
+ componentEntity.addVersion(componentVersionEntity);
+ componentEntity = componentDAO.merge(componentEntity);
+
+ // !!! make sure the override is set
+ commandRepo = helper.getCommandRepository(cluster, componentRM, host);
+
+ Assert.assertEquals(1, commandRepo.getRepositories().size());
+ repo = commandRepo.getRepositories().iterator().next();
+ Assert.assertEquals("http://foo", repo.getBaseUrl());
+
+ // verify that ZK is NOT overwritten
+ commandRepo = helper.getCommandRepository(cluster, componentZKC, host);
+
+ Assert.assertEquals(1, commandRepo.getRepositories().size());
+ repo = commandRepo.getRepositories().iterator().next();
+ Assert.assertEquals("http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.0", repo.getBaseUrl());
+ }
+
private void createClusterFixture(String clusterName, StackId stackId,
- String respositoryVersion, String hostPrefix) throws AmbariException, AuthorizationException {
+ String respositoryVersion, String hostPrefix) throws AmbariException, AuthorizationException {
+
String hostC6401 = hostPrefix + "-c6401";
String hostC6402 = hostPrefix + "-c6402";
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index 0a583ae..18eef56 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -39,10 +39,8 @@ import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.agent.CommandReport;
-import org.apache.ambari.server.agent.CommandRepository;
import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
-import org.apache.ambari.server.controller.AmbariCustomCommandExecutionHelper;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.AmbariServer;
import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
@@ -89,10 +87,6 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import com.google.gson.Gson;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
@@ -320,7 +314,7 @@ public class UpgradeActionTest {
// Create the new repo version
String urlInfo = "[{'repositories':["
- + "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'" + targetStack.getStackId() + "'}"
+ + "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'" + targetStack.getStackId() + "-1'}"
+ "], 'OperatingSystems/os_type':'redhat6'}]";
repoVersionDAO.create(stackEntityTarget, targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
@@ -604,13 +598,8 @@ public class UpgradeActionTest {
createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
- // Verify the repo before calling Finalize
- AmbariCustomCommandExecutionHelper helper = m_injector.getInstance(AmbariCustomCommandExecutionHelper.class);
- Host host = clusters.getHost("h1");
-
RepositoryInfo repo = ambariMetaInfo.getRepository(sourceStack.getStackName(), sourceStack.getStackVersion(), "redhat6", sourceStack.getStackId());
assertEquals(HDP_211_CENTOS6_REPO_URL, repo.getBaseUrl());
- verifyBaseRepoURL(helper, cluster, host, HDP_211_CENTOS6_REPO_URL);
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
@@ -664,8 +653,6 @@ public class UpgradeActionTest {
}
// Verify the repo before calling Finalize
- AmbariCustomCommandExecutionHelper helper = m_injector.getInstance(AmbariCustomCommandExecutionHelper.class);
- Host host = clusters.getHost("h1");
Cluster cluster = clusters.getCluster(clusterName);
createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
@@ -673,7 +660,6 @@ public class UpgradeActionTest {
RepositoryInfo repo = ambariMetaInfo.getRepository(sourceStack.getStackName(),
sourceStack.getStackVersion(), "redhat6", sourceStack.getStackId());
assertEquals(HDP_211_CENTOS6_REPO_URL, repo.getBaseUrl());
- verifyBaseRepoURL(helper, cluster, host, HDP_211_CENTOS6_REPO_URL);
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
@@ -695,27 +681,6 @@ public class UpgradeActionTest {
assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
}
- private void verifyBaseRepoURL(AmbariCustomCommandExecutionHelper helper, Cluster cluster, Host host, String expectedRepoBaseURL) throws AmbariException {
-
- String repoInfo = helper.getRepoInfo(cluster, host);
- Gson gson = new Gson();
- JsonElement element = gson.fromJson(repoInfo, JsonElement.class);
- assertTrue(element.isJsonArray());
- JsonArray list = JsonArray.class.cast(element);
- assertEquals(1, list.size());
-
- JsonObject o = list.get(0).getAsJsonObject();
- assertTrue(o.has("baseUrl"));
- assertEquals(expectedRepoBaseURL, o.get("baseUrl").getAsString());
-
- CommandRepository commandRepo = helper.getCommandRepository(cluster, host);
-
- assertNotNull(commandRepo);
- assertNotNull(commandRepo.getRepositories());
- assertEquals(1, commandRepo.getRepositories().size());
- assertEquals(expectedRepoBaseURL, commandRepo.getRepositories().iterator().next().getBaseUrl());
- }
-
@Test
public void testFinalizeUpgradeAcrossStacks() throws Exception {
StackId sourceStack = HDP_21_STACK;
@@ -958,9 +923,6 @@ public class UpgradeActionTest {
createUpgradeClusterAndSourceRepo(sourceStack, sourceRepo, hostName);
- // Verify the repo before calling Finalize
- AmbariCustomCommandExecutionHelper helper = m_injector.getInstance(AmbariCustomCommandExecutionHelper.class);
- Host host = clusters.getHost("h1");
Cluster cluster = clusters.getCluster(clusterName);
// install HDFS with some components
@@ -989,7 +951,7 @@ public class UpgradeActionTest {
RepositoryInfo repo = ambariMetaInfo.getRepository(sourceStack.getStackName(), sourceStack.getStackVersion(), "redhat6", sourceStack.getStackId());
assertEquals(HDP_211_CENTOS6_REPO_URL, repo.getBaseUrl());
- verifyBaseRepoURL(helper, cluster, host, HDP_211_CENTOS6_REPO_URL);
+// verifyBaseRepoURL(helper, cluster, null, host, HDP_211_CENTOS6_REPO_URL);
// Finalize the upgrade, passing in the request ID so that history is
// created
http://git-wip-us.apache.org/repos/asf/ambari/blob/8782cf69/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
index 5206ea3..5f5576e 100644
--- a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
+++ b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
@@ -492,6 +492,76 @@ class TestInstallPackages(RMFTestCase):
self.assertNoMoreResources()
+ @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+ @patch("resource_management.core.resources.packaging.Package")
+ @patch("resource_management.libraries.script.Script.put_structured_out")
+ @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+ @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
+ @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
+ @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
+ def test_format_package_name_via_repositoryFile(self, write_actual_version_to_history_file_mock,
+ read_actual_version_from_history_file_mock,
+ stack_versions_mock,
+ allInstalledPackages_mock, put_structured_out_mock,
+ package_mock, is_suse_family_mock):
+ Script.stack_version_from_distro_select = VERSION_STUB
+ stack_versions_mock.side_effect = [
+ [], # before installation attempt
+ [VERSION_STUB]
+ ]
+ read_actual_version_from_history_file_mock.return_value = VERSION_STUB
+ allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
+ is_suse_family_mock.return_value = True
+
+
+ config_file = self.get_src_folder() + "/test/python/custom_actions/configs/install_packages_repository_file.json"
+ with open(config_file, "r") as f:
+ command_json = json.load(f)
+
+ command_json['repositoryFile']['repoVersion'] = '2.2.0.1-990'
+
+ self.executeScript("scripts/install_packages.py",
+ classname="InstallPackages",
+ command="actionexecute",
+ config_dict=command_json,
+ target=RMFTestCase.TARGET_CUSTOM_ACTIONS,
+ os_type=('Suse', '11', 'Final'),
+ )
+ self.assertTrue(put_structured_out_mock.called)
+ self.assertEquals(put_structured_out_mock.call_args[0][0],
+ {'package_installation_result': 'SUCCESS',
+ 'installed_repository_version': VERSION_STUB,
+ 'stack_id': 'HDP-2.2',
+ 'actual_version': VERSION_STUB})
+ self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20-repo-4',
+ base_url=u'http://repo1/HDP-UTILS/centos5/2.x/updates/2.2.0.0',
+ action=['create'],
+ components=[u'HDP-UTILS', 'main'],
+ repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
+ repo_file_name=u'ambari-hdp-4',
+ mirror_list=None,
+ append_to_file=False,
+ )
+ self.assertResourceCalled('Repository', 'HDP-2.2-repo-4',
+ base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
+ action=['create'],
+ components=[u'HDP', 'main'],
+ repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
+ repo_file_name=u'ambari-hdp-4',
+ mirror_list=None,
+ append_to_file=True,
+ )
+ self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadoop_2_2_0_1_990', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_990', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadoop_2_2_0_1_990-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertNoMoreResources()
+
+
@patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
@patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
@patch("resource_management.libraries.script.Script.put_structured_out")
[46/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/annotations/Experimental.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/StateRecoveryManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatProcessor.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/DistributeRepositoriesStructuredOutput.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index 0b507fb,0739a2a..cd75e53
--- 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
@@@ -76,8 -73,9 +76,7 @@@ import org.apache.ambari.server.control
import org.apache.ambari.server.controller.internal.RequestResourceFilter;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.metadata.ActionMetadata;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
- import org.apache.ambari.server.orm.dao.RequestDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@@ -176,9 -173,9 +174,6 @@@ public class AmbariCustomCommandExecuti
private OsFamily os_family;
@Inject
- private RequestDAO requestDAO;
- private ClusterVersionDAO clusterVersionDAO;
--
-- @Inject
private HostRoleCommandDAO hostRoleCommandDAO;
private Map<String, Map<String, Map<String, String>>> configCredentialsForService = new HashMap<>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostRequest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentResponse.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ReadOnlyResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
index e6c50fb,4a9223f..0600159
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
@@@ -422,19 -362,10 +422,19 @@@ public class ServiceResourceProvider ex
for (ServiceRequest request : requests) {
Cluster cluster = clusters.getCluster(request.getClusterName());
- // Already checked that service does not exist
- Service s = cluster.addService(request.getServiceName());
+ String desiredStack = request.getDesiredStack();
+
+ RepositoryVersionEntity repositoryVersion = request.getResolvedRepository();
+
+ if (null == repositoryVersion) {
+ throw new AmbariException(String.format("Could not find any repositories defined by %s", desiredStack));
+ } else {
+ desiredStack = repositoryVersion.getStackId().toString();
+ }
+
+ Service s = cluster.addService(request.getServiceName(), repositoryVersion);
- /**
+ /*
* Get the credential_store_supported field only from the stack definition.
* Not possible to update the value through a request.
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index 4e6fa61,97da150..6f452b0
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@@ -649,23 -818,13 +649,23 @@@ public class UpgradeResourceProvider ex
}
List<UpgradeGroupEntity> groupEntities = new ArrayList<>();
- RequestStageContainer req = createRequest(direction, version);
-
- // the upgrade context calculated these for us based on direction
- StackId sourceStackId = upgradeContext.getOriginalStackId();
- StackId targetStackId = upgradeContext.getTargetStackId();
+ RequestStageContainer req = createRequest(upgradeContext);
+
+ UpgradeEntity upgrade = new UpgradeEntity();
+ upgrade.setRepositoryVersion(upgradeContext.getRepositoryVersion());
+ upgrade.setClusterId(cluster.getClusterId());
+ upgrade.setDirection(direction);
+ upgrade.setUpgradePackage(pack.getName());
+ upgrade.setUpgradeType(pack.getType());
+ upgrade.setAutoSkipComponentFailures(upgradeContext.isComponentFailureAutoSkipped());
+ upgrade.setAutoSkipServiceCheckFailures(upgradeContext.isServiceCheckFailureAutoSkipped());
+ upgrade.setDowngradeAllowed(upgradeContext.isDowngradeAllowed());
+
+ // create to/from history for this upgrade - this should be done before any
+ // possible changes to the desired version for components
+ addComponentHistoryToUpgrade(cluster, upgrade, upgradeContext);
- /**
+ /*
During a Rolling Upgrade, change the desired Stack Id if jumping across
major stack versions (e.g., HDP 2.2 -> 2.3), and then set config changes
so they are applied on the newer stack.
@@@ -674,14 -833,13 +674,14 @@@
stopping all services), and the configs are applied immediately before starting the services.
The Upgrade Pack is responsible for calling {@link org.apache.ambari.server.serveraction.upgrades.UpdateDesiredStackAction}
at the appropriate moment during the orchestration.
- **/
+ */
if (pack.getType() == UpgradeType.ROLLING) {
- // Desired configs must be set before creating stages because the config tag
- // names are read and set on the command for filling in later
- applyStackAndProcessConfigurations(targetStackId.getStackName(), cluster, version, direction, pack, userName);
+ s_upgradeHelper.updateDesiredRepositoriesAndConfigs(upgradeContext);
}
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES, comment = "This is wrong")
+ StackId configurationPackSourceStackId = upgradeContext.getSourceVersions().values().iterator().next().getStackId();
+
// resolve or build a proper config upgrade pack - always start out with the config pack
// for the current stack and merge into that
//
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/DefaultServiceCalculatedState.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HBaseServiceCalculatedState.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HDFSServiceCalculatedState.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HiveServiceCalculatedState.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/OozieServiceCalculatedState.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/YARNServiceCalculatedState.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostComponentStateDAO.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentStateEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryAction.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/stack/RepoUtil.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartup.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/Clusters.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceFactory.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContextFactory.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Direction.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeScope.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/topology/validators/RequiredConfigPropertiesValidator.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatTestHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
index 78c3640,b54f64a..7d95ed2
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
@@@ -455,9 -458,9 +455,9 @@@ public class TestHeartbeatHandler
HeartBeatHandler handler = new HeartBeatHandler(fsm, new ActionQueue(), am,
injector);
Cluster cluster = heartbeatTestHelper.getDummyCluster();
- Service hdfs = cluster.addService(HDFS);
+ Service hdfs = addService(cluster, HDFS);
- /**
+ /*
* Add three service components enabled for auto start.
*/
hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index eb82ba3,fcf99ba..ec19724
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@@ -1943,9 -1921,9 +1943,8 @@@ public class AmbariManagementController
} catch (Exception e) {
// Expected
}
-
}
- @Test
/**
* Create a cluster with a service, and verify that the request tasks have the correct output log and error log paths.
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
index b2fad16,883eff5..336db36
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
@@@ -1917,6 -2271,92 +1917,11 @@@ public class ClusterTest
}
/**
+ * Checks case when there are 2 cluster stack versions present (CURRENT and OUT_OF_SYNC),
+ * and we add a new host to cluster. On a new host, both CURRENT and OUT_OF_SYNC host
+ * versions should be present
+ */
- @Test
- public void testTransitionHostVersionState_OutOfSync_BlankCurrent() throws Exception {
- StackId stackId = new StackId("HDP-2.0.5");
- String clusterName = "c1";
- clusters.addCluster(clusterName, stackId);
- final Cluster c1 = clusters.getCluster(clusterName);
- Assert.assertEquals(clusterName, c1.getClusterName());
-
- clusters.addHost("h-1");
- clusters.addHost("h-2");
- String h3 = "h-3";
- clusters.addHost(h3);
-
- for (String hostName : new String[] { "h-1", "h-2", h3}) {
- Host h = clusters.getHost(hostName);
- h.setIPv4("ipv4");
- h.setIPv6("ipv6");
-
- Map<String, String> hostAttributes = new HashMap<>();
- hostAttributes.put("os_family", "redhat");
- hostAttributes.put("os_release_version", "5.9");
- h.setHostAttributes(hostAttributes);
- }
-
- String v1 = "2.0.5-1";
- String v2 = "2.0.5-2";
- c1.setDesiredStackVersion(stackId);
- RepositoryVersionEntity rve1 = helper.getOrCreateRepositoryVersion(stackId,
- v1);
- RepositoryVersionEntity rve2 = helper.getOrCreateRepositoryVersion(stackId,
- v2);
-
- c1.setCurrentStackVersion(stackId);
- c1.createClusterVersion(stackId, v1, "admin",
- RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, v1, RepositoryVersionState.CURRENT);
-
- clusters.mapHostToCluster("h-1", clusterName);
- clusters.mapHostToCluster("h-2", clusterName);
-
- ClusterVersionDAOMock.failOnCurrentVersionState = false;
-
- Service service = c1.addService("ZOOKEEPER");
- ServiceComponent sc = service.addServiceComponent("ZOOKEEPER_SERVER");
- sc.addServiceComponentHost("h-1");
- sc.addServiceComponentHost("h-2");
-
- c1.createClusterVersion(stackId, v2, "admin",
- RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.INSTALLED);
- c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.OUT_OF_SYNC);
-
- clusters.mapHostToCluster(h3, clusterName);
-
- // This method is usually called when we receive heartbeat from new host
- HostEntity hostEntity3 = mock(HostEntity.class);
- when(hostEntity3.getHostName()).thenReturn(h3);
-
- // HACK: to workaround issue with NullPointerException at
- // org.eclipse.persistence.internal.sessions.MergeManager.registerObjectForMergeCloneIntoWorkingCopy(MergeManager.java:1037)
- // during hostVersionDAO.merge()
- HostVersionDAO hostVersionDAOMock = mock(HostVersionDAO.class);
- Field field = ClusterImpl.class.getDeclaredField("hostVersionDAO");
- field.setAccessible(true);
- field.set(c1, hostVersionDAOMock);
-
- ArgumentCaptor<HostVersionEntity> hostVersionCaptor = ArgumentCaptor.forClass(HostVersionEntity.class);
-
- ClusterVersionDAOMock.mockedClusterVersions = new ArrayList<ClusterVersionEntity>() {{
- addAll(c1.getAllClusterVersions());
- }};
-
- c1.transitionHostVersionState(hostEntity3, rve1, stackId);
-
- // Revert fields of static instance
- ClusterVersionDAOMock.mockedClusterVersions = null;
-
- verify(hostVersionDAOMock).merge(hostVersionCaptor.capture());
- assertEquals(hostVersionCaptor.getValue().getState(), RepositoryVersionState.CURRENT);
- }
-
+ /**
* Tests that an existing configuration can be successfully updated without
* creating a new version.
*
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelperTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/245afc1b/ambari-server/src/test/java/org/apache/ambari/server/utils/StageUtilsTest.java
----------------------------------------------------------------------
[13/50] [abbrv] ambari git commit: AMBARI-20971 - Repository Resource
Providers Should Expose the Repository ID by Default on Minimal Responses
(jonathanhurley)
Posted by jo...@apache.org.
AMBARI-20971 - Repository Resource Providers Should Expose the Repository ID by Default on Minimal Responses (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b1f704df
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b1f704df
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b1f704df
Branch: refs/heads/trunk
Commit: b1f704dfb9b54a57b14ecb5314b65bee7288eeb1
Parents: a263267
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue May 9 17:05:09 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue May 9 17:05:09 2017 -0400
----------------------------------------------------------------------
.../AbstractAuthorizedResourceProvider.java | 21 ++++++++++++++++++++
.../AbstractControllerResourceProvider.java | 9 +++++++--
...atibleRepositoryVersionResourceProvider.java | 17 ++++++++--------
.../internal/ReadOnlyResourceProvider.java | 20 +++++++++++++++++++
.../internal/RepositoryResourceProvider.java | 2 +-
.../RepositoryVersionResourceProvider.java | 21 ++++++++------------
6 files changed, 65 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/b1f704df/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java
index 92a7256..32e59eb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java
@@ -34,6 +34,7 @@ import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
import org.apache.ambari.server.controller.spi.ResourceProvider;
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;
@@ -91,6 +92,26 @@ public abstract class AbstractAuthorizedResourceProvider extends AbstractResourc
}
/**
+ * Create a new resource provider. This constructor will initialize the
+ * specified {@link Resource.Type} with the provided keys. It should be used
+ * in cases where the provider declares its own keys instead of reading them
+ * from a JSON file.
+ *
+ * @param type
+ * the type to set the properties for (not {@code null}).
+ * @param propertyIds
+ * the property ids
+ * @param keyPropertyIds
+ * the key property ids
+ */
+ AbstractAuthorizedResourceProvider(Resource.Type type, Set<String> propertyIds,
+ Map<Resource.Type, String> keyPropertyIds) {
+ this(propertyIds, keyPropertyIds);
+ PropertyHelper.setPropertyIds(type, propertyIds);
+ PropertyHelper.setKeyPropertyIds(type, keyPropertyIds);
+ }
+
+ /**
* Gets the authorizations for which one is needed to the grant access to <b>create</b> resources
* or a particular resource.
* <p/>
http://git-wip-us.apache.org/repos/asf/ambari/blob/b1f704df/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
index a27a5d0..a762e2b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
@@ -59,8 +59,13 @@ public abstract class AbstractControllerResourceProvider extends AbstractAuthori
}
/**
- * Create a new resource provider for the given management controller.
+ * Create a new resource provider for the given management controller. This
+ * constructor will initialize the specified {@link Resource.Type} with the
+ * provided keys. It should be used in cases where the provider declares its
+ * own keys instead of reading them from a JSON file.
*
+ * @param type
+ * the type to set the properties for (not {@code null}).
* @param propertyIds
* the property ids
* @param keyPropertyIds
@@ -68,7 +73,7 @@ public abstract class AbstractControllerResourceProvider extends AbstractAuthori
* @param managementController
* the management controller
*/
- protected AbstractControllerResourceProvider(Resource.Type type, Set<String> propertyIds,
+ AbstractControllerResourceProvider(Resource.Type type, Set<String> propertyIds,
Map<Resource.Type, String> keyPropertyIds, AmbariManagementController managementController) {
this(propertyIds, keyPropertyIds, managementController);
PropertyHelper.setPropertyIds(type, propertyIds);
http://git-wip-us.apache.org/repos/asf/ambari/blob/b1f704df/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
index 98b91b3..fe8df44 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
@@ -52,6 +52,7 @@ import org.apache.ambari.server.state.repository.ManifestServiceInfo;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.UpgradePack;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -90,14 +91,12 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc
REPOSITORY_VERSION_SERVICES,
REPOSITORY_VERSION_STACK_SERVICES);
- static Map<Type, String> keyPropertyIds = new HashMap<Type, String>() {
- {
- put(Type.Stack, REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID);
- put(Type.StackVersion, REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID);
- put(Type.Upgrade, REPOSITORY_UPGRADES_SUPPORTED_TYPES_ID);
- put(Type.CompatibleRepositoryVersion, REPOSITORY_VERSION_ID_PROPERTY_ID);
- }
- };
+ static Map<Type, String> keyPropertyIds = new ImmutableMap.Builder<Type, String>()
+ .put(Type.Stack, REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID)
+ .put(Type.StackVersion, REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID)
+ .put(Type.Upgrade, REPOSITORY_UPGRADES_SUPPORTED_TYPES_ID)
+ .put(Type.CompatibleRepositoryVersion, REPOSITORY_VERSION_ID_PROPERTY_ID)
+ .build();
@Inject
private static RepositoryVersionDAO s_repositoryVersionDAO;
@@ -109,7 +108,7 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc
* Create a new resource provider.
*/
public CompatibleRepositoryVersionResourceProvider(AmbariManagementController amc) {
- super(propertyIds, keyPropertyIds, amc);
+ super(Type.CompatibleRepositoryVersion, propertyIds, keyPropertyIds, amc);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/b1f704df/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ReadOnlyResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ReadOnlyResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ReadOnlyResourceProvider.java
index 342983f..fd35673 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ReadOnlyResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ReadOnlyResourceProvider.java
@@ -43,6 +43,26 @@ public abstract class ReadOnlyResourceProvider extends AbstractControllerResourc
super(propertyIds, keyPropertyIds, managementController);
}
+ /**
+ * Create a new resource provider for the given management controller. This
+ * constructor will initialize the specified {@link Resource.Type} with the
+ * provided keys. It should be used in cases where the provider declares its
+ * own keys instead of reading them from a JSON file.
+ *
+ * @param type
+ * the type to set the properties for (not {@code null}).
+ * @param propertyIds
+ * the property ids
+ * @param keyPropertyIds
+ * the key property ids
+ * @param managementController
+ * the management controller
+ */
+ ReadOnlyResourceProvider(Resource.Type type, Set<String> propertyIds,
+ Map<Resource.Type, String> keyPropertyIds, AmbariManagementController managementController) {
+ super(type, propertyIds, keyPropertyIds, managementController);
+ }
+
@Override
public RequestStatus createResources(Request request) throws SystemException,
UnsupportedPropertyException, ResourceAlreadyExistsException,
http://git-wip-us.apache.org/repos/asf/ambari/blob/b1f704df/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java
index 6665087..dd29087 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java
@@ -105,7 +105,7 @@ public class RepositoryResourceProvider extends AbstractControllerResourceProvid
};
public RepositoryResourceProvider(AmbariManagementController managementController) {
- super(propertyIds, keyPropertyIds, managementController);
+ super(Resource.Type.Repository, propertyIds, keyPropertyIds, managementController);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/b1f704df/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
index a0a3666..ac5fe17 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
@@ -68,6 +68,7 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.google.gson.Gson;
import com.google.inject.Inject;
@@ -100,11 +101,7 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc
public static final String REPOSITORY_VERSION_HAS_CHILDREN = "RepositoryVersions/has_children";
@SuppressWarnings("serial")
- private static Set<String> pkPropertyIds = new HashSet<String>() {
- {
- add(REPOSITORY_VERSION_ID_PROPERTY_ID);
- }
- };
+ private static Set<String> pkPropertyIds = Sets.newHashSet(REPOSITORY_VERSION_ID_PROPERTY_ID);
@SuppressWarnings("serial")
public static Set<String> propertyIds = Sets.newHashSet(
@@ -125,13 +122,11 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc
REPOSITORY_VERSION_STACK_SERVICES);
@SuppressWarnings("serial")
- public static Map<Type, String> keyPropertyIds = new HashMap<Type, String>() {
- {
- put(Type.Stack, REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID);
- put(Type.StackVersion, REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID);
- put(Type.RepositoryVersion, REPOSITORY_VERSION_ID_PROPERTY_ID);
- }
- };
+ public static Map<Type, String> keyPropertyIds = new ImmutableMap.Builder<Type, String>()
+ .put(Type.Stack, REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID)
+ .put(Type.StackVersion, REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID)
+ .put(Type.RepositoryVersion, REPOSITORY_VERSION_ID_PROPERTY_ID)
+ .build();
@Inject
private Gson gson;
@@ -159,7 +154,7 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc
*
*/
public RepositoryVersionResourceProvider() {
- super(propertyIds, keyPropertyIds);
+ super(Resource.Type.RepositoryVersion, propertyIds, keyPropertyIds);
setRequiredCreateAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_MANAGE_STACK_VERSIONS));
setRequiredDeleteAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_MANAGE_STACK_VERSIONS));
[27/50] [abbrv] ambari git commit: AMBARI-21091. HDP deploy from
public repo failed. The left-off code breaks ambari-server setup
(dlysnichenko)
Posted by jo...@apache.org.
AMBARI-21091. HDP deploy from public repo failed. The left-off code breaks ambari-server setup (dlysnichenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/11325b7c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/11325b7c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/11325b7c
Branch: refs/heads/trunk
Commit: 11325b7c92f2d0603013fef13b623ca126b69f7c
Parents: 1e2ccbf
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Mon May 22 20:00:28 2017 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Mon May 22 20:00:28 2017 +0300
----------------------------------------------------------------------
ambari-server/src/main/python/ambari-server.py | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/11325b7c/ambari-server/src/main/python/ambari-server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari-server.py b/ambari-server/src/main/python/ambari-server.py
index bd86df2..d84e833 100755
--- a/ambari-server/src/main/python/ambari-server.py
+++ b/ambari-server/src/main/python/ambari-server.py
@@ -797,7 +797,6 @@ def init_action_parser(action, parser):
RESET_ACTION: init_empty_parser_options,
STATUS_ACTION: init_empty_parser_options,
UPGRADE_ACTION: init_empty_parser_options,
- UPGRADE_STACK_ACTION:init_empty_parser_options,
LDAP_SETUP_ACTION: init_ldap_setup_parser_options,
LDAP_SYNC_ACTION: init_ldap_sync_parser_options,
SET_CURRENT_ACTION: init_set_current_parser_options,
[24/50] [abbrv] ambari git commit: AMBARI-21047 - Iterative Fixes For
Patch/Service Upgrade Development (jonathanhurley)
Posted by jo...@apache.org.
AMBARI-21047 - Iterative Fixes For Patch/Service Upgrade Development (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c4132783
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c4132783
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c4132783
Branch: refs/heads/trunk
Commit: c4132783225b541f0425526f7d1edaa822553229
Parents: 1427d81
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed May 17 13:46:08 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Thu May 18 09:45:03 2017 -0400
----------------------------------------------------------------------
.../libraries/functions/decorator.py | 22 +-
.../upgrades/upgrade_nonrolling_new_stack.xml | 2 +-
.../actionmanager/ExecutionCommandWrapper.java | 46 +++--
.../AmbariManagementControllerImpl.java | 2 +-
.../ClusterStackVersionResourceProvider.java | 6 +-
.../internal/UpgradeResourceProvider.java | 141 +++++++------
.../upgrades/AbstractUpgradeServerAction.java | 4 -
.../upgrades/FinalizeUpgradeAction.java | 3 +-
.../upgrades/UpdateDesiredStackAction.java | 19 --
.../org/apache/ambari/server/state/Cluster.java | 7 -
.../ambari/server/state/UpgradeContext.java | 206 +++++++++----------
.../server/state/cluster/ClusterImpl.java | 15 --
.../custom_actions/scripts/ru_set_all.py | 49 +----
.../AmbariManagementControllerImplTest.java | 2 +-
.../ComponentVersionCheckActionTest.java | 6 -
.../upgrades/UpgradeActionTest.java | 22 +-
.../stack/upgrade/StageWrapperBuilderTest.java | 2 +-
.../server/upgrade/UpgradeCatalog200Test.java | 2 +-
.../server/upgrade/UpgradeCatalog210Test.java | 7 +
.../server/upgrade/UpgradeCatalogHelper.java | 5 +-
.../python/custom_actions/test_ru_set_all.py | 124 +----------
.../src/test/python/stacks/utils/RMFTestCase.py | 12 +-
.../upgrades/upgrade_nonrolling_new_stack.xml | 2 +-
23 files changed, 248 insertions(+), 458 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-common/src/main/python/resource_management/libraries/functions/decorator.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/decorator.py b/ambari-common/src/main/python/resource_management/libraries/functions/decorator.py
index b5b804d..9446d56 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/decorator.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/decorator.py
@@ -21,7 +21,7 @@ Ambari Agent
"""
import time
-__all__ = ['retry', 'safe_retry', ]
+__all__ = ['retry', 'safe_retry', 'experimental' ]
from resource_management.core.logger import Logger
@@ -107,3 +107,23 @@ def safe_retry(times=3, sleep_time=1, max_sleep_time=8, backoff_factor=1, err_cl
return wrapper
return decorator
+
+
+def experimental(feature=None, comment=None, disable=False):
+ """
+ Annotates a function as being experiemental, optionally logging a comment.
+ :param feature: the feature area that is experimental
+ :param comment: the comment to log
+ :param disable True to skip invocation of the method entirely, defaults to False.
+ :return:
+ """
+ def decorator(function):
+ def wrapper(*args, **kwargs):
+ if comment:
+ Logger.info(comment)
+
+ if not disable:
+ return function(*args, **kwargs)
+ return wrapper
+ return decorator
+
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml b/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml
index ad6174c..d0f3e16 100644
--- a/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml
+++ b/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml
@@ -231,7 +231,7 @@
<execute-stage title="Restore configuration directories and remove HDP 2.3 symlinks">
<task xsi:type="execute">
<script>scripts/ru_set_all.py</script>
- <function>unlink_all_configs</function>
+ <function>foo_function</function>
</task>
</execute-stage>
</group>
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
index f680c09..2ec09d9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
@@ -23,6 +23,7 @@ import java.util.TreeMap;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ClusterNotFoundException;
+import org.apache.ambari.server.ServiceNotFoundException;
import org.apache.ambari.server.agent.AgentCommand.AgentCommandType;
import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
@@ -184,30 +185,39 @@ public class ExecutionCommandWrapper {
// set the repository version for the component this command is for -
// always use the current desired version
- RepositoryVersionEntity repositoryVersion = null;
- String serviceName = executionCommand.getServiceName();
- if (!StringUtils.isEmpty(serviceName)) {
- Service service = cluster.getService(serviceName);
- if (null != service) {
- repositoryVersion = service.getDesiredRepositoryVersion();
- }
+ try {
+ RepositoryVersionEntity repositoryVersion = null;
+ String serviceName = executionCommand.getServiceName();
+ if (!StringUtils.isEmpty(serviceName)) {
+ Service service = cluster.getService(serviceName);
+ if (null != service) {
+ repositoryVersion = service.getDesiredRepositoryVersion();
+ }
- String componentName = executionCommand.getComponentName();
- if (!StringUtils.isEmpty(componentName)) {
- ServiceComponent serviceComponent = service.getServiceComponent(
- executionCommand.getComponentName());
+ String componentName = executionCommand.getComponentName();
+ if (!StringUtils.isEmpty(componentName)) {
+ ServiceComponent serviceComponent = service.getServiceComponent(
+ executionCommand.getComponentName());
- if (null != serviceComponent) {
- repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
+ if (null != serviceComponent) {
+ repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
+ }
}
}
- }
- if (null != repositoryVersion) {
- executionCommand.getCommandParams().put(KeyNames.VERSION, repositoryVersion.getVersion());
- executionCommand.getHostLevelParams().put(KeyNames.CURRENT_VERSION, repositoryVersion.getVersion());
+ if (null != repositoryVersion) {
+ executionCommand.getCommandParams().put(KeyNames.VERSION,
+ repositoryVersion.getVersion());
+ executionCommand.getHostLevelParams().put(KeyNames.CURRENT_VERSION,
+ repositoryVersion.getVersion());
+ }
+ } catch (ServiceNotFoundException serviceNotFoundException) {
+ // it's possible that there are commands specified for a service where
+ // the service doesn't exist yet
+ LOG.warn(
+ "The service {} is not installed in the cluster. No repository version will be sent for this command.",
+ executionCommand.getServiceName());
}
-
}
} catch (ClusterNotFoundException cnfe) {
// it's possible that there are commands without clusters; in such cases,
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/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 a4f59a5..e373f81 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
@@ -3991,7 +3991,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
RepositoryVersionEntity desiredRepositoryVersion = null;
RequestOperationLevel operationLevel = actionExecContext.getOperationLevel();
- if (null != operationLevel) {
+ if (null != operationLevel && null != operationLevel.getServiceName()) {
Service service = cluster.getService(operationLevel.getServiceName());
if (null != service) {
desiredRepositoryVersion = service.getDesiredRepositoryVersion();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index 9ca8ddc..6447888 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -55,7 +55,6 @@ import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
@@ -169,9 +168,6 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
private static Configuration configuration;
@Inject
- private static HostComponentStateDAO hostComponentStateDAO;
-
- @Inject
private static RepositoryVersionHelper repoVersionHelper;
@@ -222,7 +218,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
requestedEntities.add(id);
} else {
cluster.getCurrentStackVersion();
- List<RepositoryVersionEntity> entities = repositoryVersionDAO.findByStack(cluster.getCurrentStackVersion());
+ List<RepositoryVersionEntity> entities = repositoryVersionDAO.findAll();
for (RepositoryVersionEntity entity : entities) {
requestedEntities.add(entity.getId());
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index c3691bf..6027ce7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -80,7 +80,6 @@ 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.serveraction.upgrades.UpdateDesiredStackAction;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
@@ -105,6 +104,7 @@ import org.apache.ambari.server.state.stack.upgrade.ServerSideActionTask;
import org.apache.ambari.server.state.stack.upgrade.StageWrapper;
import org.apache.ambari.server.state.stack.upgrade.Task;
import org.apache.ambari.server.state.stack.upgrade.TaskWrapper;
+import org.apache.ambari.server.state.stack.upgrade.UpdateStackGrouping;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostServerActionEvent;
import org.apache.commons.collections.CollectionUtils;
@@ -144,17 +144,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
public static final String UPGRADE_FAIL_ON_CHECK_WARNINGS = "Upgrade/fail_on_check_warnings";
/**
- * Names that appear in the Upgrade Packs that are used by
- * {@link org.apache.ambari.server.state.cluster.ClusterImpl#isNonRollingUpgradePastUpgradingStack}
- * to determine if an upgrade has already changed the version to use.
- * For this reason, DO NOT CHANGE the name of these since they represent historic values.
- */
- public static final String CONST_UPGRADE_GROUP_NAME = "UPDATE_DESIRED_STACK_ID";
- public static final String CONST_UPGRADE_ITEM_TEXT = "Update Target Stack";
- public static final String CONST_CUSTOM_COMMAND_NAME = UpdateDesiredStackAction.class.getName();
-
-
- /**
* Skip slave/client component failures if the tasks are skippable.
*/
public static final String UPGRADE_SKIP_FAILURES = "Upgrade/skip_failures";
@@ -208,11 +197,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
private static final Set<String> PROPERTY_IDS = new HashSet<>();
- /**
- * The list of supported services put on a command.
- */
- public static final String COMMAND_PARAM_SUPPORTED_SERVICES = "supported_services";
-
private static final String DEFAULT_REASON_TEMPLATE = "Aborting upgrade %s";
private static final Map<Resource.Type, String> KEY_PROPERTY_IDS = new HashMap<>();
@@ -661,23 +645,38 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
// Non Rolling Upgrades require a group with name "UPDATE_DESIRED_STACK_ID".
// This is needed as a marker to indicate which version to use when an upgrade is paused.
if (pack.getType() == UpgradeType.NON_ROLLING) {
- boolean foundGroupWithNameUPDATE_DESIRED_STACK_ID = false;
+ boolean foundUpdateDesiredRepositoryIdGrouping = false;
for (UpgradeGroupHolder group : groups) {
- if (group.name.equalsIgnoreCase(CONST_UPGRADE_GROUP_NAME)) {
- foundGroupWithNameUPDATE_DESIRED_STACK_ID = true;
+ if (group.groupClass == UpdateStackGrouping.class) {
+ foundUpdateDesiredRepositoryIdGrouping = true;
break;
}
}
- if (foundGroupWithNameUPDATE_DESIRED_STACK_ID == false) {
- throw new AmbariException(String.format("NonRolling Upgrade Pack %s requires a Group with name %s",
- pack.getName(), CONST_UPGRADE_GROUP_NAME));
+ if (!foundUpdateDesiredRepositoryIdGrouping) {
+ throw new AmbariException(String.format(
+ "Express upgrade packs are required to have a group of type %s. The upgrade pack %s is missing this grouping.",
+ "update-stack", pack.getName()));
}
}
List<UpgradeGroupEntity> groupEntities = new ArrayList<>();
RequestStageContainer req = createRequest(upgradeContext);
+ UpgradeEntity upgrade = new UpgradeEntity();
+ upgrade.setRepositoryVersion(upgradeContext.getRepositoryVersion());
+ upgrade.setClusterId(cluster.getClusterId());
+ upgrade.setDirection(direction);
+ upgrade.setUpgradePackage(pack.getName());
+ upgrade.setUpgradeType(pack.getType());
+ upgrade.setAutoSkipComponentFailures(upgradeContext.isComponentFailureAutoSkipped());
+ upgrade.setAutoSkipServiceCheckFailures(upgradeContext.isServiceCheckFailureAutoSkipped());
+ upgrade.setDowngradeAllowed(upgradeContext.isDowngradeAllowed());
+
+ // create to/from history for this upgrade - this should be done before any
+ // possible changes to the desired version for components
+ addComponentHistoryToUpgrade(cluster, upgrade, upgradeContext);
+
/**
During a Rolling Upgrade, change the desired Stack Id if jumping across
major stack versions (e.g., HDP 2.2 -> 2.3), and then set config changes
@@ -761,56 +760,11 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
}
}
- UpgradeEntity entity = new UpgradeEntity();
- entity.setRepositoryVersion(upgradeContext.getRepositoryVersion());
- entity.setUpgradeGroups(groupEntities);
- entity.setClusterId(cluster.getClusterId());
- entity.setDirection(direction);
- entity.setUpgradePackage(pack.getName());
- entity.setUpgradeType(pack.getType());
- entity.setAutoSkipComponentFailures(upgradeContext.isComponentFailureAutoSkipped());
- entity.setAutoSkipServiceCheckFailures(upgradeContext.isServiceCheckFailureAutoSkipped());
-
- if (upgradeContext.getDirection().isDowngrade()) {
- // !!! You can't downgrade a Downgrade, no matter what the upgrade pack says.
- entity.setDowngradeAllowed(false);
- } else {
- entity.setDowngradeAllowed(pack.isDowngradeAllowed());
- }
-
- // set upgrade history for every component in the upgrade
- Set<String> services = upgradeContext.getSupportedServices();
- for (String serviceName : services) {
- Service service = cluster.getService(serviceName);
- Map<String, ServiceComponent> componentMap = service.getServiceComponents();
- for (ServiceComponent component : componentMap.values()) {
- UpgradeHistoryEntity history = new UpgradeHistoryEntity();
- history.setUpgrade(entity);
- history.setServiceName(serviceName);
- history.setComponentName(component.getName());
-
- // depending on whether this is an upgrade or a downgrade, the history
- // will be different
- if (upgradeContext.getDirection() == Direction.UPGRADE) {
- history.setFromRepositoryVersion(component.getDesiredRepositoryVersion());
- history.setTargetRepositoryVersion(upgradeContext.getRepositoryVersion());
- } else {
- // the target version on a downgrade is the original version that the
- // service was on in the failed upgrade
- RepositoryVersionEntity targetRepositoryVersion =
- upgradeContext.getTargetRepositoryVersion(serviceName);
-
- history.setFromRepositoryVersion(upgradeContext.getRepositoryVersion());
- history.setTargetRepositoryVersion(targetRepositoryVersion);
- }
-
- // add the history
- entity.addHistory(history);
- }
- }
+ // set all of the groups we just created
+ upgrade.setUpgradeGroups(groupEntities);
req.getRequestStatusResponse();
- return createUpgradeInsideTransaction(cluster, req, entity);
+ return createUpgradeInsideTransaction(cluster, req, upgrade);
}
/**
@@ -1418,7 +1372,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
Map<String, String> commandParams = getNewParameterMap(request, context);
commandParams.put(UpgradeContext.COMMAND_PARAM_UPGRADE_PACK, upgradePack.getName());
- commandParams.put(COMMAND_PARAM_SUPPORTED_SERVICES, StringUtils.join(context.getSupportedServices(), ','));
// Notice that this does not apply any params because the input does not specify a stage.
// All of the other actions do use additional params.
@@ -1646,6 +1599,50 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
}
/**
+ * Creates the {@link UpgradeHistoryEntity} instances for this upgrade for
+ * every component participating.
+ *
+ * @param cluster
+ * the cluster (not {@code null}).
+ * @param upgrade
+ * the upgrade to add the entities to (not {@code null}).
+ * @param upgradeContext
+ * the upgrade context for this upgrade (not {@code null}).
+ */
+ private void addComponentHistoryToUpgrade(Cluster cluster, UpgradeEntity upgrade,
+ UpgradeContext upgradeContext) throws AmbariException {
+ Set<String> services = upgradeContext.getSupportedServices();
+ for (String serviceName : services) {
+ Service service = cluster.getService(serviceName);
+ Map<String, ServiceComponent> componentMap = service.getServiceComponents();
+ for (ServiceComponent component : componentMap.values()) {
+ UpgradeHistoryEntity history = new UpgradeHistoryEntity();
+ history.setUpgrade(upgrade);
+ history.setServiceName(serviceName);
+ history.setComponentName(component.getName());
+
+ // depending on whether this is an upgrade or a downgrade, the history
+ // will be different
+ if (upgradeContext.getDirection() == Direction.UPGRADE) {
+ history.setFromRepositoryVersion(component.getDesiredRepositoryVersion());
+ history.setTargetRepositoryVersion(upgradeContext.getRepositoryVersion());
+ } else {
+ // the target version on a downgrade is the original version that the
+ // service was on in the failed upgrade
+ RepositoryVersionEntity targetRepositoryVersion = upgradeContext.getTargetRepositoryVersion(
+ serviceName);
+
+ history.setFromRepositoryVersion(upgradeContext.getRepositoryVersion());
+ history.setTargetRepositoryVersion(targetRepositoryVersion);
+ }
+
+ // add the history
+ upgrade.addHistory(history);
+ }
+ }
+ }
+
+ /**
* Builds the correct {@link ConfigUpgradePack} based on the upgrade and
* source stack.
* <ul>
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java
index 4942f27..be69311 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java
@@ -32,10 +32,6 @@ import com.google.inject.Inject;
*/
public abstract class AbstractUpgradeServerAction extends AbstractServerAction {
- public static final String CLUSTER_NAME_KEY = UpgradeContext.COMMAND_PARAM_CLUSTER_NAME;
- public static final String UPGRADE_DIRECTION_KEY = UpgradeContext.COMMAND_PARAM_DIRECTION;
- protected static final String REQUEST_ID = UpgradeContext.COMMAND_PARAM_REQUEST_ID;
-
@Inject
protected Clusters m_clusters;
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
index c4e073c..55ec84b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
@@ -75,7 +75,7 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
private AmbariMetaInfo ambariMetaInfo;
@Inject
- VersionEventPublisher versionEventPublisher;
+ private VersionEventPublisher versionEventPublisher;
@Override
public CommandReport execute(ConcurrentMap<String, Object> requestSharedDataContext)
@@ -241,7 +241,6 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
}
outSB.append(message).append(System.lineSeparator());
- outSB.append(message).append(System.lineSeparator());
// iterate through all host components and make sure that they are on the
// correct version; if they are not, then this will throw an exception
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
index 657cb07..2eec581 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
@@ -61,22 +61,6 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
*/
private static final Logger LOG = LoggerFactory.getLogger(UpdateDesiredStackAction.class);
- public static final String COMMAND_PARAM_DIRECTION = "upgrade_direction";
- public static final String COMMAND_PARAM_UPGRADE_PACK = "upgrade_pack";
-
- /**
- * The original "current" stack of the cluster before the upgrade started.
- * This is the same regardless of whether the current direction is
- * {@link Direction#UPGRADE} or {@link Direction#DOWNGRADE}.
- */
- public static final String COMMAND_PARAM_ORIGINAL_STACK = "original_stack";
-
- /**
- * The target upgrade stack before the upgrade started. This is the same
- * regardless of whether the current direction is {@link Direction#UPGRADE} or
- * {@link Direction#DOWNGRADE}.
- */
- public static final String COMMAND_PARAM_TARGET_STACK = "target_stack";
/**
* The Cluster that this ServerAction implementation is executing on.
@@ -118,9 +102,6 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
LOG.warn(String.format("Did not receive role parameter %s, will save configs using anonymous username %s", ServerAction.ACTION_USER_NAME, userName));
}
- // invalidate any cached effective ID
- cluster.invalidateUpgradeEffectiveVersion();
-
return updateDesiredRepositoryVersion(cluster, upgradeContext, userName);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/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 9098cf1..cf2844b 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
@@ -675,11 +675,4 @@ public interface Cluster {
*/
void addSuspendedUpgradeParameters(Map<String, String> commandParams,
Map<String, String> roleParams);
-
- /**
- * Invalidates any cached effective cluster versions for upgrades.
- *
- * @see #getEffectiveClusterVersion()
- */
- void invalidateUpgradeEffectiveVersion();
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
index db58d27..5c29fb5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
@@ -17,7 +17,6 @@
*/
package org.apache.ambari.server.state;
-import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_CLUSTER_NAME;
import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_DIRECTION;
import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_FAIL_ON_CHECK_WARNINGS;
import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_HOST_ORDERED_HOSTS;
@@ -116,11 +115,6 @@ public class UpgradeContext {
final private UpgradeType m_type;
/**
- * The request parameters from the REST API for creating this upgrade.
- */
- final private Map<String, Object> m_upgradeRequestMap;
-
- /**
* The upgrade pack for this upgrade.
*/
private UpgradePack m_upgradePack;
@@ -247,10 +241,9 @@ public class UpgradeContext {
m_repoVersionDAO = repoVersionDAO;
m_cluster = cluster;
- m_upgradeRequestMap = upgradeRequestMap;
// determine direction
- String directionProperty = (String) m_upgradeRequestMap.get(UPGRADE_DIRECTION);
+ String directionProperty = (String) upgradeRequestMap.get(UPGRADE_DIRECTION);
if (StringUtils.isEmpty(directionProperty)) {
throw new AmbariException(String.format("%s is required", UPGRADE_DIRECTION));
}
@@ -258,10 +251,10 @@ public class UpgradeContext {
m_direction = Direction.valueOf(directionProperty);
// determine upgrade type (default is ROLLING)
- String upgradeTypeProperty = (String) m_upgradeRequestMap.get(UPGRADE_TYPE);
+ String upgradeTypeProperty = (String) upgradeRequestMap.get(UPGRADE_TYPE);
if (StringUtils.isNotBlank(upgradeTypeProperty)) {
try {
- m_type = UpgradeType.valueOf(m_upgradeRequestMap.get(UPGRADE_TYPE).toString());
+ m_type = UpgradeType.valueOf(upgradeRequestMap.get(UPGRADE_TYPE).toString());
} catch (Exception e) {
throw new AmbariException(String.format("Property %s has an incorrect value of %s.",
UPGRADE_TYPE, upgradeTypeProperty));
@@ -274,7 +267,7 @@ public class UpgradeContext {
// depending on the direction, we must either have a target repository or an upgrade we are downgrading from
switch(m_direction){
case UPGRADE:{
- String repositoryVersionId = (String) m_upgradeRequestMap.get(UPGRADE_REPO_VERSION_ID);
+ String repositoryVersionId = (String) upgradeRequestMap.get(UPGRADE_REPO_VERSION_ID);
if (null == repositoryVersionId) {
throw new AmbariException(
String.format("The property %s is required when the upgrade direction is %s",
@@ -340,7 +333,7 @@ public class UpgradeContext {
* For the unit tests tests, there are multiple upgrade packs for the same
* type, so allow picking one of them. In prod, this is empty.
*/
- String preferredUpgradePackName = (String) m_upgradeRequestMap.get(UPGRADE_PACK);
+ String preferredUpgradePackName = (String) upgradeRequestMap.get(UPGRADE_PACK);
@Experimental(feature = ExperimentalFeature.PATCH_UPGRADES, comment="This is wrong")
String upgradePackFromVersion = cluster.getService(
@@ -352,7 +345,8 @@ public class UpgradeContext {
// the validator will throw an exception if the upgrade request is not valid
UpgradeRequestValidator upgradeRequestValidator = buildValidator(m_type);
- upgradeRequestValidator.validate(this);
+ upgradeRequestValidator.validate(cluster, m_direction, m_type, m_upgradePack,
+ upgradeRequestMap);
// optionally skip failures - this can be supplied on either the request or
// in the upgrade pack explicitely, however the request will always override
@@ -361,21 +355,21 @@ public class UpgradeContext {
boolean skipServiceCheckFailures = m_upgradePack.isServiceCheckFailureAutoSkipped();
// only override the upgrade pack if set on the request
- if (m_upgradeRequestMap.containsKey(UPGRADE_SKIP_FAILURES)) {
+ if (upgradeRequestMap.containsKey(UPGRADE_SKIP_FAILURES)) {
skipComponentFailures = Boolean.parseBoolean(
- (String) m_upgradeRequestMap.get(UPGRADE_SKIP_FAILURES));
+ (String) upgradeRequestMap.get(UPGRADE_SKIP_FAILURES));
}
// only override the upgrade pack if set on the request
- if (m_upgradeRequestMap.containsKey(UPGRADE_SKIP_SC_FAILURES)) {
+ if (upgradeRequestMap.containsKey(UPGRADE_SKIP_SC_FAILURES)) {
skipServiceCheckFailures = Boolean.parseBoolean(
- (String) m_upgradeRequestMap.get(UPGRADE_SKIP_SC_FAILURES));
+ (String) upgradeRequestMap.get(UPGRADE_SKIP_SC_FAILURES));
}
boolean skipManualVerification = false;
- if (m_upgradeRequestMap.containsKey(UPGRADE_SKIP_MANUAL_VERIFICATION)) {
+ if (upgradeRequestMap.containsKey(UPGRADE_SKIP_MANUAL_VERIFICATION)) {
skipManualVerification = Boolean.parseBoolean(
- (String) m_upgradeRequestMap.get(UPGRADE_SKIP_MANUAL_VERIFICATION));
+ (String) upgradeRequestMap.get(UPGRADE_SKIP_MANUAL_VERIFICATION));
}
m_autoSkipComponentFailures = skipComponentFailures;
@@ -423,22 +417,6 @@ public class UpgradeContext {
m_upgradePack = packs.get(upgradePackage);
m_resolver = new MasterHostResolver(configHelper, this);
-
- // since this constructor is initialized from an entity, then this map is
- // not present
- m_upgradeRequestMap = Collections.emptyMap();
- }
-
-
- /**
- * Gets the original mapping of key/value pairs from the request which created
- * the upgrade.
- *
- * @return the original mapping of key/value pairs from the request which
- * created the upgrade.
- */
- public Map<String, Object> getUpgradeRequest() {
- return m_upgradeRequestMap;
}
/**
@@ -752,6 +730,22 @@ public class UpgradeContext {
}
/**
+ * Gets whether a downgrade is allowed for this upgrade. If the direction is
+ * {@link Direction#DOWNGRADE}, then this method always returns false.
+ * Otherwise it will consule {@link UpgradePack#isDowngradeAllowed()}.
+ *
+ * @return {@code true} of a downgrade is allowed for this upgrade,
+ * {@code false} otherwise.
+ */
+ public boolean isDowngradeAllowed() {
+ if (m_direction == Direction.DOWNGRADE) {
+ return false;
+ }
+
+ return m_upgradePack.isDowngradeAllowed();
+ }
+
+ /**
* Builds a chain of {@link UpgradeRequestValidator}s to ensure that the
* incoming request to create a new upgrade is valid.
*
@@ -805,19 +799,22 @@ public class UpgradeContext {
/**
* Validates the upgrade request from this point in the chain.
*
- * @param upgradeContext
+ * @param cluster
+ * @param direction
+ * @param type
* @param upgradePack
+ * @param requestMap
* @throws AmbariException
*/
- final void validate(UpgradeContext upgradeContext)
- throws AmbariException {
+ final void validate(Cluster cluster, Direction direction, UpgradeType type,
+ UpgradePack upgradePack, Map<String, Object> requestMap) throws AmbariException {
// run this instance's check
- check(upgradeContext, upgradeContext.getUpgradePack());
+ check(cluster, direction, type, upgradePack, requestMap);
// pass along to the next
if( null != m_nextValidator ) {
- m_nextValidator.validate(upgradeContext);
+ m_nextValidator.validate(cluster, direction, type, upgradePack, requestMap);
}
}
@@ -825,13 +822,15 @@ public class UpgradeContext {
* Checks to ensure that upgrade request is valid given the specific
* arguments.
*
- * @param upgradeContext
+ * @param cluster
+ * @param direction
+ * @param type
* @param upgradePack
- *
+ * @param requestMap
* @throws AmbariException
*/
- abstract void check(UpgradeContext upgradeContext, UpgradePack upgradePack)
- throws AmbariException;
+ abstract void check(Cluster cluster, Direction direction, UpgradeType type,
+ UpgradePack upgradePack, Map<String, Object> requestMap) throws AmbariException;
}
/**
@@ -844,22 +843,10 @@ public class UpgradeContext {
* {@inheritDoc}
*/
@Override
- public void check(UpgradeContext upgradeContext, UpgradePack upgradePack)
- throws AmbariException {
- Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
-
- String clusterName = (String) requestMap.get(UPGRADE_CLUSTER_NAME);
- String direction = (String) requestMap.get(UPGRADE_DIRECTION);
-
- if (StringUtils.isBlank(clusterName)) {
- throw new AmbariException(String.format("%s is required", UPGRADE_CLUSTER_NAME));
- }
-
- if (StringUtils.isBlank(direction)) {
- throw new AmbariException(String.format("%s is required", UPGRADE_DIRECTION));
- }
+ public void check(Cluster cluster, Direction direction, UpgradeType type,
+ UpgradePack upgradePack, Map<String, Object> requestMap) throws AmbariException {
- if (Direction.valueOf(direction) == Direction.UPGRADE) {
+ if (direction == Direction.UPGRADE) {
String repositoryVersionId = (String) requestMap.get(UPGRADE_REPO_VERSION_ID);
if (StringUtils.isBlank(repositoryVersionId)) {
throw new AmbariException(
@@ -878,11 +865,8 @@ public class UpgradeContext {
* {@inheritDoc}
*/
@Override
- void check(UpgradeContext upgradeContext, UpgradePack upgradePack) throws AmbariException {
- Cluster cluster = upgradeContext.getCluster();
- Direction direction = upgradeContext.getDirection();
- Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
- UpgradeType upgradeType = upgradeContext.getType();
+ void check(Cluster cluster, Direction direction, UpgradeType type, UpgradePack upgradePack,
+ Map<String, Object> requestMap) throws AmbariException {
String repositoryVersionId = (String) requestMap.get(UPGRADE_REPO_VERSION_ID);
boolean skipPrereqChecks = Boolean.parseBoolean((String) requestMap.get(UPGRADE_SKIP_PREREQUISITE_CHECKS));
@@ -913,7 +897,7 @@ public class UpgradeContext {
Predicate preUpgradeCheckPredicate = new PredicateBuilder().property(
PreUpgradeCheckResourceProvider.UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID).equals(cluster.getClusterName()).and().property(
PreUpgradeCheckResourceProvider.UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID).equals(repositoryVersion.getVersion()).and().property(
- PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID).equals(upgradeType).and().property(
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID).equals(type).and().property(
PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_PACK_PROPERTY_ID).equals(preferredUpgradePack).toPredicate();
Request preUpgradeCheckRequest = PropertyHelper.getReadRequest();
@@ -960,10 +944,8 @@ public class UpgradeContext {
* {@inheritDoc}
*/
@Override
- void check(UpgradeContext upgradeContext, UpgradePack upgradePack) throws AmbariException {
- Cluster cluster = upgradeContext.getCluster();
- Direction direction = upgradeContext.getDirection();
- Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
+ void check(Cluster cluster, Direction direction, UpgradeType type, UpgradePack upgradePack,
+ Map<String, Object> requestMap) throws AmbariException {
String skipFailuresRequestProperty = (String) requestMap.get(UPGRADE_SKIP_FAILURES);
if (Boolean.parseBoolean(skipFailuresRequestProperty)) {
@@ -1020,56 +1002,56 @@ public class UpgradeContext {
}
}
}
- }
- /**
- * Builds the list of {@link HostOrderItem}s from the upgrade request. If the
- * upgrade request does not contain the hosts
- *
- * @param requestMap
- * the map of properties from the request (not {@code null}).
- * @return the ordered list of actions to orchestrate for the
- * {@link UpgradeType#HOST_ORDERED} upgrade.
- * @throws AmbariException
- * if the request properties are not valid.
- */
- @SuppressWarnings("unchecked")
- private List<HostOrderItem> extractHostOrderItemsFromRequest(Map<String, Object> requestMap)
- throws AmbariException {
- // ewwww
- Set<Map<String, List<String>>> hostsOrder = (Set<Map<String, List<String>>>) requestMap.get(
- UPGRADE_HOST_ORDERED_HOSTS);
-
- if (CollectionUtils.isEmpty(hostsOrder)) {
- throw new AmbariException(
- String.format("The %s property must be specified when using a %s upgrade type.",
- UPGRADE_HOST_ORDERED_HOSTS, UpgradeType.HOST_ORDERED));
- }
+ /**
+ * Builds the list of {@link HostOrderItem}s from the upgrade request. If
+ * the upgrade request does not contain the hosts
+ *
+ * @param requestMap
+ * the map of properties from the request (not {@code null}).
+ * @return the ordered list of actions to orchestrate for the
+ * {@link UpgradeType#HOST_ORDERED} upgrade.
+ * @throws AmbariException
+ * if the request properties are not valid.
+ */
+ private List<HostOrderItem> extractHostOrderItemsFromRequest(Map<String, Object> requestMap)
+ throws AmbariException {
+ // ewwww
+ Set<Map<String, List<String>>> hostsOrder = (Set<Map<String, List<String>>>) requestMap.get(
+ UPGRADE_HOST_ORDERED_HOSTS);
- List<HostOrderItem> hostOrderItems = new ArrayList<>();
+ if (CollectionUtils.isEmpty(hostsOrder)) {
+ throw new AmbariException(
+ String.format("The %s property must be specified when using a %s upgrade type.",
+ UPGRADE_HOST_ORDERED_HOSTS, UpgradeType.HOST_ORDERED));
+ }
- // extract all of the hosts so that we can ensure they are all accounted for
- Iterator<Map<String, List<String>>> iterator = hostsOrder.iterator();
- while (iterator.hasNext()) {
- Map<String, List<String>> grouping = iterator.next();
- List<String> hosts = grouping.get("hosts");
- List<String> serviceChecks = grouping.get("service_checks");
+ List<HostOrderItem> hostOrderItems = new ArrayList<>();
- if (CollectionUtils.isEmpty(hosts) && CollectionUtils.isEmpty(serviceChecks)) {
- throw new AmbariException(String.format(
- "The %s property must contain at least one object with either a %s or %s key",
- UPGRADE_HOST_ORDERED_HOSTS, "hosts", "service_checks"));
- }
+ // extract all of the hosts so that we can ensure they are all accounted
+ // for
+ Iterator<Map<String, List<String>>> iterator = hostsOrder.iterator();
+ while (iterator.hasNext()) {
+ Map<String, List<String>> grouping = iterator.next();
+ List<String> hosts = grouping.get("hosts");
+ List<String> serviceChecks = grouping.get("service_checks");
- if (CollectionUtils.isNotEmpty(hosts)) {
- hostOrderItems.add(new HostOrderItem(HostOrderActionType.HOST_UPGRADE, hosts));
- }
+ if (CollectionUtils.isEmpty(hosts) && CollectionUtils.isEmpty(serviceChecks)) {
+ throw new AmbariException(String.format(
+ "The %s property must contain at least one object with either a %s or %s key",
+ UPGRADE_HOST_ORDERED_HOSTS, "hosts", "service_checks"));
+ }
+
+ if (CollectionUtils.isNotEmpty(hosts)) {
+ hostOrderItems.add(new HostOrderItem(HostOrderActionType.HOST_UPGRADE, hosts));
+ }
- if (CollectionUtils.isNotEmpty(serviceChecks)) {
- hostOrderItems.add(new HostOrderItem(HostOrderActionType.SERVICE_CHECK, serviceChecks));
+ if (CollectionUtils.isNotEmpty(serviceChecks)) {
+ hostOrderItems.add(new HostOrderItem(HostOrderActionType.SERVICE_CHECK, serviceChecks));
+ }
}
- }
- return hostOrderItems;
+ return hostOrderItems;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/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 281523a..e4ac23e 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
@@ -304,13 +304,6 @@ public class ClusterImpl implements Cluster {
*/
private Map<String, String> m_clusterPropertyCache = new ConcurrentHashMap<>();
- /**
- * A simple cache of the effective cluster version during an upgrade. Since
- * calculation of this during an upgrade is not very quick or clean, it's good
- * to cache it.
- */
- private final Map<Long, String> upgradeEffectiveVersionCache = new ConcurrentHashMap<>();
-
@Inject
public ClusterImpl(@Assisted ClusterEntity clusterEntity, Injector injector,
AmbariEventPublisher eventPublisher)
@@ -969,14 +962,6 @@ public class ClusterImpl implements Cluster {
* {@inheritDoc}
*/
@Override
- public void invalidateUpgradeEffectiveVersion() {
- upgradeEffectiveVersionCache.clear();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
@Transactional
public List<Host> transitionHostsToInstalling(RepositoryVersionEntity repoVersionEntity,
VersionDefinitionXml versionDefinitionXml, boolean forceInstalled) throws AmbariException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/main/resources/custom_actions/scripts/ru_set_all.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/custom_actions/scripts/ru_set_all.py b/ambari-server/src/main/resources/custom_actions/scripts/ru_set_all.py
index a7732d9..7b44677 100644
--- a/ambari-server/src/main/resources/custom_actions/scripts/ru_set_all.py
+++ b/ambari-server/src/main/resources/custom_actions/scripts/ru_set_all.py
@@ -27,7 +27,6 @@ from ambari_commons.os_check import OSCheck
from resource_management.libraries.script import Script
from resource_management.libraries.functions import conf_select
from resource_management.libraries.functions import stack_tools
-from resource_management.libraries.functions.constants import Direction
from resource_management.libraries.functions.default import default
from resource_management.libraries.functions.version import format_stack_version
from resource_management.core import shell
@@ -36,13 +35,14 @@ from resource_management.core.logger import Logger
from resource_management.core.resources.system import Execute, Link, Directory
from resource_management.libraries.functions.stack_features import check_stack_feature
from resource_management.libraries.functions import StackFeature
+from resource_management.libraries.functions.decorator import experimental
class UpgradeSetAll(Script):
"""
This script is a part of stack upgrade workflow and is used to set the
all of the component versions as a final step in the upgrade process
"""
-
+ @experimental(feature="PATCH_UPGRADES", disable = True, comment = "Skipping stack-select set all")
def actionexecute(self, env):
version = default('/commandParams/version', None)
@@ -79,51 +79,6 @@ class UpgradeSetAll(Script):
link_config(dir_def['conf_dir'], dir_def['current_dir'])
- def unlink_all_configs(self, env):
- """
- Reverses the work performed in link_config. This should only be used when downgrading from
- HDP 2.3 to 2.2 in order to under the symlink work required for 2.3.
- """
- stack_name = default('/hostLevelParams/stack_name', "").upper()
- downgrade_to_version = default('/commandParams/version', None)
- downgrade_from_version = default('/commandParams/downgrade_from_version', None)
- upgrade_direction = default("/commandParams/upgrade_direction", Direction.UPGRADE)
-
- # downgrade only
- if upgrade_direction != Direction.DOWNGRADE:
- Logger.warning("Unlinking configurations should only be performed on a downgrade.")
- return
-
- if downgrade_to_version is None or downgrade_from_version is None:
- Logger.warning("Both 'commandParams/version' and 'commandParams/downgrade_from_version' must be specified to unlink configs on downgrade.")
- return
-
- Logger.info("Unlinking all configs when downgrading from {0} {1} to {2}".format(
- stack_name, downgrade_from_version, downgrade_to_version))
-
- # normalize the versions
- downgrade_to_version = format_stack_version(downgrade_to_version)
- downgrade_from_version = format_stack_version(downgrade_from_version)
-
- # downgrade-to-version must be 2.2 (less than 2.3)
- if downgrade_to_version and check_stack_feature(StackFeature.CONFIG_VERSIONING, downgrade_to_version):
- Logger.warning("Unlinking configurations should not be performed when downgrading {0} {1} to {2}".format(
- stack_name, downgrade_from_version, downgrade_to_version))
- return
-
- # downgrade-from-version must be 2.3+
- if not( downgrade_from_version and check_stack_feature(StackFeature.CONFIG_VERSIONING, downgrade_from_version) ):
- Logger.warning("Unlinking configurations should not be performed when downgrading {0} {1} to {2}".format(
- stack_name, downgrade_from_version, downgrade_to_version))
- return
-
- # iterate through all directory conf mappings and undo the symlinks
- for key, value in conf_select.get_package_dirs().iteritems():
- for directory_mapping in value:
- original_config_directory = directory_mapping['conf_dir']
- self._unlink_config(original_config_directory)
-
-
def _unlink_config(self, original_conf_directory):
"""
Reverses the work performed in link_config. This should only be used when downgrading from
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/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 4170342..0735d5a 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
@@ -2117,7 +2117,7 @@ public class AmbariManagementControllerImplTest {
Map<String, String> defaultHostParams = helper.createDefaultHostParams(cluster, repositoryVersionEntity);
- assertEquals(defaultHostParams.size(), 16);
+ assertEquals(defaultHostParams.size(), 15);
assertEquals(defaultHostParams.get(DB_DRIVER_FILENAME), MYSQL_JAR);
assertEquals(defaultHostParams.get(STACK_NAME), SOME_STACK_NAME);
assertEquals(defaultHostParams.get(STACK_VERSION), SOME_STACK_VERSION);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
index 738ad1f..b06117b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
@@ -299,8 +299,6 @@ public class ComponentVersionCheckActionTest {
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
executionCommand.setClusterName("c1");
@@ -367,8 +365,6 @@ public class ComponentVersionCheckActionTest {
// now finalize and ensure we can transition from UPGRADING to UPGRADED
// automatically before CURRENT
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
executionCommand.setClusterName("c1");
@@ -434,8 +430,6 @@ public class ComponentVersionCheckActionTest {
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
executionCommand.setClusterName("c1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index 2bc2c13..0aea8b3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -75,7 +75,6 @@ import org.apache.ambari.server.state.ServiceFactory;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.stack.UpgradePack;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.utils.EventBusSynchronizer;
import org.junit.After;
@@ -363,7 +362,8 @@ public class UpgradeActionTest {
String urlInfo = "[{'repositories':["
+ "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'" + targetRepo + "'}"
+ "], 'OperatingSystems/os_type':'redhat6'}]";
- repoVersionDAO.create(stackEntityTarget, targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
+
+ m_helper.getOrCreateRepositoryVersion(new StackId(stackEntityTarget), targetRepo);
// Start upgrading the newer repo
@@ -426,11 +426,6 @@ public class UpgradeActionTest {
Assert.assertFalse(configs.isEmpty());
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(UpdateDesiredStackAction.COMMAND_PARAM_ORIGINAL_STACK, sourceStack.getStackId());
- commandParams.put(UpdateDesiredStackAction.COMMAND_PARAM_TARGET_STACK, targetStack.getStackId());
- commandParams.put(UpdateDesiredStackAction.COMMAND_PARAM_DIRECTION, Direction.UPGRADE.toString());
- commandParams.put(UpdateDesiredStackAction.COMMAND_PARAM_UPGRADE_PACK, upgradePackName);
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
Map<String, String> roleParams = new HashMap<>();
@@ -476,8 +471,6 @@ public class UpgradeActionTest {
createUpgrade(cluster, repositoryVersion2111);
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "downgrade");
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
executionCommand.setClusterName(clusterName);
@@ -527,8 +520,6 @@ public class UpgradeActionTest {
createUpgrade(cluster, repositoryVersion2202);
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "downgrade");
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
executionCommand.setClusterName(clusterName);
@@ -565,8 +556,6 @@ public class UpgradeActionTest {
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
executionCommand.setClusterName(clusterName);
@@ -624,7 +613,6 @@ public class UpgradeActionTest {
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -661,8 +649,6 @@ public class UpgradeActionTest {
createUpgrade(cluster, repositoryVersion2201);
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
executionCommand.setClusterName(clusterName);
@@ -732,8 +718,6 @@ public class UpgradeActionTest {
assertEquals(8, configs.size());
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "downgrade");
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
executionCommand.setClusterName(clusterName);
@@ -832,8 +816,6 @@ public class UpgradeActionTest {
// now finalize and ensure we can transition from UPGRADING to UPGRADED
// automatically before CURRENT
Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
-
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
executionCommand.setClusterName(clusterName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
index 09fc5cd..2baf3fa 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
@@ -100,7 +100,7 @@ public class StageWrapperBuilderTest extends EasyMockSupport {
EasyMock.expect(repoVersionDAO.findByStackNameAndVersion(EasyMock.anyString(),
EasyMock.anyString())).andReturn(repoVersionEntity).anyTimes();
- UpgradeContext upgradeContext = EasyMock.createNiceMock(UpgradeContext.class);
+ UpgradeContext upgradeContext = createNiceMock(UpgradeContext.class);
EasyMock.expect(upgradeContext.getCluster()).andReturn(cluster).anyTimes();
EasyMock.expect(upgradeContext.getType()).andReturn(UpgradeType.ROLLING).anyTimes();
EasyMock.expect(upgradeContext.getDirection()).andReturn(Direction.UPGRADE).anyTimes();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
index 3d1cdfc..1649078 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
@@ -643,7 +643,7 @@ public class UpgradeCatalog200Test {
clusterEntity, HOST_NAME);
upgradeCatalogHelper.addComponent(injector, clusterEntity,
- clusterServiceEntityNagios, hostEntity, "NAGIOS_SERVER", stackEntity);
+ clusterServiceEntityNagios, hostEntity, "NAGIOS_SERVER", repositoryVersion);
ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName(
clusterEntity.getClusterId(), "NAGIOS", "NAGIOS_SERVER");
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
index 4ed7685..6c2e9f7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
@@ -65,6 +65,7 @@ import org.apache.ambari.server.orm.dao.ArtifactDAO;
import org.apache.ambari.server.orm.dao.ClusterDAO;
import org.apache.ambari.server.orm.dao.ClusterStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
+import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.ArtifactEntity;
@@ -73,6 +74,7 @@ import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
import org.apache.ambari.server.orm.entities.ClusterStateEntity;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.state.Cluster;
@@ -825,11 +827,16 @@ public class UpgradeCatalog210Test {
clusterEntity.setClusterStateEntity(clusterStateEntity);
clusterDAO.merge(clusterEntity);
+ RepositoryVersionDAO repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
+ RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(
+ desiredStackEntity, desiredRepositoryVersion);
+
ServiceComponentDesiredStateEntity componentDesiredStateEntity = new ServiceComponentDesiredStateEntity();
componentDesiredStateEntity.setClusterId(clusterEntity.getClusterId());
componentDesiredStateEntity.setServiceName(clusterServiceEntity.getServiceName());
componentDesiredStateEntity.setClusterServiceEntity(clusterServiceEntity);
componentDesiredStateEntity.setComponentName("STORM_REST_API");
+ componentDesiredStateEntity.setDesiredRepositoryVersion(repositoryVersion);
ServiceComponentDesiredStateDAO componentDesiredStateDAO =
injector.getInstance(ServiceComponentDesiredStateDAO.class);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
index 2cf0321..6b28846 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
@@ -174,12 +174,12 @@ public class UpgradeCatalogHelper {
* @param clusterServiceEntity
* @param hostEntity
* @param componentName
- * @param desiredStackEntity
+ * @param repositoryversion
*/
@Transactional
protected void addComponent(Injector injector, ClusterEntity clusterEntity,
ClusterServiceEntity clusterServiceEntity, HostEntity hostEntity,
- String componentName, StackEntity desiredStackEntity) {
+ String componentName, RepositoryVersionEntity repositoryversion) {
ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO = injector.getInstance(
ServiceComponentDesiredStateDAO.class);
@@ -189,6 +189,7 @@ public class UpgradeCatalogHelper {
componentDesiredStateEntity.setServiceName(clusterServiceEntity.getServiceName());
componentDesiredStateEntity.setClusterServiceEntity(clusterServiceEntity);
componentDesiredStateEntity.setClusterId(clusterServiceEntity.getClusterId());
+ componentDesiredStateEntity.setDesiredRepositoryVersion(repositoryversion);
serviceComponentDesiredStateDAO.create(componentDesiredStateEntity);
HostComponentDesiredStateDAO hostComponentDesiredStateDAO = injector.getInstance(HostComponentDesiredStateDAO.class);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/test/python/custom_actions/test_ru_set_all.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/test_ru_set_all.py b/ambari-server/src/test/python/custom_actions/test_ru_set_all.py
index e1a89a8..29c99d8 100644
--- a/ambari-server/src/test/python/custom_actions/test_ru_set_all.py
+++ b/ambari-server/src/test/python/custom_actions/test_ru_set_all.py
@@ -25,17 +25,15 @@ import json
from mock.mock import patch
from mock.mock import MagicMock
+from stacks.utils.RMFTestCase import experimental_mock
+patch('resource_management.libraries.functions.decorator.experimental', experimental_mock).start()
+
# Module imports
-import subprocess
from stacks.utils.RMFTestCase import *
from resource_management import Script, ConfigDictionary
from resource_management.libraries.functions.default import default
-from resource_management.libraries.functions import conf_select
from resource_management.core.logger import Logger
-from ambari_agent.AmbariConfig import AmbariConfig
-from ambari_agent.FileCache import FileCache
from ambari_commons.os_check import OSCheck
-from resource_management.core import shell
from resource_management.core.environment import Environment
import pprint
@@ -48,7 +46,6 @@ def fake_call(command, **kwargs):
"""
return (0, str(command))
-
class TestRUSetAll(RMFTestCase):
def get_custom_actions_dir(self):
return os.path.join(self.get_src_folder(), "test/resources/custom_actions/")
@@ -198,121 +195,6 @@ class TestRUSetAll(RMFTestCase):
self.assertEqual(call_mock.call_count, 1)
- @patch("os.path.islink")
- @patch("os.path.isdir")
- @patch("resource_management.core.shell.call")
- @patch.object(Script, 'get_config')
- @patch.object(OSCheck, 'is_redhat_family')
- def test_downgrade_unlink_configs(self, family_mock, get_config_mock, call_mock,
- isdir_mock, islink_mock):
- """
- Tests downgrading from 2.3 to 2.2 to ensure that conf symlinks are removed and the backup
- directories restored.
- """
-
- isdir_mock.return_value = True
-
- # required for the test to run since the Execute calls need this
- from resource_management.core.environment import Environment
- env = Environment(test_mode=True)
- with env:
- # Mock the config objects
- json_file_path = os.path.join(self.get_custom_actions_dir(), "ru_execute_tasks_namenode_prepare.json")
- self.assertTrue(os.path.isfile(json_file_path))
- with open(json_file_path, "r") as json_file:
- json_payload = json.load(json_file)
-
- # alter JSON for a downgrade from 2.3 to 2.2
- json_payload['commandParams']['version'] = "2.2.0.0-1234"
- json_payload['commandParams']['downgrade_from_version'] = "2.3.0.0-1234"
- json_payload['commandParams']['original_stack'] = "HDP-2.2"
- json_payload['commandParams']['target_stack'] = "HDP-2.3"
- json_payload['commandParams']['upgrade_direction'] = "downgrade"
- json_payload['hostLevelParams']['stack_version'] = "2.2"
- json_payload["configurations"]["cluster-env"]["stack_tools"] = self.get_stack_tools()
- json_payload["configurations"]["cluster-env"]["stack_features"] = self.get_stack_features()
-
- config_dict = ConfigDictionary(json_payload)
-
- family_mock.return_value = True
- get_config_mock.return_value = config_dict
- call_mock.side_effect = fake_call # echo the command
-
- # test the function
- ru_execute = UpgradeSetAll()
- ru_execute.unlink_all_configs(None)
-
- # verify that os.path.islink was called for each conf
- self.assertTrue(islink_mock.called)
- for key, value in conf_select.get_package_dirs().iteritems():
- for directory_mapping in value:
- original_config_directory = directory_mapping['conf_dir']
- is_link_called = False
-
- for call in islink_mock.call_args_list:
- call_tuple = call[0]
- if original_config_directory in call_tuple:
- is_link_called = True
-
- if not is_link_called:
- self.fail("os.path.islink({0}) was never called".format(original_config_directory))
-
- # alter JSON for a downgrade from 2.3 to 2.3
- with open(json_file_path, "r") as json_file:
- json_payload = json.load(json_file)
-
- json_payload['commandParams']['version'] = "2.3.0.0-1234"
- json_payload['commandParams']['downgrade_from_version'] = "2.3.0.0-5678"
- json_payload['commandParams']['original_stack'] = "HDP-2.3"
- json_payload['commandParams']['target_stack'] = "HDP-2.3"
- json_payload['commandParams']['upgrade_direction'] = "downgrade"
- json_payload['hostLevelParams']['stack_version'] = "2.3"
- json_payload["configurations"]["cluster-env"]["stack_tools"] = self.get_stack_tools()
- json_payload["configurations"]["cluster-env"]["stack_features"] = self.get_stack_features()
-
- # reset config
- config_dict = ConfigDictionary(json_payload)
- family_mock.return_value = True
- get_config_mock.return_value = config_dict
-
- # reset mock
- islink_mock.reset_mock()
-
- # test the function
- ru_execute = UpgradeSetAll()
- ru_execute.unlink_all_configs(None)
-
- # ensure it wasn't called this time
- self.assertFalse(islink_mock.called)
-
- with open(json_file_path, "r") as json_file:
- json_payload = json.load(json_file)
-
- # alter JSON for a downgrade from 2.2 to 2.2
- json_payload['commandParams']['version'] = "2.2.0.0-1234"
- json_payload['commandParams']['downgrade_from_version'] = "2.2.0.0-5678"
- json_payload['commandParams']['original_stack'] = "HDP-2.2"
- json_payload['commandParams']['target_stack'] = "HDP-2.2"
- json_payload['commandParams']['upgrade_direction'] = "downgrade"
- json_payload['hostLevelParams']['stack_version'] = "2.2"
- json_payload["configurations"]["cluster-env"]["stack_tools"] = self.get_stack_tools()
- json_payload["configurations"]["cluster-env"]["stack_features"] = self.get_stack_features()
-
- # reset config
- config_dict = ConfigDictionary(json_payload)
- family_mock.return_value = True
- get_config_mock.return_value = config_dict
-
- # reset mock
- islink_mock.reset_mock()
-
- # test the function
- ru_execute = UpgradeSetAll()
- ru_execute.unlink_all_configs(None)
-
- # ensure it wasn't called this time
- self.assertFalse(islink_mock.called)
-
@patch("os.path.isdir")
@patch("os.path.islink")
def test_unlink_configs_missing_backup(self, islink_mock, isdir_mock):
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
index badaaef..282b542 100644
--- a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
+++ b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
@@ -381,5 +381,15 @@ class CallFunctionMock():
result = other(*self.args, **self.kwargs)
return self.call_result == result
return False
-
+
+def experimental_mock(*args, **kwargs):
+ """
+ Used to disable experimental mocks...
+ :return:
+ """
+ def decorator(function):
+ def wrapper(*args, **kwargs):
+ return function(*args, **kwargs)
+ return wrapper
+ return decorator
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4132783/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml
index 9d53714..a397be9 100644
--- a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml
+++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml
@@ -231,7 +231,7 @@
<execute-stage title="Restore configuration directories and remove HDP 2.3 symlinks">
<task xsi:type="execute">
<script>scripts/ru_set_all.py</script>
- <function>unlink_all_configs</function>
+ <function>foo_function</function>
</task>
</execute-stage>
</group>
[04/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/15c04ed5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/15c04ed5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/15c04ed5
Branch: refs/heads/trunk
Commit: 15c04ed5360e542e1f7c059e28a544f18ded3ae6
Parents: f65692a e74d4f3
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon May 8 10:02:22 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon May 8 10:02:22 2017 -0400
----------------------------------------------------------------------
.../src/main/python/ambari_agent/HostInfo.py | 15 +-
.../python/resource_management/TestScript.py | 56 +-
.../functions/setup_ranger_plugin_xml.py | 26 +-
.../server/configuration/Configuration.java | 5 +
.../ambari/server/controller/AmbariServer.java | 2 +-
.../BlueprintConfigurationProcessor.java | 56 +-
.../AmbariPamAuthenticationProvider.java | 7 +
.../server/state/ValueAttributesInfo.java | 2 +-
.../src/main/python/azuredb_create_generator.py | 22 +-
.../ATLAS/0.7.0.2.5/role_command_order.json | 2 +-
.../package/alerts/alert_llap_app_status.py | 4 +-
.../package/scripts/hive_server_interactive.py | 7 +-
.../HIVE/2.1.0.3.0/service_advisor.py | 7 +
.../KAFKA/0.10.0.3.0/alerts.json | 32 ++
.../0.10.0.3.0/configuration/kafka-broker.xml | 569 +++++++++++++++++++
.../0.10.0.3.0/configuration/kafka-env.xml | 111 ++++
.../0.10.0.3.0/configuration/kafka-log4j.xml | 170 ++++++
.../configuration/kafka_client_jaas_conf.xml | 41 ++
.../configuration/kafka_jaas_conf.xml | 59 ++
.../configuration/ranger-kafka-audit.xml | 130 +++++
.../ranger-kafka-plugin-properties.xml | 148 +++++
.../ranger-kafka-policymgr-ssl.xml | 66 +++
.../configuration/ranger-kafka-security.xml | 64 +++
.../KAFKA/0.10.0.3.0/kerberos.json | 76 +++
.../KAFKA/0.10.0.3.0/metainfo.xml | 109 ++++
.../KAFKA/0.10.0.3.0/metrics.json | 239 ++++++++
.../KAFKA/0.10.0.3.0/package/scripts/kafka.py | 276 +++++++++
.../0.10.0.3.0/package/scripts/kafka_broker.py | 151 +++++
.../KAFKA/0.10.0.3.0/package/scripts/params.py | 341 +++++++++++
.../0.10.0.3.0/package/scripts/service_check.py | 65 +++
.../package/scripts/setup_ranger_kafka.py | 90 +++
.../0.10.0.3.0/package/scripts/status_params.py | 26 +
.../KAFKA/0.10.0.3.0/package/scripts/upgrade.py | 78 +++
.../KAFKA/0.10.0.3.0/package/scripts/utils.py | 38 ++
.../templates/input.config-kafka.json.j2 | 92 +++
.../0.10.0.3.0/package/templates/kafka.conf.j2 | 35 ++
.../package/templates/kafka_client_jaas.conf.j2 | 29 +
.../package/templates/kafka_jaas.conf.j2 | 41 ++
.../package/templates/tools-log4j.properties.j2 | 21 +
.../KAFKA/0.10.0.3.0/role_command_order.json | 7 +
.../KAFKA/0.10.0.3.0/service_advisor.py | 363 ++++++++++++
.../KAFKA/0.10.0.3.0/widgets.json | 182 ++++++
.../0.4.0/package/scripts/setup_ranger_xml.py | 119 ++--
.../RANGER/0.7.0/configuration/ranger-env.xml | 22 +
.../0.7.0/properties/ranger-solrconfig.xml.j2 | 9 +-
.../RANGER/0.7.0/themes/theme_version_5.json | 26 +
.../stacks/HDP/2.3/services/stack_advisor.py | 27 +-
.../HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml | 68 +--
.../HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml | 68 +--
.../HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml | 67 ++-
.../HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml | 67 ++-
.../HDP/2.4/upgrades/nonrolling-upgrade-2.4.xml | 68 +--
.../HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml | 68 +--
.../HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml | 68 +--
.../HDP/2.5/upgrades/host-upgrade-2.5.xml | 50 +-
.../HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml | 68 +--
.../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml | 68 +--
.../stacks/HDP/2.6/services/stack_advisor.py | 4 +-
.../HDP/2.6/upgrades/host-upgrade-2.6.xml | 48 +-
.../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml | 68 +--
.../stacks/HDP/3.0/services/KAFKA/metainfo.xml | 27 +
.../render/ClusterBlueprintRendererTest.java | 38 +-
.../BlueprintConfigurationProcessorTest.java | 56 +-
.../AmbariPamAuthenticationProviderTest.java | 3 +
.../server/upgrade/UpgradeCatalog252Test.java | 18 +-
ambari-server/src/test/python/unitTests.py | 2 +-
ambari-web/app/routes/main.js | 2 +-
.../widgets/slider_config_widget_view.js | 11 +-
.../app/views/common/quick_view_link_view.js | 7 +-
ambari-web/app/views/main/admin.js | 2 +-
ambari-web/app/views/main/menu.js | 2 +-
.../widgets/slider_config_widget_view_test.js | 13 +
.../test/views/common/quick_link_view_test.js | 2 +-
.../org/apache/ambari/storm/ProxyServlet.java | 12 +-
.../src/main/resources/scripts/router/Router.js | 6 +-
.../src/main/resources/scripts/utils/Utils.js | 25 -
contrib/views/storm/src/main/resources/view.xml | 8 +-
77 files changed, 4505 insertions(+), 572 deletions(-)
----------------------------------------------------------------------
[30/50] [abbrv] ambari git commit: AMBARI-21059. Reduce Dependency on
Cluster Desired Stack ID (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java
index ec5eef0..1a26ca6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java
@@ -213,8 +213,10 @@ public class ClusterImplTest {
String stackVersion = "HDP-2.1.1";
String repoVersion = "2.1.1-1234";
+ StackId stackId = new StackId(stackVersion);
+ ormTestHelper.createStack(stackId);
- clusters.addCluster(clusterName, new StackId(stackVersion));
+ clusters.addCluster(clusterName, stackId);
Cluster cluster = clusters.getCluster(clusterName);
RepositoryVersionEntity repositoryVersion = ormTestHelper.getOrCreateRepositoryVersion(
@@ -268,13 +270,13 @@ public class ClusterImplTest {
@Test
public void testDeleteHost() throws Exception {
// Given
-
-
String clusterName = "TEST_DELETE_HOST";
String hostName1 = "HOSTNAME1", hostName2 = "HOSTNAME2";
String hostToDelete = hostName2;
+ StackId stackId = new StackId("HDP-2.1.1");
- clusters.addCluster(clusterName, new StackId("HDP-2.1.1"));
+ ormTestHelper.createStack(stackId);
+ clusters.addCluster(clusterName, stackId);
Cluster cluster = clusters.getCluster(clusterName);
@@ -305,8 +307,6 @@ public class ClusterImplTest {
catch(HostNotFoundException e){
}
-
-
}
@Test
@@ -314,7 +314,9 @@ public class ClusterImplTest {
// Given
String clusterName = "TEST_CLUSTER_SIZE";
String hostName1 = "host1", hostName2 = "host2";
- clusters.addCluster(clusterName, new StackId("HDP-2.1.1"));
+ StackId stackId = new StackId("HDP", "2.1.1");
+ ormTestHelper.createStack(stackId);
+ clusters.addCluster(clusterName, stackId);
Cluster cluster = clusters.getCluster(clusterName);
clusters.addHost(hostName1);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
index 022cf1f..f45bfa9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
@@ -107,6 +107,8 @@ public class ClustersDeadlockTest {
injector.injectMembers(this);
StackId stackId = new StackId("HDP-0.1");
+ helper.createStack(stackId);
+
clusters.addCluster(CLUSTER_NAME, stackId);
cluster = clusters.getCluster(CLUSTER_NAME);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
index d59d1d5..1cae4df 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
@@ -50,12 +50,10 @@ import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.ClusterServiceDAO;
-import org.apache.ambari.server.orm.dao.ClusterStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.TopologyRequestDAO;
-import org.apache.ambari.server.orm.entities.ClusterStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.AgentVersion;
@@ -142,9 +140,10 @@ public class ClustersTest {
@Test
public void testAddAndGetCluster() throws AmbariException {
-
StackId stackId = new StackId("HDP-2.1.1");
+ helper.createStack(stackId);
+
String c1 = "foo";
String c2 = "foo";
clusters.addCluster(c1, stackId);
@@ -197,6 +196,8 @@ public class ClustersTest {
public void testAddAndGetClusterWithSecurityType() throws AmbariException {
StackId stackId = new StackId("HDP-2.1.1");
+ helper.createStack(stackId);
+
String c1 = "foo";
SecurityType securityType = SecurityType.KERBEROS;
clusters.addCluster(c1, stackId, securityType);
@@ -262,6 +263,8 @@ public class ClustersTest {
StackId stackId = new StackId("HDP-0.1");
+ helper.createStack(stackId);
+
clusters.addCluster(c1, stackId);
clusters.addCluster(c2, stackId);
@@ -346,6 +349,8 @@ public class ClustersTest {
StackId stackId = new StackId("HDP-0.1");
+ helper.createStack(stackId);
+
clusters.addCluster(c1, stackId);
clusters.addCluster(c2, stackId);
Cluster cluster1 = clusters.getCluster(c1);
@@ -376,6 +381,9 @@ public class ClustersTest {
final String h2 = "h2";
StackId stackId = new StackId("HDP-0.1");
+
+ helper.createStack(stackId);
+
clusters.addCluster(c1, stackId);
Cluster cluster = clusters.getCluster(c1);
@@ -491,58 +499,6 @@ public class ClustersTest {
}
@Test
- public void testSetCurrentStackVersion() throws AmbariException {
- String c1 = "foo3";
-
- try
- {
- clusters.setCurrentStackVersion("", null);
- fail("Exception should be thrown on invalid set");
- }
- catch (AmbariException e) {
- // Expected
- }
-
- try
- {
- clusters.setCurrentStackVersion(c1, null);
- fail("Exception should be thrown on invalid set");
- }
- catch (AmbariException e) {
- // Expected
- }
-
- StackId stackId = new StackId("HDP-0.1");
-
- try
- {
- clusters.setCurrentStackVersion(c1, stackId);
- fail("Exception should be thrown on invalid set");
- }
- catch (AmbariException e) {
- // Expected
- Assert.assertTrue(e.getMessage().contains("Cluster not found"));
- }
-
- clusters.addCluster(c1, stackId);
- clusters.setCurrentStackVersion(c1, stackId);
-
- Assert.assertNotNull(clusters.getCluster(c1));
- ClusterStateEntity entity = injector.getInstance(ClusterStateDAO.class).findByPK(clusters.getCluster(c1).getClusterId());
- Assert.assertNotNull(entity);
-
- Assert.assertTrue(entity.getCurrentStack().getStackName().equals(
- stackId.getStackName())
- && entity.getCurrentStack().getStackVersion().equals(
- stackId.getStackVersion()));
-
- Assert.assertTrue(clusters.getCluster(c1).getCurrentStackVersion().getStackName().equals(stackId.getStackName()));
- Assert.assertTrue(
- clusters.getCluster(c1).getCurrentStackVersion().getStackVersion().equals(stackId.getStackVersion()));
- }
-
-
- @Test
public void testNullHostNamesInTopologyRequests() throws AmbariException {
final String hostName = "myhost";
final String clusterName = "mycluster";
@@ -674,6 +630,9 @@ public class ClustersTest {
private Cluster createCluster(String clusterName) throws AmbariException {
StackId stackId = new StackId("HDP-0.1");
+
+ helper.createStack(stackId);
+
clusters.addCluster(clusterName, stackId);
return clusters.getCluster(clusterName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
index c643b2f..84ba3dc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
@@ -109,6 +109,7 @@ public class ConcurrentServiceConfigVersionTest {
injector.getInstance(GuiceJpaInitializer.class);
injector.injectMembers(this);
+ helper.createStack(stackId);
clusters.addCluster("c1", stackId);
cluster = clusters.getCluster("c1");
repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
@@ -181,8 +182,6 @@ public class ConcurrentServiceConfigVersionTest {
ServiceConfigVersionResponse response = cluster.createServiceConfigVersion(
"HDFS", null, getName() + "-serviceConfig" + i, null);
- System.out.println("**** " + response.getVersion());
-
Thread.sleep(100);
}
} catch (Exception exception) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
index 0678a71..b73b332 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
@@ -111,6 +111,10 @@ public class ServiceComponentHostConcurrentWriteDeadlockTest {
injector.getInstance(GuiceJpaInitializer.class);
injector.injectMembers(this);
+
+ OrmTestHelper helper = injector.getInstance(OrmTestHelper.class);
+ helper.createStack(stackId);
+
clusters.addCluster("c1", stackId);
cluster = clusters.getCluster("c1");
m_repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, REPO_VERSION);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
index f996aac..de3b89c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
@@ -33,7 +33,6 @@ import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.RequestDAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.dao.StageDAO;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
@@ -63,7 +62,6 @@ public class RetryUpgradeActionServiceTest {
private Injector injector;
- private StackDAO stackDAO;
private Clusters clusters;
private RepositoryVersionDAO repoVersionDAO;
private UpgradeDAO upgradeDAO;
@@ -75,17 +73,16 @@ public class RetryUpgradeActionServiceTest {
// Instance variables shared by all tests
String clusterName = "c1";
Cluster cluster;
+ StackId stack220 = new StackId("HDP-2.2.0");
StackEntity stackEntity220;
- StackId stack220;
Long upgradeRequestId = 1L;
Long stageId = 1L;
@Before
- public void before() throws NoSuchFieldException, IllegalAccessException {
+ public void before() throws Exception {
injector = Guice.createInjector(new InMemoryDefaultTestModule());
injector.getInstance(GuiceJpaInitializer.class);
- stackDAO = injector.getInstance(StackDAO.class);
clusters = injector.getInstance(Clusters.class);
repoVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
upgradeDAO = injector.getInstance(UpgradeDAO.class);
@@ -93,6 +90,7 @@ public class RetryUpgradeActionServiceTest {
stageDAO = injector.getInstance(StageDAO.class);
hostRoleCommandDAO = injector.getInstance(HostRoleCommandDAO.class);
helper = injector.getInstance(OrmTestHelper.class);
+ stackEntity220 = helper.createStack(stack220);
}
@After
@@ -234,8 +232,6 @@ public class RetryUpgradeActionServiceTest {
* @throws AmbariException
*/
private void createCluster() throws AmbariException {
- stackEntity220 = stackDAO.find("HDP", "2.2.0");
- stack220 = new StackId("HDP-2.2.0");
clusters.addCluster(clusterName, stack220);
cluster = clusters.getCluster("c1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
index d5c1b1a..b8c0e7c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
@@ -134,6 +134,7 @@ public class ServiceComponentHostTest {
}
private ClusterEntity createCluster(StackId stackId, String clusterName) throws AmbariException {
+ helper.createStack(stackId);
clusters.addCluster(clusterName, stackId);
ClusterEntity clusterEntity = clusterDAO.findByName(clusterName);
Assert.assertNotNull(clusterEntity);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java
index 4dd7fd9..26df0d2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.upgrade;
+import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.anyString;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.createStrictMock;
@@ -41,6 +42,7 @@ import org.apache.ambari.server.state.PropertyInfo;
import org.apache.ambari.server.state.PropertyUpgradeBehavior;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.ambari.server.state.StackId;
import org.junit.Before;
import org.junit.Test;
@@ -129,7 +131,7 @@ public class AbstractUpgradeCatalogTest {
mergedProperties.put("prop1", "v1-old");
mergedProperties.put("prop4", "v4");
- expect(amc.createConfig(eq(cluster), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
+ expect(amc.createConfig(anyObject(StackId.class), eq(cluster), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
replay(injector, configHelper, amc, cluster, clusters, serviceInfo, oldConfig);
@@ -151,7 +153,7 @@ public class AbstractUpgradeCatalogTest {
mergedProperties.put("prop2", "v2");
mergedProperties.put("prop3", "v3-old");
- expect(amc.createConfig(eq(cluster), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
+ expect(amc.createConfig(anyObject(StackId.class), eq(cluster), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
replay(injector, configHelper, amc, cluster, clusters, serviceInfo, oldConfig);
@@ -170,7 +172,7 @@ public class AbstractUpgradeCatalogTest {
Map<String, String> mergedProperties = new HashMap<>();
mergedProperties.put("prop1", "v1-old");
- expect(amc.createConfig(eq(cluster), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
+ expect(amc.createConfig(anyObject(StackId.class), eq(cluster), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
replay(injector, configHelper, amc, cluster, clusters, serviceInfo, oldConfig);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
index 1649078..e993f96 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
@@ -84,7 +84,6 @@ import org.apache.ambari.server.state.RepositoryInfo;
import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.SecurityType;
import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.stack.OsFamily;
import org.easymock.Capture;
import org.easymock.EasyMock;
@@ -459,8 +458,6 @@ public class UpgradeCatalog200Test {
public void testPersistHDPRepo() throws Exception {
EasyMockSupport easyMockSupport = new EasyMockSupport();
final AmbariManagementController mockAmbariManagementController = easyMockSupport.createStrictMock(AmbariManagementController.class);
- final AmbariMetaInfo mockAmbariMetaInfo = easyMockSupport.createNiceMock(AmbariMetaInfo.class);
- final StackInfo mockStackInfo = easyMockSupport.createNiceMock(StackInfo.class);
final Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
final Cluster mockCluster = easyMockSupport.createStrictMock(Cluster.class);
final Map<String, Cluster> clusterMap = new HashMap<>();
@@ -468,8 +465,6 @@ public class UpgradeCatalog200Test {
OperatingSystemInfo osi = new OperatingSystemInfo("redhat6");
HashSet<OperatingSystemInfo> osiSet = new HashSet<>();
osiSet.add(osi);
- StackId stackId = new StackId("HDP","2.2");
- final RepositoryInfo mockRepositoryInfo = easyMockSupport.createNiceMock(RepositoryInfo.class);
final Injector mockInjector = Guice.createInjector(new AbstractModule() {
@Override
@@ -482,20 +477,7 @@ public class UpgradeCatalog200Test {
}
});
- expect(mockAmbariManagementController.getAmbariMetaInfo()).andReturn(mockAmbariMetaInfo);
- expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
- expect(mockClusters.getClusters()).andReturn(clusterMap).once();
- expect(mockCluster.getCurrentStackVersion()).andReturn(stackId).once();
expect(mockCluster.getClusterName()).andReturn("cc").anyTimes();
- expect(mockAmbariMetaInfo.getOperatingSystems("HDP", "2.2")).andReturn(osiSet).once();
- expect(mockAmbariMetaInfo.getRepository("HDP", "2.2", "redhat6", "HDP-2.2")).andReturn(mockRepositoryInfo).once();
- expect(mockAmbariMetaInfo.getStack("HDP", "2.2")).andReturn(mockStackInfo);
- expect(mockStackInfo.getRepositories()).andReturn(new ArrayList<RepositoryInfo>() {{
- add(mockRepositoryInfo);
- }});
- expect(mockRepositoryInfo.getDefaultBaseUrl()).andReturn("http://baseurl").once();
- mockAmbariMetaInfo.updateRepo("HDP", "2.2", "redhat6", "HDP-2.2", "http://baseurl", null);
- expectLastCall().once();
easyMockSupport.replayAll();
mockInjector.getInstance(UpgradeCatalog200.class).persistHDPRepo();
@@ -643,7 +625,7 @@ public class UpgradeCatalog200Test {
clusterEntity, HOST_NAME);
upgradeCatalogHelper.addComponent(injector, clusterEntity,
- clusterServiceEntityNagios, hostEntity, "NAGIOS_SERVER", repositoryVersion);
+ clusterServiceEntityNagios, hostEntity, "NAGIOS_SERVER", stackEntity, repositoryVersion);
ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName(
clusterEntity.getClusterId(), "NAGIOS", "NAGIOS_SERVER");
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
index 6c2e9f7..a8f5f62 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
@@ -61,11 +61,11 @@ import org.apache.ambari.server.orm.DBAccessor;
import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.ArtifactDAO;
import org.apache.ambari.server.orm.dao.ClusterDAO;
import org.apache.ambari.server.orm.dao.ClusterStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
-import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.ArtifactEntity;
@@ -84,6 +84,7 @@ import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostComponentAdminState;
import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.kerberos.KerberosDescriptor;
import org.apache.ambari.server.state.kerberos.KerberosDescriptorFactory;
import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptor;
@@ -516,7 +517,7 @@ public class UpgradeCatalog210Test {
expect(mockClusterExpected.getDesiredConfigByType("hive-site")).andReturn(mockHiveSite).atLeastOnce();
expect(mockHiveSite.getProperties()).andReturn(propertiesExpectedHiveSite).anyTimes();
expect(mockClusterExpected.getServices()).andReturn(servicesExpected).atLeastOnce();
- expect(mockAmbariManagementController.createConfig((Cluster)anyObject(),
+ expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), (Cluster)anyObject(),
anyString(),
capture(configCreation),
anyString(),
@@ -600,7 +601,7 @@ public class UpgradeCatalog210Test {
expect(mockHiveSite.getProperties()).andReturn(propertiesExpectedHiveSite).anyTimes();
expect(mockHivePluginProperies.getProperties()).andReturn(propertiesExpectedPluginProperies).anyTimes();
expect(mockClusterExpected.getServices()).andReturn(servicesExpected).atLeastOnce();
- expect(mockAmbariManagementController.createConfig((Cluster) anyObject(),
+ expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), (Cluster) anyObject(),
anyString(),
capture(configCreation),
anyString(),
@@ -807,9 +808,15 @@ public class UpgradeCatalog210Test {
@Test
public void testDeleteStormRestApiServiceComponent() throws Exception {
initData();
+
ClusterEntity clusterEntity = upgradeCatalogHelper.createCluster(injector,
"c1", desiredStackEntity, desiredRepositoryVersion);
+ OrmTestHelper helper = injector.getInstance(OrmTestHelper.class);
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(
+ new StackId(desiredStackEntity.getStackName(), desiredStackEntity.getStackVersion()),
+ desiredRepositoryVersion);
+
ClusterServiceEntity clusterServiceEntity = upgradeCatalogHelper.createService(
injector, clusterEntity, "STORM");
@@ -827,10 +834,6 @@ public class UpgradeCatalog210Test {
clusterEntity.setClusterStateEntity(clusterStateEntity);
clusterDAO.merge(clusterEntity);
- RepositoryVersionDAO repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
- RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(
- desiredStackEntity, desiredRepositoryVersion);
-
ServiceComponentDesiredStateEntity componentDesiredStateEntity = new ServiceComponentDesiredStateEntity();
componentDesiredStateEntity.setClusterId(clusterEntity.getClusterId());
componentDesiredStateEntity.setServiceName(clusterServiceEntity.getServiceName());
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java
index c705d89..f2e9974 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java
@@ -48,6 +48,7 @@ import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.OsFamily;
import org.easymock.Capture;
import org.easymock.EasyMock;
@@ -268,7 +269,7 @@ public class UpgradeCatalog211Test extends EasyMockSupport {
Capture<Map<String, Map<String, String>>> attributesCapture = newCapture();
- expect(controller.createConfig(capture(clusterCapture), capture(typeCapture),
+ expect(controller.createConfig(anyObject(StackId.class), capture(clusterCapture), capture(typeCapture),
capture(propertiesCapture), capture(tagCapture), capture(attributesCapture) ))
.andReturn(createNiceMock(Config.class))
.once();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java
index 896602b..ed14a01 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java
@@ -56,6 +56,7 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.OsFamily;
import org.easymock.Capture;
@@ -71,6 +72,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Binder;
import com.google.inject.Guice;
@@ -457,17 +459,22 @@ public class UpgradeCatalog212Test {
}
});
+ StackId stackId = new StackId("HDP-2.2");
+
+ Service hiveService = easyMockSupport.createNiceMock(Service.class);
+ expect(hiveService.getDesiredStackId()).andReturn(stackId);
+
expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
expect(mockClusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{
put("normal", mockClusterExpected);
}}).once();
+ expect(mockClusterExpected.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HIVE", hiveService)
+ .build());
expect(mockClusterExpected.getDesiredConfigByType("hive-site")).andReturn(mockHiveSite).atLeastOnce();
expect(mockHiveSite.getProperties()).andReturn(propertiesExpectedHiveSite).atLeastOnce();
- StackId stackId = new StackId("HDP-2.2");
- expect(mockClusterExpected.getCurrentStackVersion()).andReturn(stackId).atLeastOnce();
-
easyMockSupport.replayAll();
mockInjector.getInstance(UpgradeCatalog212.class).updateHiveConfigs();
easyMockSupport.verifyAll();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
index fc754a0..4c9f661 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
@@ -92,6 +92,7 @@ import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.inject.AbstractModule;
@@ -473,10 +474,11 @@ public class UpgradeCatalog220Test {
expect(mockClusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{
put("normal", mockClusterExpected);
}}).atLeastOnce();
- expect(mockClusterExpected.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.2"));
-
+ expect(mockClusterExpected.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HBASE", easyMockSupport.createNiceMock(Service.class))
+ .build());
expect(mockClusterExpected.getDesiredConfigByType("hbase-env")).andReturn(mockHbaseEnv).atLeastOnce();
- expect(mockHbaseEnv.getProperties()).andReturn(propertiesHbaseEnv).atLeastOnce();
+ expect(mockHbaseEnv.getProperties()).andReturn(propertiesHbaseEnv).anyTimes();
easyMockSupport.replayAll();
mockInjector.getInstance(UpgradeCatalog220.class).updateHbaseEnvConfig();
@@ -603,7 +605,7 @@ public class UpgradeCatalog220Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -664,7 +666,7 @@ public class UpgradeCatalog220Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1209,7 +1211,9 @@ public class UpgradeCatalog220Test {
}}).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType("hive-site")).andReturn(hiveSiteConf).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType("hive-env")).andReturn(hiveEnvConf).atLeastOnce();
-
+ expect(mockClusterExpected.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HIVE", easyMockSupport.createNiceMock(Service.class))
+ .build());
expect(hiveSiteConf.getProperties()).andReturn(propertiesHiveSite).once();
expect(hiveEnvConf.getProperties()).andReturn(propertiesHiveEnv).once();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java
index f4b3897..102c629 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java
@@ -455,7 +455,7 @@ public class UpgradeCatalog221Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).anyTimes();
replay(controller, injector2);
@@ -511,7 +511,7 @@ public class UpgradeCatalog221Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
index 82ba149..ba2cf79 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
@@ -84,6 +84,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.inject.AbstractModule;
@@ -271,15 +272,19 @@ public class UpgradeCatalog222Test {
}
});
- expect(mockClusterExpected.getCurrentStackVersion()).andReturn(stackId).once();
+// expect(mockClusterExpected.getCurrentStackVersion()).andReturn(stackId).once();
expect(mockClusterExpected.getServiceComponentHosts("ATLAS", "ATLAS_SERVER")).andReturn(atlasHosts).once();
- expect(atlasHost.getHostName()).andReturn("c6401").once();
+// expect(atlasHost.getHostName()).andReturn("c6401").once();
expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
expect(mockClusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{
put("normal", mockClusterExpected);
}}).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType("hive-site")).andReturn(hiveSiteConfigs).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType("application-properties")).andReturn(AtlasSiteConfigs).anyTimes();
+ expect(mockClusterExpected.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("ATLAS", easyMockSupport.createNiceMock(Service.class))
+ .build());
+
expect(AtlasSiteConfigs.getProperties()).andReturn(propertiesAtlasSiteConfigs).anyTimes();
UpgradeCatalog222 upgradeCatalog222 = createMockBuilder(UpgradeCatalog222.class)
@@ -401,10 +406,16 @@ public class UpgradeCatalog222Test {
.createStrictMock();
// CASE 1 - Ranger enabled, Cluster version is 2.2
- expect(mockClusterExpected.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.2")).atLeastOnce();
+ Service hbaseService = easyMockSupport.createNiceMock(Service.class);
+ expect(hbaseService.getDesiredStackId()).andReturn(new StackId("HDP", "2.2")).anyTimes();
+
+// expect(mockClusterExpected.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.2")).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType("hbase-site")).andReturn(hbaseSite).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType(AbstractUpgradeCatalog.CONFIGURATION_TYPE_RANGER_HBASE_PLUGIN_PROPERTIES)).
andReturn(rangerHbasePluginProperties).once();
+ expect(mockClusterExpected.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HBASE", hbaseService)
+ .build());
Map<String, String> expectedUpdates = new HashMap<>();
expectedUpdates.put(UpgradeCatalog222.HBASE_SITE_HBASE_COPROCESSOR_MASTER_CLASSES, "com.xasecure.authorization.hbase.XaSecureAuthorizationCoprocessor");
@@ -422,11 +433,17 @@ public class UpgradeCatalog222Test {
easyMockSupport.verifyAll();
// CASE 2 - Ranger enabled, Cluster version is 2.3
- reset(mockClusterExpected, upgradeCatalog222);
- expect(mockClusterExpected.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.3")).atLeastOnce();
+ reset(mockClusterExpected, upgradeCatalog222, hbaseService);
+
+
+ expect(hbaseService.getDesiredStackId()).andReturn(new StackId("HDP-2.3"));
+// expect(mockClusterExpected.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.3")).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType("hbase-site")).andReturn(hbaseSite).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType(AbstractUpgradeCatalog.CONFIGURATION_TYPE_RANGER_HBASE_PLUGIN_PROPERTIES)).
andReturn(rangerHbasePluginProperties).once();
+ expect(mockClusterExpected.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HBASE", hbaseService)
+ .build());
expectedUpdates = new HashMap<>();
expectedUpdates.put(UpgradeCatalog222.HBASE_SITE_HBASE_COPROCESSOR_MASTER_CLASSES, "org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor ");
@@ -439,23 +456,31 @@ public class UpgradeCatalog222Test {
true, false);
expectLastCall().once();
- replay(mockClusterExpected, upgradeCatalog222);
+ replay(mockClusterExpected, upgradeCatalog222, hbaseService);
upgradeCatalog222.updateHBASEConfigs();
easyMockSupport.verifyAll();
// CASE 3 - Ranger enabled, Cluster version is 2.1
- reset(mockClusterExpected, upgradeCatalog222);
- expect(mockClusterExpected.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.1")).atLeastOnce();
+ reset(mockClusterExpected, upgradeCatalog222, hbaseService);
+ expect(hbaseService.getDesiredStackId()).andReturn(new StackId("HDP-2.1"));
+// expect(mockClusterExpected.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.1")).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType("hbase-site")).andReturn(hbaseSite).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType(AbstractUpgradeCatalog.CONFIGURATION_TYPE_RANGER_HBASE_PLUGIN_PROPERTIES)).
andReturn(rangerHbasePluginProperties).once();
+ expect(mockClusterExpected.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HBASE", hbaseService)
+ .build());
- replay(mockClusterExpected, upgradeCatalog222);
+
+ replay(mockClusterExpected, upgradeCatalog222, hbaseService);
upgradeCatalog222.updateHBASEConfigs();
easyMockSupport.verifyAll();
// CASE 4 - Ranger disabled
reset(mockClusterExpected, upgradeCatalog222);
+ expect(mockClusterExpected.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HBASE", hbaseService)
+ .build());
expect(mockClusterExpected.getDesiredConfigByType("hbase-site")).andReturn(hbaseSite).atLeastOnce();
expect(mockClusterExpected.getDesiredConfigByType(AbstractUpgradeCatalog.CONFIGURATION_TYPE_RANGER_HBASE_PLUGIN_PROPERTIES)).
andReturn(null).once();
@@ -528,7 +553,7 @@ public class UpgradeCatalog222Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -587,7 +612,7 @@ public class UpgradeCatalog222Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -629,16 +654,24 @@ public class UpgradeCatalog222Test {
bind(AmbariMetaInfo.class).toInstance(metaInfo);
}
});
+
expect(controller.getClusters()).andReturn(clusters).anyTimes();
expect(clusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{
put("normal", cluster);
}}).anyTimes();
+
+ Service hdfsService = createNiceMock(Service.class);
+ expect(hdfsService.getDesiredStackId()).andReturn(stackId).anyTimes();
+
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service> builder()
+ .put("HDFS", hdfsService)
+ .build()).anyTimes();
expect(cluster.getClusterId()).andReturn(1L).anyTimes();
expect(stackInfo.getService("HDFS")).andReturn(null);
expect(cluster.getDesiredStackVersion()).andReturn(stackId);
expect(metaInfo.getStack("HDP", "2.0.0")).andReturn(stackInfo);
- replay(clusters, cluster, controller, widgetDAO, metaInfo, stackInfo);
+ replay(clusters, cluster, hdfsService, controller, widgetDAO, metaInfo, stackInfo);
UpgradeCatalog222 upgradeCatalog222 = createMockBuilder(UpgradeCatalog222.class)
.withConstructor(Injector.class)
@@ -709,6 +742,13 @@ public class UpgradeCatalog222Test {
bind(AmbariMetaInfo.class).toInstance(metaInfo);
}
});
+
+ Service hdfsService = createNiceMock(Service.class);
+ expect(hdfsService.getDesiredStackId()).andReturn(stackId).anyTimes();
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", hdfsService)
+ .build()).anyTimes();
+
expect(controller.getClusters()).andReturn(clusters).anyTimes();
expect(clusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{
put("normal", cluster);
@@ -729,7 +769,7 @@ public class UpgradeCatalog222Test {
expect(widgetDAO.merge(widgetEntity2)).andReturn(null);
expect(widgetEntity2.getWidgetName()).andReturn("HDFS Bytes Read").anyTimes();
- replay(clusters, cluster, controller, widgetDAO, metaInfo, widgetEntity, widgetEntity2, stackInfo, serviceInfo);
+ replay(clusters, cluster, hdfsService, controller, widgetDAO, metaInfo, widgetEntity, widgetEntity2, stackInfo, serviceInfo);
mockInjector.getInstance(UpgradeCatalog222.class).updateHDFSWidgetDefinition();
@@ -797,6 +837,13 @@ public class UpgradeCatalog222Test {
bind(AmbariMetaInfo.class).toInstance(metaInfo);
}
});
+
+ Service yarnService = createNiceMock(Service.class);
+ expect(yarnService.getDesiredStackId()).andReturn(stackId);
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("YARN", yarnService)
+ .build());
+
expect(controller.getClusters()).andReturn(clusters).anyTimes();
expect(clusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{
put("normal", cluster);
@@ -817,7 +864,7 @@ public class UpgradeCatalog222Test {
expect(widgetDAO.merge(widgetEntity2)).andReturn(null);
expect(widgetEntity2.getWidgetName()).andReturn("Container Failures").anyTimes();
- replay(clusters, cluster, controller, widgetDAO, metaInfo, widgetEntity, widgetEntity2, stackInfo, serviceInfo);
+ replay(clusters, cluster, yarnService, controller, widgetDAO, metaInfo, widgetEntity, widgetEntity2, stackInfo, serviceInfo);
mockInjector.getInstance(UpgradeCatalog222.class).updateYARNWidgetDefinition();
@@ -873,6 +920,13 @@ public class UpgradeCatalog222Test {
bind(AmbariMetaInfo.class).toInstance(metaInfo);
}
});
+
+ Service hbaseService = createNiceMock(Service.class);
+ expect(hbaseService.getDesiredStackId()).andReturn(stackId);
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HBASE", hbaseService)
+ .build());
+
expect(controller.getClusters()).andReturn(clusters).anyTimes();
expect(clusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{
put("normal", cluster);
@@ -888,7 +942,7 @@ public class UpgradeCatalog222Test {
expect(widgetDAO.merge(widgetEntity)).andReturn(null);
expect(widgetEntity.getWidgetName()).andReturn("Blocked Updates").anyTimes();
- replay(clusters, cluster, controller, widgetDAO, metaInfo, widgetEntity, stackInfo, serviceInfo);
+ replay(clusters, cluster, hbaseService, controller, widgetDAO, metaInfo, widgetEntity, stackInfo, serviceInfo);
mockInjector.getInstance(UpgradeCatalog222.class).updateHBASEWidgetDefinition();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
index 70673f8..f4903fe 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
@@ -128,6 +128,7 @@ import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.springframework.security.crypto.password.PasswordEncoder;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.inject.AbstractModule;
@@ -764,9 +765,9 @@ public class UpgradeCatalog240Test {
Capture<Map<String, String>> oozieCapture = newCapture();
Capture<Map<String, String>> hiveCapture = newCapture();
- expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), eq("oozie-env"),
+ expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("oozie-env"),
capture(oozieCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
- expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), eq("hive-env"),
+ expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("hive-env"),
capture(hiveCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
easyMockSupport.replayAll();
@@ -848,15 +849,15 @@ public class UpgradeCatalog240Test {
expect(falconStartupConfig.getProperties()).andReturn(falconStartupConfigProperties).anyTimes();
Capture<Map<String, String>> falconCapture = newCapture();
- expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), eq("falcon-env"),
+ expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("falcon-env"),
capture(falconCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
Capture<Map<String, String>> falconCapture2 = newCapture();
- expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), eq("falcon-env"),
+ expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("falcon-env"),
capture(falconCapture2), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
Capture<Map<String, String>> falconStartupCapture = newCapture();
- expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), eq("falcon-startup.properties"),
+ expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("falcon-startup.properties"),
capture(falconStartupCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
easyMockSupport.replayAll();
@@ -911,7 +912,10 @@ public class UpgradeCatalog240Test {
put("normal", mockCluster);
}}).anyTimes();
- expect(mockCluster.getServices()).andReturn(new HashMap<String, Service>(){{put("HBASE",null);}}).anyTimes();
+ final Service hbaseService = createNiceMock(Service.class);
+ expect(hbaseService.getDesiredStackId()).andReturn(new StackId("HDP-2.4"));
+
+ expect(mockCluster.getServices()).andReturn(new HashMap<String, Service>(){{put("HBASE",hbaseService);}}).anyTimes();
expect(mockCluster.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes();
final Config mockHbaseSiteConfigs = easyMockSupport.createNiceMock(Config.class);
@@ -934,10 +938,8 @@ public class UpgradeCatalog240Test {
}}).anyTimes();
-
-
Capture<Map<String, String>> hbaseCapture = newCapture();
- expect(mockAmbariManagementController.createConfig(eq(mockCluster), eq("hbase-site"),
+ expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockCluster), eq("hbase-site"),
capture(hbaseCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
easyMockSupport.replayAll();
@@ -1023,7 +1025,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1099,9 +1101,9 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), eq("hdfs-site"), capture(propertiesCaptureHdfsSite), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("hdfs-site"), capture(propertiesCaptureHdfsSite), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
- expect(controller.createConfig(anyObject(Cluster.class), eq("hadoop-env"), capture(propertiesCaptureHadoopEnv), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("hadoop-env"), capture(propertiesCaptureHadoopEnv), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1167,7 +1169,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1299,9 +1301,9 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), eq("spark-defaults"), capture(propertiesSparkDefaultsCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("spark-defaults"), capture(propertiesSparkDefaultsCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
- expect(controller.createConfig(anyObject(Cluster.class), eq("spark-javaopts-properties"), capture(propertiesSparkJavaOptsCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("spark-javaopts-properties"), capture(propertiesSparkJavaOptsCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1360,7 +1362,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1419,7 +1421,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1476,7 +1478,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1551,11 +1553,17 @@ public class UpgradeCatalog240Test {
final StackId currentStackVersion = new StackId("HDP", "2.4.2");
+ final Service kerbService = createNiceMock(Service.class);
+ expect(kerbService.getDesiredStackId()).andReturn(currentStackVersion);
+
final Cluster cluster = createNiceMock(Cluster.class);
expect(cluster.getClusterName()).andReturn("c1").anyTimes();
expect(cluster.getDesiredConfigByType("kerberos-env")).andReturn(configKerberosEnv).anyTimes();
expect(cluster.getDesiredConfigByType("krb5-conf")).andReturn(configKrb5Conf).anyTimes();
- expect(cluster.getCurrentStackVersion()).andReturn(currentStackVersion).once();
+
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("KERBEROS", kerbService)
+ .build());
expect(cluster.getConfigsByType("kerberos-env"))
.andReturn(Collections.singletonMap("tag1", configKerberosEnv))
@@ -1575,26 +1583,25 @@ public class UpgradeCatalog240Test {
Capture<String> tagCapture = newCapture(CaptureType.ALL);
Capture<Map<String, Map<String, String>>> attributesCapture = newCapture(CaptureType.ALL);
- expect(controller.createConfig(capture(clusterCapture), capture(typeCapture),
+ expect(controller.createConfig(anyObject(StackId.class), capture(clusterCapture), capture(typeCapture),
capture(propertiesCapture), capture(tagCapture), capture(attributesCapture) ))
.andReturn(createNiceMock(Config.class))
.anyTimes();
expect(controller.getAmbariMetaInfo()).andReturn(metaInfo).once();
expect(metaInfo.getStack(currentStackVersion.getStackName(), currentStackVersion.getStackVersion()))
- .andReturn(stackInfo)
- .once();
+ .andReturn(stackInfo).atLeastOnce();
- expect(stackInfo.getService("KERBEROS")).andReturn(serviceInfo).once();
+ expect(stackInfo.getService("KERBEROS")).andReturn(serviceInfo).atLeastOnce();
final PropertyInfo propertyInfo = new PropertyInfo();
propertyInfo.setFilename("krb5-conf.xml");
propertyInfo.setName("content");
propertyInfo.setValue("new content template");
- expect(serviceInfo.getProperties()).andReturn(Collections.singletonList(propertyInfo)).once();
+ expect(serviceInfo.getProperties()).andReturn(Collections.singletonList(propertyInfo)).atLeastOnce();
- replay(controller, metaInfo, stackInfo, serviceInfo, dbAccessor, osFamily, cluster, configKerberosEnv, configKrb5Conf, clusters);
+ replay(controller, metaInfo, stackInfo, serviceInfo, dbAccessor, osFamily, cluster, configKerberosEnv, configKrb5Conf, clusters, kerbService);
final Injector injector = Guice.createInjector(new AbstractModule() {
@Override
@@ -1611,7 +1618,7 @@ public class UpgradeCatalog240Test {
injector.getInstance(UpgradeCatalog240.class).updateKerberosConfigs();
- verify(controller, metaInfo, stackInfo, serviceInfo, dbAccessor, osFamily, cluster, configKerberosEnv, configKrb5Conf, clusters);
+ verify(controller, metaInfo, stackInfo, serviceInfo, dbAccessor, osFamily, cluster, configKerberosEnv, configKrb5Conf, clusters, kerbService);
List<String> typeCaptureValues = typeCapture.getValues();
Assert.assertEquals(2, typeCaptureValues.size());
@@ -1697,6 +1704,12 @@ public class UpgradeCatalog240Test {
final StackId currentStackVersion = new StackId("HDP", "2.4.2");
+ final Service kerbService = createNiceMock(Service.class);
+ expect(kerbService.getDesiredStackId()).andReturn(currentStackVersion);
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("KERBEROS", kerbService)
+ .build());
+
expect(metaInfo.getStack(currentStackVersion.getStackName(), currentStackVersion.getStackVersion()))
.andReturn(stackInfo)
.once();
@@ -1712,13 +1725,13 @@ public class UpgradeCatalog240Test {
expect(cluster.getConfigsByType("kerberos-env"))
.andReturn(Collections.singletonMap("tag1", configKerberosEnv))
- .once();
+ .atLeastOnce();
expect(cluster.getDesiredConfigByType("kerberos-env"))
.andReturn(configKerberosEnv)
- .once();
+ .atLeastOnce();
- expect(cluster.getCurrentStackVersion()).andReturn(currentStackVersion).once();
+// expect(cluster.getCurrentStackVersion()).andReturn(currentStackVersion).once();
Capture<Cluster> clusterCapture = newCapture(CaptureType.ALL);
Capture<String> typeCapture = newCapture(CaptureType.ALL);
@@ -1726,13 +1739,12 @@ public class UpgradeCatalog240Test {
Capture<String> tagCapture = newCapture(CaptureType.ALL);
Capture<Map<String, Map<String, String>>> attributesCapture = newCapture(CaptureType.ALL);
-
- expect(controller.createConfig(capture(clusterCapture), capture(typeCapture),
+ expect(controller.createConfig(anyObject(StackId.class), capture(clusterCapture), capture(typeCapture),
capture(propertiesCapture), capture(tagCapture), capture(attributesCapture)))
.andReturn(createNiceMock(Config.class))
.anyTimes();
- replay(controller, metaInfo, stackInfo, serviceInfo, dbAccessor, osFamily, cluster, configKerberosEnv, configKrb5Conf, clusters);
+ replay(controller, metaInfo, stackInfo, serviceInfo, dbAccessor, osFamily, cluster, configKerberosEnv, configKrb5Conf, clusters, kerbService);
final Injector injector = Guice.createInjector(new AbstractModule() {
@Override
@@ -1749,7 +1761,7 @@ public class UpgradeCatalog240Test {
injector.getInstance(UpgradeCatalog240.class).updateKerberosConfigs();
- verify(controller, metaInfo, stackInfo, serviceInfo, dbAccessor, osFamily, cluster, configKerberosEnv, configKrb5Conf, clusters);
+ verify(controller, metaInfo, stackInfo, serviceInfo, dbAccessor, osFamily, cluster, configKerberosEnv, configKrb5Conf, clusters, kerbService);
List<String> typeCaptureValues = typeCapture.getValues();
Assert.assertEquals(1, typeCaptureValues.size());
@@ -2144,16 +2156,23 @@ public class UpgradeCatalog240Test {
expect(metaInfo.getStack("HDP", "2.0.0")).andReturn(stackInfo).anyTimes();
expect(serviceInfo.getWidgetsDescriptorFile()).andReturn(file).anyTimes();
+ Service hdfsService = createNiceMock(Service.class);
+ expect(hdfsService.getDesiredStackId()).andReturn(stackId);
+
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", hdfsService)
+ .build());
+
expect(widgetDAO.findByName(1L, "NameNode Operations", "ambari", "HDFS_SUMMARY"))
.andReturn(Collections.singletonList(widgetEntity));
expect(widgetDAO.merge(widgetEntity)).andReturn(null);
expect(widgetEntity.getWidgetName()).andReturn("Namenode Operations").anyTimes();
- replay(clusters, cluster, controller, widgetDAO, metaInfo, widgetEntity, stackInfo, serviceInfo);
+ replay(clusters, cluster, controller, widgetDAO, metaInfo, widgetEntity, stackInfo, serviceInfo, hdfsService);
mockInjector.getInstance(UpgradeCatalog240.class).updateHDFSWidgetDefinition();
- verify(clusters, cluster, controller, widgetDAO, widgetEntity, stackInfo, serviceInfo);
+ verify(clusters, cluster, controller, widgetDAO, widgetEntity, stackInfo, serviceInfo, hdfsService);
}
@Test
@@ -2255,15 +2274,22 @@ public class UpgradeCatalog240Test {
Clusters clusters = easyMockSupport.createNiceMock(Clusters.class);
final Cluster cluster = easyMockSupport.createNiceMock(Cluster.class);
Config mockHbaseSite = easyMockSupport.createNiceMock(Config.class);
+
+
+ final StackId stackId = new StackId("HDP-2.5");
+
+ Service hbaseService = easyMockSupport.createNiceMock(Service.class);
+ expect(hbaseService.getDesiredStackId()).andReturn(stackId);
+
+
// HBase and Kerberos are both "installed"
final Map<String, Service> mockServices = new HashMap<>();
- mockServices.put("HBASE", null);
- final StackId stackId = new StackId("HDP-2.5");
+ mockServices.put("HBASE", hbaseService);
expect(controller.getClusters()).andReturn(clusters).once();
expect(clusters.getClusters()).andReturn(Collections.singletonMap("normal", cluster)).once();
- expect(cluster.getCurrentStackVersion()).andReturn(stackId);
- expect(cluster.getServices()).andReturn(mockServices).once();
+// expect(cluster.getCurrentStackVersion()).andReturn(stackId);
+ expect(cluster.getServices()).andReturn(mockServices).atLeastOnce();
expect(cluster.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes();
expect(cluster.getDesiredConfigByType(UpgradeCatalog240.HBASE_SITE_CONFIG)).andReturn(mockHbaseSite).atLeastOnce();
expect(mockHbaseSite.getProperties()).andReturn(oldPqsProperties).anyTimes();
@@ -2405,14 +2431,18 @@ public class UpgradeCatalog240Test {
Clusters clusters = easyMockSupport.createNiceMock(Clusters.class);
final Cluster cluster = easyMockSupport.createNiceMock(Cluster.class);
Config mockHbaseSite = easyMockSupport.createNiceMock(Config.class);
+
+ final StackId stackId = new StackId("HDP-2.5");
+
+ Service hbaseService = easyMockSupport.createNiceMock(Service.class);
+ expect(hbaseService.getDesiredStackId()).andReturn(stackId);
+
// HBase and Kerberos are both "installed"
final Map<String, Service> mockServices = new HashMap<>();
- mockServices.put("HBASE", null);
- final StackId stackId = new StackId("HDP-2.5");
+ mockServices.put("HBASE", hbaseService);
expect(controller.getClusters()).andReturn(clusters).once();
expect(clusters.getClusters()).andReturn(Collections.singletonMap("normal", cluster)).once();
- expect(cluster.getCurrentStackVersion()).andReturn(stackId);
expect(cluster.getServices()).andReturn(mockServices).once();
expect(cluster.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes();
expect(cluster.getDesiredConfigByType(UpgradeCatalog240.HBASE_SITE_CONFIG)).andReturn(mockHbaseSite).atLeastOnce();
@@ -2556,7 +2586,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
index 3cb2c47..118d5f1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
@@ -70,6 +70,7 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.kerberos.AbstractKerberosDescriptorContainer;
import org.apache.ambari.server.state.kerberos.KerberosComponentDescriptor;
import org.apache.ambari.server.state.kerberos.KerberosDescriptor;
@@ -95,7 +96,6 @@ import org.junit.runner.RunWith;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
-
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
@@ -737,7 +737,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
@@ -824,7 +824,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
@@ -905,7 +905,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).times(2);
replay(controller, injector2);
@@ -959,7 +959,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
@@ -1064,7 +1064,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("ams-log4j")).andReturn(mockAmsLog4j).atLeastOnce();
expect(mockAmsLog4j.getProperties()).andReturn(oldAmsLog4j).anyTimes();
Capture<Map<String, String>> AmsLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(AmsLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(AmsLog4jCapture), anyString(),
anyObject(Map.class))).andReturn(config).once();
Map<String, String> oldAmsHbaseLog4j = ImmutableMap.of(
@@ -1299,7 +1299,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("ams-hbase-log4j")).andReturn(mockAmsHbaseLog4j).atLeastOnce();
expect(mockAmsHbaseLog4j.getProperties()).andReturn(oldAmsHbaseLog4j).anyTimes();
Capture<Map<String, String>> AmsHbaseLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(AmsHbaseLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(AmsHbaseLog4jCapture), anyString(),
anyObject(Map.class))).andReturn(config).once();
replay(clusters, cluster);
@@ -1348,7 +1348,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logsearch-properties")).andReturn(mockLogSearchProperties).atLeastOnce();
expect(mockLogSearchProperties.getProperties()).andReturn(oldLogSearchProperties).anyTimes();
Capture<Map<String, String>> logSearchPropertiesCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logSearchPropertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logSearchPropertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldLogFeederEnv = ImmutableMap.of(
@@ -1361,7 +1361,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logfeeder-env")).andReturn(mockLogFeederEnv).atLeastOnce();
expect(mockLogFeederEnv.getProperties()).andReturn(oldLogFeederEnv).anyTimes();
Capture<Map<String, String>> logFeederEnvCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logFeederEnvCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logFeederEnvCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldLogSearchEnv = new HashMap<>();
@@ -1383,7 +1383,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logsearch-env")).andReturn(mockLogSearchEnv).atLeastOnce();
expect(mockLogSearchEnv.getProperties()).andReturn(oldLogSearchEnv).anyTimes();
Capture<Map<String, String>> logSearchEnvCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logSearchEnvCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logSearchEnvCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldLogFeederLog4j = ImmutableMap.of(
@@ -1436,7 +1436,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logfeeder-log4j")).andReturn(mockLogFeederLog4j).atLeastOnce();
expect(mockLogFeederLog4j.getProperties()).andReturn(oldLogFeederLog4j).anyTimes();
Capture<Map<String, String>> logFeederLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logFeederLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logFeederLog4jCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldLogSearchLog4j = ImmutableMap.of(
@@ -1554,7 +1554,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logsearch-log4j")).andReturn(mockLogSearchLog4j).atLeastOnce();
expect(mockLogSearchLog4j.getProperties()).andReturn(oldLogSearchLog4j).anyTimes();
Capture<Map<String, String>> logSearchLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logSearchLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logSearchLog4jCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(clusters, cluster);
@@ -1613,7 +1613,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("infra-solr-env")).andReturn(mockInfraSolrEnv).atLeastOnce();
expect(mockInfraSolrEnv.getProperties()).andReturn(oldInfraSolrEnv).anyTimes();
Capture<Map<String, String>> infraSolrEnvCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(infraSolrEnvCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(infraSolrEnvCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldInfraSolrLog4j = ImmutableMap.of(
@@ -1630,7 +1630,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("infra-solr-log4j")).andReturn(mockInfraSolrLog4j).atLeastOnce();
expect(mockInfraSolrLog4j.getProperties()).andReturn(oldInfraSolrLog4j).anyTimes();
Capture<Map<String, String>> infraSolrLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(infraSolrLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(infraSolrLog4jCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldInfraSolrClientLog4j = ImmutableMap.of(
@@ -1649,7 +1649,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("infra-solr-client-log4j")).andReturn(mockInfraSolrClientLog4j).atLeastOnce();
expect(mockInfraSolrClientLog4j.getProperties()).andReturn(oldInfraSolrClientLog4j).anyTimes();
Capture<Map<String, String>> infraSolrClientLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(infraSolrClientLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(infraSolrClientLog4jCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(clusters, cluster);
@@ -1708,7 +1708,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("hive-interactive-env")).andReturn(mockHsiEnv).atLeastOnce();
expect(mockHsiEnv.getProperties()).andReturn(oldHsiEnv).anyTimes();
Capture<Map<String, String>> hsiEnvCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(hsiEnvCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(hsiEnvCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(clusters, cluster);
@@ -1789,7 +1789,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
@@ -2076,7 +2076,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
index c949ca2..b5f0e09 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
@@ -55,6 +55,7 @@ import org.apache.ambari.server.orm.DBAccessor;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.OsFamily;
import org.easymock.Capture;
import org.easymock.CaptureType;
@@ -258,7 +259,7 @@ public class UpgradeCatalog300Test {
verify(dbAccessor, entityManager, emFactory, emCache);
}
-
+
@Test
public void testLogSearchUpdateConfigs() throws Exception {
reset(clusters, cluster);
@@ -285,21 +286,21 @@ public class UpgradeCatalog300Test {
expect(confLogSearchConf1.getType()).andReturn("service-1-logsearch-conf");
Config confLogSearchConf2 = easyMockSupport.createNiceMock(Config.class);
expect(confLogSearchConf2.getType()).andReturn("service-2-logsearch-conf");
-
+
Map<String, String> oldLogSearchConf = ImmutableMap.of(
"service_name", "Service",
"component_mappings", "Component Mappings",
"content", "Content");
Collection<Config> configs = Arrays.asList(confSomethingElse1, confLogSearchConf1, confSomethingElse2, confLogSearchConf2);
-
+
expect(cluster.getAllConfigs()).andReturn(configs).atLeastOnce();
expect(cluster.getDesiredConfigByType("service-1-logsearch-conf")).andReturn(confLogSearchConf1).once();
expect(cluster.getDesiredConfigByType("service-2-logsearch-conf")).andReturn(confLogSearchConf2).once();
expect(confLogSearchConf1.getProperties()).andReturn(oldLogSearchConf).once();
expect(confLogSearchConf2.getProperties()).andReturn(oldLogSearchConf).once();
Capture<Map<String, String>> logSearchConfCapture = EasyMock.newCapture(CaptureType.ALL);
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logSearchConfCapture), anyString(),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logSearchConfCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).times(2);
Map<String, String> oldLogSearchProperties = ImmutableMap.of(
@@ -314,14 +315,14 @@ public class UpgradeCatalog300Test {
expect(cluster.getDesiredConfigByType("logfeeder-properties")).andReturn(logFeederPropertiesConf).times(2);
expect(logFeederPropertiesConf.getProperties()).andReturn(Collections.<String, String> emptyMap()).once();
Capture<Map<String, String>> logFeederPropertiesCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), eq("logfeeder-properties"), capture(logFeederPropertiesCapture),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("logfeeder-properties"), capture(logFeederPropertiesCapture),
anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Config logSearchPropertiesConf = easyMockSupport.createNiceMock(Config.class);
expect(cluster.getDesiredConfigByType("logsearch-properties")).andReturn(logSearchPropertiesConf).times(2);
expect(logSearchPropertiesConf.getProperties()).andReturn(oldLogSearchProperties).times(2);
Capture<Map<String, String>> logSearchPropertiesCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), eq("logsearch-properties"), capture(logSearchPropertiesCapture),
+ expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("logsearch-properties"), capture(logSearchPropertiesCapture),
anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(clusters, cluster);
@@ -336,10 +337,10 @@ public class UpgradeCatalog300Test {
for (Map<String, String> updatedLogSearchConf : updatedLogSearchConfs) {
assertTrue(Maps.difference(Collections.<String, String> emptyMap(), updatedLogSearchConf).areEqual());
}
-
+
Map<String,String> newLogFeederProperties = logFeederPropertiesCapture.getValue();
assertTrue(Maps.difference(expectedLogFeederProperties, newLogFeederProperties).areEqual());
-
+
Map<String,String> newLogSearchProperties = logSearchPropertiesCapture.getValue();
assertTrue(Maps.difference(Collections.<String, String> emptyMap(), newLogSearchProperties).areEqual());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
index 6b28846..784f4d4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
@@ -179,7 +179,7 @@ public class UpgradeCatalogHelper {
@Transactional
protected void addComponent(Injector injector, ClusterEntity clusterEntity,
ClusterServiceEntity clusterServiceEntity, HostEntity hostEntity,
- String componentName, RepositoryVersionEntity repositoryversion) {
+ String componentName, StackEntity desiredStackEntity, RepositoryVersionEntity desiredRepositoryVersion) {
ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO = injector.getInstance(
ServiceComponentDesiredStateDAO.class);
@@ -189,7 +189,8 @@ public class UpgradeCatalogHelper {
componentDesiredStateEntity.setServiceName(clusterServiceEntity.getServiceName());
componentDesiredStateEntity.setClusterServiceEntity(clusterServiceEntity);
componentDesiredStateEntity.setClusterId(clusterServiceEntity.getClusterId());
- componentDesiredStateEntity.setDesiredRepositoryVersion(repositoryversion);
+ componentDesiredStateEntity.setDesiredRepositoryVersion(desiredRepositoryVersion);
+
serviceComponentDesiredStateDAO.create(componentDesiredStateEntity);
HostComponentDesiredStateDAO hostComponentDesiredStateDAO = injector.getInstance(HostComponentDesiredStateDAO.class);
[44/50] [abbrv] ambari git commit: AMBARI-21114 - Fix Unit Test
Failures From Prior Patch/Service Upgrade Commits (jonathanhurley)
Posted by jo...@apache.org.
AMBARI-21114 - Fix Unit Test Failures From Prior Patch/Service Upgrade Commits (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/770c519a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/770c519a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/770c519a
Branch: refs/heads/trunk
Commit: 770c519a9f6c9647c812837c61662e42af5e37d5
Parents: 2cfc8d2
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed May 24 14:26:46 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed May 24 16:11:04 2017 -0400
----------------------------------------------------------------------
ambari-server/docs/api/generated/index.html | 42516 ++++++++++++++++-
ambari-server/docs/api/generated/swagger.json | 8762 +++-
.../ambari/server/state/UpgradeHelper.java | 4 +-
.../StackUpgradeConfigurationMergeTest.java | 274 +-
.../internal/UpgradeResourceProviderTest.java | 193 +-
.../upgrades/UpgradeActionTest.java | 241 +-
.../ambari/server/state/UpgradeHelperTest.java | 239 +-
7 files changed, 48934 insertions(+), 3295 deletions(-)
----------------------------------------------------------------------
[15/50] [abbrv] ambari git commit: AMBARI-20991 - Cluster Repository
State Is Not Calculated Correctly For Service/Patch Repos (jonathanhurley)
Posted by jo...@apache.org.
AMBARI-20991 - Cluster Repository State Is Not Calculated Correctly For Service/Patch Repos (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b8cb5d48
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b8cb5d48
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b8cb5d48
Branch: refs/heads/trunk
Commit: b8cb5d4863c73a1cd76a4b47fe792e650c2f67a2
Parents: 8938ea2
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Thu May 11 11:30:31 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Thu May 11 11:32:39 2017 -0400
----------------------------------------------------------------------
.../ClusterStackVersionResourceProvider.java | 38 +++++---------------
1 file changed, 9 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/b8cb5d48/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index 1e49eb2..9ca8ddc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -77,7 +77,6 @@ import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.ambari.server.utils.VersionUtils;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
@@ -240,6 +239,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByPK(repositoryVersionId);
+ final List<RepositoryVersionState> allStates = new ArrayList<>();
final Map<RepositoryVersionState, List<String>> hostStates = new HashMap<>();
for (RepositoryVersionState state: RepositoryVersionState.values()) {
hostStates.put(state, new ArrayList<String>());
@@ -248,10 +248,13 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
StackEntity repoVersionStackEntity = repositoryVersion.getStack();
StackId repoVersionStackId = new StackId(repoVersionStackEntity);
- for (HostVersionEntity hostVersionEntity : hostVersionDAO.findByClusterStackAndVersion(
- clusterName, repoVersionStackId, repositoryVersion.getVersion())) {
+ List<HostVersionEntity> hostVersionsForRepository = hostVersionDAO.findHostVersionByClusterAndRepository(
+ cluster.getClusterId(), repositoryVersion);
+ // create the in-memory structures
+ for (HostVersionEntity hostVersionEntity : hostVersionsForRepository) {
hostStates.get(hostVersionEntity.getState()).add(hostVersionEntity.getHostName());
+ allStates.add(hostVersionEntity.getState());
}
setResourceProperty(resource, CLUSTER_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID, clusterName, requestedIds);
@@ -259,35 +262,12 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
setResourceProperty(resource, CLUSTER_STACK_VERSION_ID_PROPERTY_ID, repositoryVersion.getId(), requestedIds);
setResourceProperty(resource, CLUSTER_STACK_VERSION_STACK_PROPERTY_ID, repoVersionStackId.getStackName(), requestedIds);
setResourceProperty(resource, CLUSTER_STACK_VERSION_VERSION_PROPERTY_ID, repoVersionStackId.getStackVersion(), requestedIds);
-
+ setResourceProperty(resource, CLUSTER_STACK_VERSION_REPOSITORY_VERSION_PROPERTY_ID, repositoryVersion.getId(), requestedIds);
@Experimental(feature = ExperimentalFeature.PATCH_UPGRADES,
comment = "this is a fake status until the UI can handle services that are on their own")
- RepositoryVersionState finalState = null;
-
- for (RepositoryVersionState state : EnumSet.of(RepositoryVersionState.INSTALLING,
- RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.OUT_OF_SYNC)) {
-
- if (CollectionUtils.isNotEmpty(hostStates.get(state))) {
- finalState = state;
- break;
- }
- }
-
- if (null == finalState) {
- int count = cluster.getClusterSize();
-
- for (RepositoryVersionState state : EnumSet.of(RepositoryVersionState.INSTALLED, RepositoryVersionState.CURRENT)) {
- if (count == CollectionUtils.size(hostStates.get(state))) {
- finalState = state;
- break;
- }
- }
- }
- // !!! end ExperimentalFeature
-
- setResourceProperty(resource, CLUSTER_STACK_VERSION_STATE_PROPERTY_ID, finalState, requestedIds);
- setResourceProperty(resource, CLUSTER_STACK_VERSION_REPOSITORY_VERSION_PROPERTY_ID, repositoryVersion.getId(), requestedIds);
+ RepositoryVersionState aggregateState = RepositoryVersionState.getAggregateState(allStates);
+ setResourceProperty(resource, CLUSTER_STACK_VERSION_STATE_PROPERTY_ID, aggregateState, requestedIds);
if (predicate == null || predicate.evaluate(resource)) {
resources.add(resource);
[36/50] [abbrv] ambari git commit: AMBARI-21078 - Merging
Configurations On Service/Patch Upgrades Should Create New Configurations
Only For Included Services (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/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 23b6db1..2c786b5 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
@@ -1530,12 +1530,20 @@ public class ClusterImpl implements Cluster {
long nextServiceConfigVersion = serviceConfigDAO.findNextServiceConfigVersion(clusterId,
serviceName);
+ // get the correct stack ID to use when creating the service config
+ StackEntity stackEntity = clusterEntity.getDesiredStack();
+ Service service = services.get(serviceName);
+ if (null != service) {
+ StackId serviceStackId = service.getDesiredStackId();
+ stackEntity = stackDAO.find(serviceStackId);
+ }
+
serviceConfigEntity.setServiceName(serviceName);
serviceConfigEntity.setClusterEntity(clusterEntity);
serviceConfigEntity.setVersion(nextServiceConfigVersion);
serviceConfigEntity.setUser(user);
serviceConfigEntity.setNote(note);
- serviceConfigEntity.setStack(clusterEntity.getDesiredStack());
+ serviceConfigEntity.setStack(stackEntity);
serviceConfigDAO.create(serviceConfigEntity);
if (configGroup != null) {
@@ -2320,30 +2328,50 @@ public class ClusterImpl implements Cluster {
*/
@Override
@Transactional
- public void applyLatestConfigurations(StackId stackId) {
+ public void applyLatestConfigurations(StackId stackId, String serviceName) {
clusterGlobalLock.writeLock().lock();
try {
+ // grab all of the configurations and hash them so we can easily update them when picking and choosing only those from the service
ClusterEntity clusterEntity = getClusterEntity();
Collection<ClusterConfigEntity> configEntities = clusterEntity.getClusterConfigEntities();
-
- // hash them for easier retrieval later
ImmutableMap<Object, ClusterConfigEntity> clusterConfigEntityMap = Maps.uniqueIndex(
configEntities, Functions.identity());
- // disable all configs
- for (ClusterConfigEntity e : configEntities) {
- LOG.debug("Disabling configuration {} with tag {}", e.getType(), e.getTag());
- e.setSelected(false);
+ // find the latest configurations for the service
+ Set<String> configTypesForService = new HashSet<>();
+ List<ServiceConfigEntity> latestServiceConfigs = serviceConfigDAO.getLastServiceConfigsForService(
+ getClusterId(), serviceName);
+
+ // process the current service configurations
+ for (ServiceConfigEntity serviceConfig : latestServiceConfigs) {
+ List<ClusterConfigEntity> latestConfigs = serviceConfig.getClusterConfigEntities();
+ for( ClusterConfigEntity latestConfig : latestConfigs ){
+ // grab the hash'd entity from the map so we're working with the right one
+ latestConfig = clusterConfigEntityMap.get(latestConfig);
+
+ // add the config type to our list for tracking later on
+ configTypesForService.add(latestConfig.getType());
+
+ // un-select the latest configuration for the service
+ LOG.debug("Disabling configuration {} with tag {}", latestConfig.getType(), latestConfig.getTag());
+ latestConfig.setSelected(false);
+ }
}
- // work through the in-memory list, finding only the most recent mapping per type
+ // get the latest configurations for the given stack which we're going to make active
Collection<ClusterConfigEntity> latestConfigsByStack = clusterDAO.getLatestConfigurations(
clusterId, stackId);
- // pull the correct latest mapping for the stack out of the cached map
- // from the cluster entity
+ // set the service configuration for the specified stack to the latest
for (ClusterConfigEntity latestConfigByStack : latestConfigsByStack) {
+ // since we're iterating over all configuration types, only work with those that are for our service
+ if (!configTypesForService.contains(latestConfigByStack.getType())) {
+ continue;
+ }
+
+ // pull the correct latest mapping for the stack out of the cached map
+ // from the cluster entity
ClusterConfigEntity entity = clusterConfigEntityMap.get(latestConfigByStack);
entity.setSelected(true);
@@ -2358,14 +2386,15 @@ public class ClusterImpl implements Cluster {
clusterEntity = clusterDAO.merge(clusterEntity);
cacheConfigurations();
+
+ LOG.info(
+ "Applied latest configurations for {} on stack {}. The the following types were modified: {}",
+ serviceName, stackId, StringUtils.join(configTypesForService, ','));
+
} finally {
clusterGlobalLock.writeLock().unlock();
}
- LOG.info(
- "Applied latest configurations for {} on stack {}. The desired configurations are now {}",
- getClusterName(), stackId, getDesiredConfigs());
-
// publish an event to instruct entity managers to clear cached instances of
// ClusterEntity immediately - it takes EclipseLink about 1000ms to update
// the L1 caches of other threads and the action scheduler could act upon
@@ -2389,14 +2418,18 @@ public class ClusterImpl implements Cluster {
}
/**
- * Removes all configurations associated with the specified stack. The caller
- * should make sure the cluster global write lock is acquired.
+ * Removes all configurations associated with the specified stack for the
+ * specified service. The caller should make sure the cluster global write
+ * lock is acquired.
*
* @param stackId
+ * the stack to remove configurations for (not {@code null}).
+ * @param serviceName
+ * the service name (not {@code null}).
* @see #clusterGlobalLock
*/
@Transactional
- void removeAllConfigsForStack(StackId stackId) {
+ void removeAllConfigsForStack(StackId stackId, String serviceName) {
ClusterEntity clusterEntity = getClusterEntity();
// make sure the entity isn't stale in the current unit of work.
@@ -2404,53 +2437,50 @@ public class ClusterImpl implements Cluster {
long clusterId = clusterEntity.getClusterId();
+ // keep track of any types removed for logging purposes
+ Set<String> removedConfigurationTypes = new HashSet<>();
+
// this will keep track of cluster config mappings that need removal
// since there is no relationship between configs and their mappings, we
// have to do it manually
List<ClusterConfigEntity> removedClusterConfigs = new ArrayList<>(50);
- Collection<ClusterConfigEntity> clusterConfigEntities = clusterEntity.getClusterConfigEntities();
+ Collection<ClusterConfigEntity> allClusterConfigEntities = clusterEntity.getClusterConfigEntities();
+ Collection<ServiceConfigEntity> allServiceConfigEntities = clusterEntity.getServiceConfigEntities();
- List<ServiceConfigEntity> serviceConfigs = serviceConfigDAO.getAllServiceConfigsForClusterAndStack(
- clusterId, stackId);
+ // get the service configs only for the service
+ List<ServiceConfigEntity> serviceConfigs = serviceConfigDAO.getServiceConfigsForServiceAndStack(
+ clusterId, stackId, serviceName);
// remove all service configurations and associated configs
- Collection<ServiceConfigEntity> serviceConfigEntities = clusterEntity.getServiceConfigEntities();
-
for (ServiceConfigEntity serviceConfig : serviceConfigs) {
for (ClusterConfigEntity configEntity : serviceConfig.getClusterConfigEntities()) {
- clusterConfigEntities.remove(configEntity);
+ removedConfigurationTypes.add(configEntity.getType());
+
+ allClusterConfigEntities.remove(configEntity);
clusterDAO.removeConfig(configEntity);
removedClusterConfigs.add(configEntity);
}
serviceConfig.getClusterConfigEntities().clear();
serviceConfigDAO.remove(serviceConfig);
- serviceConfigEntities.remove(serviceConfig);
+ allServiceConfigEntities.remove(serviceConfig);
}
- // remove any leftover cluster configurations that don't have a service
- // configuration (like cluster-env)
- List<ClusterConfigEntity> clusterConfigs = clusterDAO.getAllConfigurations(
- clusterId, stackId);
-
- for (ClusterConfigEntity clusterConfig : clusterConfigs) {
- clusterConfigEntities.remove(clusterConfig);
- clusterDAO.removeConfig(clusterConfig);
- removedClusterConfigs.add(clusterConfig);
- }
-
- clusterEntity.setClusterConfigEntities(clusterConfigEntities);
+ clusterEntity.setClusterConfigEntities(allClusterConfigEntities);
clusterEntity = clusterDAO.merge(clusterEntity);
+
+ LOG.info("Removed the following configuration types for {} on stack {}: {}", serviceName,
+ stackId, StringUtils.join(removedConfigurationTypes, ','));
}
/**
* {@inheritDoc}
*/
@Override
- public void removeConfigurations(StackId stackId) {
+ public void removeConfigurations(StackId stackId, String serviceName) {
clusterGlobalLock.writeLock().lock();
try {
- removeAllConfigsForStack(stackId);
+ removeAllConfigsForStack(stackId, serviceName);
cacheConfigurations();
} finally {
clusterGlobalLock.writeLock().unlock();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
index 60780dd..a4be480 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
@@ -124,7 +124,7 @@ public interface ConfigGroup {
* Reassign the set of configs associated with this config group
* @param configs
*/
- void setConfigurations(Map<String, Config> configs);
+ void setConfigurations(Map<String, Config> configs) throws AmbariException;
/**
* Remove host mapping
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
index 2209dc1..ae6cde9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
@@ -19,6 +19,8 @@ package org.apache.ambari.server.state.configgroup;
import java.util.Map;
+import javax.annotation.Nullable;
+
import org.apache.ambari.server.orm.entities.ConfigGroupEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Config;
@@ -30,7 +32,8 @@ public interface ConfigGroupFactory {
/**
* Creates and saves a new {@link ConfigGroup}.
*/
- ConfigGroup createNew(@Assisted("cluster") Cluster cluster, @Assisted("name") String name,
+ ConfigGroup createNew(@Assisted("cluster") Cluster cluster,
+ @Assisted("serviceName") @Nullable String serviceName, @Assisted("name") String name,
@Assisted("tag") String tag, @Assisted("description") String description,
@Assisted("configs") Map<String, Config> configs, @Assisted("hosts") Map<Long, Host> hosts);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
index a04df3c..cb0d200 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
@@ -28,6 +28,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.locks.ReadWriteLock;
+import javax.annotation.Nullable;
+
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.DuplicateResourceException;
import org.apache.ambari.server.controller.ConfigGroupResponse;
@@ -50,6 +52,7 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.Host;
+import org.apache.ambari.server.state.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,6 +67,7 @@ public class ConfigGroupImpl implements ConfigGroup {
private ConcurrentMap<Long, Host> m_hosts;
private ConcurrentMap<String, Config> m_configurations;
private String configGroupName;
+ private String serviceName;
private long configGroupId;
/**
@@ -90,13 +94,15 @@ public class ConfigGroupImpl implements ConfigGroup {
private final ConfigFactory configFactory;
@AssistedInject
- public ConfigGroupImpl(@Assisted("cluster") Cluster cluster, @Assisted("name") String name,
+ public ConfigGroupImpl(@Assisted("cluster") Cluster cluster,
+ @Assisted("serviceName") @Nullable String serviceName, @Assisted("name") String name,
@Assisted("tag") String tag, @Assisted("description") String description,
@Assisted("configs") Map<String, Config> configurations,
@Assisted("hosts") Map<Long, Host> hosts, Clusters clusters, ConfigFactory configFactory,
ClusterDAO clusterDAO, HostDAO hostDAO, ConfigGroupDAO configGroupDAO,
ConfigGroupConfigMappingDAO configGroupConfigMappingDAO,
- ConfigGroupHostMappingDAO configGroupHostMappingDAO, LockFactory lockFactory) {
+ ConfigGroupHostMappingDAO configGroupHostMappingDAO, LockFactory lockFactory)
+ throws AmbariException {
this.configFactory = configFactory;
this.clusterDAO = clusterDAO;
@@ -108,6 +114,7 @@ public class ConfigGroupImpl implements ConfigGroup {
hostLock = lockFactory.newReadWriteLock(hostLockLabel);
this.cluster = cluster;
+ this.serviceName = serviceName;
configGroupName = name;
ConfigGroupEntity configGroupEntity = new ConfigGroupEntity();
@@ -115,6 +122,7 @@ public class ConfigGroupImpl implements ConfigGroup {
configGroupEntity.setGroupName(name);
configGroupEntity.setTag(tag);
configGroupEntity.setDescription(description);
+ configGroupEntity.setServiceName(serviceName);
m_hosts = hosts == null ? new ConcurrentHashMap<Long, Host>()
: new ConcurrentHashMap<>(hosts);
@@ -146,6 +154,7 @@ public class ConfigGroupImpl implements ConfigGroup {
this.cluster = cluster;
configGroupId = configGroupEntity.getGroupId();
configGroupName = configGroupEntity.getGroupName();
+ serviceName = configGroupEntity.getServiceName();
m_configurations = new ConcurrentHashMap<>();
m_hosts = new ConcurrentHashMap<>();
@@ -260,7 +269,7 @@ public class ConfigGroupImpl implements ConfigGroup {
* Helper method to recreate configs mapping
*/
@Override
- public void setConfigurations(Map<String, Config> configurations) {
+ public void setConfigurations(Map<String, Config> configurations) throws AmbariException {
ConfigGroupEntity configGroupEntity = getConfigGroupEntity();
ClusterEntity clusterEntity = configGroupEntity.getClusterEntity();
@@ -323,7 +332,7 @@ public class ConfigGroupImpl implements ConfigGroup {
/**
* @param configGroupEntity
*/
- private void persist(ConfigGroupEntity configGroupEntity) {
+ private void persist(ConfigGroupEntity configGroupEntity) throws AmbariException {
persistEntities(configGroupEntity);
cluster.refresh();
}
@@ -334,7 +343,7 @@ public class ConfigGroupImpl implements ConfigGroup {
* @throws Exception
*/
@Transactional
- void persistEntities(ConfigGroupEntity configGroupEntity) {
+ void persistEntities(ConfigGroupEntity configGroupEntity) throws AmbariException {
ClusterEntity clusterEntity = clusterDAO.findById(cluster.getClusterId());
configGroupEntity.setClusterEntity(clusterEntity);
configGroupEntity.setTimestamp(System.currentTimeMillis());
@@ -396,8 +405,8 @@ public class ConfigGroupImpl implements ConfigGroup {
* @throws Exception
*/
@Transactional
- void persistConfigMapping(ClusterEntity clusterEntity,
- ConfigGroupEntity configGroupEntity, Map<String, Config> configurations) {
+ void persistConfigMapping(ClusterEntity clusterEntity, ConfigGroupEntity configGroupEntity,
+ Map<String, Config> configurations) throws AmbariException {
configGroupConfigMappingDAO.removeAllByGroup(configGroupEntity.getGroupId());
configGroupEntity.setConfigGroupConfigMappingEntities(
new HashSet<ConfigGroupConfigMappingEntity>());
@@ -409,8 +418,11 @@ public class ConfigGroupImpl implements ConfigGroup {
(cluster.getClusterId(), config.getType(), config.getTag());
if (clusterConfigEntity == null) {
- config = configFactory.createNew(null, cluster, config.getType(), config.getTag(),
- config.getProperties(), config.getPropertiesAttributes());
+ String serviceName = getServiceName();
+ Service service = cluster.getService(serviceName);
+
+ config = configFactory.createNew(service.getDesiredStackId(), cluster, config.getType(),
+ config.getTag(), config.getProperties(), config.getPropertiesAttributes());
entry.setValue(config);
@@ -498,8 +510,7 @@ public class ConfigGroupImpl implements ConfigGroup {
@Override
public String getServiceName() {
- ConfigGroupEntity configGroupEntity = getConfigGroupEntity();
- return configGroupEntity.getServiceName();
+ return serviceName;
}
@Override
@@ -507,6 +518,8 @@ public class ConfigGroupImpl implements ConfigGroup {
ConfigGroupEntity configGroupEntity = getConfigGroupEntity();
configGroupEntity.setServiceName(serviceName);
configGroupDAO.merge(configGroupEntity);
+
+ this.serviceName = serviceName;
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeScope.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeScope.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeScope.java
index f35bd68..9a436b6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeScope.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeScope.java
@@ -48,13 +48,4 @@ public enum UpgradeScope {
@XmlEnumValue("ANY")
@SerializedName("any")
ANY;
-
- public boolean isScoped(UpgradeScope scope) {
- if (ANY == this || ANY == scope) {
- return true;
- }
-
- return this == scope;
- }
-
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/topology/validators/RequiredConfigPropertiesValidator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/validators/RequiredConfigPropertiesValidator.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/validators/RequiredConfigPropertiesValidator.java
index 759d9e9..c707df3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/validators/RequiredConfigPropertiesValidator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/validators/RequiredConfigPropertiesValidator.java
@@ -84,7 +84,8 @@ public class RequiredConfigPropertiesValidator implements TopologyValidator {
for (String configType : requiredPropertiesByType.keySet()) {
// We need a copy not to modify the original
- Collection<String> requiredPropertiesForType = new HashSet(requiredPropertiesByType.get(configType));
+ Collection<String> requiredPropertiesForType = new HashSet(
+ requiredPropertiesByType.get(configType));
if (!operationalConfigurations.containsKey(configType)) {
// all required configuration is missing for the config type
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
index 5939fca..3f15400 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
@@ -587,7 +587,8 @@ public abstract class AbstractUpgradeCatalog implements UpgradeCatalog {
propertiesAttributes = Collections.emptyMap();
}
- controller.createConfig(cluster.getDesiredStackVersion(), cluster, configType, mergedProperties, newTag, propertiesAttributes);
+ controller.createConfig(cluster, cluster.getDesiredStackVersion(), configType,
+ mergedProperties, newTag, propertiesAttributes);
Config baseConfig = cluster.getConfig(configType, newTag);
if (baseConfig != null) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
index bc24246..7d6f066 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
@@ -34,12 +34,14 @@ import org.apache.ambari.server.events.publishers.JPAEventPublisher;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.junit.After;
import org.junit.Before;
@@ -98,37 +100,44 @@ public class TestActionSchedulerThreading {
StackId stackId = cluster.getCurrentStackVersion();
StackId newStackId = new StackId("HDP-2.2.0");
+ RepositoryVersionEntity repoVersion220 = ormTestHelper.getOrCreateRepositoryVersion(newStackId, "2.2.0-1234");
// make sure the stacks are different
Assert.assertFalse(stackId.equals(newStackId));
+ // add a service
+ String serviceName = "ZOOKEEPER";
+ RepositoryVersionEntity repositoryVersion = ormTestHelper.getOrCreateRepositoryVersion(cluster);
+ Service service = cluster.addService(serviceName, repositoryVersion);
+ String configType = "zoo.cfg";
+
Map<String, String> properties = new HashMap<>();
Map<String, Map<String, String>> propertiesAttributes = new HashMap<>();
ConfigFactory configFactory = injector.getInstance(ConfigFactory.class);
- // foo-type for v1 on current stack
+ // zoo-cfg for v1 on current stack
properties.put("foo-property-1", "foo-value-1");
- Config c1 = configFactory.createNew(cluster, "foo-type", "version-1", properties, propertiesAttributes);
+ Config c1 = configFactory.createNew(stackId, cluster, configType, "version-1", properties, propertiesAttributes);
// make v1 "current"
cluster.addDesiredConfig("admin", Sets.newHashSet(c1), "note-1");
// bump the stack
- cluster.setDesiredStackVersion(newStackId);
+ service.setDesiredRepositoryVersion(repoVersion220);
// save v2
- // foo-type for v2 on new stack
+ // zoo-cfg for v2 on new stack
properties.put("foo-property-2", "foo-value-2");
- Config c2 = configFactory.createNew(cluster, "foo-type", "version-2", properties, propertiesAttributes);
+ Config c2 = configFactory.createNew(newStackId, cluster, configType, "version-2", properties, propertiesAttributes);
// make v2 "current"
cluster.addDesiredConfig("admin", Sets.newHashSet(c2), "note-2");
// check desired config
Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs();
- DesiredConfig desiredConfig = desiredConfigs.get("foo-type");
- desiredConfig = desiredConfigs.get("foo-type");
+ DesiredConfig desiredConfig = desiredConfigs.get(configType);
+ desiredConfig = desiredConfigs.get(configType);
assertNotNull(desiredConfig);
assertEquals(Long.valueOf(2), desiredConfig.getVersion());
assertEquals("version-2", desiredConfig.getTag());
@@ -136,7 +145,7 @@ public class TestActionSchedulerThreading {
final String hostName = cluster.getHosts().iterator().next().getHostName();
// move the stack back to the old stack
- cluster.setDesiredStackVersion(stackId);
+ service.setDesiredRepositoryVersion(repositoryVersion);
// create the semaphores, taking 1 from each to make them blocking from the
// start
@@ -158,7 +167,7 @@ public class TestActionSchedulerThreading {
threadInitialCachingSemaphore.acquire();
// apply the configs for the old stack
- cluster.applyLatestConfigurations(stackId);
+ cluster.applyLatestConfigurations(stackId, serviceName);
// wake the thread up and have it verify that it can see the updated configs
applyLatestConfigsSemaphore.release();
@@ -226,11 +235,11 @@ public class TestActionSchedulerThreading {
// L1 cache
Cluster cluster = clusters.getCluster(clusterId);
- // {foo-type={tag=version-2}}
+ // {zoo.cfg={tag=version-2}}
Map<String, Map<String, String>> effectiveDesiredTags = configHelper.getEffectiveDesiredTags(
cluster, hostName);
- assertEquals("version-2", effectiveDesiredTags.get("foo-type").get("tag"));
+ assertEquals("version-2", effectiveDesiredTags.get("zoo.cfg").get("tag"));
// signal the caller that we're done making our initial call to populate
// the EntityManager
@@ -239,9 +248,9 @@ public class TestActionSchedulerThreading {
// wait for the method to switch configs
applyLatestConfigsSemaphore.acquire();
- // {foo-type={tag=version-1}}
+ // {zoo.cfg={tag=version-1}}
effectiveDesiredTags = configHelper.getEffectiveDesiredTags(cluster, hostName);
- assertEquals("version-1", effectiveDesiredTags.get("foo-type").get("tag"));
+ assertEquals("version-1", effectiveDesiredTags.get("zoo.cfg").get("tag"));
} catch (Throwable throwable) {
this.throwable = throwable;
} finally {
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java
index 5feb3cc..560d8a1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java
@@ -35,6 +35,7 @@ import org.apache.ambari.server.actionmanager.HostRoleCommandFactoryImpl;
import org.apache.ambari.server.actionmanager.StageFactory;
import org.apache.ambari.server.agent.rest.AgentResource;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.metadata.CachedRoleCommandOrderProvider;
import org.apache.ambari.server.metadata.RoleCommandOrderProvider;
@@ -323,6 +324,7 @@ public class AgentResourceTest extends RandomPortJerseyTest {
bind(Clusters.class).toInstance(createNiceMock(Clusters.class));
bind(PersistedState.class).toInstance(createNiceMock(PersistedState.class));
bind(RoleCommandOrderProvider.class).to(CachedRoleCommandOrderProvider.class);
+ bind(AmbariManagementController.class).toInstance(createNiceMock(AmbariManagementController.class));
}
private void installDependencies() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 9c723c1..a12e834 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -435,7 +435,7 @@ public class AmbariManagementControllerTest {
controller.deleteHostComponents(requests);
}
- private Long createConfigGroup(Cluster cluster, String name, String tag,
+ private Long createConfigGroup(Cluster cluster, String serviceName, String name, String tag,
List<String> hosts, List<Config> configs)
throws AmbariException {
@@ -452,9 +452,11 @@ public class AmbariManagementControllerTest {
configMap.put(config.getType(), config);
}
- ConfigGroup configGroup = configGroupFactory.createNew(cluster, name,
+ ConfigGroup configGroup = configGroupFactory.createNew(cluster, serviceName, name,
tag, "", configMap, hostMap);
+ configGroup.setServiceName(serviceName);
+
cluster.addConfigGroup(configGroup);
return configGroup.getId();
@@ -6662,8 +6664,8 @@ public class AmbariManagementControllerTest {
configs = new HashMap<>();
configs.put("a", "c");
cluster = clusters.getCluster(cluster1);
- final Config config = configFactory.createReadOnly("core-site", "version122", configs, null);
- Long groupId = createConfigGroup(cluster, group1, tag1,
+ final Config config = configFactory.createReadOnly("core-site", "version122", configs, null);
+ Long groupId = createConfigGroup(cluster, serviceName1, group1, tag1,
new ArrayList<String>() {{ add(host1); }},
new ArrayList<Config>() {{ add(config); }});
@@ -6674,7 +6676,7 @@ public class AmbariManagementControllerTest {
configs.put("a", "c");
final Config config2 = configFactory.createReadOnly("mapred-site", "version122", configs, null);
- groupId = createConfigGroup(cluster, group2, tag2,
+ groupId = createConfigGroup(cluster, serviceName2, group2, tag2,
new ArrayList<String>() {{ add(host1); }},
new ArrayList<Config>() {{ add(config2); }});
@@ -6817,7 +6819,7 @@ public class AmbariManagementControllerTest {
ConfigFactory configFactory = injector.getInstance(ConfigFactory.class);
final Config config = configFactory.createReadOnly("hdfs-site", "version122", configs, null);
- Long groupId = createConfigGroup(clusters.getCluster(cluster1), group1, tag1,
+ Long groupId = createConfigGroup(clusters.getCluster(cluster1), serviceName, group1, tag1,
new ArrayList<String>() {{
add(host1);
add(host2);
@@ -6926,7 +6928,7 @@ public class AmbariManagementControllerTest {
ConfigFactory configFactory = injector.getInstance(ConfigFactory.class);
final Config config = configFactory.createReadOnly("hdfs-site", "version122", configs, null);
- Long groupId = createConfigGroup(clusters.getCluster(cluster1), group1, tag1,
+ Long groupId = createConfigGroup(clusters.getCluster(cluster1), serviceName, group1, tag1,
new ArrayList<String>() {{ add(host1); add(host2); }},
new ArrayList<Config>() {{ add(config); }});
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java
index 5b69270..12cbadf 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java
@@ -171,13 +171,14 @@ public class ConfigGroupResourceProviderTest {
expect(hostEntity2.getHostId()).andReturn(2L).atLeastOnce();
Capture<Cluster> clusterCapture = newCapture();
+ Capture<String> serviceName = newCapture();
Capture<String> captureName = newCapture();
Capture<String> captureDesc = newCapture();
Capture<String> captureTag = newCapture();
Capture<Map<String, Config>> captureConfigs = newCapture();
Capture<Map<Long, Host>> captureHosts = newCapture();
- expect(configGroupFactory.createNew(capture(clusterCapture),
+ expect(configGroupFactory.createNew(capture(clusterCapture), capture(serviceName),
capture(captureName), capture(captureTag), capture(captureDesc),
capture(captureConfigs), capture(captureHosts))).andReturn(configGroup);
@@ -282,7 +283,7 @@ public class ConfigGroupResourceProviderTest {
expect(managementController.getAuthName()).andReturn("admin").anyTimes();
expect(cluster.getConfigGroups()).andReturn(configGroupMap);
- expect(configGroupFactory.createNew((Cluster) anyObject(), (String) anyObject(),
+ expect(configGroupFactory.createNew((Cluster) anyObject(), (String) anyObject(), (String) anyObject(),
(String) anyObject(), (String) anyObject(), EasyMock.<Map<String, Config>>anyObject(),
EasyMock.<Map<Long, Host>>anyObject())).andReturn(configGroup).anyTimes();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
index 4408492..f79b1c2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
@@ -57,6 +57,7 @@ import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.UpgradeContextFactory;
+import org.apache.ambari.server.state.UpgradeHelper;
import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
import org.apache.ambari.server.state.stack.OsFamily;
@@ -205,11 +206,11 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
// HDP 2.4 configs
EasyMock.expect(configHelper.getDefaultProperties(EasyMock.eq(s_currentStackId),
- EasyMock.anyObject(Cluster.class), EasyMock.anyBoolean())).andReturn(oldStackDefaultConfigurationsByType);
+ EasyMock.anyString())).andReturn(oldStackDefaultConfigurationsByType);
// HDP 2.5 configs
EasyMock.expect(configHelper.getDefaultProperties(EasyMock.eq(s_targetStackId),
- EasyMock.anyObject(Cluster.class), EasyMock.anyBoolean())).andReturn(newConfigurationsByType);
+ EasyMock.anyString())).andReturn(newConfigurationsByType);
// CURRENT HDP 2.4 configs
Config currentClusterConfigFoo = createNiceMock(Config.class);
@@ -238,6 +239,7 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
Capture<Map<String, Map<String, String>>> capturedArgument = EasyMock.newCapture();
configHelper.createConfigTypes(EasyMock.anyObject(Cluster.class),
EasyMock.anyObject(AmbariManagementController.class),
+ EasyMock.anyObject(StackId.class),
EasyMock.capture(capturedArgument),
EasyMock.anyString(), EasyMock.anyString());
@@ -252,10 +254,8 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
EasyMock.expect(upgradeContext.getTargetRepositoryVersion(EasyMock.anyString())).andReturn(repositoryVersionEntity).anyTimes();
replayAll();
- UpgradeResourceProvider upgradeResourceProvider = new UpgradeResourceProvider(amc);
- m_injector.injectMembers(upgradeResourceProvider);
-
- upgradeResourceProvider.applyStackAndProcessConfigurations(upgradeContext);
+ UpgradeHelper upgradeHelper = m_injector.getInstance(UpgradeHelper.class);
+ upgradeHelper.updateDesiredRepositoriesAndConfigs(upgradeContext);
// assertion time!
Map<String, Map<String, String>> mergedConfigurations = capturedArgument.getValue();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 3780ea5..04773bc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -65,7 +65,6 @@ import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.RequestDAO;
@@ -79,6 +78,7 @@ import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.StageEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
+import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity;
import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
import org.apache.ambari.server.security.TestAuthenticationFactory;
import org.apache.ambari.server.serveraction.upgrades.AutoSkipFailedSummaryAction;
@@ -95,7 +95,6 @@ import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeContext;
-import org.apache.ambari.server.state.UpgradeContextFactory;
import org.apache.ambari.server.state.UpgradeHelper;
import org.apache.ambari.server.state.UpgradeState;
import org.apache.ambari.server.state.stack.UpgradePack;
@@ -133,7 +132,6 @@ public class UpgradeResourceProviderTest {
private RepositoryVersionDAO repoVersionDao = null;
private Injector injector;
private Clusters clusters;
- private OrmTestHelper helper;
private AmbariManagementController amc;
private ConfigHelper configHelper;
private StackDAO stackDAO;
@@ -141,7 +139,6 @@ public class UpgradeResourceProviderTest {
private TopologyManager topologyManager;
private ConfigFactory configFactory;
private HostRoleCommandDAO hrcDAO;
- private UpgradeContextFactory upgradeContextFactory;
RepositoryVersionEntity repoVersionEntity2110;
RepositoryVersionEntity repoVersionEntity2111;
@@ -162,7 +159,7 @@ public class UpgradeResourceProviderTest {
expect(
configHelper.getDefaultProperties(EasyMock.anyObject(StackId.class),
- EasyMock.anyObject(Cluster.class), EasyMock.anyBoolean())).andReturn(
+ EasyMock.anyString())).andReturn(
new HashMap<String, Map<String, String>>()).anyTimes();
@@ -176,13 +173,9 @@ public class UpgradeResourceProviderTest {
H2DatabaseCleaner.resetSequences(injector);
injector.getInstance(GuiceJpaInitializer.class);
-
- helper = injector.getInstance(OrmTestHelper.class);
-
amc = injector.getInstance(AmbariManagementController.class);
ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
configFactory = injector.getInstance(ConfigFactory.class);
- upgradeContextFactory = injector.getInstance(UpgradeContextFactory.class);
Field field = AmbariServer.class.getDeclaredField("clusterController");
field.setAccessible(true);
@@ -203,8 +196,7 @@ public class UpgradeResourceProviderTest {
// For now, Ignore the tests that fail.
StackEntity stackEntity211 = stackDAO.find("HDP", "2.1.1");
StackEntity stackEntity220 = stackDAO.find("HDP", "2.2.0");
- StackId stack211 = new StackId("HDP-2.1.1");
- StackId stack220 = new StackId("HDP-2.2.0");
+ StackId stack211 = new StackId(stackEntity211);
repoVersionEntity2110 = new RepositoryVersionEntity();
repoVersionEntity2110.setDisplayName("My New Version 1");
@@ -232,9 +224,6 @@ public class UpgradeResourceProviderTest {
clusters.addCluster("c1", stack211);
Cluster cluster = clusters.getCluster("c1");
- helper.getOrCreateRepositoryVersion(stack211, stack211.getStackVersion());
- helper.getOrCreateRepositoryVersion(stack220, stack220.getStackVersion());
-
clusters.addHost("h1");
Host host = clusters.getHost("h1");
Map<String, String> hostAttributes = new HashMap<>();
@@ -245,9 +234,8 @@ public class UpgradeResourceProviderTest {
clusters.mapHostToCluster("h1", "c1");
- // add a single ZK server
+ // add a single ZK server and client on 2.1.1.0
Service service = cluster.addService("ZOOKEEPER", repoVersionEntity2110);
-
ServiceComponent component = service.addServiceComponent("ZOOKEEPER_SERVER");
ServiceComponentHost sch = component.addServiceComponentHost("h1");
sch.setVersion("2.1.1.0");
@@ -1113,9 +1101,21 @@ public class UpgradeResourceProviderTest {
*/
@Test
public void testMergeConfigurations() throws Exception {
+ RepositoryVersionEntity repoVersion211 = createNiceMock(RepositoryVersionEntity.class);
+ RepositoryVersionEntity repoVersion220 = createNiceMock(RepositoryVersionEntity.class);
+
StackId stack211 = new StackId("HDP-2.1.1");
StackId stack220 = new StackId("HDP-2.2.0");
+ String version211 = "2.1.1.0-1234";
+ String version220 = "2.2.0.0-1234";
+
+ EasyMock.expect(repoVersion211.getStackId()).andReturn(stack211).atLeastOnce();
+ EasyMock.expect(repoVersion211.getVersion()).andReturn(version211).atLeastOnce();
+
+ EasyMock.expect(repoVersion220.getStackId()).andReturn(stack220).atLeastOnce();
+ EasyMock.expect(repoVersion220.getVersion()).andReturn(version220).atLeastOnce();
+
Map<String, Map<String, String>> stack211Configs = new HashMap<>();
Map<String, String> stack211FooType = new HashMap<>();
Map<String, String> stack211BarType = new HashMap<>();
@@ -1174,17 +1174,18 @@ public class UpgradeResourceProviderTest {
EasyMock.reset(configHelper);
expect(
- configHelper.getDefaultProperties(EasyMock.eq(stack211), EasyMock.anyObject(Cluster.class), EasyMock.anyBoolean())).andReturn(
+ configHelper.getDefaultProperties(EasyMock.eq(stack211), EasyMock.anyString())).andReturn(
stack211Configs).anyTimes();
expect(
- configHelper.getDefaultProperties(EasyMock.eq(stack220), EasyMock.anyObject(Cluster.class), EasyMock.anyBoolean())).andReturn(
- stack220Configs).anyTimes();
+ configHelper.getDefaultProperties(EasyMock.eq(stack220), EasyMock.anyString())).andReturn(
+ stack220Configs).anyTimes();
Capture<Map<String, Map<String, String>>> expectedConfigurationsCapture = EasyMock.newCapture();
configHelper.createConfigTypes(EasyMock.anyObject(Cluster.class),
EasyMock.anyObject(AmbariManagementController.class),
+ EasyMock.anyObject(StackId.class),
EasyMock.capture(expectedConfigurationsCapture),
EasyMock.anyObject(String.class), EasyMock.anyObject(String.class));
@@ -1192,13 +1193,16 @@ public class UpgradeResourceProviderTest {
EasyMock.replay(configHelper, cluster, fooConfig, barConfig, bazConfig);
- UpgradeResourceProvider upgradeResourceProvider = createProvider(amc);
-
Map<String, UpgradePack> upgradePacks = ambariMetaInfo.getUpgradePacks("HDP", "2.1.1");
- UpgradePack upgrade = upgradePacks.get("upgrade_to_new_stack");
+ UpgradePack upgradePack = upgradePacks.get("upgrade_to_new_stack");
UpgradeContext upgradeContext = EasyMock.createNiceMock(UpgradeContext.class);
- upgradeResourceProvider.applyStackAndProcessConfigurations(upgradeContext);
+ EasyMock.expect(upgradeContext.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+ EasyMock.expect(upgradeContext.getCluster()).andReturn(cluster).anyTimes();
+ EasyMock.expect(upgradeContext.getDirection()).andReturn(Direction.UPGRADE).anyTimes();
+ EasyMock.expect(upgradeContext.getUpgradePack()).andReturn(upgradePack).anyTimes();
+ EasyMock.expect(upgradeContext.getRepositoryVersion()).andReturn(repoVersion211).anyTimes();
+ EasyMock.expect(upgradeContext.getTargetRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion220).anyTimes();
Map<String, Map<String, String>> expectedConfigurations = expectedConfigurationsCapture.getValue();
Map<String, String> expectedFooType = expectedConfigurations.get("foo-site");
@@ -1502,8 +1506,9 @@ public class UpgradeResourceProviderTest {
/**
* Exercises that a component that goes from upgrade->downgrade that switches
- * {@code versionAdvertised} between will go to UKNOWN. This exercises
- * {@link UpgradeHelper#putComponentsToUpgradingState(String, Map, StackId)}
+ * {@code versionAdvertised} between will go to UKNOWN. This exercises
+ * {@link UpgradeHelper#updateDesiredRepositoriesAndConfigs(UpgradeContext)}
+ *
* @throws Exception
*/
@Test
@@ -1617,9 +1622,67 @@ public class UpgradeResourceProviderTest {
}
}
+ /**
+ * Tests that from/to repository version history is created correctly on the
+ * upgrade.
+ *
+ * @throws Exception
+ */
@Test
public void testUpgradeHistory() throws Exception {
- Assert.fail("Implement me!");
+ Cluster cluster = clusters.getCluster("c1");
+
+ Map<String, Object> requestProps = new HashMap<>();
+ requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
+ requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_TYPE, UpgradeType.ROLLING.toString());
+ requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_MANUAL_VERIFICATION, Boolean.TRUE.toString());
+ requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, Boolean.TRUE.toString());
+ requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
+
+ ResourceProvider upgradeResourceProvider = createProvider(amc);
+ Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null);
+ upgradeResourceProvider.createResources(request);
+
+ List<UpgradeEntity> upgrades = upgradeDao.findUpgrades(cluster.getClusterId());
+ assertEquals(1, upgrades.size());
+
+ UpgradeEntity upgrade = cluster.getUpgradeInProgress();
+ List<UpgradeHistoryEntity> histories = upgrade.getHistory();
+ assertEquals(2, histories.size());
+
+ for( UpgradeHistoryEntity history : histories){
+ assertEquals( "ZOOKEEPER", history.getServiceName() );
+ assertEquals(repoVersionEntity2110, history.getFromReposistoryVersion());
+ assertEquals(repoVersionEntity2200, history.getTargetRepositoryVersion());
+ }
+
+ // abort the upgrade and create the downgrade
+ abortUpgrade(upgrade.getRequestId());
+
+ requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_nonrolling_new_stack");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.DOWNGRADE.name());
+
+ Map<String, String> requestInfoProperties = new HashMap<>();
+
+ request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps),
+ requestInfoProperties);
+ RequestStatus status = upgradeResourceProvider.createResources(request);
+ UpgradeEntity downgrade = upgradeDao.findUpgradeByRequestId(getRequestId(status));
+ assertEquals(Direction.DOWNGRADE, downgrade.getDirection());
+
+ // check from/to history
+ histories = downgrade.getHistory();
+ assertEquals(2, histories.size());
+
+ for (UpgradeHistoryEntity history : histories) {
+ assertEquals("ZOOKEEPER", history.getServiceName());
+ assertEquals(repoVersionEntity2200, history.getFromReposistoryVersion());
+ assertEquals(repoVersionEntity2110, history.getTargetRepositoryVersion());
+ }
}
private String parseSingleMessage(String msgStr){
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
index 77593a7..7b9ff52 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
@@ -388,10 +388,15 @@ public class ServiceConfigDAOTest {
long clusterId = serviceConfigEntity.getClusterId();
- List<ServiceConfigEntity> serviceConfigs = serviceConfigDAO.getAllServiceConfigsForClusterAndStack(clusterId, HDP_01);
- Assert.assertEquals(4, serviceConfigs.size());
+ List<ServiceConfigEntity> serviceConfigs = serviceConfigDAO.getServiceConfigsForServiceAndStack(
+ clusterId, HDP_01, "HDFS");
- serviceConfigs = serviceConfigDAO.getAllServiceConfigsForClusterAndStack(clusterId, HDP_02);
+ Assert.assertEquals(3, serviceConfigs.size());
+
+ serviceConfigs = serviceConfigDAO.getServiceConfigsForServiceAndStack(clusterId, HDP_01, "YARN");
+ Assert.assertEquals(1, serviceConfigs.size());
+
+ serviceConfigs = serviceConfigDAO.getServiceConfigsForServiceAndStack(clusterId, HDP_02, "HDFS");
Assert.assertEquals(0, serviceConfigs.size());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
index 941c424..2f2771d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
@@ -51,6 +51,7 @@ import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.RequestEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ConfigFactory;
@@ -85,7 +86,7 @@ public class ComponentVersionCheckActionTest {
private static final String HDP_2_1_1_0 = "2.1.1.0-1";
private static final String HDP_2_1_1_1 = "2.1.1.1-2";
- private static final String HDP_2_2_1_0 = "2.2.0.1-3";
+ private static final String HDP_2_2_1_0 = "2.2.1.0-1";
private static final StackId HDP_21_STACK = new StackId("HDP-2.1.1");
private static final StackId HDP_22_STACK = new StackId("HDP-2.2.0");
@@ -205,8 +206,21 @@ public class ComponentVersionCheckActionTest {
c.setUpgradeEntity(upgradeEntity);
}
- private void makeCrossStackUpgradeCluster(StackId sourceStack, String sourceRepo, StackId targetStack,
- String targetRepo, String clusterName, String hostName) throws Exception {
+ /**
+ * Creates a cluster with a running upgrade. The upgrade will have no services
+ * attached to it, so those will need to be set after this is called.
+ *
+ * @param sourceStack
+ * @param sourceRepo
+ * @param targetStack
+ * @param targetRepo
+ * @param clusterName
+ * @param hostName
+ * @throws Exception
+ */
+ private void makeCrossStackUpgradeCluster(StackId sourceStack, String sourceRepo,
+ StackId targetStack, String targetRepo, String clusterName, String hostName)
+ throws Exception {
m_helper.createStack(sourceStack);
m_helper.createStack(targetStack);
@@ -265,24 +279,22 @@ public class ComponentVersionCheckActionTest {
c.setUpgradeEntity(upgradeEntity);
}
- private void createNewRepoVersion(StackId targetStack, String targetRepo, String clusterName,
- String hostName) throws AmbariException {
- StackDAO stackDAO = m_injector.getInstance(StackDAO.class);
-
- StackEntity stackEntityTarget = stackDAO.find(targetStack.getStackName(), targetStack.getStackVersion());
-
- // Create the new repo version
- String urlInfo = "[{'repositories':["
- + "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'" + targetRepo + "'}"
- + "], 'OperatingSystems/os_type':'redhat6'}]";
- repoVersionDAO.create(stackEntityTarget, targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
-
+ /**
+ * Creates a new {@link HostVersionEntity} instance in the
+ * {@link RepositoryVersionState#INSTALLED} for the specified host.
+ *
+ * @param hostName
+ * @param repositoryVersion
+ * @throws AmbariException
+ */
+ private void installRepositoryOnHost(String hostName, RepositoryVersionEntity repositoryVersion)
+ throws AmbariException {
// Start upgrading the newer repo
HostDAO hostDAO = m_injector.getInstance(HostDAO.class);
HostVersionEntity entity = new HostVersionEntity();
entity.setHostEntity(hostDAO.findByName(hostName));
- entity.setRepositoryVersion(repoVersionDAO.findByStackAndVersion(targetStack, targetRepo));
+ entity.setRepositoryVersion(repositoryVersion);
entity.setState(RepositoryVersionState.INSTALLED);
hostVersionDAO.create(entity);
}
@@ -325,42 +337,65 @@ public class ComponentVersionCheckActionTest {
public void testMixedComponentVersions() throws Exception {
StackId sourceStack = HDP_21_STACK;
StackId targetStack = HDP_22_STACK;
- String sourceRepo = HDP_2_1_1_0;
- String targetRepo = HDP_2_2_1_0;
+ String sourceVersion = HDP_2_1_1_0;
+ String targetVersion = HDP_2_2_1_0;
String clusterName = "c1";
String hostName = "h1";
- makeCrossStackUpgradeCluster(sourceStack, sourceRepo, targetStack, targetRepo, clusterName, hostName);
+ makeCrossStackUpgradeCluster(sourceStack, sourceVersion, targetStack, targetVersion,
+ clusterName, hostName);
Clusters clusters = m_injector.getInstance(Clusters.class);
Cluster cluster = clusters.getCluster("c1");
- RepositoryVersionEntity repositoryVersion = m_helper.getOrCreateRepositoryVersion(HDP_21_STACK, HDP_2_1_1_0);
+ RepositoryVersionEntity sourceRepoVersion = m_helper.getOrCreateRepositoryVersion(HDP_21_STACK, HDP_2_1_1_0);
+ RepositoryVersionEntity targetRepoVersion = m_helper.getOrCreateRepositoryVersion(HDP_22_STACK, HDP_2_2_1_0);
- Service service = installService(cluster, "HDFS", repositoryVersion);
+ Service service = installService(cluster, "HDFS", sourceRepoVersion);
addServiceComponent(cluster, service, "NAMENODE");
addServiceComponent(cluster, service, "DATANODE");
- createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", "h1");
- createNewServiceComponentHost(cluster, "HDFS", "DATANODE", "h1");
-
- createNewRepoVersion(targetStack, targetRepo, clusterName, hostName);
+ createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", hostName);
+ createNewServiceComponentHost(cluster, "HDFS", "DATANODE", hostName);
// create some configs
createConfigs(cluster);
+
+ // install the target repo
+ installRepositoryOnHost(hostName, targetRepoVersion);
+
// setup the cluster for the upgrade across stacks
cluster.setCurrentStackVersion(sourceStack);
cluster.setDesiredStackVersion(targetStack);
- // set the SCH versions to the new stack so that the finalize action is
- // happy
- cluster.getServiceComponentHosts("HDFS", "NAMENODE").get(0).setVersion(targetRepo);
- // don't update DATANODE - we want to make the action complain
+ // tell the upgrade that HDFS is upgrading - without this, no services will
+ // be participating in the upgrade
+ UpgradeEntity upgrade = cluster.getUpgradeInProgress();
+ UpgradeHistoryEntity history = new UpgradeHistoryEntity();
+ history.setUpgrade(upgrade);
+ history.setServiceName("HDFS");
+ history.setComponentName("NAMENODE");
+ history.setFromRepositoryVersion(sourceRepoVersion);
+ history.setTargetRepositoryVersion(targetRepoVersion);
+ upgrade.addHistory(history);
+
+ history = new UpgradeHistoryEntity();
+ history.setUpgrade(upgrade);
+ history.setServiceName("HDFS");
+ history.setComponentName("DATANODE");
+ history.setFromRepositoryVersion(sourceRepoVersion);
+ history.setTargetRepositoryVersion(targetRepoVersion);
+ upgrade.addHistory(history);
- // inject an unhappy path where the cluster repo version is still UPGRADING
- // even though all of the hosts are UPGRADED
+ UpgradeDAO upgradeDAO = m_injector.getInstance(UpgradeDAO.class);
+ upgrade = upgradeDAO.merge(upgrade);
+
+ // set the SCH versions to the new stack so that the finalize action is
+ // happy - don't update DATANODE - we want to make the action complain
+ cluster.getServiceComponentHosts("HDFS", "NAMENODE").get(0).setVersion(targetVersion);
// verify the conditions for the test are met properly
- List<HostVersionEntity> hostVersions = hostVersionDAO.findByClusterStackAndVersion("c1", HDP_22_STACK, targetRepo);
+ List<HostVersionEntity> hostVersions = hostVersionDAO.findByClusterStackAndVersion("c1",
+ HDP_22_STACK, targetVersion);
assertTrue(hostVersions.size() > 0);
for (HostVersionEntity hostVersion : hostVersions) {
@@ -386,6 +421,14 @@ public class ComponentVersionCheckActionTest {
assertNotNull(report);
assertEquals(HostRoleStatus.FAILED.name(), report.getStatus());
assertEquals(-1, report.getExitCode());
+
+ // OK, now set the datanode so it completes
+ cluster.getServiceComponentHosts("HDFS", "DATANODE").get(0).setVersion(targetVersion);
+
+ report = action.execute(null);
+ assertNotNull(report);
+ assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
+ assertEquals(0, report.getExitCode());
}
@Test
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index 0aea8b3..f306d69 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -58,13 +58,13 @@ import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.RequestEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity;
import org.apache.ambari.server.serveraction.ServerAction;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.RepositoryInfo;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
@@ -77,6 +77,7 @@ import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.utils.EventBusSynchronizer;
+import org.apache.hadoop.metrics2.sink.relocated.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -102,8 +103,6 @@ public class UpgradeActionTest {
private static final StackId HDP_21_STACK = new StackId("HDP-2.1.1");
private static final StackId HDP_22_STACK = new StackId("HDP-2.2.0");
- private static final String HDP_211_CENTOS6_REPO_URL = "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.1.1.0-118";
-
private RepositoryVersionEntity sourceRepositoryVersion;
private Injector m_injector;
@@ -172,10 +171,11 @@ public class UpgradeActionTest {
H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
}
- private void makeDowngradeCluster(StackId sourceStack, String sourceRepo, StackId targetStack, String targetRepo) throws Exception {
+ private void makeDowngradeCluster(RepositoryVersionEntity sourceRepoVersion,
+ RepositoryVersionEntity targetRepoVersion) throws Exception {
String hostName = "h1";
- clusters.addCluster(clusterName, sourceStack);
+ clusters.addCluster(clusterName, sourceRepoVersion.getStackId());
// add a host component
clusters.addHost(hostName);
@@ -187,24 +187,17 @@ public class UpgradeActionTest {
hostAttributes.put("os_release_version", "6");
host.setHostAttributes(hostAttributes);
- // Create the starting repo version
- m_helper.getOrCreateRepositoryVersion(sourceStack, sourceRepo);
-
- // Start upgrading the newer repo
- m_helper.getOrCreateRepositoryVersion(targetStack, targetRepo);
-
HostVersionEntity entity = new HostVersionEntity();
entity.setHostEntity(hostDAO.findByName(hostName));
- entity.setRepositoryVersion(repoVersionDAO.findByStackAndVersion(targetStack, targetRepo));
+ entity.setRepositoryVersion(targetRepoVersion);
entity.setState(RepositoryVersionState.INSTALLING);
hostVersionDAO.create(entity);
}
- private void makeTwoUpgradesWhereLastDidNotComplete(StackId sourceStack, String sourceRepo, StackId midStack, String midRepo, StackId targetStack, String targetRepo) throws Exception {
- String hostName = "h1";
-
- clusters.addCluster(clusterName, sourceStack);
+ private void createUpgradeCluster(
+ RepositoryVersionEntity sourceRepoVersion, String hostName) throws Exception {
+ clusters.addCluster(clusterName, sourceRepoVersion.getStackId());
Cluster c = clusters.getCluster(clusterName);
// add a host component
@@ -217,113 +210,33 @@ public class UpgradeActionTest {
hostAttributes.put("os_release_version", "6");
host.setHostAttributes(hostAttributes);
- // Create the starting repo version
- m_helper.getOrCreateRepositoryVersion(sourceStack, sourceRepo);
-
- // Start upgrading the mid repo
- m_helper.getOrCreateRepositoryVersion(midStack, midRepo);
- c.setDesiredStackVersion(midStack);
-
- // Notice that we have not yet changed the cluster current stack to the mid stack to simulate
- // the user skipping this step.
-
- m_helper.getOrCreateRepositoryVersion(targetStack, targetRepo);
- c.setDesiredStackVersion(targetStack);
-
- // Create a host version for the starting repo in INSTALLED
- HostVersionEntity entitySource = new HostVersionEntity();
- entitySource.setHostEntity(hostDAO.findByName(hostName));
- entitySource.setRepositoryVersion(repoVersionDAO.findByStackAndVersion(sourceStack, sourceRepo));
- entitySource.setState(RepositoryVersionState.INSTALL_FAILED);
- hostVersionDAO.create(entitySource);
-
- // Create a host version for the target repo in UPGRADED
- HostVersionEntity entityTarget = new HostVersionEntity();
- entityTarget.setHostEntity(hostDAO.findByName(hostName));
- entityTarget.setRepositoryVersion(repoVersionDAO.findByStackAndVersion(targetStack, targetRepo));
- entityTarget.setState(RepositoryVersionState.INSTALLED);
- hostVersionDAO.create(entityTarget);
- }
-
- private RepositoryVersionEntity createUpgradeClusterAndSourceRepo(StackId sourceStack,
- String sourceRepo,
- String hostName) throws Exception {
-
- clusters.addCluster(clusterName, sourceStack);
-
- StackEntity stackEntitySource = stackDAO.find(sourceStack.getStackName(), sourceStack.getStackVersion());
- assertNotNull(stackEntitySource);
-
- Cluster c = clusters.getCluster(clusterName);
- c.setDesiredStackVersion(sourceStack);
-
- // add a host component
- clusters.addHost(hostName);
-
- Host host = clusters.getHost(hostName);
-
- Map<String, String> hostAttributes = new HashMap<>();
- hostAttributes.put("os_family", "redhat");
- hostAttributes.put("os_release_version", "6");
- host.setHostAttributes(hostAttributes);
-
// without this, HostEntity will not have a relation to ClusterEntity
clusters.mapHostToCluster(hostName, clusterName);
- // Create the starting repo version
- sourceRepositoryVersion = m_helper.getOrCreateRepositoryVersion(sourceStack, sourceRepo);
- sourceRepositoryVersion.setOperatingSystems("[\n" +
- " {\n" +
- " \"repositories\":[\n" +
- " {\n" +
- " \"Repositories/base_url\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos5/2.x/updates/2.2.0.0\",\n" +
- " \"Repositories/repo_name\":\"HDP\",\n" +
- " \"Repositories/repo_id\":\"HDP-2.2\"\n" +
- " }\n" +
- " ],\n" +
- " \"OperatingSystems/os_type\":\"redhat6\"\n" +
- " }\n" +
- "]");
- repoVersionDAO.merge(sourceRepositoryVersion);
-
- return sourceRepositoryVersion;
+ HostVersionEntity entity = new HostVersionEntity(hostDAO.findByName(hostName),
+ sourceRepoVersion, RepositoryVersionState.INSTALLED);
+
+ hostVersionDAO.create(entity);
}
- private RepositoryVersionEntity createUpgradeClusterTargetRepo(StackId targetStack, String targetRepo,
- String hostName) throws AmbariException {
+ private void createHostVersions(RepositoryVersionEntity targetRepoVersion,
+ String hostName) throws AmbariException {
Cluster c = clusters.getCluster(clusterName);
- StackEntity stackEntityTarget = stackDAO.find(targetStack.getStackName(), targetStack.getStackVersion());
- assertNotNull(stackEntityTarget);
-
- // Create the new repo version
- String urlInfo = "[{'repositories':["
- + "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'" + targetStack.getStackId() + "-1'}"
- + "], 'OperatingSystems/os_type':'redhat6'}]";
-
- repoVersionDAO.create(stackEntityTarget, targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
-
- // Start upgrading the newer repo
- c.setCurrentStackVersion(targetStack);
// create a single host with the UPGRADED HostVersionEntity
HostDAO hostDAO = m_injector.getInstance(HostDAO.class);
- RepositoryVersionEntity repositoryVersionEntity = repoVersionDAO.findByStackAndVersion(
- targetStack, targetRepo);
-
HostVersionEntity entity = new HostVersionEntity(hostDAO.findByName(hostName),
- repositoryVersionEntity, RepositoryVersionState.INSTALLED);
+ targetRepoVersion, RepositoryVersionState.INSTALLED);
hostVersionDAO.create(entity);
// verify the UPGRADED host versions were created successfully
- List<HostVersionEntity> hostVersions = hostVersionDAO.findByClusterStackAndVersion(clusterName,
- targetStack, targetRepo);
+ List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository(
+ c.getClusterId(), targetRepoVersion);
assertEquals(1, hostVersions.size());
assertEquals(RepositoryVersionState.INSTALLED, hostVersions.get(0).getState());
-
- return repositoryVersionEntity;
}
private void makeCrossStackUpgradeClusterAndSourceRepo(StackId sourceStack, String sourceRepo,
@@ -358,11 +271,6 @@ public class UpgradeActionTest {
StackEntity stackEntityTarget = stackDAO.find(targetStack.getStackName(), targetStack.getStackVersion());
assertNotNull(stackEntityTarget);
- // Create the new repo version
- String urlInfo = "[{'repositories':["
- + "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'" + targetRepo + "'}"
- + "], 'OperatingSystems/os_type':'redhat6'}]";
-
m_helper.getOrCreateRepositoryVersion(new StackId(stackEntityTarget), targetRepo);
// Start upgrading the newer repo
@@ -386,7 +294,6 @@ public class UpgradeActionTest {
StackId sourceStack = HDP_21_STACK;
StackId targetStack = HDP_22_STACK;
String sourceRepo = HDP_2_1_1_0;
- String targetRepo = HDP_2_2_0_1;
String hostName = "h1";
// Must be a NON_ROLLING upgrade that jumps stacks in order for it to apply config changes.
@@ -400,8 +307,6 @@ public class UpgradeActionTest {
Cluster cluster = clusters.getCluster(clusterName);
- createUpgrade(cluster, repositoryVersion2201);
-
// Install ZK and HDFS with some components
Service zk = installService(cluster, "ZOOKEEPER");
addServiceComponent(cluster, zk, "ZOOKEEPER_SERVER");
@@ -415,10 +320,10 @@ public class UpgradeActionTest {
createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", "h1");
createNewServiceComponentHost(cluster, "HDFS", "DATANODE", "h1");
- makeCrossStackUpgradeTargetRepo(targetStack, targetRepo, hostName);
+ makeCrossStackUpgradeTargetRepo(targetStack, repositoryVersion2201.getVersion(), hostName);
+ createUpgrade(cluster, repositoryVersion2201);
- RepositoryVersionEntity targetRve = repoVersionDAO.findByStackNameAndVersion("HDP", targetRepo);
- Assert.assertNotNull(targetRve);
+ Assert.assertNotNull(repositoryVersion2201);
// Create some configs
createConfigs(cluster);
@@ -459,12 +364,7 @@ public class UpgradeActionTest {
@Test
public void testFinalizeDowngrade() throws Exception {
- StackId sourceStack = HDP_21_STACK;
- StackId targetStack = HDP_21_STACK;
- String sourceRepo = HDP_2_1_1_0;
- String targetRepo = HDP_2_1_1_1;
-
- makeDowngradeCluster(sourceStack, sourceRepo, targetStack, targetRepo);
+ makeDowngradeCluster(repositoryVersion2110, repositoryVersion2111);
Cluster cluster = clusters.getCluster(clusterName);
@@ -486,74 +386,25 @@ public class UpgradeActionTest {
assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
for (HostVersionEntity entity : hostVersionDAO.findByClusterAndHost(clusterName, "h1")) {
- if (entity.getRepositoryVersion().getVersion().equals(sourceRepo)) {
+ if (StringUtils.equals(entity.getRepositoryVersion().getVersion(), repositoryVersion2110.getVersion())) {
assertEquals(RepositoryVersionState.CURRENT, entity.getState());
- } else if (entity.getRepositoryVersion().getVersion().equals(targetRepo)) {
+ } else if (StringUtils.equals(entity.getRepositoryVersion().getVersion(), repositoryVersion2111.getVersion())) {
assertEquals(RepositoryVersionState.INSTALLED, entity.getState());
}
}
}
- /**
- * Test a case in which a customer performs an upgrade from HDP 2.1 to 2.2 (e.g., 2.2.0.0), but skips the step to
- * finalize, which calls "Save DB State". Therefore, the cluster's current stack is still on HDP 2.1.
- * They can still modify the database manually to mark HDP 2.2 as CURRENT in the cluster_version and then begin
- * another upgrade to 2.2.0.2 and then downgrade.
- * In the downgrade, the original stack is still 2.1 but the stack for the version marked as CURRENT is 2.2; this
- * mismatch means that the downgrade should not delete configs and will report a warning.
- * @throws Exception
- */
- @Test
- public void testFinalizeDowngradeWhenDidNotFinalizePreviousUpgrade() throws Exception {
- StackId sourceStack = HDP_21_STACK;
- StackId midStack = HDP_22_STACK;
- StackId targetStack = HDP_22_STACK;
-
- String sourceRepo = HDP_2_1_1_0;
- String midRepo = HDP_2_2_0_1;
- String targetRepo = HDP_2_2_0_2;
-
- makeTwoUpgradesWhereLastDidNotComplete(sourceStack, sourceRepo, midStack, midRepo, targetStack, targetRepo);
-
- Cluster cluster = clusters.getCluster(clusterName);
-
- createUpgrade(cluster, repositoryVersion2202);
-
- Map<String, String> commandParams = new HashMap<>();
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName(clusterName);
-
- HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
- hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
-
- finalizeUpgradeAction.setExecutionCommand(executionCommand);
- finalizeUpgradeAction.setHostRoleCommand(hostRoleCommand);
-
- CommandReport report = finalizeUpgradeAction.execute(null);
- assertNotNull(report);
- assertEquals(HostRoleStatus.FAILED.name(), report.getStatus());
- assertTrue(report.getStdErr().contains(FinalizeUpgradeAction.PREVIOUS_UPGRADE_NOT_COMPLETED_MSG));
- }
-
@Test
public void testFinalizeUpgrade() throws Exception {
- StackId sourceStack = HDP_21_STACK;
- StackId targetStack = HDP_21_STACK;
- String sourceRepo = HDP_2_1_1_0;
- String targetRepo = HDP_2_1_1_1;
String hostName = "h1";
- createUpgradeClusterAndSourceRepo(sourceStack, sourceRepo, hostName);
- createUpgradeClusterTargetRepo(targetStack, targetRepo, hostName);
+ createUpgradeCluster(repositoryVersion2110, hostName);
+ createHostVersions(repositoryVersion2111, hostName);
Cluster cluster = clusters.getCluster(clusterName);
createUpgrade(cluster, repositoryVersion2111);
- RepositoryInfo repo = ambariMetaInfo.getRepository(sourceStack.getStackName(), sourceStack.getStackVersion(), "redhat6", sourceStack.getStackId());
- assertEquals(HDP_211_CENTOS6_REPO_URL, repo.getBaseUrl());
-
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
ExecutionCommand executionCommand = new ExecutionCommand();
@@ -579,14 +430,10 @@ public class UpgradeActionTest {
*/
@Test
public void testFinalizeWithHostsAlreadyCurrent() throws Exception {
- StackId sourceStack = HDP_21_STACK;
- StackId targetStack = HDP_21_STACK;
- String sourceRepo = HDP_2_1_1_0;
- String targetRepo = HDP_2_1_1_1;
String hostName = "h1";
- createUpgradeClusterAndSourceRepo(sourceStack, sourceRepo, hostName);
- createUpgradeClusterTargetRepo(targetStack, targetRepo, hostName);
+ createUpgradeCluster(repositoryVersion2110, hostName);
+ createHostVersions(repositoryVersion2111, hostName);
// move the old version from CURRENT to INSTALLED and the new version from
// UPGRADED to CURRENT - this will simulate what happens when a host is
@@ -607,10 +454,6 @@ public class UpgradeActionTest {
createUpgrade(cluster, repositoryVersion2111);
- RepositoryInfo repo = ambariMetaInfo.getRepository(sourceStack.getStackName(),
- sourceStack.getStackVersion(), "redhat6", sourceStack.getStackId());
- assertEquals(HDP_211_CENTOS6_REPO_URL, repo.getBaseUrl());
-
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
@@ -935,10 +778,23 @@ public class UpgradeActionTest {
upgradeEntity.setRepositoryVersion(repositoryVersion);
upgradeEntity.setUpgradeType(UpgradeType.NON_ROLLING);
- upgradeDAO.create(upgradeEntity);
+ Map<String, Service> services = cluster.getServices();
+ for (String serviceName : services.keySet()) {
+ Service service = services.get(serviceName);
+ Map<String, ServiceComponent> components = service.getServiceComponents();
+ for (String componentName : components.keySet()) {
+ UpgradeHistoryEntity history = new UpgradeHistoryEntity();
+ history.setUpgrade(upgradeEntity);
+ history.setServiceName(serviceName);
+ history.setComponentName(componentName);
+ history.setFromRepositoryVersion(service.getDesiredRepositoryVersion());
+ history.setTargetRepositoryVersion(repositoryVersion);
+ upgradeEntity.addHistory(history);
+ }
+ }
+ upgradeDAO.create(upgradeEntity);
cluster.setUpgradeEntity(upgradeEntity);
-
return upgradeEntity;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
index f43dbd8..c6f3276 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
@@ -105,7 +105,7 @@ public class ConfigGroupTest {
configs.put(config.getType(), config);
hosts.put(host.getHostId(), host);
- ConfigGroup configGroup = configGroupFactory.createNew(cluster, "cg-test",
+ ConfigGroup configGroup = configGroupFactory.createNew(cluster, "HDFS", "cg-test",
"HDFS", "New HDFS configs for h1", configs, hosts);
cluster.addConfigGroup(configGroup);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
index dd0a840..e9e5399 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
@@ -257,7 +257,7 @@ public class ConfigHelperTest {
configMap.put(config.getType(), config);
}
- ConfigGroup configGroup = configGroupFactory.createNew(cluster, name,
+ ConfigGroup configGroup = configGroupFactory.createNew(cluster, null, name,
tag, "", configMap, hostMap);
LOG.info("Config group created with tag " + tag);
configGroup.setTag(tag);
[40/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2cfc8d22
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2cfc8d22
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2cfc8d22
Branch: refs/heads/trunk
Commit: 2cfc8d22dc1ccc180c376b40ea6a96967d9bf6a4
Parents: 560b0d1 90abffd
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed May 24 09:57:57 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed May 24 09:57:57 2017 -0400
----------------------------------------------------------------------
.../server/state/ValueAttributesInfo.java | 26 +--
.../app/controllers/wizard/step8_controller.js | 158 ++++++++++++++-----
.../test/controllers/wizard/step8_test.js | 77 ++++++---
pom.xml | 1 +
4 files changed, 192 insertions(+), 70 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/2cfc8d22/ambari-web/app/controllers/wizard/step8_controller.js
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/2cfc8d22/ambari-web/test/controllers/wizard/step8_test.js
----------------------------------------------------------------------
[16/50] [abbrv] ambari git commit: AMBARI-20996 - Fallback Cluster
Current Version Is Blank Which Causes Upgrade Errors (jonathanhurley)
Posted by jo...@apache.org.
AMBARI-20996 - Fallback Cluster Current Version Is Blank Which Causes Upgrade Errors (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7b0ccdae
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7b0ccdae
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7b0ccdae
Branch: refs/heads/trunk
Commit: 7b0ccdae5572e4e96795f29f16dddb92c7e0128a
Parents: b8cb5d4
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Thu May 11 13:46:14 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Thu May 11 15:04:23 2017 -0400
----------------------------------------------------------------------
.../libraries/functions/stack_features.py | 3 +-
.../libraries/functions/version.py | 31 +++++++++++++-------
.../upgrades/UpdateDesiredStackAction.java | 8 +++--
.../server/state/RepositoryVersionState.java | 4 +--
ambari-server/src/test/python/TestVersion.py | 12 ++++++++
5 files changed, 41 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py b/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
index 2b3df5f..cbd32e7 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
@@ -23,6 +23,7 @@ import ambari_simplejson as json
from resource_management.core.exceptions import Fail
from resource_management.core.logger import Logger
from resource_management.libraries.functions.constants import Direction
+from resource_management.libraries.functions.version import format_stack_version
# executionCommand for STOP
_ROLE_COMMAND_STOP = 'STOP'
@@ -141,7 +142,7 @@ def get_stack_feature_version(config):
if current_cluster_version is not None:
version_for_stack_feature_checks = current_cluster_version
elif original_stack is not None:
- version_for_stack_feature_checks = original_stack
+ version_for_stack_feature_checks = format_stack_version(original_stack)
else:
version_for_stack_feature_checks = version if version is not None else stack_version
http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/ambari-common/src/main/python/resource_management/libraries/functions/version.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/version.py b/ambari-common/src/main/python/resource_management/libraries/functions/version.py
index 2500430..406bd95 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/version.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/version.py
@@ -34,23 +34,32 @@ def _normalize(v, desired_segments=0):
return [int(x) for x in v_list]
-def format_stack_version(input):
+def format_stack_version(value):
"""
- :param input: Input string, e.g. "2.2" or "GlusterFS", or "2.0.6.GlusterFS", or "2.2.0.1-885"
+ :param value: Input string, e.g. "2.2" or "GlusterFS", or "2.0.6.GlusterFS", or "2.2.0.1-885"
:return: Returns a well-formatted HDP stack version of the form #.#.#.# as a string.
"""
- if input:
- if "-" in input:
- input_array = input.split("-")
- input = input_array[0]
+ if value:
+ if "-" in value:
+ first_occurrence = value.find("-")
+ last_occurence = value.rfind("-")
- input = re.sub(r'^\D+', '', input)
- input = re.sub(r'\D+$', '', input)
- input = input.strip('.')
+ if first_occurrence == last_occurence:
+ if value[0].isalpha():
+ value = value[first_occurrence + 1:]
+ else:
+ value = value[:first_occurrence]
+ else:
+ value = value[first_occurrence + 1:last_occurence]
- strip_dots = input.replace('.', '')
+
+ value = re.sub(r'^\D+', '', value)
+ value = re.sub(r'\D+$', '', value)
+ value = value.strip('.')
+
+ strip_dots = value.replace('.', '')
if strip_dots.isdigit():
- normalized = _normalize(str(input))
+ normalized = _normalize(str(value))
if len(normalized) == 2:
normalized = normalized + [0, 0]
elif len(normalized) == 3:
http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
index e6336c8..4500b5d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
@@ -192,17 +192,19 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
out.append(message).append(System.lineSeparator());
- // a downgrade must force host versions back to INSTALLED
+ // a downgrade must force host versions back to INSTALLED, but only if it's required
if (upgradeContext.getDirection() == Direction.DOWNGRADE) {
RepositoryVersionEntity downgradeFromRepositoryVersion = upgradeContext.getDowngradeFromRepositoryVersion();
- out.append(String.format("Setting all host versions back to %s for repository version %s",
+ out.append(String.format("Setting host versions back to %s for repository version %s",
RepositoryVersionState.INSTALLED, downgradeFromRepositoryVersion.getVersion()));
List<HostVersionEntity> hostVersionsToReset = m_hostVersionDAO.findHostVersionByClusterAndRepository(
cluster.getClusterId(), downgradeFromRepositoryVersion);
for (HostVersionEntity hostVersion : hostVersionsToReset) {
- hostVersion.setState(RepositoryVersionState.INSTALLED);
+ if( hostVersion.getState() != RepositoryVersionState.NOT_REQUIRED ){
+ hostVersion.setState(RepositoryVersionState.INSTALLED);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/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 11ea512..5e32d1f 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
@@ -76,7 +76,7 @@ public enum RepositoryVersionState {
/**
* Repository version is not required
*/
- NOT_REQUIRED(1),
+ NOT_REQUIRED(0),
/**
* Repository version that is in the process of being installed.
@@ -101,7 +101,7 @@ public enum RepositoryVersionState {
/**
* Repository version that is installed and supported and is the active version.
*/
- CURRENT(0);
+ CURRENT(1);
private final int weight;
http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/ambari-server/src/test/python/TestVersion.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestVersion.py b/ambari-server/src/test/python/TestVersion.py
index 0392908..a8f4c65 100644
--- a/ambari-server/src/test/python/TestVersion.py
+++ b/ambari-server/src/test/python/TestVersion.py
@@ -45,6 +45,18 @@ class TestVersion(TestCase):
gluster_fs_actual = self.version_module.format_stack_version("GlusterFS")
self.assertEqual("", gluster_fs_actual)
+
+ def test_format_with_hyphens(self):
+ actual = self.version_module.format_stack_version("FOO-1.0")
+ self.assertEqual("1.0.0.0", actual)
+
+ actual = self.version_module.format_stack_version("1.0.0-1234")
+ self.assertEqual("1.0.0.0", actual)
+
+ actual = self.version_module.format_stack_version("FOO-1.0-9999")
+ self.assertEqual("1.0.0.0", actual)
+
+
def test_comparison(self):
# All versions to compare, from 1.0.0.0 to 3.0.0.0, and only include elements that are a multiple of 7.
versions = range(1000, 3000, 7)
[21/50] [abbrv] ambari git commit: AMBARI-21022 - Upgrades Should Be
Associated With Repositories Instead of String Versions (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
index e5e2de3..42d2a98 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.orm.entities;
+import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
@@ -39,6 +40,8 @@ import javax.persistence.TableGenerator;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.hadoop.metrics2.sink.relocated.google.common.base.Objects;
/**
* Models the data representation of an upgrade
@@ -60,7 +63,7 @@ import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
@NamedQuery(name = "UpgradeEntity.findUpgrade",
query = "SELECT u FROM UpgradeEntity u WHERE u.upgradeId = :upgradeId"),
@NamedQuery(name = "UpgradeEntity.findUpgradeByRequestId",
- query = "SELECT u FROM UpgradeEntity u WHERE u.requestId = :requestId"),
+ query = "SELECT u FROM UpgradeEntity u WHERE u.requestId = :requestId"),
@NamedQuery(name = "UpgradeEntity.findLatestForClusterInDirection",
query = "SELECT u FROM UpgradeEntity u JOIN RequestEntity r ON u.requestId = r.requestId WHERE u.clusterId = :clusterId AND u.direction = :direction ORDER BY r.startTime DESC, u.upgradeId DESC"),
@NamedQuery(name = "UpgradeEntity.findLatestForCluster",
@@ -91,12 +94,6 @@ public class UpgradeEntity {
@JoinColumn(name = "request_id", nullable = false, insertable = true, updatable = false)
private RequestEntity requestEntity = null;
- @Column(name="from_version", nullable = false)
- private String fromVersion = null;
-
- @Column(name="to_version", nullable = false)
- private String toVersion = null;
-
@Column(name="direction", nullable = false)
@Enumerated(value = EnumType.STRING)
private Direction direction = Direction.UPGRADE;
@@ -108,6 +105,9 @@ public class UpgradeEntity {
@Enumerated(value = EnumType.STRING)
private UpgradeType upgradeType;
+ @JoinColumn(name = "repo_version_id", referencedColumnName = "repo_version_id", nullable = false)
+ private RepositoryVersionEntity repositoryVersion;
+
@Column(name = "skip_failures", nullable = false)
private Integer skipFailures = 0;
@@ -127,6 +127,14 @@ public class UpgradeEntity {
private List<UpgradeGroupEntity> upgradeGroupEntities;
/**
+ * Uni-directional relationship between an upgrade an all of the components in
+ * that upgrade.
+ */
+ @OneToMany(orphanRemoval=true, cascade = { CascadeType.ALL })
+ @JoinColumn(name = "upgrade_id")
+ private List<UpgradeHistoryEntity> upgradeHistory;
+
+ /**
* @return the id
*/
public Long getId() {
@@ -184,34 +192,6 @@ public class UpgradeEntity {
}
/**
- * @return the "from" version
- */
- public String getFromVersion() {
- return fromVersion;
- }
-
- /**
- * @param version the "from" version
- */
- public void setFromVersion(String version) {
- fromVersion = version;
- }
-
- /**
- * @return the "to" version
- */
- public String getToVersion() {
- return toVersion;
- }
-
- /**
- * @param version the "to" version
- */
- public void setToVersion(String version) {
- toVersion = version;
- }
-
- /**
* @return the direction of the upgrade
*/
public Direction getDirection() {
@@ -333,60 +313,95 @@ public class UpgradeEntity {
this.suspended = suspended ? (short) 1 : (short) 0;
}
+ /**
+ * Adds a historical entry for a service component in this upgrade.
+ *
+ * @param historicalEntry
+ * the entry to add.
+ */
+ public void addHistory(UpgradeHistoryEntity historicalEntry) {
+ if (null == upgradeHistory) {
+ upgradeHistory = new ArrayList<>();
+ }
+
+ upgradeHistory.add(historicalEntry);
+ }
+
+ /**
+ * Gets the history of this component's upgrades and downgrades.
+ *
+ * @return the component history, or {@code null} if none.
+ */
+ public List<UpgradeHistoryEntity> getHistory() {
+ return upgradeHistory;
+ }
+
+ /**
+ * Upgrades will always have a single version being upgraded to and downgrades
+ * will have a single version being downgraded from. This repository
+ * represents that version.
+ * <p/>
+ * When the direction is {@link Direction#UPGRADE}, this represents the target
+ * repository. <br/>
+ * When the direction is {@link Direction#DOWNGRADE}, this represents the
+ * repository being downgraded from.
+ *
+ * @return the repository version being upgraded to or downgraded from (never
+ * {@code null}).
+ */
+ public RepositoryVersionEntity getRepositoryVersion() {
+ return repositoryVersion;
+ }
+
+ /**
+ * Sets the repository version for this upgrade. This value will change
+ * depending on the direction of the upgrade.
+ * <p/>
+ * When the direction is {@link Direction#UPGRADE}, this represents the target
+ * repository. <br/>
+ * When the direction is {@link Direction#DOWNGRADE}, this represents the
+ * repository being downgraded from.
+ *
+ * @param repositoryVersion
+ * the repository version being upgraded to or downgraded from (not
+ * {@code null}).
+ */
+ public void setRepositoryVersion(RepositoryVersionEntity repositoryVersion) {
+ this.repositoryVersion = repositoryVersion;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
+
if (o == null || getClass() != o.getClass()) {
return false;
}
UpgradeEntity that = (UpgradeEntity) o;
-
- if (upgradeId != null ? !upgradeId.equals(that.upgradeId) : that.upgradeId != null) {
- return false;
- }
- if (clusterId != null ? !clusterId.equals(that.clusterId) : that.clusterId != null) {
- return false;
- }
- if (requestId != null ? !requestId.equals(that.requestId) : that.requestId != null) {
- return false;
- }
- if (fromVersion != null ? !fromVersion.equals(that.fromVersion) : that.fromVersion != null) {
- return false;
- }
- if (toVersion != null ? !toVersion.equals(that.toVersion) : that.toVersion != null) {
- return false;
- }
- if (direction != null ? !direction.equals(that.direction) : that.direction != null) {
- return false;
- }
- if (suspended != null ? !suspended.equals(that.suspended) : that.suspended != null) {
- return false;
- }
- if (upgradeType != null ? !upgradeType.equals(that.upgradeType) : that.upgradeType != null) {
- return false;
- }
- if (upgradePackage != null ? !upgradePackage.equals(that.upgradePackage) : that.upgradePackage != null) {
- return false;
- }
-
- return true;
+ return new EqualsBuilder()
+ .append(upgradeId, that.upgradeId)
+ .append(clusterId, that.clusterId)
+ .append(requestId, that.requestId)
+ .append(direction, that.direction)
+ .append(suspended, that.suspended)
+ .append(upgradeType, that.upgradeType)
+ .append(upgradePackage, that.upgradePackage)
+ .isEquals();
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public int hashCode() {
- int result = upgradeId != null ? upgradeId.hashCode() : 0;
- result = 31 * result + (clusterId != null ? clusterId.hashCode() : 0);
- result = 31 * result + (requestId != null ? requestId.hashCode() : 0);
- result = 31 * result + (fromVersion != null ? fromVersion.hashCode() : 0);
- result = 31 * result + (toVersion != null ? toVersion.hashCode() : 0);
- result = 31 * result + (direction != null ? direction.hashCode() : 0);
- result = 31 * result + (suspended != null ? suspended.hashCode() : 0);
- result = 31 * result + (upgradeType != null ? upgradeType.hashCode() : 0);
- result = 31 * result + (upgradePackage != null ? upgradePackage.hashCode() : 0);
- return result;
+ return Objects.hashCode(upgradeId, clusterId, requestId, direction, suspended, upgradeType,
+ upgradePackage);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
new file mode 100644
index 0000000..8bfafd3
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
@@ -0,0 +1,232 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.orm.entities;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+import javax.persistence.UniqueConstraint;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.hadoop.metrics2.sink.relocated.google.common.base.Objects;
+
+/**
+ * The {@link UpgradeHistoryEntity} represents the version history of components
+ * participating in an upgrade or a downgrade.
+ */
+@Entity
+@Table(
+ name = "upgrade_history",
+ uniqueConstraints = @UniqueConstraint(
+ columnNames = { "upgrade_id", "component_name", "service_name" }))
+@TableGenerator(
+ name = "upgrade_history_id_generator",
+ table = "ambari_sequences",
+ pkColumnName = "sequence_name",
+ valueColumnName = "sequence_value",
+ pkColumnValue = "upgrade_history_id_seq",
+ initialValue = 0)
+@NamedQueries({
+ @NamedQuery(
+ name = "UpgradeHistoryEntity.findAll",
+ query = "SELECT upgradeHistory FROM UpgradeHistoryEntity upgradeHistory"),
+ @NamedQuery(
+ name = "UpgradeHistoryEntity.findByUpgradeId",
+ query = "SELECT upgradeHistory FROM UpgradeHistoryEntity upgradeHistory WHERE upgradeHistory.upgradeId = :upgradeId")
+})
+public class UpgradeHistoryEntity {
+
+ @Id
+ @Column(name = "id", nullable = false, insertable = true, updatable = false)
+ @GeneratedValue(strategy = GenerationType.TABLE, generator = "upgrade_history_id_generator")
+ private Long id;
+
+ @Column(name = "upgrade_id", nullable = false, insertable = false, updatable = false)
+ private Long upgradeId;
+
+ @JoinColumn(name = "upgrade_id", nullable = false)
+ private UpgradeEntity upgrade;
+
+ @Column(name = "service_name", nullable = false, insertable = true, updatable = true)
+ private String serviceName;
+
+ @Column(name = "component_name", nullable = false, insertable = true, updatable = true)
+ private String componentName;
+
+ @ManyToOne
+ @JoinColumn(name = "from_repo_version_id", unique = false, nullable = false, insertable = true, updatable = true)
+ private RepositoryVersionEntity fromRepositoryVersion = null;
+
+ @ManyToOne
+ @JoinColumn(name = "target_repo_version_id", unique = false, nullable = false, insertable = true, updatable = true)
+ private RepositoryVersionEntity targetRepositoryVersion = null;
+
+ /**
+ * @return the id
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * Gets the ID of the upgrade associated with this historical entry.
+ *
+ * @return the upgrade ID (never {@code null}).
+ */
+ public Long getUpgradeId() {
+ return upgradeId;
+ }
+
+ /**
+ * @return
+ */
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ /**
+ * @param serviceName
+ */
+ public void setServiceName(String serviceName) {
+ this.serviceName = serviceName;
+ }
+
+ /**
+ * @return
+ */
+ public String getComponentName() {
+ return componentName;
+ }
+
+ /**
+ * @param componentName
+ */
+ public void setComponentName(String componentName) {
+ this.componentName = componentName;
+ }
+
+ /**
+ * Gets the repository that the upgrade is coming from.
+ *
+ * @return the repository that the upgrade is coming from (not {@code null}).
+ */
+ public RepositoryVersionEntity getFromReposistoryVersion() {
+ return fromRepositoryVersion;
+ }
+
+ /**
+ * Sets the repository that the services in the upgrade are CURRENT on.
+ *
+ * @param repositoryVersionEntity
+ * the repository entity (not {@code null}).
+ */
+ public void setFromRepositoryVersion(RepositoryVersionEntity repositoryVersionEntity) {
+ fromRepositoryVersion = repositoryVersionEntity;
+ }
+
+ /**
+ * Gets the target repository version for this upgrade.
+ *
+ * @return the target repository for the services in the upgrade (not
+ * {@code null}).
+ */
+ public RepositoryVersionEntity getTargetRepositoryVersion() {
+ return targetRepositoryVersion;
+ }
+
+ /**
+ * Gets the version of the target repository.
+ *
+ * @return the target version string (never {@code null}).
+ * @see #getTargetRepositoryVersion()
+ */
+ public String getTargetVersion() {
+ return targetRepositoryVersion.getVersion();
+ }
+
+ /**
+ * Sets the target repository of the upgrade.
+ *
+ * @param repositoryVersionEntity
+ * the target repository (not {@code null}).
+ */
+ public void setTargetRepositoryVersion(RepositoryVersionEntity repositoryVersionEntity) {
+ targetRepositoryVersion = repositoryVersionEntity;
+ }
+
+ /**
+ * Sets the associated upgrade entity.
+ *
+ * @param upgrade
+ */
+ public void setUpgrade(UpgradeEntity upgrade) {
+ this.upgrade = upgrade;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ UpgradeHistoryEntity that = (UpgradeHistoryEntity) o;
+ return new EqualsBuilder()
+ .append(id, that.id)
+ .append(upgradeId, that.upgradeId)
+ .append(serviceName, that.serviceName)
+ .append(componentName, that.componentName)
+ .isEquals();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(id, upgradeId, serviceName, componentName);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("id", id)
+ .add("upgradeId", upgradeId)
+ .add("serviceName", serviceName)
+ .add("componentName", componentName)
+ .add("from", fromRepositoryVersion)
+ .add("to", targetRepositoryVersion).toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java
index de0f282..4942f27 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AbstractUpgradeServerAction.java
@@ -17,10 +17,6 @@
*/
package org.apache.ambari.server.serveraction.upgrades;
-import java.util.Collections;
-import java.util.Set;
-
-import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.serveraction.AbstractServerAction;
import org.apache.ambari.server.state.Cluster;
@@ -28,11 +24,7 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.UpgradeContextFactory;
import org.apache.ambari.server.state.UpgradeHelper;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.state.stack.upgrade.UpgradeScope;
-import org.apache.commons.lang.StringUtils;
-import com.google.common.collect.Sets;
import com.google.inject.Inject;
/**
@@ -42,25 +34,8 @@ public abstract class AbstractUpgradeServerAction extends AbstractServerAction {
public static final String CLUSTER_NAME_KEY = UpgradeContext.COMMAND_PARAM_CLUSTER_NAME;
public static final String UPGRADE_DIRECTION_KEY = UpgradeContext.COMMAND_PARAM_DIRECTION;
- public static final String VERSION_KEY = UpgradeContext.COMMAND_PARAM_VERSION;
protected static final String REQUEST_ID = UpgradeContext.COMMAND_PARAM_REQUEST_ID;
- /**
- * The original "current" stack of the cluster before the upgrade started.
- * This is the same regardless of whether the current direction is
- * {@link Direction#UPGRADE} or {@link Direction#DOWNGRADE}.
- */
- protected static final String ORIGINAL_STACK_KEY = UpgradeContext.COMMAND_PARAM_ORIGINAL_STACK;
-
- /**
- * The target upgrade stack before the upgrade started. This is the same
- * regardless of whether the current direction is {@link Direction#UPGRADE} or
- * {@link Direction#DOWNGRADE}.
- */
- protected static final String TARGET_STACK_KEY = UpgradeContext.COMMAND_PARAM_TARGET_STACK;
-
- protected static final String SUPPORTED_SERVICES_KEY = UpgradeResourceProvider.COMMAND_PARAM_SUPPORTED_SERVICES;
-
@Inject
protected Clusters m_clusters;
@@ -83,22 +58,6 @@ public abstract class AbstractUpgradeServerAction extends AbstractServerAction {
protected UpgradeContext getUpgradeContext(Cluster cluster) {
UpgradeEntity upgrade = cluster.getUpgradeInProgress();
UpgradeContext upgradeContext = m_upgradeContextFactory.create(cluster, upgrade);
-
- final UpgradeScope scope;
- final Set<String> supportedServices;
- String services = getCommandParameterValue(SUPPORTED_SERVICES_KEY);
- if (StringUtils.isBlank(services)) {
- scope = UpgradeScope.COMPLETE;
- supportedServices = Collections.emptySet();
-
- } else {
- scope = UpgradeScope.PARTIAL;
- supportedServices = Sets.newHashSet(StringUtils.split(services, ','));
- }
-
- upgradeContext.setSupportedServices(supportedServices);
- upgradeContext.setScope(scope);
-
return upgradeContext;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java
index 4a3bd9b..dc7bc10 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java
@@ -18,7 +18,6 @@
package org.apache.ambari.server.serveraction.upgrades;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -54,7 +53,7 @@ public class ComponentVersionCheckAction extends FinalizeUpgradeAction {
Cluster cluster = m_clusters.getCluster(clusterName);
UpgradeContext upgradeContext = getUpgradeContext(cluster);
- List<InfoTuple> errors = getHostComponentsWhichDidNotUpgrade(upgradeContext);
+ Set<InfoTuple> errors = validateComponentVersions(upgradeContext);
StringBuilder outSB = new StringBuilder();
StringBuilder errSB = new StringBuilder();
@@ -69,19 +68,21 @@ public class ComponentVersionCheckAction extends FinalizeUpgradeAction {
}
}
- private String getErrors(StringBuilder outSB, StringBuilder errSB, List<InfoTuple> errors) {
+ private String getErrors(StringBuilder outSB, StringBuilder errSB, Set<InfoTuple> errors) {
- errSB.append("The following components were found to have version mismatches. ");
- errSB.append("Finalize will not complete successfully:\n");
+ errSB.append("Finalization will not be able to completed because of the following version inconsistencies:");
Set<String> hosts = new TreeSet<>();
Map<String, JsonArray> hostDetails = new HashMap<>();
for (InfoTuple tuple : errors) {
+ errSB.append(" ");
errSB.append(tuple.hostName).append(": ");
+ errSB.append(System.lineSeparator()).append(" ");
errSB.append(tuple.serviceName).append('/').append(tuple.componentName);
errSB.append(" reports ").append(StringUtils.trimToEmpty(tuple.currentVersion));
- errSB.append('\n');
+ errSB.append(" but expects ").append(tuple.targetVersion);
+ errSB.append(System.lineSeparator());
hosts.add(tuple.hostName);
@@ -93,6 +94,7 @@ public class ComponentVersionCheckAction extends FinalizeUpgradeAction {
obj.addProperty("service", tuple.serviceName);
obj.addProperty("component", tuple.componentName);
obj.addProperty("version", tuple.currentVersion);
+ obj.addProperty("targetVersion", tuple.targetVersion);
hostDetails.get(tuple.hostName).add(obj);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
index 1b9fb23..c4e073c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
@@ -20,11 +20,13 @@ package org.apache.ambari.server.serveraction.upgrades;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.MessageFormat;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Objects;
import java.util.Set;
+import java.util.TreeSet;
import java.util.concurrent.ConcurrentMap;
import org.apache.ambari.server.AmbariException;
@@ -35,17 +37,12 @@ import org.apache.ambari.server.events.StackUpgradeFinishEvent;
import org.apache.ambari.server.events.publishers.VersionEventPublisher;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
-import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
-import org.apache.ambari.server.orm.entities.ServiceComponentHistoryEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
-import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.RepositoryType;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
@@ -55,6 +52,7 @@ import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.UpgradeState;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.text.StrBuilder;
import com.google.inject.Inject;
@@ -73,18 +71,6 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
@Inject
private HostComponentStateDAO hostComponentStateDAO;
- /**
- * Gets {@link StackEntity} instances from {@link StackId}.
- */
- @Inject
- private StackDAO stackDAO;
-
- /**
- * Gets desired state entities for service components.
- */
- @Inject
- private ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO;
-
@Inject
private AmbariMetaInfo ambariMetaInfo;
@@ -120,26 +106,26 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
StringBuilder errSB = new StringBuilder();
try {
+ Cluster cluster = upgradeContext.getCluster();
+ RepositoryVersionEntity repositoryVersion = upgradeContext.getRepositoryVersion();
+ String version = repositoryVersion.getVersion();
+
String message;
- Set<String> servicesInUpgrade = upgradeContext.getSupportedServices();
- if (servicesInUpgrade.isEmpty()) {
- message = MessageFormat.format("Finalizing the upgrade to {0} for all cluster services.",
- upgradeContext.getVersion());
+ if (upgradeContext.getRepositoryType() == RepositoryType.STANDARD) {
+ message = MessageFormat.format("Finalizing the upgrade to {0} for all cluster services.", version);
} else {
+ Set<String> servicesInUpgrade = upgradeContext.getSupportedServices();
+
message = MessageFormat.format(
"Finalizing the upgrade to {0} for the following services: {1}",
- upgradeContext.getVersion(), StringUtils.join(servicesInUpgrade, ','));
+ version, StringUtils.join(servicesInUpgrade, ','));
}
outSB.append(message).append(System.lineSeparator());
- Cluster cluster = upgradeContext.getCluster();
- String version = upgradeContext.getVersion();
- RepositoryVersionEntity repositoryVersion = upgradeContext.getTargetRepositoryVersion();
-
// iterate through all host components and make sure that they are on the
// correct version; if they are not, then this will throw an exception
- List<InfoTuple> errors = getHostComponentsWhichDidNotUpgrade(upgradeContext);
+ Set<InfoTuple> errors = validateComponentVersions(upgradeContext);
if (!errors.isEmpty()) {
StrBuilder messageBuff = new StrBuilder(String.format(
"The following %d host component(s) "
@@ -181,10 +167,10 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
// throw an exception if there are hosts which are not not fully upgraded
if (hostsWithoutCorrectVersionState.size() > 0) {
- message = String.format("The following %d host(s) have not been upgraded to version %s. " +
- "Please install and upgrade the Stack Version on those hosts and try again.\nHosts: %s",
- hostsWithoutCorrectVersionState.size(),
- version,
+ message = String.format(
+ "The following %d host(s) have not been upgraded to version %s. "
+ + "Please install and upgrade the Stack Version on those hosts and try again.\nHosts: %s",
+ hostsWithoutCorrectVersionState.size(), version,
StringUtils.join(hostsWithoutCorrectVersionState, ", "));
outSB.append(message);
outSB.append(System.lineSeparator());
@@ -211,13 +197,10 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
versionEventPublisher.publish(new StackUpgradeFinishEvent(cluster));
- outSB.append("Creating upgrade history...").append(System.lineSeparator());
- writeComponentHistory(upgradeContext);
-
// Reset upgrade state
cluster.setUpgradeEntity(null);
- message = String.format("The upgrade to %s has completed.", upgradeContext.getVersion());
+ message = String.format("The upgrade to %s has completed.", version);
outSB.append(message).append(System.lineSeparator());
return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", outSB.toString(), errSB.toString());
} catch (Exception e) {
@@ -241,17 +224,20 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
try {
Cluster cluster = upgradeContext.getCluster();
- RepositoryVersionEntity repositoryVersion = upgradeContext.getTargetRepositoryVersion();
+ RepositoryVersionEntity downgradeFromRepositoryVersion = upgradeContext.getRepositoryVersion();
+ String downgradeFromVersion = downgradeFromRepositoryVersion.getVersion();
String message;
- Set<String> servicesInUpgrade = upgradeContext.getSupportedServices();
- if (servicesInUpgrade.isEmpty()) {
- message = MessageFormat.format("Finalizing the downgrade to {0} for all cluster services.",
- upgradeContext.getVersion());
+
+ if (downgradeFromRepositoryVersion.getType() == RepositoryType.STANDARD) {
+ message = MessageFormat.format(
+ "Finalizing the downgrade from {0} for all cluster services.",
+ downgradeFromVersion);
} else {
+ Set<String> servicesInUpgrade = upgradeContext.getSupportedServices();
message = MessageFormat.format(
- "Finalizing the downgrade to {0} for the following services: {1}",
- upgradeContext.getVersion(), StringUtils.join(servicesInUpgrade, ','));
+ "Finalizing the downgrade from {0} for the following services: {1}",
+ downgradeFromVersion, StringUtils.join(servicesInUpgrade, ','));
}
outSB.append(message).append(System.lineSeparator());
@@ -259,41 +245,50 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
// iterate through all host components and make sure that they are on the
// correct version; if they are not, then this will throw an exception
- List<InfoTuple> errors = getHostComponentsWhichDidNotUpgrade(upgradeContext);
+ Set<InfoTuple> errors = validateComponentVersions(upgradeContext);
if (!errors.isEmpty()) {
StrBuilder messageBuff = new StrBuilder(String.format(
- "The following %d host component(s) " + "have not been downgraded to version %s\n",
- errors.size(), upgradeContext.getVersion())).append(System.lineSeparator());
+ "The following %d host component(s) have not been downgraded to their desired versions:",
+ errors.size())).append(System.lineSeparator());
for (InfoTuple error : errors) {
- messageBuff.append(String.format("%s on host %s", error.componentName, error.hostName));
+ messageBuff.append(String.format("%s: $s (current = %s, desired = %s ", error.hostName,
+ error.componentName, error.currentVersion, error.targetVersion));
+
messageBuff.append(System.lineSeparator());
}
throw new AmbariException(messageBuff.toString());
}
- // find host versions
- List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository(
- cluster.getClusterId(), repositoryVersion);
+ // for every repository being downgraded to, ensure the host versions are correct
+ Map<String, RepositoryVersionEntity> targetVersionsByService = upgradeContext.getTargetVersions();
+ Set<RepositoryVersionEntity> targetRepositoryVersions = new HashSet<>();
+ for (String service : targetVersionsByService.keySet()) {
+ targetRepositoryVersions.add(targetVersionsByService.get(service));
+ }
- outSB.append(
- String.format("Finalizing the downgrade state of %d host(s).",
- hostVersions.size())).append(
- System.lineSeparator());
-
- for( HostVersionEntity hostVersion : hostVersions ){
- if (hostVersion.getState() != RepositoryVersionState.CURRENT) {
- hostVersion.setState(RepositoryVersionState.CURRENT);
- hostVersionDAO.merge(hostVersion);
- }
+ for (RepositoryVersionEntity targetRepositoryVersion : targetRepositoryVersions) {
+ // find host versions
+ List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository(
+ cluster.getClusterId(), targetRepositoryVersion);
- List<HostComponentStateEntity> hostComponentStates = hostComponentStateDAO.findByHost(
- hostVersion.getHostName());
+ outSB.append(String.format("Finalizing %d host(s) back to %s", hostVersions.size(),
+ targetRepositoryVersion.getVersion())).append(System.lineSeparator());
- for (HostComponentStateEntity hostComponentState : hostComponentStates) {
- hostComponentState.setUpgradeState(UpgradeState.NONE);
- hostComponentStateDAO.merge(hostComponentState);
+ for (HostVersionEntity hostVersion : hostVersions) {
+ if (hostVersion.getState() != RepositoryVersionState.CURRENT) {
+ hostVersion.setState(RepositoryVersionState.CURRENT);
+ hostVersionDAO.merge(hostVersion);
+ }
+
+ List<HostComponentStateEntity> hostComponentStates = hostComponentStateDAO.findByHost(
+ hostVersion.getHostName());
+
+ for (HostComponentStateEntity hostComponentState : hostComponentStates) {
+ hostComponentState.setUpgradeState(UpgradeState.NONE);
+ hostComponentStateDAO.merge(hostComponentState);
+ }
}
}
@@ -304,7 +299,7 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
// Reset upgrade state
cluster.setUpgradeEntity(null);
- message = String.format("The downgrade to %s has completed.", upgradeContext.getVersion());
+ message = String.format("The downgrade from %s has completed.", downgradeFromVersion);
outSB.append(message).append(System.lineSeparator());
return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", outSB.toString(), errSB.toString());
@@ -317,114 +312,133 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
}
}
-
/**
- * Gets any host components which have not been propertly upgraded.
+ * Gets any host components which have not been propertly upgraded or
+ * downgraded.
*
* @param upgradeContext
* the upgrade context (not {@code null}).
* @return a list of {@link InfoTuple} representing components which should
* have been upgraded but did not.
*/
- protected List<InfoTuple> getHostComponentsWhichDidNotUpgrade(UpgradeContext upgradeContext)
- throws AmbariException {
+ protected Set<InfoTuple> validateComponentVersions(UpgradeContext upgradeContext)
+ throws AmbariException {
- ArrayList<InfoTuple> errors = new ArrayList<>();
+ Set<InfoTuple> errors = new TreeSet<>();
Cluster cluster = upgradeContext.getCluster();
- Set<String> supportedServices = upgradeContext.getSupportedServices();
- RepositoryVersionEntity repositoryVersionEntity = upgradeContext.getTargetRepositoryVersion();
+ RepositoryVersionEntity repositoryVersionEntity = upgradeContext.getRepositoryVersion();
StackId targetStackId = repositoryVersionEntity.getStackId();
- for (Service service : cluster.getServices().values()) {
-
- // !!! if there are supported services for upgrade, and the cluster service is NOT in the list, skip
- if (!supportedServices.isEmpty() && !supportedServices.contains(service.getName())) {
- continue;
- }
+ Set<String> servicesParticipating = upgradeContext.getSupportedServices();
+ for( String serviceName : servicesParticipating ){
+ Service service = cluster.getService(serviceName);
+ String targetVersion = upgradeContext.getTargetVersion(serviceName);
for (ServiceComponent serviceComponent : service.getServiceComponents().values()) {
for (ServiceComponentHost serviceComponentHost : serviceComponent.getServiceComponentHosts().values()) {
ComponentInfo componentInfo = ambariMetaInfo.getComponent(targetStackId.getStackName(),
targetStackId.getStackVersion(), service.getName(), serviceComponent.getName());
- if (componentInfo.isVersionAdvertised()) {
- if (!StringUtils.equals(upgradeContext.getVersion(),
- serviceComponentHost.getVersion())) {
- errors.add(new InfoTuple(service.getName(), serviceComponent.getName(),
- serviceComponentHost.getHostName(), serviceComponentHost.getVersion()));
- }
+ if (!componentInfo.isVersionAdvertised()) {
+ continue;
+ }
+
+ if (!StringUtils.equals(targetVersion, serviceComponentHost.getVersion())) {
+ errors.add(new InfoTuple(service.getName(), serviceComponent.getName(),
+ serviceComponentHost.getHostName(), serviceComponentHost.getVersion(),
+ targetVersion));
}
}
}
}
+
return errors;
}
- /**
- * Writes the upgrade history for all components which participated in the
- * upgrade.
- *
- * @param upgradeContext the upgrade context (not {@code null}).
- */
- private void writeComponentHistory(UpgradeContext upgradeContext) throws AmbariException {
- Cluster cluster = upgradeContext.getCluster();
- UpgradeEntity upgradeEntity = cluster.getUpgradeInProgress();
- Collection<Service> services = cluster.getServices().values();
- RepositoryVersionEntity repositoryVersion = upgradeContext.getTargetRepositoryVersion();
- StackId sourcceStackId = upgradeContext.getOriginalStackId();
- StackId targetStackId = repositoryVersion.getStackId();
+ protected static class InfoTuple implements Comparable<InfoTuple> {
+ protected final String serviceName;
+ protected final String componentName;
+ protected final String hostName;
+ protected final String currentVersion;
+ protected final String targetVersion;
- StackEntity fromStack = stackDAO.find(sourcceStackId.getStackName(), sourcceStackId.getStackVersion());
- StackEntity toStack = stackDAO.find(targetStackId.getStackName(), targetStackId.getStackVersion());
+ protected InfoTuple(String service, String component, String host, String version,
+ String desiredVersion) {
+ serviceName = service;
+ componentName = component;
+ hostName = host;
+ currentVersion = version;
+ targetVersion = desiredVersion;
+ }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int compareTo(InfoTuple that) {
+ int compare = hostName.compareTo(that.hostName);
+ if (compare != 0) {
+ return compare;
+ }
- if (!upgradeContext.getSupportedServices().isEmpty()) {
- services = new ArrayList<>();
+ compare = serviceName.compareTo(that.serviceName);
+ if (compare != 0) {
+ return compare;
+ }
- Set<String> serviceNames = upgradeContext.getSupportedServices();
- for (String serviceName : serviceNames) {
- services.add(cluster.getService(serviceName));
+ compare = componentName.compareTo(that.componentName);
+ if (compare != 0) {
+ return compare;
}
+
+ return compare;
}
- // for every service component, if it was included in the upgrade then
- // create a historical entry
- for (Service service : services) {
- for (ServiceComponent serviceComponent : service.getServiceComponents().values()) {
- if (serviceComponent.isVersionAdvertised()) {
- // create the historical entry
- ServiceComponentHistoryEntity historyEntity = new ServiceComponentHistoryEntity();
- historyEntity.setUpgrade(upgradeEntity);
- historyEntity.setFromStack(fromStack);
- historyEntity.setToStack(toStack);
-
- // get the service component
- ServiceComponentDesiredStateEntity desiredStateEntity = serviceComponentDesiredStateDAO.findByName(
- cluster.getClusterId(), serviceComponent.getServiceName(),
- serviceComponent.getName());
-
- // add the history to the component and save
- desiredStateEntity.addHistory(historyEntity);
- serviceComponentDesiredStateDAO.merge(desiredStateEntity);
- }
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode() {
+ return Objects.hash(hostName, serviceName, componentName, currentVersion, targetVersion);
}
- }
- protected static class InfoTuple {
- protected final String serviceName;
- protected final String componentName;
- protected final String hostName;
- protected final String currentVersion;
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
- protected InfoTuple(String service, String component, String host, String version) {
- serviceName = service;
- componentName = component;
- hostName = host;
- currentVersion = version;
+ if (object == null || getClass() != object.getClass()) {
+ return false;
+ }
+
+ InfoTuple that = (InfoTuple) object;
+
+ EqualsBuilder equalsBuilder = new EqualsBuilder();
+ equalsBuilder.append(hostName, that.hostName);
+ equalsBuilder.append(serviceName, that.serviceName);
+ equalsBuilder.append(componentName, that.componentName);
+ equalsBuilder.append(currentVersion, that.currentVersion);
+ equalsBuilder.append(targetVersion, that.targetVersion);
+ ;
+ return equalsBuilder.isEquals();
}
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return com.google.common.base.Objects.toStringHelper(this)
+ .add("host", hostName)
+ .add("component", componentName)
+ .add("current", currentVersion)
+ .add("target", targetVersion).toString();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
index 4500b5d..657cb07 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
@@ -17,8 +17,6 @@
*/
package org.apache.ambari.server.serveraction.upgrades;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.VERSION;
-
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.MessageFormat;
@@ -30,21 +28,18 @@ import java.util.concurrent.ConcurrentMap;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.agent.CommandReport;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariServer;
import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.serveraction.ServerAction;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.RepositoryType;
import org.apache.ambari.server.state.RepositoryVersionState;
-import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeContext;
-import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -66,8 +61,6 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
*/
private static final Logger LOG = LoggerFactory.getLogger(UpdateDesiredStackAction.class);
- public static final String COMMAND_PARAM_VERSION = VERSION;
- public static final String COMMAND_DOWNGRADE_FROM_VERSION = "downgrade_from_version";
public static final String COMMAND_PARAM_DIRECTION = "upgrade_direction";
public static final String COMMAND_PARAM_UPGRADE_PACK = "upgrade_pack";
@@ -91,9 +84,6 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
@Inject
private Clusters clusters;
- @Inject
- private AmbariMetaInfo ambariMetaInfo;
-
/**
* The Ambari configuration.
*/
@@ -113,21 +103,10 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
public CommandReport execute(ConcurrentMap<String, Object> requestSharedDataContext)
throws AmbariException, InterruptedException {
- Map<String, String> commandParams = getExecutionCommand().getCommandParams();
String clusterName = getExecutionCommand().getClusterName();
Cluster cluster = clusters.getCluster(clusterName);
- UpgradeEntity upgrade = cluster.getUpgradeInProgress();
-
UpgradeContext upgradeContext = getUpgradeContext(cluster);
- StackId originalStackId = new StackId(commandParams.get(COMMAND_PARAM_ORIGINAL_STACK));
- StackId targetStackId = new StackId(commandParams.get(COMMAND_PARAM_TARGET_STACK));
-
- String upgradePackName = upgrade.getUpgradePackage();
-
- UpgradePack upgradePack = ambariMetaInfo.getUpgradePacks(originalStackId.getStackName(),
- originalStackId.getStackVersion()).get(upgradePackName);
-
Map<String, String> roleParams = getExecutionCommand().getRoleParams();
// Make a best attempt at setting the username
@@ -142,8 +121,7 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
// invalidate any cached effective ID
cluster.invalidateUpgradeEffectiveVersion();
- return updateDesiredRepositoryVersion(cluster, originalStackId, targetStackId, upgradeContext,
- upgradePack, userName);
+ return updateDesiredRepositoryVersion(cluster, upgradeContext, userName);
}
/**
@@ -152,49 +130,62 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
*
* @param cluster
* the cluster
- * @param originalStackId
- * the stack Id of the cluster before the upgrade.
- * @param targetStackId
- * the stack Id that was desired for this upgrade.
- * @param direction
- * direction, either upgrade or downgrade
- * @param upgradePack
- * Upgrade Pack to use
+ * @param upgradeContext
+ * the upgrade context
* @param userName
* username performing the action
* @return the command report to return
*/
@Transactional
CommandReport updateDesiredRepositoryVersion(
- Cluster cluster, StackId originalStackId, StackId targetStackId,
- UpgradeContext upgradeContext, UpgradePack upgradePack, String userName)
+ Cluster cluster, UpgradeContext upgradeContext, String userName)
throws AmbariException, InterruptedException {
StringBuilder out = new StringBuilder();
StringBuilder err = new StringBuilder();
try {
- UpgradeResourceProvider upgradeResourceProvider = new UpgradeResourceProvider(AmbariServer.getController());
- upgradeResourceProvider.applyStackAndProcessConfigurations(upgradeContext);
- m_upgradeHelper.putComponentsToUpgradingState(upgradeContext);
+ // the desired repository message to put in the command report - this will
+ // change based on the type of upgrade and the services participating
+ if (upgradeContext.getDirection() == Direction.UPGRADE) {
+ final String message;
+ RepositoryVersionEntity targetRepositoryVersion = upgradeContext.getRepositoryVersion();
+
+ if (upgradeContext.getRepositoryType() == RepositoryType.STANDARD) {
+ message = MessageFormat.format(
+ "Updating the desired repository version to {0} for all cluster services.",
+ targetRepositoryVersion.getVersion());
+ } else {
+ Set<String> servicesInUpgrade = upgradeContext.getSupportedServices();
+ message = MessageFormat.format(
+ "Updating the desired repository version to {0} for the following services: {1}",
+ targetRepositoryVersion.getVersion(), StringUtils.join(servicesInUpgrade, ','));
+ }
- final String message;
- Set<String> servicesInUpgrade = upgradeContext.getSupportedServices();
- if (servicesInUpgrade.isEmpty()) {
- message = MessageFormat.format(
- "Updating the desired repository version to {0} for all cluster services.",
- upgradeContext.getVersion());
- } else {
- message = MessageFormat.format(
- "Updating the desired repository version to {0} for the following services: {1}",
- upgradeContext.getVersion(), StringUtils.join(servicesInUpgrade, ','));
+ out.append(message).append(System.lineSeparator());
}
- out.append(message).append(System.lineSeparator());
+ if( upgradeContext.getDirection() == Direction.DOWNGRADE ){
+ String message = "Updating the desired repository back their original values for the following services:";
+ out.append(message).append(System.lineSeparator());
+
+ Map<String, RepositoryVersionEntity> targetVersionsByService = upgradeContext.getTargetVersions();
+ for (String serviceName : targetVersionsByService.keySet()) {
+ RepositoryVersionEntity repositoryVersion = targetVersionsByService.get(serviceName);
+
+ message = String.format(" %s to %s", serviceName, repositoryVersion.getVersion());
+ out.append(message).append(System.lineSeparator());
+ }
+ }
+
+ UpgradeResourceProvider upgradeResourceProvider = new UpgradeResourceProvider(AmbariServer.getController());
+ upgradeResourceProvider.applyStackAndProcessConfigurations(upgradeContext);
+ m_upgradeHelper.putComponentsToUpgradingState(upgradeContext);
- // a downgrade must force host versions back to INSTALLED, but only if it's required
+ // a downgrade must force host versions back to INSTALLED for the
+ // repository which failed to be upgraded.
if (upgradeContext.getDirection() == Direction.DOWNGRADE) {
- RepositoryVersionEntity downgradeFromRepositoryVersion = upgradeContext.getDowngradeFromRepositoryVersion();
+ RepositoryVersionEntity downgradeFromRepositoryVersion = upgradeContext.getRepositoryVersion();
out.append(String.format("Setting host versions back to %s for repository version %s",
RepositoryVersionState.INSTALLED, downgradeFromRepositoryVersion.getVersion()));
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java
index ce10568..3f1d859 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java
@@ -30,13 +30,15 @@ import java.util.Map;
import java.util.Set;
import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
-import org.apache.ambari.server.state.UpgradeState;
+import org.apache.ambari.server.state.UpgradeContext;
+import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.utils.HTTPUtils;
import org.apache.ambari.server.utils.HostAndPort;
import org.apache.ambari.server.utils.StageUtils;
@@ -51,9 +53,9 @@ public class MasterHostResolver {
private static Logger LOG = LoggerFactory.getLogger(MasterHostResolver.class);
- private Cluster m_cluster;
- private String m_version;
- private ConfigHelper m_configHelper;
+ private final UpgradeContext m_upgradeContext;
+ private final Cluster m_cluster;
+ private final ConfigHelper m_configHelper;
public enum Service {
HDFS,
@@ -71,29 +73,17 @@ public class MasterHostResolver {
}
/**
- * Create a resolver that does not consider HostComponents' version when
- * resolving hosts. Common use case is creating an upgrade that should
- * include an entire cluster.
- * @param configHelper Configuration Helper
- * @param cluster the cluster
- */
- public MasterHostResolver(ConfigHelper configHelper, Cluster cluster) {
- this(configHelper, cluster, null);
- }
-
- /**
- * Create a resolver that compares HostComponents' version when calculating
- * hosts for the stage. Common use case is for downgrades when only some
- * HostComponents need to be downgraded, and HostComponents already at the
- * correct version are skipped.
- * @param configHelper Configuration Helper
- * @param cluster the cluster
- * @param version the version, or {@code null} to not compare versions
+ * Constructor.
+ *
+ * @param configHelper
+ * Configuration Helper
+ * @param upgradeContext
+ * the upgrade context
*/
- public MasterHostResolver(ConfigHelper configHelper, Cluster cluster, String version) {
+ public MasterHostResolver(ConfigHelper configHelper, UpgradeContext upgradeContext) {
m_configHelper = configHelper;
- m_cluster = cluster;
- m_version = version;
+ m_upgradeContext = upgradeContext;
+ m_cluster = upgradeContext.getCluster();
}
/**
@@ -216,10 +206,20 @@ public class MasterHostResolver {
// possible
if (maintenanceState != MaintenanceState.OFF) {
unhealthyHosts.add(sch);
- } else if (null == m_version || null == sch.getVersion() ||
- !sch.getVersion().equals(m_version) ||
- sch.getUpgradeState() == UpgradeState.FAILED) {
+ continue;
+ }
+
+ if(m_upgradeContext.getDirection() == Direction.UPGRADE){
+ upgradeHosts.add(hostName);
+ continue;
+ }
+
+ // it's a downgrade ...
+ RepositoryVersionEntity downgradeToRepositoryVersion = m_upgradeContext.getTargetRepositoryVersion(service);
+ String downgradeToVersion = downgradeToRepositoryVersion.getVersion();
+ if (!StringUtils.equals(downgradeToVersion, sch.getVersion())) {
upgradeHosts.add(hostName);
+ continue;
}
}
[07/50] [abbrv] ambari git commit: AMBARI-20957. Remove
cluster_version use (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
index caf7210..1da5a90 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
@@ -68,14 +68,10 @@ import org.apache.ambari.server.controller.spi.ResourceProvider;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.dao.ResourceTypeDAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
@@ -130,9 +126,6 @@ public class ClusterStackVersionResourceProviderTest {
private Injector injector;
private AmbariMetaInfo ambariMetaInfo;
private RepositoryVersionDAO repositoryVersionDAOMock;
- private ResourceTypeDAO resourceTypeDAO;
- private StackDAO stackDAO;
- private ClusterVersionDAO clusterVersionDAO;
private ConfigHelper configHelper;
private Configuration configuration;
private StageFactory stageFactory;
@@ -172,14 +165,11 @@ public class ClusterStackVersionResourceProviderTest {
String.valueOf(MAX_TASKS_PER_STAGE));
configuration = new Configuration(properties);
stageFactory = createNiceMock(StageFactory.class);
- clusterVersionDAO = createNiceMock(ClusterVersionDAO.class);
// Initialize injector
injector = Guice.createInjector(Modules.override(inMemoryModule).with(new MockModule()));
injector.getInstance(GuiceJpaInitializer.class);
ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
- resourceTypeDAO = injector.getInstance(ResourceTypeDAO.class);
- stackDAO = injector.getInstance(StackDAO.class);
}
@After
@@ -315,7 +305,7 @@ public class ClusterStackVersionResourceProviderTest {
}
}).anyTimes();
- expect(cluster.transitionHostsToInstalling(anyObject(ClusterVersionEntity.class),
+ expect(cluster.transitionHostsToInstalling(
anyObject(RepositoryVersionEntity.class), anyObject(VersionDefinitionXml.class),
eq(false))).andReturn(hostsNeedingInstallCommands).atLeastOnce();
@@ -350,20 +340,14 @@ public class ClusterStackVersionResourceProviderTest {
ClusterEntity clusterEntity = new ClusterEntity();
clusterEntity.setClusterId(1l);
clusterEntity.setClusterName(clusterName);
- ClusterVersionEntity cve = new ClusterVersionEntity(clusterEntity,
- repoVersion, RepositoryVersionState.INSTALL_FAILED, 0, "");
- expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class),
- anyObject(StackId.class), anyObject(String.class))).andReturn(cve);
StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
StageUtils.setConfiguration(injector.getInstance(Configuration.class));
- expect(clusterVersionDAO.findByCluster(anyObject(String.class))).andReturn(Collections.<ClusterVersionEntity>emptyList()).once();
-
// replay
replay(managementController, response, clusters, resourceProviderFactory, csvResourceProvider,
cluster, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schAMS, actionManager,
- executionCommand, executionCommandWrapper,stage, stageFactory, clusterVersionDAO);
+ executionCommand, executionCommandWrapper,stage, stageFactory);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
@@ -443,23 +427,14 @@ public class ClusterStackVersionResourceProviderTest {
Service hbaseService = createNiceMock(Service.class);
expect(hdfsService.getName()).andReturn("HDFS").anyTimes();
expect(hbaseService.getName()).andReturn("HBASE").anyTimes();
-// Service metricsService = createNiceMock(Service.class);
-
- ServiceComponent scNameNode = createNiceMock(ServiceComponent.class);
- ServiceComponent scDataNode = createNiceMock(ServiceComponent.class);
- ServiceComponent scHBaseMaster = createNiceMock(ServiceComponent.class);
- ServiceComponent scMetricCollector = createNiceMock(ServiceComponent.class);
expect(hdfsService.getServiceComponents()).andReturn(new HashMap<String, ServiceComponent>());
expect(hbaseService.getServiceComponents()).andReturn(new HashMap<String, ServiceComponent>());
-// expect(metricsService.getServiceComponents()).andReturn(new HashMap<String, ServiceComponent>());
-
Map<String, Service> serviceMap = new HashMap<>();
serviceMap.put("HDFS", hdfsService);
serviceMap.put("HBASE", hbaseService);
-
final ServiceComponentHost schDatanode = createMock(ServiceComponentHost.class);
expect(schDatanode.getServiceName()).andReturn("HDFS").anyTimes();
expect(schDatanode.getServiceComponentName()).andReturn("DATANODE").anyTimes();
@@ -488,9 +463,6 @@ public class ClusterStackVersionResourceProviderTest {
ServiceOsSpecific.Package hdfsPackage = new ServiceOsSpecific.Package();
hdfsPackage.setName("hdfs");
-// ServiceOsSpecific.Package hbasePackage = new ServiceOsSpecific.Package();
-// hbasePackage.setName("hbase");
-
List<ServiceOsSpecific.Package> packages = Collections.singletonList(hdfsPackage);
ActionManager actionManager = createNiceMock(ActionManager.class);
@@ -573,10 +545,6 @@ public class ClusterStackVersionResourceProviderTest {
ClusterEntity clusterEntity = new ClusterEntity();
clusterEntity.setClusterId(1l);
clusterEntity.setClusterName(clusterName);
- ClusterVersionEntity cve = new ClusterVersionEntity(clusterEntity,
- repoVersion, RepositoryVersionState.INSTALL_FAILED, 0, "");
- expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class),
- anyObject(StackId.class), anyObject(String.class))).andReturn(cve);
TopologyManager topologyManager = injector.getInstance(TopologyManager.class);
StageUtils.setTopologyManager(topologyManager);
@@ -584,7 +552,7 @@ public class ClusterStackVersionResourceProviderTest {
// replay
replay(managementController, response, clusters, hdfsService, hbaseService, resourceProviderFactory, csvResourceProvider,
cluster, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schAMS, schHBM, actionManager,
- executionCommand, executionCommandWrapper,stage, stageFactory, clusterVersionDAO);
+ executionCommand, executionCommandWrapper,stage, stageFactory);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
@@ -767,9 +735,8 @@ public class ClusterStackVersionResourceProviderTest {
}
}).anyTimes();
- expect(cluster.transitionHostsToInstalling(anyObject(ClusterVersionEntity.class),
- anyObject(RepositoryVersionEntity.class), anyObject(VersionDefinitionXml.class),
- eq(false))).andReturn(hostsNeedingInstallCommands).atLeastOnce();
+ expect(cluster.transitionHostsToInstalling(anyObject(RepositoryVersionEntity.class),
+ anyObject(VersionDefinitionXml.class), eq(false))).andReturn(hostsNeedingInstallCommands).atLeastOnce();
// ExecutionCommand executionCommand = createNiceMock(ExecutionCommand.class);
ExecutionCommand executionCommand = new ExecutionCommand();
@@ -797,8 +764,6 @@ public class ClusterStackVersionResourceProviderTest {
anyObject(StackId.class),
anyObject(String.class))).andReturn(repoVersion);
- expect(clusterVersionDAO.findByCluster(anyObject(String.class))).andReturn(Collections.<ClusterVersionEntity>emptyList()).once();
-
Capture<org.apache.ambari.server.actionmanager.Request> c = Capture.newInstance();
Capture<ExecuteActionRequest> ear = Capture.newInstance();
@@ -809,11 +774,6 @@ public class ClusterStackVersionResourceProviderTest {
ClusterEntity clusterEntity = new ClusterEntity();
clusterEntity.setClusterId(1l);
clusterEntity.setClusterName(clusterName);
- ClusterVersionEntity cve = new ClusterVersionEntity(clusterEntity,
- repoVersion, RepositoryVersionState.INSTALL_FAILED, 0, "");
- expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class),
- anyObject(StackId.class), anyObject(String.class))).andReturn(cve);
-
StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
StageUtils.setConfiguration(injector.getInstance(Configuration.class));
@@ -821,7 +781,7 @@ public class ClusterStackVersionResourceProviderTest {
// replay
replay(managementController, response, clusters, hdfsService, hbaseService, resourceProviderFactory, csvResourceProvider,
cluster, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schHBM, actionManager,
- executionCommandWrapper,stage, stageFactory, clusterVersionDAO);
+ executionCommandWrapper,stage, stageFactory);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
@@ -1015,9 +975,8 @@ public class ClusterStackVersionResourceProviderTest {
}
}).anyTimes();
- expect(cluster.transitionHostsToInstalling(anyObject(ClusterVersionEntity.class),
- anyObject(RepositoryVersionEntity.class), anyObject(VersionDefinitionXml.class),
- eq(false))).andReturn(hostsNeedingInstallCommands).atLeastOnce();
+ expect(cluster.transitionHostsToInstalling(anyObject(RepositoryVersionEntity.class),
+ anyObject(VersionDefinitionXml.class), eq(false))).andReturn(hostsNeedingInstallCommands).atLeastOnce();
// ExecutionCommand executionCommand = createNiceMock(ExecutionCommand.class);
ExecutionCommand executionCommand = new ExecutionCommand();
@@ -1053,20 +1012,14 @@ public class ClusterStackVersionResourceProviderTest {
ClusterEntity clusterEntity = new ClusterEntity();
clusterEntity.setClusterId(1l);
clusterEntity.setClusterName(clusterName);
- ClusterVersionEntity cve = new ClusterVersionEntity(clusterEntity,
- repoVersion, RepositoryVersionState.INSTALL_FAILED, 0, "");
- expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class),
- anyObject(StackId.class), anyObject(String.class))).andReturn(cve);
StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
StageUtils.setConfiguration(injector.getInstance(Configuration.class));
- expect(clusterVersionDAO.findByCluster(anyObject(String.class))).andReturn(Collections.<ClusterVersionEntity>emptyList()).once();
-
// replay
replay(managementController, response, clusters, hdfsService, hbaseService, resourceProviderFactory, csvResourceProvider,
cluster, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schHBM, actionManager,
- executionCommandWrapper,stage, stageFactory, clusterVersionDAO);
+ executionCommandWrapper,stage, stageFactory);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
@@ -1154,15 +1107,32 @@ public class ClusterStackVersionResourceProviderTest {
int hostCount = 10;
for (int i = 0; i < hostCount; i++) {
String hostname = "host" + i;
+
+ List<HostVersionEntity> hostVersions = new ArrayList<>();
+
+ HostVersionEntity hostVersion = createNiceMock(HostVersionEntity.class);
+ expect(hostVersion.getRepositoryVersion()).andReturn(repoVersion);
+
+ hostVersions.add(hostVersion);
+ if (i == 2) {
+ // !!! make it look like there is already a versioned installed that is less than the one being installed
+ RepositoryVersionEntity badRve = new RepositoryVersionEntity();
+ badRve.setStack(stack);
+ badRve.setVersion("2.2.1.0-1000");
+
+ HostVersionEntity badHostVersion = createNiceMock(HostVersionEntity.class);
+ expect(badHostVersion.getRepositoryVersion()).andReturn(badRve);
+ hostVersions.add(badHostVersion);
+ replay(badHostVersion);
+ }
Host host = createNiceMock(hostname, Host.class);
expect(host.getHostName()).andReturn(hostname).anyTimes();
expect(host.getOsFamily()).andReturn("redhat6").anyTimes();
expect(host.getMaintenanceState(EasyMock.anyLong())).andReturn(
MaintenanceState.OFF).anyTimes();
- expect(host.getAllHostVersions()).andReturn(
- Collections.<HostVersionEntity>emptyList()).anyTimes();
+ expect(host.getAllHostVersions()).andReturn(hostVersions).anyTimes();
- replay(host);
+ replay(host, hostVersion);
hostsForCluster.put(hostname, host);
}
@@ -1236,6 +1206,12 @@ public class ClusterStackVersionResourceProviderTest {
}
}).anyTimes();
+ // now the important expectations - that the cluster transition methods were
+ // called correctly
+ expect(cluster.transitionHostsToInstalling(anyObject(RepositoryVersionEntity.class),
+ anyObject(VersionDefinitionXml.class), eq(false))).andReturn(Collections.<Host>emptyList()).anyTimes();
+
+
ExecutionCommand executionCommand = createNiceMock(ExecutionCommand.class);
ExecutionCommandWrapper executionCommandWrapper = createNiceMock(ExecutionCommandWrapper.class);
@@ -1265,29 +1241,17 @@ public class ClusterStackVersionResourceProviderTest {
ClusterEntity clusterEntity = new ClusterEntity();
clusterEntity.setClusterId(1l);
clusterEntity.setClusterName(clusterName);
- ClusterVersionEntity cve = new ClusterVersionEntity(clusterEntity,
- repoVersion, RepositoryVersionState.INSTALL_FAILED, 0, "");
- expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class),
- anyObject(StackId.class), anyObject(String.class))).andReturn(cve);
TopologyManager topologyManager = injector.getInstance(TopologyManager.class);
StageUtils.setTopologyManager(topologyManager);
StageUtils.setConfiguration(injector.getInstance(Configuration.class));
- // !!! make it look like there is already a versioned installed that is less than the one being installed
- ClusterVersionEntity bad = new ClusterVersionEntity();
- RepositoryVersionEntity badRve = new RepositoryVersionEntity();
- badRve.setStack(stack);
- badRve.setVersion("2.2.1.0-1000");
- bad.setRepositoryVersion(badRve);
-
- expect(clusterVersionDAO.findByCluster(anyObject(String.class))).andReturn(Collections.singletonList(bad)).once();
// replay
replay(managementController, response, clusters, resourceProviderFactory, csvResourceProvider,
cluster, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schAMS, actionManager,
- executionCommand, executionCommandWrapper,stage, stageFactory, clusterVersionDAO);
+ executionCommand, executionCommandWrapper,stage, stageFactory);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
@@ -1357,6 +1321,10 @@ public class ClusterStackVersionResourceProviderTest {
File f = new File("src/test/resources/hbase_version_test.xml");
+ StackEntity stackEntity = new StackEntity();
+ stackEntity.setStackName(stackId.getStackName());
+ stackEntity.setStackVersion(stackId.getStackVersion());
+
RepositoryVersionEntity repoVersionEntity = new RepositoryVersionEntity();
repoVersionEntity.setId(1l);
repoVersionEntity.setOperatingSystems(OS_JSON);
@@ -1364,6 +1332,7 @@ public class ClusterStackVersionResourceProviderTest {
repoVersionEntity.setVersionXsd("version_definition.xsd");
repoVersionEntity.setType(RepositoryType.STANDARD);
repoVersionEntity.setVersion(repoVersion);
+ repoVersionEntity.setStack(stackEntity);
List<Host> hostsNeedingInstallCommands = new ArrayList<>();
Map<String, Host> hostsForCluster = new HashMap<>();
@@ -1382,6 +1351,7 @@ public class ClusterStackVersionResourceProviderTest {
if (i < hostCount - 2) {
expect(host.hasComponentsAdvertisingVersions(eq(stackId))).andReturn(true).atLeastOnce();
hostsNeedingInstallCommands.add(host);
+ expect(host.getAllHostVersions()).andReturn(Collections.<HostVersionEntity>emptyList()).anyTimes();
} else {
expect(host.hasComponentsAdvertisingVersions(eq(stackId))).andReturn(false).atLeastOnce();
@@ -1392,8 +1362,7 @@ public class ClusterStackVersionResourceProviderTest {
replay(hostVersionEntity);
hostVersionEntitiesMergedWithNotRequired.add(hostVersionEntity);
- expect(host.getAllHostVersions()).andReturn(
- hostVersionEntitiesMergedWithNotRequired).anyTimes();
+ expect(host.getAllHostVersions()).andReturn(hostVersionEntitiesMergedWithNotRequired).anyTimes();
}
replay(host);
@@ -1443,7 +1412,6 @@ public class ClusterStackVersionResourceProviderTest {
String clusterName = "Cluster100";
expect(cluster.getClusterId()).andReturn(1L).anyTimes();
- expect(cluster.getClusterName()).andReturn(clusterName).atLeastOnce();
expect(cluster.getHosts()).andReturn(hostsForCluster.values()).atLeastOnce();
expect(cluster.getServices()).andReturn(serviceMap).anyTimes();
expect(cluster.getServiceComponentHosts(anyObject(String.class))).andReturn(
@@ -1452,34 +1420,21 @@ public class ClusterStackVersionResourceProviderTest {
expect(repositoryVersionDAOMock.findByStackAndVersion(anyObject(StackId.class),
anyObject(String.class))).andReturn(repoVersionEntity);
- expect(clusterVersionDAO.findByCluster(anyObject(String.class))).andReturn(
- Collections.<ClusterVersionEntity> emptyList()).once();
-
ClusterEntity clusterEntity = new ClusterEntity();
clusterEntity.setClusterId(1l);
clusterEntity.setClusterName(clusterName);
- ClusterVersionEntity cve = new ClusterVersionEntity(clusterEntity, repoVersionEntity,
- RepositoryVersionState.INSTALL_FAILED, 0, "");
-
- // first expect back a null to make the code think it needs to create one,
- // then return the real one it's going to use
- expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class),
- anyObject(StackId.class), anyObject(String.class))).andReturn(null).once();
-
- expect(cluster.createClusterVersion(anyObject(StackId.class), eq(repoVersion),
- EasyMock.anyString(), eq(RepositoryVersionState.INSTALLED))).andReturn(cve).once();
// now the important expectations - that the cluster transition methods were
// called correctly
- expect(cluster.transitionHostsToInstalling(cve, repoVersionEntity,
+ expect(cluster.transitionHostsToInstalling(repoVersionEntity,
repoVersionEntity.getRepositoryXml(), true)).andReturn(
hostsNeedingInstallCommands).once();
// replay
replay(managementController, response, clusters, hdfsService, resourceProviderFactory,
csvResourceProvider, cluster, repositoryVersionDAOMock, configHelper, schDatanode,
- stageFactory, clusterVersionDAO, hostVersionDAO);
+ stageFactory, hostVersionDAO);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(type,
PropertyHelper.getPropertyIds(type), PropertyHelper.getKeyPropertyIds(type),
@@ -1593,7 +1548,6 @@ public class ClusterStackVersionResourceProviderTest {
bind(ConfigHelper.class).toInstance(configHelper);
bind(Configuration.class).toInstance(configuration);
bind(StageFactory.class).toInstance(stageFactory);
- bind(ClusterVersionDAO.class).toInstance(clusterVersionDAO);
bind(HostVersionDAO.class).toInstance(hostVersionDAO);
bind(HostComponentStateDAO.class).toInstance(hostComponentStateDAO);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
index 528bd40..6a751a9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
@@ -49,7 +49,6 @@ import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
@@ -84,7 +83,6 @@ public class CompatibleRepositoryVersionResourceProviderTest {
@Before
public void before() throws Exception {
final AmbariMetaInfo ambariMetaInfo = EasyMock.createMock(AmbariMetaInfo.class);
- final ClusterVersionDAO clusterVersionDAO = EasyMock.createMock(ClusterVersionDAO.class);
StackEntity hdp11Stack = new StackEntity();
hdp11Stack.setStackName("HDP");
@@ -221,7 +219,6 @@ public class CompatibleRepositoryVersionResourceProviderTest {
protected void configure() {
super.configure();
bind(AmbariMetaInfo.class).toInstance(ambariMetaInfo);
- bind(ClusterVersionDAO.class).toInstance(clusterVersionDAO);
bind(RepositoryVersionDAO.class).toInstance(repoVersionDAO);
requestStaticInjection(CompatibleRepositoryVersionResourceProvider.class);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
index d1a4a1a..b075b71 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
@@ -131,8 +131,6 @@ public class HostResourceProviderTest extends EasyMockSupport {
expect(cluster.getClusterId()).andReturn(2L).anyTimes();
expect(cluster.getDesiredConfigs()).andReturn(new HashMap<String, DesiredConfig>()).anyTimes();
- cluster.recalculateAllClusterVersionStates();
- EasyMock.expectLastCall().once();
expect(clusters.getCluster("Cluster100")).andReturn(cluster).atLeastOnce();
expect(clusters.getHost("Host100")).andReturn(null).atLeastOnce();
@@ -908,8 +906,6 @@ public class HostResourceProviderTest extends EasyMockSupport {
expect(clusters.getHost("Host100")).andReturn(host100).anyTimes();
clusters.mapAndPublishHostsToCluster(Collections.singleton("Host100"), "Cluster100");
expectLastCall().anyTimes();
- cluster.recalculateAllClusterVersionStates();
- expectLastCall().anyTimes();
expect(cluster.getClusterId()).andReturn(2L).anyTimes();
expect(cluster.getResourceId()).andReturn(4L).anyTimes();
expect(cluster.getDesiredConfigs()).andReturn(new HashMap<String, DesiredConfig>()).anyTimes();
@@ -1001,8 +997,6 @@ public class HostResourceProviderTest extends EasyMockSupport {
expect(clusters.getHostsForCluster("Cluster100")).andReturn(Collections.singletonMap("Host100", host100)).anyTimes();
clusters.mapAndPublishHostsToCluster(Collections.singleton("Host100"), "Cluster100");
expectLastCall().anyTimes();
- cluster.recalculateAllClusterVersionStates();
- expectLastCall().anyTimes();
expect(cluster.getClusterId()).andReturn(2L).anyTimes();
expect(cluster.getResourceId()).andReturn(4L).anyTimes();
expect(cluster.getDesiredConfigs()).andReturn(new HashMap<String, DesiredConfig>()).anyTimes();
@@ -1081,7 +1075,6 @@ public class HostResourceProviderTest extends EasyMockSupport {
expect(cluster.getDesiredConfigs()).andReturn(new HashMap<String, DesiredConfig>()).anyTimes();
clusters.deleteHost("Host100");
clusters.publishHostsDeletion(Collections.EMPTY_SET, Collections.singleton("Host100"));
- cluster.recalculateAllClusterVersionStates();
expect(host1.getHostName()).andReturn("Host100").anyTimes();
expect(healthStatus.getHealthStatus()).andReturn(HostHealthStatus.HealthStatus.HEALTHY).anyTimes();
expect(healthStatus.getHealthReport()).andReturn("HEALTHY").anyTimes();
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
index 21f9383..2d64287 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
@@ -19,7 +19,6 @@
package org.apache.ambari.server.controller.internal;
import java.sql.SQLException;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
@@ -40,11 +39,8 @@ import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
-import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@ -54,13 +50,13 @@ import org.apache.ambari.server.security.authorization.AuthorizationException;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.OperatingSystemInfo;
import org.apache.ambari.server.state.RepositoryInfo;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.junit.After;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
@@ -73,57 +69,28 @@ import com.google.common.collect.Sets;
import com.google.gson.Gson;
import com.google.inject.Guice;
import com.google.inject.Injector;
-
-import junit.framework.Assert;
-
/**
* RepositoryVersionResourceProvider tests.
*/
public class RepositoryVersionResourceProviderTest {
- private ClusterVersionDAO clusterVersionDAO;
-
private static Injector injector;
private static String jsonStringRedhat6 = "[{\"OperatingSystems\":{\"os_type\":\"redhat6\"},\"repositories\":[]}]";
private static String jsonStringRedhat7 = "[{\"OperatingSystems\":{\"os_type\":\"redhat7\"},\"repositories\":[]}]";
- private List<ClusterVersionEntity> getNoClusterVersions() {
- final List<ClusterVersionEntity> emptyList = new ArrayList<>();
- return emptyList;
- }
-
- private List<ClusterVersionEntity> getInstallFailedClusterVersions() {
- ClusterEntity cluster = new ClusterEntity();
- cluster.setClusterName("c1");
- cluster.setClusterId(1L);
-
- final List<ClusterVersionEntity> clusterVersions = new ArrayList<>();
- final RepositoryVersionEntity repositoryVersion = new RepositoryVersionEntity();
- repositoryVersion.setId(1L);
- final ClusterVersionEntity installFailedVersion = new ClusterVersionEntity();
- installFailedVersion.setState(RepositoryVersionState.INSTALL_FAILED);
- installFailedVersion.setRepositoryVersion(repositoryVersion);
- installFailedVersion.setClusterEntity(cluster);
- clusterVersions.add(installFailedVersion);
- cluster.setClusterVersionEntities(clusterVersions);
- return clusterVersions;
- }
-
@Before
public void before() throws Exception {
final Set<String> validVersions = Sets.newHashSet("1.1", "1.1-17", "1.1.1.1", "1.1.343432.2", "1.1.343432.2-234234324");
final Set<StackInfo> stacks = new HashSet<>();
final AmbariMetaInfo ambariMetaInfo = Mockito.mock(AmbariMetaInfo.class);
- clusterVersionDAO = Mockito.mock(ClusterVersionDAO.class);
final InMemoryDefaultTestModule injectorModule = new InMemoryDefaultTestModule() {
@Override
protected void configure() {
super.configure();
bind(AmbariMetaInfo.class).toInstance(ambariMetaInfo);
- bind(ClusterVersionDAO.class).toInstance(clusterVersionDAO);
};
};
injector = Guice.createInjector(injectorModule);
@@ -212,21 +179,6 @@ public class RepositoryVersionResourceProviderTest {
}
});
- Mockito.when(clusterVersionDAO.findByStackAndVersion(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenAnswer(
- new Answer<List<ClusterVersionEntity>>() {
- @Override
- public List<ClusterVersionEntity> answer(InvocationOnMock invocation) throws Throwable {
- final String stack = invocation.getArguments()[0].toString();
- final String version = invocation.getArguments()[1].toString();
-
- if (stack.equals("HDP-1.1") && version.equals("1.1.1.1")) {
- return getNoClusterVersions();
- } else {
- return getInstallFailedClusterVersions();
- }
- }
- });
-
H2DatabaseCleaner.resetSequences(injector);
injector.getInstance(GuiceJpaInitializer.class);
@@ -461,14 +413,6 @@ public class RepositoryVersionResourceProviderTest {
final ResourceProvider provider = injector.getInstance(ResourceProviderFactory.class).getRepositoryVersionResourceProvider();
- Mockito.when(clusterVersionDAO.findByStackAndVersion(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenAnswer(
- new Answer<List<ClusterVersionEntity>>() {
- @Override
- public List<ClusterVersionEntity> answer(InvocationOnMock invocation) throws Throwable {
- return getNoClusterVersions();
- }
- });
-
final Set<Map<String, Object>> propertySet = new LinkedHashSet<>();
final Map<String, Object> properties = new LinkedHashMap<>();
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID, "name");
@@ -521,14 +465,6 @@ public class RepositoryVersionResourceProviderTest {
properties.put(RepositoryVersionResourceProvider.SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID, new Gson().fromJson("[{\"OperatingSystems/os_type\":\"redhat6\",\"repositories\":[{\"Repositories/repo_id\":\"2\",\"Repositories/repo_name\":\"2\",\"Repositories/base_url\":\"2\",\"Repositories/unique\":\"true\"}]}]", Object.class));
provider.updateResources(updateRequest, new AndPredicate(predicateStackName, predicateStackVersion));
- // Now, insert a cluster version whose state is INSTALL_FAILED, so the operation will not be permitted.
- Mockito.when(clusterVersionDAO.findByStackAndVersion(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenAnswer(
- new Answer<List<ClusterVersionEntity>>() {
- @Override
- public List<ClusterVersionEntity> answer(InvocationOnMock invocation) throws Throwable {
- return getInstallFailedClusterVersions();
- }
- });
try {
provider.updateResources(updateRequest, new AndPredicate(predicateStackName, predicateStackVersion));
@@ -545,14 +481,6 @@ public class RepositoryVersionResourceProviderTest {
final ResourceProvider provider = injector.getInstance(ResourceProviderFactory.class).getRepositoryVersionResourceProvider();
- Mockito.when(clusterVersionDAO.findByStackAndVersion(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenAnswer(
- new Answer<List<ClusterVersionEntity>>() {
- @Override
- public List<ClusterVersionEntity> answer(InvocationOnMock invocation) throws Throwable {
- return getNoClusterVersions();
- }
- });
-
final Set<Map<String, Object>> propertySet = new LinkedHashSet<>();
final Map<String, Object> properties = new LinkedHashMap<>();
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID, "name");
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
index 91b00ab..c82c884 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
@@ -63,7 +63,6 @@ import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.metadata.RoleCommandOrder;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.security.TestAuthenticationFactory;
import org.apache.ambari.server.security.authorization.AuthorizationException;
@@ -115,20 +114,14 @@ public class ServiceResourceProviderTest {
Clusters clusters = createNiceMock(Clusters.class);
Cluster cluster = createNiceMock(Cluster.class);
Service service = createNiceMock(Service.class);
- StackId stackId = createNiceMock(StackId.class);
+ StackId stackId = new StackId("HDP-2.5");
ServiceFactory serviceFactory = createNiceMock(ServiceFactory.class);
AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class);
- ClusterVersionEntity clusterVersion = createNiceMock(ClusterVersionEntity.class);
- RepositoryVersionEntity repositoryVersion = createNiceMock(RepositoryVersionEntity.class);
- expect(clusterVersion.getRepositoryVersion()).andReturn(repositoryVersion).atLeastOnce();
-
expect(managementController.getClusters()).andReturn(clusters).anyTimes();
expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
- expect(cluster.getCurrentClusterVersion()).andReturn(clusterVersion).atLeastOnce();
-
expect(cluster.addService(eq("Service100"),
EasyMock.anyObject(RepositoryVersionEntity.class))).andReturn(service);
@@ -138,19 +131,16 @@ public class ServiceResourceProviderTest {
expect(cluster.getDesiredStackVersion()).andReturn(stackId).anyTimes();
expect(cluster.getClusterId()).andReturn(2L).anyTimes();
- expect(stackId.getStackName()).andReturn("HDP").anyTimes();
- expect(stackId.getStackVersion()).andReturn("2.5").anyTimes();
-
expect(ambariMetaInfo.isValidService( (String) anyObject(), (String) anyObject(), (String) anyObject())).andReturn(true);
expect(ambariMetaInfo.getService((String)anyObject(), (String)anyObject(), (String)anyObject())).andReturn(serviceInfo).anyTimes();
// replay
- replay(managementController, clusters, cluster, clusterVersion, repositoryVersion, service,
- ambariMetaInfo, stackId, serviceFactory, serviceInfo);
+ replay(managementController, clusters, cluster, service,
+ ambariMetaInfo, serviceFactory, serviceInfo);
SecurityContextHolder.getContext().setAuthentication(authentication);
- ResourceProvider provider = getServiceProvider(managementController);
+ ResourceProvider provider = getServiceProvider(managementController, true);
// add the property map to a set for the request. add more maps for multiple creates
Set<Map<String, Object>> propertySet = new LinkedHashSet<>();
@@ -171,8 +161,8 @@ public class ServiceResourceProviderTest {
provider.createResources(request);
// verify
- verify(managementController, clusters, cluster, clusterVersion, repositoryVersion, service,
- ambariMetaInfo, stackId, serviceFactory, serviceInfo);
+ verify(managementController, clusters, cluster, service,
+ ambariMetaInfo, serviceFactory, serviceInfo);
}
@Test
@@ -1157,20 +1147,31 @@ public class ServiceResourceProviderTest {
}
}
- /**
- * This factory method creates default MaintenanceStateHelper mock.
- * It's useful in most cases (when we don't care about Maintenance State)
- */
- public static ServiceResourceProvider getServiceProvider(AmbariManagementController managementController) throws AmbariException {
+ private static ServiceResourceProvider getServiceProvider(AmbariManagementController managementController, boolean mockFindByStack) throws AmbariException {
MaintenanceStateHelper maintenanceStateHelperMock = createNiceMock(MaintenanceStateHelper.class);
RepositoryVersionDAO repositoryVersionDAO = createNiceMock(RepositoryVersionDAO.class);
expect(maintenanceStateHelperMock.isOperationAllowed(anyObject(Resource.Type.class), anyObject(Service.class))).andReturn(true).anyTimes();
expect(maintenanceStateHelperMock.isOperationAllowed(anyObject(Resource.Type.class), anyObject(ServiceComponentHost.class))).andReturn(true).anyTimes();
+
+ if (mockFindByStack) {
+ RepositoryVersionEntity repositoryVersion = createNiceMock(RepositoryVersionEntity.class);
+ expect(repositoryVersionDAO.findByStack(EasyMock.anyObject(StackId.class))).andReturn(
+ Collections.singletonList(repositoryVersion)).atLeastOnce();
+ }
+
replay(maintenanceStateHelperMock, repositoryVersionDAO);
return getServiceProvider(managementController, maintenanceStateHelperMock, repositoryVersionDAO);
}
/**
+ * This factory method creates default MaintenanceStateHelper mock.
+ * It's useful in most cases (when we don't care about Maintenance State)
+ */
+ public static ServiceResourceProvider getServiceProvider(AmbariManagementController managementController) throws AmbariException {
+ return getServiceProvider(managementController, false);
+ }
+
+ /**
* This factory method allows to define custom MaintenanceStateHelper mock.
*/
public static ServiceResourceProvider getServiceProvider(
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
index 74cf0bf..4d44576 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
@@ -62,7 +62,6 @@ import org.apache.ambari.server.security.authorization.AuthorizationException;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.services.MetricsRetrievalService;
import org.apache.ambari.server.state.stack.Metric;
@@ -138,8 +137,6 @@ public class StackDefinedPropertyProviderTest {
cluster.setDesiredStackVersion(stackId);
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
clusters.addHost("h1");
Host host = clusters.getHost("h1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
deleted file mode 100644
index 30e5c4c..0000000
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.server.controller.internal;
-
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.replay;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.lang.reflect.Field;
-import java.sql.SQLException;
-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 org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.H2DatabaseCleaner;
-import org.apache.ambari.server.actionmanager.ActionManager;
-import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
-import org.apache.ambari.server.actionmanager.ExecutionCommandWrapperFactory;
-import org.apache.ambari.server.agent.ExecutionCommand;
-import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
-import org.apache.ambari.server.configuration.Configuration;
-import org.apache.ambari.server.controller.AmbariManagementController;
-import org.apache.ambari.server.controller.AmbariServer;
-import org.apache.ambari.server.controller.spi.Request;
-import org.apache.ambari.server.controller.spi.ResourceProvider;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
-import org.apache.ambari.server.orm.GuiceJpaInitializer;
-import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.OrmTestHelper;
-import org.apache.ambari.server.orm.dao.ExecutionCommandDAO;
-import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
-import org.apache.ambari.server.orm.dao.UpgradeDAO;
-import org.apache.ambari.server.orm.entities.ExecutionCommandEntity;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
-import org.apache.ambari.server.orm.entities.UpgradeEntity;
-import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
-import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
-import org.apache.ambari.server.security.TestAuthenticationFactory;
-import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.Config;
-import org.apache.ambari.server.state.ConfigFactory;
-import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.HostState;
-import org.apache.ambari.server.state.RepositoryVersionState;
-import org.apache.ambari.server.state.Service;
-import org.apache.ambari.server.state.ServiceComponent;
-import org.apache.ambari.server.state.ServiceComponentHost;
-import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.topology.TopologyManager;
-import org.apache.ambari.server.utils.StageUtils;
-import org.apache.ambari.server.view.ViewRegistry;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.gson.Gson;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-/**
- * UpgradeResourceDefinition tests.
- */
-public class UpgradeResourceProviderHDP22Test {
-
- private UpgradeDAO upgradeDao = null;
- private RepositoryVersionDAO repoVersionDao = null;
- private Injector injector;
- private Clusters clusters;
- private OrmTestHelper helper;
- private AmbariManagementController amc;
- private StackDAO stackDAO;
- private TopologyManager topologyManager;
- private ConfigFactory configFactory;
-
- private static final String configTagVersion1 = "version1";
- private static final String configTagVersion2 = "version2";
-
- private static final Map<String, String> configTagVersion1Properties = new ImmutableMap.Builder<String, String>().put(
- "hive.server2.thrift.port", "10000").build();
-
- private static final Map<String, String> configTagVersion2Properties = new ImmutableMap.Builder<String, String>().put(
- "hive.server2.thrift.port", "10010").build();
-
- @Before
- public void before() throws Exception {
- SecurityContextHolder.getContext().setAuthentication(
- TestAuthenticationFactory.createAdministrator());
-
- // create an injector which will inject the mocks
- injector = Guice.createInjector(new InMemoryDefaultTestModule());
-
- injector.getInstance(GuiceJpaInitializer.class);
-
- helper = injector.getInstance(OrmTestHelper.class);
-
- amc = injector.getInstance(AmbariManagementController.class);
-
- Field field = AmbariServer.class.getDeclaredField("clusterController");
- field.setAccessible(true);
- field.set(null, amc);
-
- stackDAO = injector.getInstance(StackDAO.class);
- upgradeDao = injector.getInstance(UpgradeDAO.class);
- repoVersionDao = injector.getInstance(RepositoryVersionDAO.class);
- configFactory = injector.getInstance(ConfigFactory.class);
-
- AmbariEventPublisher publisher = createNiceMock(AmbariEventPublisher.class);
- replay(publisher);
- ViewRegistry.initInstance(new ViewRegistry(publisher));
-
- StackEntity stackEntity = stackDAO.find("HDP", "2.2.0");
-
- RepositoryVersionEntity repoVersionEntity = new RepositoryVersionEntity();
- repoVersionEntity.setDisplayName("For Stack Version 2.2.0");
- repoVersionEntity.setOperatingSystems("");
- repoVersionEntity.setStack(stackEntity);
- repoVersionEntity.setVersion("2.2.0.0");
- repoVersionDao.create(repoVersionEntity);
-
- repoVersionEntity = new RepositoryVersionEntity();
- repoVersionEntity.setDisplayName("For Stack Version 2.2.4.2");
- repoVersionEntity.setOperatingSystems("");
- repoVersionEntity.setStack(stackEntity);
- repoVersionEntity.setVersion("2.2.4.2");
- repoVersionDao.create(repoVersionEntity);
-
- clusters = injector.getInstance(Clusters.class);
-
- StackId stackId = new StackId("HDP-2.2.0");
- clusters.addCluster("c1", stackId);
- Cluster cluster = clusters.getCluster("c1");
-
- RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
- stackId.getStackVersion());
-
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
- cluster.transitionClusterVersion(stackId, stackId.getStackVersion(), RepositoryVersionState.CURRENT);
-
- clusters.addHost("h1");
- Host host = clusters.getHost("h1");
- Map<String, String> hostAttributes = new HashMap<>();
- hostAttributes.put("os_family", "redhat");
- hostAttributes.put("os_release_version", "6.3");
- host.setHostAttributes(hostAttributes);
- host.setState(HostState.HEALTHY);
-
- clusters.mapHostToCluster("h1", "c1");
-
- // add a single HIVE server
- Service service = cluster.addService("HIVE", repositoryVersion);
-
- ServiceComponent component = service.addServiceComponent("HIVE_SERVER");
- ServiceComponentHost sch = component.addServiceComponentHost("h1");
- sch.setVersion("2.2.0.0");
-
- component = service.addServiceComponent("HIVE_CLIENT");
- sch = component.addServiceComponentHost("h1");
- sch.setVersion("2.2.0.0");
- topologyManager = injector.getInstance(TopologyManager.class);
- StageUtils.setTopologyManager(topologyManager);
- StageUtils.setConfiguration(injector.getInstance(Configuration.class));
- ActionManager.setTopologyManager(topologyManager);
- }
-
- @After
- public void after() throws AmbariException, SQLException {
- H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
- injector = null;
- }
-
- /**
- * Tests upgrades from HDP-2.2.x to HDP-2.2.y
- *
- * @throws Exception
- */
- @SuppressWarnings("serial")
- @Test
- public void testCreateIntraStackUpgrade() throws Exception {
- // We want to use the HDP-2.2 'upgrade_test' catalog
- // Create HDP-2.2 stack
-
- Cluster cluster = clusters.getCluster("c1");
- StackId oldStack = cluster.getDesiredStackVersion();
-
- for (Service s : cluster.getServices().values()) {
- assertEquals(oldStack, s.getDesiredStackId());
-
- for (ServiceComponent sc : s.getServiceComponents().values()) {
- assertEquals(oldStack, sc.getDesiredStackId());
-
- for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
- assertEquals("2.2.0.0", sch.getVersion());
- }
- }
- }
-
- Config config = configFactory.createNew(cluster, "hive-site", configTagVersion1, configTagVersion1Properties, null);
- cluster.addDesiredConfig("admin", Collections.singleton(config));
-
- Map<String, Object> requestProps = new HashMap<>();
- requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.4.2");
- requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
- requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
-
- ResourceProvider upgradeResourceProvider = createProvider(amc);
-
- Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null);
- upgradeResourceProvider.createResources(request);
-
- List<UpgradeEntity> upgrades = upgradeDao.findUpgrades(cluster.getClusterId());
- assertEquals(1, upgrades.size());
-
- UpgradeEntity upgrade = upgrades.get(0);
- assertEquals("upgrade_test", upgrade.getUpgradePackage());
- assertEquals(3, upgrade.getUpgradeGroups().size());
-
- UpgradeGroupEntity group = upgrade.getUpgradeGroups().get(2);
- assertEquals(3, group.getItems().size());
-
- group = upgrade.getUpgradeGroups().get(0);
- assertEquals(2, group.getItems().size());
- UpgradeItemEntity item = group.getItems().get(1);
- assertEquals("Value is set for the source stack upgrade pack", "[{\"message\":\"Goo\"}]", item.getText());
-
- assertTrue(cluster.getDesiredConfigs().containsKey("hive-site"));
-
- StackId newStack = cluster.getDesiredStackVersion();
-
- assertTrue(oldStack.equals(newStack));
-
- for (Service s : cluster.getServices().values()) {
- assertEquals(newStack, s.getDesiredStackId());
-
- for (ServiceComponent sc : s.getServiceComponents().values()) {
- assertEquals(newStack, sc.getDesiredStackId());
- }
- }
-
- // Hive service checks have generated the ExecutionCommands by now.
- // Change the new desired config tag and verify execution command picks up new tag
- assertEquals(configTagVersion1, cluster.getDesiredConfigByType("hive-site").getTag());
- final Config newConfig = configFactory.createNew(cluster, "hive-site", configTagVersion2, configTagVersion2Properties, null);
- Set<Config> desiredConfigs = new HashSet<Config>() {
- {
- add(newConfig);
- }
- };
-
- cluster.addConfig(newConfig);
- cluster.addDesiredConfig("admin", desiredConfigs);
- assertEquals(configTagVersion2, cluster.getDesiredConfigByType("hive-site").getTag());
- Gson gson = new Gson();
-
- List<ExecutionCommandEntity> currentExecutionCommands = injector.getInstance(ExecutionCommandDAO.class).findAll();
- for (ExecutionCommandEntity ece : currentExecutionCommands) {
- String executionCommandJson = new String(ece.getCommand());
- Map<String, Object> commandMap = gson.<Map<String, Object>> fromJson(executionCommandJson, Map.class);
-
- // ensure that the latest tag is being used - this is absolutely required
- // for upgrades
- Set<String> roleCommandsThatMustHaveRefresh = new HashSet<>();
- roleCommandsThatMustHaveRefresh.add("SERVICE_CHECK");
- roleCommandsThatMustHaveRefresh.add("RESTART");
- roleCommandsThatMustHaveRefresh.add("ACTIONEXECUTE");
-
- String roleCommand = (String) commandMap.get("roleCommand");
- if (roleCommandsThatMustHaveRefresh.contains(roleCommand)) {
- assertTrue(commandMap.containsKey(KeyNames.REFRESH_CONFIG_TAGS_BEFORE_EXECUTION));
- Object object = commandMap.get(KeyNames.REFRESH_CONFIG_TAGS_BEFORE_EXECUTION);
- assertTrue(Boolean.valueOf(object.toString()));
-
- ExecutionCommandWrapperFactory ecwFactory = injector.getInstance(ExecutionCommandWrapperFactory.class);
- ExecutionCommandWrapper executionCommandWrapper = ecwFactory.createFromJson(executionCommandJson);
- ExecutionCommand executionCommand = executionCommandWrapper.getExecutionCommand();
- Map<String, Map<String, String>> configurationTags = executionCommand.getConfigurationTags();
- assertEquals(configTagVersion2, configurationTags.get("hive-site").get("tag"));
- Map<String, Map<String, String>> configurations = executionCommand.getConfigurations();
- assertEquals("10010", configurations.get("hive-site").get("hive.server2.thrift.port"));
- }
- }
- }
-
- /**
- * @param amc
- * @return the provider
- */
- private UpgradeResourceProvider createProvider(AmbariManagementController amc) {
- return new UpgradeResourceProvider(amc);
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index d30d9e0..576f308 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -90,7 +90,6 @@ import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
@@ -236,9 +235,6 @@ public class UpgradeResourceProviderTest {
helper.getOrCreateRepositoryVersion(stack211, stack211.getStackVersion());
helper.getOrCreateRepositoryVersion(stack220, stack220.getStackVersion());
- cluster.createClusterVersion(stack211, stack211.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
- cluster.transitionClusterVersion(stack211, stack211.getStackVersion(), RepositoryVersionState.CURRENT);
-
clusters.addHost("h1");
Host host = clusters.getHost("h1");
Map<String, String> hostAttributes = new HashMap<>();
@@ -937,6 +933,7 @@ public class UpgradeResourceProviderTest {
Cluster cluster = clusters.getCluster("c1");
StackEntity stackEntity = stackDAO.find("HDP", "2.1.1");
+
RepositoryVersionEntity repoVersionEntity = new RepositoryVersionEntity();
repoVersionEntity.setDisplayName("My New Version 3");
repoVersionEntity.setOperatingSystems("");
@@ -1173,7 +1170,7 @@ public class UpgradeResourceProviderTest {
desiredConfigurations.put("baz-site", null);
Cluster cluster = EasyMock.createNiceMock(Cluster.class);
- expect(cluster.getCurrentStackVersion()).andReturn(stack211);
+ expect(cluster.getCurrentStackVersion()).andReturn(stack211).atLeastOnce();
expect(cluster.getDesiredStackVersion()).andReturn(stack220);
expect(cluster.getDesiredConfigs()).andReturn(desiredConfigurations);
expect(cluster.getDesiredConfigByType("foo-site")).andReturn(fooConfig);
@@ -1209,6 +1206,7 @@ public class UpgradeResourceProviderTest {
UpgradeContext upgradeContext = upgradeContextFactory.create(cluster, upgrade.getType(),
Direction.UPGRADE, "2.2.0.0", new HashMap<String, Object>());
+ upgradeContext.setUpgradePack(upgrade);
upgradeResourceProvider.applyStackAndProcessConfigurations(upgradeContext);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
index 094706e..f4ac0b1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
@@ -69,7 +69,6 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
@@ -165,7 +164,6 @@ public class UpgradeSummaryResourceProviderTest {
Cluster cluster = clusters.getCluster("c1");
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
clusters.addHost("h1");
Host host = clusters.getHost("h1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
index 9907153..710e4e7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
@@ -39,7 +39,6 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.MaintenanceState;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentFactory;
@@ -123,8 +122,6 @@ public class EventsTest {
m_cluster.setDesiredStackVersion(stackId);
m_repositoryVersion = m_helper.getOrCreateRepositoryVersion(stackId, REPO_VERSION);
- m_cluster.createClusterVersion(stackId, REPO_VERSION, "admin",
- RepositoryVersionState.INSTALLING);
m_clusters.mapHostToCluster(HOSTNAME, m_clusterName);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
index 6184d6d..4ca2070 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertEquals;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -42,7 +41,6 @@ import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
@@ -106,8 +104,6 @@ public class HostVersionOutOfSyncListenerTest {
addHost("h1");
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, stackId.getStackVersion(), RepositoryVersionState.CURRENT);
clusters.mapHostToCluster("h1", "c1");
}
@@ -137,13 +133,10 @@ public class HostVersionOutOfSyncListenerTest {
RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId,
INSTALLED_VERSION);
- c1.createClusterVersion(stackId, INSTALLED_VERSION, "admin", RepositoryVersionState.INSTALLING);
c1.setCurrentStackVersion(stackId);
- c1.recalculateAllClusterVersionStates();
- assertRepoVersionState(stackId.getStackId(), INSTALLED_VERSION,
- RepositoryVersionState.INSTALLING);
+ assertRepoVersionState(INSTALLED_VERSION, RepositoryVersionState.INSTALLING);
- assertRepoVersionState(stackId.getStackId(), CURRENT_VERSION, RepositoryVersionState.CURRENT);
+ assertRepoVersionState(CURRENT_VERSION, RepositoryVersionState.CURRENT);
// Add ZK service with only ZOOKEEPER_SERVER
List<String> hostList = new ArrayList<>();
@@ -160,10 +153,8 @@ public class HostVersionOutOfSyncListenerTest {
helper.createHostVersion("h2", repositoryVersionEntity, RepositoryVersionState.INSTALLED);
helper.createHostVersion("h3", repositoryVersionEntity, RepositoryVersionState.INSTALLED);
- c1.recalculateAllClusterVersionStates();
-
- assertRepoVersionState(stackId.getStackId(), INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
- assertRepoVersionState(stackId.getStackId(), CURRENT_VERSION, RepositoryVersionState.CURRENT);
+ assertRepoVersionState(INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
+ assertRepoVersionState(CURRENT_VERSION, RepositoryVersionState.CURRENT);
// Add new host and verify that it has all host versions present
List<HostVersionEntity> h2Versions = hostVersionDAO.findAll();
@@ -190,9 +181,7 @@ public class HostVersionOutOfSyncListenerTest {
RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId,
INSTALLED_VERSION);
helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLED);
- c1.recalculateAllClusterVersionStates();
- assertRepoVersionState(stackId.getStackId(), INSTALLED_VERSION,
- RepositoryVersionState.INSTALLED);
+ assertRepoVersionState(INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
// Add new host and verify that it has all host versions present
List<HostVersionEntity> h2Versions = hostVersionDAO.findAll();
@@ -225,9 +214,9 @@ public class HostVersionOutOfSyncListenerTest {
// register the new repo
addRepoVersion(INSTALLED_VERSION_2, yaStackId);
- assertRepoVersionState(stackId.getStackId(), INSTALLED_VERSION,RepositoryVersionState.INSTALLED);
- assertRepoVersionState(yaStackId.getStackId(), INSTALLED_VERSION_2,RepositoryVersionState.INSTALLED);
- assertRepoVersionState(yaStackId.getStackId(), CURRENT_VERSION, RepositoryVersionState.CURRENT);
+ assertRepoVersionState(INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
+ assertRepoVersionState(INSTALLED_VERSION_2, RepositoryVersionState.INSTALLED);
+ assertRepoVersionState(CURRENT_VERSION, RepositoryVersionState.CURRENT);
//Add HDFS service
List<String> hostList = new ArrayList<>();
@@ -260,9 +249,9 @@ public class HostVersionOutOfSyncListenerTest {
}
- assertRepoVersionState(stackId.getStackId(), INSTALLED_VERSION,RepositoryVersionState.OUT_OF_SYNC);
- assertRepoVersionState(yaStackId.getStackId(), INSTALLED_VERSION_2,RepositoryVersionState.OUT_OF_SYNC);
- assertRepoVersionState(yaStackId.getStackId(), CURRENT_VERSION, RepositoryVersionState.CURRENT);
+ assertRepoVersionState(INSTALLED_VERSION, RepositoryVersionState.OUT_OF_SYNC);
+ assertRepoVersionState(INSTALLED_VERSION_2, RepositoryVersionState.OUT_OF_SYNC);
+ assertRepoVersionState(CURRENT_VERSION, RepositoryVersionState.CURRENT);
}
@@ -298,8 +287,7 @@ public class HostVersionOutOfSyncListenerTest {
List<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
// Host version should not transition to OUT_OF_SYNC state
- assertRepoVersionState(stackId.getStackId(), INSTALLED_VERSION,
- RepositoryVersionState.INSTALLED);
+ assertRepoVersionState(INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
for (HostVersionEntity hostVersionEntity : hostVersions) {
if (hostVersionEntity.getRepositoryVersion().getVersion().equals(INSTALLED_VERSION)) {
assertEquals(hostVersionEntity.getState(), RepositoryVersionState.INSTALLED);
@@ -322,8 +310,8 @@ public class HostVersionOutOfSyncListenerTest {
createClusterAndHosts(INSTALLED_VERSION, stackId);
addRepoVersion(INSTALLED_VERSION_2, yaStackId);
- assertRepoVersionState(stackId.getStackId(), INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
- assertRepoVersionState(stackId.getStackId(), INSTALLED_VERSION_2, RepositoryVersionState.INSTALLED);
+ assertRepoVersionState(INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
+ assertRepoVersionState(INSTALLED_VERSION_2, RepositoryVersionState.INSTALLED);
//Add ZOOKEEPER_CLIENT component
List<String> hostList = new ArrayList<>();
@@ -338,7 +326,7 @@ public class HostVersionOutOfSyncListenerTest {
changedHosts.add("h2");
changedHosts.add("h3");
- assertRepoVersionState(stackId.getStackId(), INSTALLED_VERSION,RepositoryVersionState.OUT_OF_SYNC);
+ assertRepoVersionState(INSTALLED_VERSION, RepositoryVersionState.OUT_OF_SYNC);
List<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
@@ -369,18 +357,17 @@ public class HostVersionOutOfSyncListenerTest {
StackId stackId = new StackId(this.stackId);
RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId,"2.2.0-1000");
RepositoryVersionEntity repositoryVersionEntity2 = helper.getOrCreateRepositoryVersion(stackId,"2.2.0-2000");
- c1.createClusterVersion(stackId, "2.2.0-1000", "admin", RepositoryVersionState.INSTALLING);
c1.setCurrentStackVersion(stackId);
- c1.recalculateAllClusterVersionStates();
- assertRepoVersionState(stackId.getStackId(), "2.2.0-1000", RepositoryVersionState.INSTALLING);
- assertRepoVersionState(stackId.getStackId(), "2.2.0-2086", RepositoryVersionState.CURRENT);
+
+ assertRepoVersionState("2.2.0-1000", RepositoryVersionState.INSTALLING);
+ assertRepoVersionState("2.2.0-2086", RepositoryVersionState.CURRENT);
helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLED);
helper.createHostVersion("h1", repositoryVersionEntity2, RepositoryVersionState.INSTALLED);
- c1.recalculateAllClusterVersionStates();
- assertRepoVersionState(stackId.getStackId(), "2.2.0-1000", RepositoryVersionState.INSTALLED);
- assertRepoVersionState(stackId.getStackId(), "2.2.0-2000", RepositoryVersionState.INSTALLED);
- assertRepoVersionState(stackId.getStackId(), "2.2.0-2086", RepositoryVersionState.CURRENT);
+
+ assertRepoVersionState("2.2.0-1000", RepositoryVersionState.INSTALLED);
+ assertRepoVersionState("2.2.0-2000", RepositoryVersionState.INSTALLED);
+ assertRepoVersionState("2.2.0-2086", RepositoryVersionState.CURRENT);
// Add new host and verify that it has all host versions present
addHost("h2");
@@ -412,12 +399,10 @@ public class HostVersionOutOfSyncListenerTest {
RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId,
"2.2.9-9999");
- c1.createClusterVersion(stackId, "2.2.9-9999", "admin", RepositoryVersionState.INSTALLING);
c1.setCurrentStackVersion(stackId);
- c1.recalculateAllClusterVersionStates();
- assertRepoVersionState(stackId.getStackId(), "2.2.0", RepositoryVersionState.CURRENT);
- assertRepoVersionState(stackId.getStackId(), "2.2.9-9999", RepositoryVersionState.INSTALLING);
+ assertRepoVersionState("2.2.0", RepositoryVersionState.CURRENT);
+ assertRepoVersionState("2.2.9-9999", RepositoryVersionState.INSTALLING);
HostVersionEntity hv1 = helper.createHostVersion("h1", repositoryVersionEntity,
RepositoryVersionState.INSTALLED);
@@ -425,9 +410,8 @@ public class HostVersionOutOfSyncListenerTest {
RepositoryVersionState.INSTALLED);
// do an initial calculate to make sure the new repo is installing
- c1.recalculateAllClusterVersionStates();
- assertRepoVersionState(stackId.getStackId(), "2.2.0", RepositoryVersionState.CURRENT);
- assertRepoVersionState(stackId.getStackId(), "2.2.9-9999", RepositoryVersionState.INSTALLED);
+ assertRepoVersionState("2.2.0", RepositoryVersionState.CURRENT);
+ assertRepoVersionState("2.2.9-9999", RepositoryVersionState.INSTALLED);
// make it seems like we upgraded, but 1 host still hasn't finished
hv1.setState(RepositoryVersionState.INSTALLED);
@@ -436,9 +420,8 @@ public class HostVersionOutOfSyncListenerTest {
hostVersionDAO.merge(hv2);
// recalculate and ensure that the cluster is UPGRADING
- c1.recalculateAllClusterVersionStates();
- assertRepoVersionState(stackId.getStackId(), "2.2.0", RepositoryVersionState.CURRENT);
- assertRepoVersionState(stackId.getStackId(), "2.2.9-9999", RepositoryVersionState.INSTALLING);
+ assertRepoVersionState("2.2.0", RepositoryVersionState.CURRENT);
+ assertRepoVersionState("2.2.9-9999", RepositoryVersionState.INSTALLING);
// delete the host that was UPGRADING, and DON'T call recalculate; let the
// event handle it
@@ -446,8 +429,8 @@ public class HostVersionOutOfSyncListenerTest {
clusters.deleteHost("h2");
clusters.publishHostsDeletion(Collections.singleton(c1), Collections.singleton("h2"));
injector.getInstance(UnitOfWork.class).end();
- assertRepoVersionState(stackId.getStackId(), "2.2.0", RepositoryVersionState.CURRENT);
- assertRepoVersionState(stackId.getStackId(), "2.2.9-9999", RepositoryVersionState.INSTALLED);
+ assertRepoVersionState("2.2.0", RepositoryVersionState.CURRENT);
+ assertRepoVersionState("2.2.9-9999", RepositoryVersionState.INSTALLED);
}
@Test
@@ -469,7 +452,7 @@ public class HostVersionOutOfSyncListenerTest {
// create repo version
RepositoryVersionEntity repo = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
+
clusters.mapHostToCluster(host1, clusterName);
clusters.mapHostToCluster(host2, clusterName);
clusters.mapHostToCluster(host3, clusterName);
@@ -603,15 +586,15 @@ public class HostVersionOutOfSyncListenerTest {
}
}
- private void assertRepoVersionState(String stack, String version, RepositoryVersionState state) {
- StackId stackId = new StackId(stack);
- Collection<ClusterVersionEntity> allClusterVersions = c1.getAllClusterVersions();
- for (ClusterVersionEntity entity : allClusterVersions) {
- StackId clusterVersionStackId = new StackId(entity.getRepositoryVersion().getStack());
- if (clusterVersionStackId.equals(stackId)
- && entity.getRepositoryVersion().getVersion().equals(version)) {
- assertEquals(state, entity.getState());
+ private void assertRepoVersionState(String version, RepositoryVersionState state) {
+
+ for (Host host : c1.getHosts()) {
+ for (HostVersionEntity hostVersionEntity : host.getAllHostVersions()) {
+ if (hostVersionEntity.getRepositoryVersion().getVersion().equals("version")) {
+ assertEquals(state, hostVersionEntity.getState());
+ }
}
}
+
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
index d5b2d46..a74a1d2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
@@ -140,8 +140,6 @@ public class StackVersionListenerTest extends EasyMockSupport {
sch.setVersion(VALID_NEW_VERSION);
expectLastCall().once();
expect(sch.recalculateHostVersionState()).andReturn(DUMMY_REPOSITORY_VERSION_ENTITY).once();
- cluster.recalculateClusterVersionState(DUMMY_REPOSITORY_VERSION_ENTITY);
- expectLastCall().once();
replayAll();
@@ -155,8 +153,6 @@ public class StackVersionListenerTest extends EasyMockSupport {
sch.setVersion(VALID_NEW_VERSION);
expectLastCall().once();
expect(sch.recalculateHostVersionState()).andReturn(DUMMY_REPOSITORY_VERSION_ENTITY).once();
- cluster.recalculateClusterVersionState(DUMMY_REPOSITORY_VERSION_ENTITY);
- expectLastCall().once();
replayAll();
@@ -187,8 +183,6 @@ public class StackVersionListenerTest extends EasyMockSupport {
sch.setVersion(VALID_NEW_VERSION);
expectLastCall().once();
expect(sch.recalculateHostVersionState()).andReturn(DUMMY_REPOSITORY_VERSION_ENTITY).once();
- cluster.recalculateClusterVersionState(DUMMY_REPOSITORY_VERSION_ENTITY);
- expectLastCall().once();
replayAll();
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
index e84e0f6..469e8c8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
@@ -92,6 +92,7 @@ import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.alert.Scope;
import org.apache.ambari.server.state.alert.SourceType;
import org.apache.ambari.server.state.cluster.ClustersImpl;
+import org.junit.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.crypto.password.PasswordEncoder;
@@ -102,8 +103,6 @@ import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.persist.Transactional;
-import junit.framework.Assert;
-
@Singleton
public class OrmTestHelper {
@@ -403,8 +402,6 @@ public class OrmTestHelper {
StackId stackId = new StackId("HDP", "2.0.6");
cluster.setDesiredStackVersion(stackId);
getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster.createClusterVersion(stackId,
- stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
return cluster;
}
@@ -436,7 +433,8 @@ public class OrmTestHelper {
ServiceFactory serviceFactory, ServiceComponentFactory componentFactory,
ServiceComponentHostFactory schFactory, String hostName) throws Exception {
- RepositoryVersionEntity repositoryVersion = cluster.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(cluster.getDesiredStackVersion(),
+ cluster.getDesiredStackVersion().getStackVersion());
String serviceName = "HDFS";
Service service = serviceFactory.createNew(cluster, serviceName, repositoryVersion);
@@ -469,7 +467,8 @@ public class OrmTestHelper {
ServiceFactory serviceFactory, ServiceComponentFactory componentFactory,
ServiceComponentHostFactory schFactory, String hostName) throws Exception {
- RepositoryVersionEntity repositoryVersion = cluster.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(cluster.getDesiredStackVersion(),
+ cluster.getDesiredStackVersion().getStackVersion());
String serviceName = "YARN";
Service service = serviceFactory.createNew(cluster, serviceName, repositoryVersion);
@@ -600,6 +599,41 @@ public class OrmTestHelper {
}
/**
+ * Convenient method to create or to get repository version for given cluster. The repository
+ * version string is based on the cluster's stack version.
+ *
+ * @param stackId stack object
+ * @param version stack version
+ * @return repository version
+ */
+ public RepositoryVersionEntity getOrCreateRepositoryVersion(Cluster cluster) {
+ StackId stackId = cluster.getCurrentStackVersion();
+ String version = stackId.getStackVersion() + ".1";
+
+ StackDAO stackDAO = injector.getInstance(StackDAO.class);
+ StackEntity stackEntity = stackDAO.find(stackId.getStackName(),
+ stackId.getStackVersion());
+
+ assertNotNull(stackEntity);
+
+ RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(
+ stackId, version);
+
+ if (repositoryVersion == null) {
+ try {
+ repositoryVersion = repositoryVersionDAO.create(stackEntity, version,
+ String.valueOf(System.currentTimeMillis()) + uniqueCounter.incrementAndGet(), "");
+ } catch (Exception ex) {
+ LOG.error("Caught exception", ex);
+ ex.printStackTrace();
+ Assert.fail(MessageFormat.format("Unable to create Repo Version for Stack {0} and version {1}",
+ stackEntity.getStackName() + "-" + stackEntity.getStackVersion(), version));
+ }
+ }
+ return repositoryVersion;
+ }
+
+ /**
* Convenient method to create or to get repository version for given stack.
*
* @param stackId stack object
@@ -623,6 +657,7 @@ public class OrmTestHelper {
String.valueOf(System.currentTimeMillis()) + uniqueCounter.incrementAndGet(), "");
} catch (Exception ex) {
LOG.error("Caught exception", ex);
+ ex.printStackTrace();
Assert.fail(MessageFormat.format("Unable to create Repo Version for Stack {0} and version {1}",
stackEntity.getStackName() + "-" + stackEntity.getStackVersion(), version));
}
[39/50] [abbrv] ambari git commit: AMBARI-21046. UI: Upgrades should
be started using repo_version_ids instead of version strings (alexantonenko)
Posted by jo...@apache.org.
AMBARI-21046. UI: Upgrades should be started using repo_version_ids instead of version strings (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/560b0d19
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/560b0d19
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/560b0d19
Branch: refs/heads/trunk
Commit: 560b0d1946cfd7d26419e995f9138a3a281b6602
Parents: 0f266ed
Author: Alex Antonenko <hi...@gmail.com>
Authored: Wed May 17 19:24:44 2017 +0300
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue May 23 22:54:35 2017 -0400
----------------------------------------------------------------------
.../controllers/main/admin/stack_and_upgrade_controller.js | 7 +++++--
ambari-web/app/utils/ajax/ajax.js | 2 +-
.../main/admin/stack_and_upgrade_controller_test.js | 6 ++++++
3 files changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/560b0d19/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index d6829d9..a676f7429 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -414,7 +414,8 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
if (currentVersion) {
this.set('currentVersion', {
repository_version: currentVersion.get('repositoryVersion.repositoryVersion'),
- repository_name: currentVersion.get('repositoryVersion.displayName')
+ repository_name: currentVersion.get('repositoryVersion.displayName'),
+ id: currentVersion.get('repositoryVersion.id')
});
}
},
@@ -735,6 +736,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
data: {
value: currentVersion.repository_version,
label: currentVersion.repository_name,
+ id: currentVersion.id,
isDowngrade: true,
upgradeType: this.get('upgradeType')
},
@@ -1377,7 +1379,8 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
label: version.get('displayName'),
type: version.get('upgradeType'),
skipComponentFailures: version.get('skipComponentFailures') ? 'true' : 'false',
- skipSCFailures: version.get('skipSCFailures') ? 'true' : 'false'
+ skipSCFailures: version.get('skipSCFailures') ? 'true' : 'false',
+ id: version.get('id')
};
if (App.get('supports.preUpgradeCheck')) {
this.set('requestInProgress', true);
http://git-wip-us.apache.org/repos/asf/ambari/blob/560b0d19/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index bf49b63..929214c 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1712,7 +1712,7 @@ var urls = {
timeout : 600000,
data: JSON.stringify({
"Upgrade": {
- "repository_version": data.value,
+ "repository_version_id": data.id,
"upgrade_type": data.type,
"skip_failures": data.skipComponentFailures,
"skip_service_check_failures": data.skipSCFailures,
http://git-wip-us.apache.org/repos/asf/ambari/blob/560b0d19/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index 81be6af..4585991 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -128,6 +128,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
sinon.stub(App.StackVersion, 'find').returns([Em.Object.create({
state: 'CURRENT',
repositoryVersion: {
+ id: '1',
repositoryVersion: '2.2',
displayName: 'HDP-2.2'
}
@@ -155,6 +156,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
it('currentVersion is corrent', function () {
expect(controller.get('currentVersion')).to.eql({
+ "id": "1",
"repository_version": "2.2",
"repository_name": "HDP-2.2"
});
@@ -389,6 +391,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
describe("#runPreUpgradeCheck()", function() {
it("make ajax call", function() {
controller.runPreUpgradeCheck(Em.Object.create({
+ id: '1',
repositoryVersion: '2.2',
displayName: 'HDP-2.2',
upgradeType: 'ROLLING',
@@ -399,6 +402,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
expect(args[0]).to.exists;
expect(args[0].sender).to.be.eql(controller);
expect(args[0].data).to.be.eql({
+ id: '1',
value: '2.2',
label: 'HDP-2.2',
type: 'ROLLING',
@@ -1126,6 +1130,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
controller.set('upgradeVersion', 'HDP-2.3');
controller.set('upgradeType', 'NON_ROLLING');
controller.startDowngrade(Em.Object.create({
+ id: '1',
repository_version: '2.2',
repository_name: 'HDP-2.2'
}));
@@ -1138,6 +1143,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
it('request-data is valid', function () {
expect(this.callArgs.data).to.eql({
+ id: '1',
value: '2.2',
label: 'HDP-2.2',
isDowngrade: true,
[34/50] [abbrv] ambari git commit: AMBARI-21059. Reduce Dependency on
Cluster Desired Stack ID (ncole)
Posted by jo...@apache.org.
AMBARI-21059. Reduce Dependency on Cluster Desired Stack ID (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a45f5427
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a45f5427
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a45f5427
Branch: refs/heads/trunk
Commit: a45f5427b08fc354e8b54481e7da3d6083112345
Parents: a436eb2
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu May 18 08:57:45 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Tue May 23 15:38:59 2017 -0400
----------------------------------------------------------------------
.../ambari/annotations/ExperimentalFeature.java | 7 +-
.../ambari/server/actionmanager/Stage.java | 4 +-
.../ambari/server/agent/HeartBeatHandler.java | 40 +--
.../ambari/server/agent/HeartbeatMonitor.java | 4 +-
.../ambari/server/agent/HeartbeatProcessor.java | 4 +-
.../server/api/services/AmbariMetaInfo.java | 56 +++-
.../server/checks/AbstractCheckDescriptor.java | 28 +-
.../checks/ComponentsInstallationCheck.java | 3 -
.../checks/HostsMasterMaintenanceCheck.java | 2 +-
.../checks/HostsRepositoryVersionCheck.java | 4 +-
.../server/checks/RangerPasswordCheck.java | 8 +-
.../checks/ServiceCheckValidityCheck.java | 2 +-
.../ambari/server/checks/ServicesUpCheck.java | 3 +-
.../YarnTimelineServerStatePreservingCheck.java | 4 +-
.../controller/AmbariActionExecutionHelper.java | 34 ++-
.../AmbariCustomCommandExecutionHelper.java | 51 +++-
.../controller/AmbariManagementController.java | 3 +-
.../AmbariManagementControllerImpl.java | 263 +++++++++++--------
.../server/controller/KerberosHelperImpl.java | 93 ++++---
.../server/controller/ServiceRequest.java | 17 +-
.../internal/ClientConfigResourceProvider.java | 8 +-
.../ClusterStackVersionResourceProvider.java | 20 +-
.../internal/ComponentResourceProvider.java | 16 +-
.../internal/ServiceResourceProvider.java | 64 +++--
.../internal/StackDefinedPropertyProvider.java | 18 +-
.../internal/UpgradeResourceProvider.java | 2 +-
.../logging/LoggingSearchPropertyProvider.java | 12 +-
.../metrics/timeline/AMSPropertyProvider.java | 9 +-
.../state/DefaultServiceCalculatedState.java | 5 +-
.../state/HBaseServiceCalculatedState.java | 4 +-
.../state/HDFSServiceCalculatedState.java | 4 +-
.../state/HiveServiceCalculatedState.java | 5 +-
.../state/OozieServiceCalculatedState.java | 5 +-
.../state/YARNServiceCalculatedState.java | 5 +-
.../server/metadata/RoleCommandOrder.java | 34 ++-
.../ambari/server/orm/dao/ClusterDAO.java | 2 +-
.../server/orm/dao/RepositoryVersionDAO.java | 14 +
.../orm/entities/RepositoryVersionEntity.java | 2 +
.../upgrades/AutoSkipFailedSummaryAction.java | 10 +-
.../org/apache/ambari/server/state/Cluster.java | 36 +--
.../apache/ambari/server/state/Clusters.java | 9 -
.../ambari/server/state/ConfigFactory.java | 18 ++
.../ambari/server/state/ConfigHelper.java | 175 ++++--------
.../apache/ambari/server/state/ConfigImpl.java | 13 +-
.../server/state/ServiceComponentHost.java | 7 +
.../server/state/ServiceComponentImpl.java | 14 +-
.../apache/ambari/server/state/ServiceImpl.java | 25 +-
.../server/state/cluster/ClusterImpl.java | 19 +-
.../server/state/cluster/ClustersImpl.java | 45 +---
.../state/configgroup/ConfigGroupImpl.java | 2 +-
.../stack/upgrade/ServiceCheckGrouping.java | 3 +-
.../svccomphost/ServiceComponentHostImpl.java | 9 +
.../server/upgrade/AbstractUpgradeCatalog.java | 27 +-
.../server/upgrade/FinalUpgradeCatalog.java | 28 +-
.../server/upgrade/UpgradeCatalog200.java | 11 +-
.../server/upgrade/UpgradeCatalog210.java | 20 +-
.../server/upgrade/UpgradeCatalog212.java | 10 +-
.../server/upgrade/UpgradeCatalog2121.java | 64 +++--
.../server/upgrade/UpgradeCatalog220.java | 174 ++++++------
.../server/upgrade/UpgradeCatalog221.java | 11 +-
.../server/upgrade/UpgradeCatalog222.java | 146 ++++++----
.../server/upgrade/UpgradeCatalog240.java | 42 ++-
.../apache/ambari/server/view/ViewRegistry.java | 27 +-
.../ExecutionCommandWrapperTest.java | 11 +-
.../server/agent/TestHeartbeatHandler.java | 34 +--
.../checks/HostsMasterMaintenanceCheckTest.java | 8 +-
.../server/checks/RangerPasswordCheckTest.java | 15 +-
.../checks/ServiceCheckValidityCheckTest.java | 3 +-
.../server/checks/ServicesUpCheckTest.java | 5 +
.../AmbariManagementControllerImplTest.java | 156 +++++------
.../AmbariManagementControllerTest.java | 58 ++--
.../server/controller/KerberosHelperTest.java | 226 +++-------------
.../ClientConfigResourceProviderTest.java | 10 +-
.../internal/ComponentResourceProviderTest.java | 14 +-
.../internal/HostResourceProviderTest.java | 5 +
.../internal/ServiceResourceProviderTest.java | 3 +
.../StackDefinedPropertyProviderTest.java | 21 +-
.../LoggingSearchPropertyProviderTest.java | 27 +-
.../RestMetricsPropertyProviderTest.java | 14 +
.../timeline/AMSPropertyProviderTest.java | 36 ++-
.../apache/ambari/server/events/EventsTest.java | 1 +
.../HostVersionOutOfSyncListenerTest.java | 3 +
.../server/metadata/RoleCommandOrderTest.java | 64 +++--
.../ambari/server/metadata/RoleGraphTest.java | 23 ++
.../apache/ambari/server/orm/OrmTestHelper.java | 25 +-
.../AutoSkipFailedSummaryActionTest.java | 24 ++
.../ComponentVersionCheckActionTest.java | 5 +
.../server/stageplanner/TestStagePlanner.java | 58 +++-
.../ambari/server/state/ConfigGroupTest.java | 7 +-
.../ambari/server/state/ConfigHelperTest.java | 27 +-
.../server/state/ServiceComponentTest.java | 3 +
.../state/alerts/AlertEventPublisherTest.java | 5 +-
.../state/cluster/ClusterDeadlockTest.java | 3 +
.../server/state/cluster/ClusterImplTest.java | 16 +-
.../state/cluster/ClustersDeadlockTest.java | 2 +
.../server/state/cluster/ClustersTest.java | 69 +----
.../ConcurrentServiceConfigVersionTest.java | 3 +-
...omponentHostConcurrentWriteDeadlockTest.java | 4 +
.../services/RetryUpgradeActionServiceTest.java | 10 +-
.../svccomphost/ServiceComponentHostTest.java | 1 +
.../upgrade/AbstractUpgradeCatalogTest.java | 8 +-
.../server/upgrade/UpgradeCatalog200Test.java | 20 +-
.../server/upgrade/UpgradeCatalog210Test.java | 17 +-
.../server/upgrade/UpgradeCatalog211Test.java | 3 +-
.../server/upgrade/UpgradeCatalog212Test.java | 13 +-
.../server/upgrade/UpgradeCatalog220Test.java | 16 +-
.../server/upgrade/UpgradeCatalog221Test.java | 4 +-
.../server/upgrade/UpgradeCatalog222Test.java | 84 ++++--
.../server/upgrade/UpgradeCatalog240Test.java | 116 +++++---
.../server/upgrade/UpgradeCatalog250Test.java | 36 +--
.../server/upgrade/UpgradeCatalog300Test.java | 17 +-
.../server/upgrade/UpgradeCatalogHelper.java | 5 +-
.../ambari/server/view/ViewRegistryTest.java | 13 +-
.../app/controllers/wizard/step8_controller.js | 13 +-
114 files changed, 1811 insertions(+), 1357 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java b/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
index 1d5ba0e..7532452 100644
--- a/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
+++ b/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
@@ -40,5 +40,10 @@ public enum ExperimentalFeature {
/**
* Used for code that is targeted for patch upgrades
*/
- PATCH_UPGRADES
+ PATCH_UPGRADES,
+
+ /**
+ * For code that is for multi-service
+ */
+ MULTI_SERVICE
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java
index 574afa1..562024b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java
@@ -199,7 +199,9 @@ public class Stage {
stageEntity.setRoleSuccessCriterias(new ArrayList<RoleSuccessCriteriaEntity>());
stageEntity.setClusterHostInfo(clusterHostInfo);
stageEntity.setCommandParamsStage(commandParamsStage);
- stageEntity.setHostParamsStage(hostParamsStage);
+ if (null != hostParamsStage) {
+ stageEntity.setHostParamsStage(hostParamsStage);
+ }
stageEntity.setCommandExecutionType(commandExecutionType);
stageEntity.setStatus(status);
stageEntity.setDisplayStatus(displayStatus);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
index 3601528..0175b44 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
@@ -44,10 +44,9 @@ import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
+import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
-import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.alert.AlertDefinition;
import org.apache.ambari.server.state.alert.AlertDefinitionHash;
import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
@@ -87,9 +86,6 @@ public class HeartBeatHandler {
private HeartbeatProcessor heartbeatProcessor;
@Inject
- private Injector injector;
-
- @Inject
private Configuration config;
@Inject
@@ -506,36 +502,26 @@ public class HeartBeatHandler {
ComponentsResponse response = new ComponentsResponse();
Cluster cluster = clusterFsm.getCluster(clusterName);
- StackId stackId = cluster.getCurrentStackVersion();
- if (stackId == null) {
- throw new AmbariException("Cannot provide stack components map. " +
- "Stack hasn't been selected yet.");
- }
- StackInfo stack = ambariMetaInfo.getStack(stackId.getStackName(),
- stackId.getStackVersion());
- response.setClusterName(clusterName);
- response.setStackName(stackId.getStackName());
- response.setStackVersion(stackId.getStackVersion());
- response.setComponents(getComponentsMap(stack));
+ Map<String, Map<String, String>> componentsMap = new HashMap<>();
- return response;
- }
+ for (org.apache.ambari.server.state.Service service : cluster.getServices().values()) {
+ componentsMap.put(service.getName(), new HashMap<String, String>());
- private Map<String, Map<String, String>> getComponentsMap(StackInfo stack) {
- Map<String, Map<String, String>> result = new HashMap<>();
+ for (ServiceComponent component : service.getServiceComponents().values()) {
+ StackId stackId = component.getDesiredStackId();
- for (ServiceInfo service : stack.getServices()) {
- Map<String, String> components = new HashMap<>();
+ ComponentInfo componentInfo = ambariMetaInfo.getComponent(
+ stackId.getStackName(), stackId.getStackVersion(), service.getName(), component.getName());
- for (ComponentInfo component : service.getComponents()) {
- components.put(component.getName(), component.getCategory());
+ componentsMap.get(service.getName()).put(component.getName(), componentInfo.getCategory());
}
-
- result.put(service.getName(), components);
}
- return result;
+ response.setClusterName(clusterName);
+ response.setComponents(componentsMap);
+
+ return response;
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java
index a77ed75..76111f5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java
@@ -240,7 +240,9 @@ public class HeartbeatMonitor implements Runnable {
ServiceComponentHost sch, Map<String, DesiredConfig> desiredConfigs) throws AmbariException {
String serviceName = sch.getServiceName();
String componentName = sch.getServiceComponentName();
- StackId stackId = cluster.getDesiredStackVersion();
+
+ StackId stackId = sch.getDesiredStackId();
+
ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(),
stackId.getStackVersion(), serviceName);
ComponentInfo componentInfo = ambariMetaInfo.getComponent(
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatProcessor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatProcessor.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatProcessor.java
index 17e1f9c..6e9371c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatProcessor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatProcessor.java
@@ -293,13 +293,13 @@ public class HeartbeatProcessor extends AbstractService{
int slaveCount = 0;
int slavesRunning = 0;
- StackId stackId;
Cluster cluster = clusterFsm.getCluster(clusterName);
- stackId = cluster.getDesiredStackVersion();
List<ServiceComponentHost> scHosts = cluster.getServiceComponentHosts(heartbeat.getHostname());
for (ServiceComponentHost scHost : scHosts) {
+ StackId stackId = scHost.getDesiredStackId();
+
ComponentInfo componentInfo =
ambariMetaInfo.getComponent(stackId.getStackName(),
stackId.getStackVersion(), scHost.getServiceName(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
index c655c62..9d787fc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
@@ -380,6 +380,13 @@ public class AmbariMetaInfo {
return foundDependency;
}
+ /**
+ * Gets repositories that are keyed by operating system type.
+ * @param stackName the stack name
+ * @param version the stack version
+ * @return
+ * @throws AmbariException
+ */
public Map<String, List<RepositoryInfo>> getRepository(String stackName,
String version) throws AmbariException {
StackInfo stack = getStack(stackName, version);
@@ -538,6 +545,18 @@ public class AmbariMetaInfo {
return servicesInfoResult;
}
+ /**
+ * Convenience method to use stack id instead of separate name and version.
+ * @param service
+ * the service business object
+ * @return the service info instance defined from the stack for the business object
+ * @throws AmbariException
+ */
+ public ServiceInfo getService(Service service) throws AmbariException {
+ StackId stackId = service.getDesiredStackId();
+ return getService(stackId.getStackName(), stackId.getStackVersion(), service.getName());
+ }
+
public ServiceInfo getService(String stackName, String version, String serviceName) throws AmbariException {
ServiceInfo service = getStack(stackName, version).getService(serviceName);
@@ -632,6 +651,17 @@ public class AmbariMetaInfo {
return stacks;
}
+ /**
+ * Convenience method to get stack info from a stack id
+ * @param stackId
+ * the stack id
+ * @return the stack info
+ * @throws AmbariException
+ */
+ public StackInfo getStack(StackId stackId) throws AmbariException {
+ return getStack(stackId.getStackName(), stackId.getStackVersion());
+ }
+
public StackInfo getStack(String stackName, String version) throws AmbariException {
StackInfo stackInfoResult = stackManager.getStack(stackName, version);
@@ -1139,22 +1169,12 @@ public class AmbariMetaInfo {
// for every cluster
for (Cluster cluster : clusterMap.values()) {
long clusterId = cluster.getClusterId();
- StackId stackId = cluster.getDesiredStackVersion();
- StackInfo stackInfo = getStack(stackId.getStackName(),
- stackId.getStackVersion());
// creating a mapping between names and service/component for fast lookups
- Collection<ServiceInfo> stackServices = stackInfo.getServices();
+// Collection<ServiceInfo> stackServices = new ArrayList<>();
Map<String, ServiceInfo> stackServiceMap = new HashMap<>();
Map<String, ComponentInfo> stackComponentMap = new HashMap<>();
- for (ServiceInfo stackService : stackServices) {
- stackServiceMap.put(stackService.getName(), stackService);
- List<ComponentInfo> components = stackService.getComponents();
- for (ComponentInfo component : components) {
- stackComponentMap.put(component.getName(), component);
- }
- }
Map<String, Service> clusterServiceMap = cluster.getServices();
Set<String> clusterServiceNames = clusterServiceMap.keySet();
@@ -1162,12 +1182,20 @@ public class AmbariMetaInfo {
// for every service installed in that cluster, get the service metainfo
// and off of that the alert definitions
List<AlertDefinition> stackDefinitions = new ArrayList<>(50);
- for (String clusterServiceName : clusterServiceNames) {
- ServiceInfo stackService = stackServiceMap.get(clusterServiceName);
+
+ for (Service service : cluster.getServices().values()) {
+ ServiceInfo stackService = getService(service.getDesiredStackId().getStackName(),
+ service.getDesiredStackId().getStackVersion(), service.getName());
+
if (null == stackService) {
continue;
}
+ stackServiceMap.put(stackService.getName(), stackService);
+ List<ComponentInfo> components = stackService.getComponents();
+ for (ComponentInfo component : components) {
+ stackComponentMap.put(component.getName(), component);
+ }
// get all alerts defined on the stack for each cluster service
Set<AlertDefinition> serviceDefinitions = getAlertDefinitions(stackService);
@@ -1270,6 +1298,8 @@ public class AmbariMetaInfo {
continue;
}
+ StackId stackId = cluster.getService(serviceName).getDesiredStackId();
+
if (!stackServiceMap.containsKey(serviceName)) {
LOG.info(
"The {} service has been marked as deleted for stack {}, disabling alert {}",
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
index 2fc1787..a0affd0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
@@ -37,6 +37,7 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.RepositoryType;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.stack.PrereqCheckType;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
@@ -232,6 +233,15 @@ public abstract class AbstractCheckDescriptor {
return properties.get(propertyName);
}
+ protected Cluster getCluster(PrereqCheckRequest request) throws AmbariException {
+ String clusterName = request.getClusterName();
+ if (null != clusterName) {
+ return clustersProvider.get().getCluster(clusterName);
+ }
+
+ return null;
+ }
+
/**
* Gets the fail reason
* @param key the failure text key
@@ -257,19 +267,21 @@ public abstract class AbstractCheckDescriptor {
try {
Cluster c = clusters.getCluster(request.getClusterName());
- Map<String, ServiceInfo> services = metaInfo.getServices(
- c.getDesiredStackVersion().getStackName(),
- c.getDesiredStackVersion().getStackVersion());
LinkedHashSet<String> displays = new LinkedHashSet<>();
- for (String name : names) {
- if (services.containsKey(name)) {
- displays.add(services.get(name).getDisplayName());
- } else {
- displays.add(name);
+
+ for (Service service : c.getServices().values()) {
+ if (names.contains(service.getName())) {
+ try {
+ ServiceInfo serviceInfo = metaInfo.getService(service);
+ displays.add(serviceInfo.getDisplayName());
+ } catch (Exception e) {
+ displays.add(service.getName());
+ }
}
}
names = displays;
+
} catch (Exception e) {
LOG.warn("Could not load service info map");
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java
index 70a061c..988fc78 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java
@@ -32,7 +32,6 @@ import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
-import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
@@ -64,8 +63,6 @@ public class ComponentsInstallationCheck extends AbstractCheckDescriptor {
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
Set<String> failedServiceNames = new HashSet<>();
- StackId stackId = cluster.getCurrentStackVersion();
-
// Preq-req check should fail if any service component is in INSTALL_FAILED state
Set<String> installFailedHostComponents = new HashSet<>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
index 1e87319..e5082c9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
@@ -66,7 +66,7 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
- final StackId stackId = cluster.getDesiredStackVersion();
+ final StackId stackId = request.getSourceStackId();
final Set<String> hostsWithMasterComponent = new HashSet<>();
// TODO AMBARI-12698, need to pass the upgrade pack to use in the request, or at least the type.
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
index a4cea31..a66db3c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
@@ -67,7 +67,9 @@ public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
final Map<String, Host> clusterHosts = clustersProvider.get().getHostsForCluster(clusterName);
- final StackId stackId = cluster.getDesiredStackVersion();
+ final StackId stackId = request.getSourceStackId();
+
+
for (Host host : clusterHosts.values()) {
// hosts in MM will produce a warning if they do not have the repo version
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java
index a55a148..4a36be0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java
@@ -32,7 +32,7 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.configuration.ComponentSSLConfiguration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.controller.internal.URLStreamProvider;
-import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
@@ -83,10 +83,10 @@ public class RangerPasswordCheck extends AbstractCheckDescriptor {
return false;
}
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
+ Service service = getCluster(request).getService("RANGER");
- StackId clusterStackId = cluster.getCurrentStackVersion();
- if (clusterStackId.getStackName().equals("HDP")) {
+ StackId stackId = service.getDesiredStackId();
+ if (stackId.getStackName().equals("HDP")) {
String sourceVersion = request.getSourceStackId().getStackVersion();
return VersionUtils.compareVersions(sourceVersion, "2.3.0.0") >= 0;
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
index 4ccdc0a..750b25e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
@@ -116,7 +116,7 @@ public class ServiceCheckValidityCheck extends AbstractCheckDescriptor {
if (service.getMaintenanceState() != MaintenanceState.OFF || !hasAtLeastOneComponentVersionAdvertised(service)) {
continue;
}
- StackId stackId = cluster.getCurrentStackVersion();
+ StackId stackId = service.getDesiredStackId();
boolean isServiceWitNoConfigs = ambariMetaInfo.get().isServiceWithNoConfigs(stackId.getStackName(), stackId.getStackVersion(), service.getName());
if (isServiceWitNoConfigs){
LOG.info(String.format("%s in %s version %s does not have customizable configurations. Skip checking service configuration history.", service.getName(), stackId.getStackName(), stackId.getStackVersion()));
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
index 273bdaa..6b03249 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
@@ -91,10 +91,9 @@ public class ServicesUpCheck extends AbstractCheckDescriptor {
List<String> errorMessages = new ArrayList<>();
Set<String> failedServiceNames = new HashSet<>();
- StackId stackId = cluster.getCurrentStackVersion();
-
for (Map.Entry<String, Service> serviceEntry : cluster.getServices().entrySet()) {
final Service service = serviceEntry.getValue();
+ StackId stackId = service.getDesiredStackId();
// Ignore services like Tez that are clientOnly.
if (service.isClientOnlyService()) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
index d8dba96..ba4b61e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
@@ -82,9 +82,9 @@ public class YarnTimelineServerStatePreservingCheck extends AbstractCheckDescrip
if(minStack.length == 2) {
String minStackName = minStack[0];
String minStackVersion = minStack[1];
- String stackName = cluster.getCurrentStackVersion().getStackName();
+ Service yarnService = cluster.getService("YARN");
+ String stackName = yarnService.getDesiredStackId().getStackName();
if (minStackName.equals(stackName)) {
- Service yarnService = cluster.getService("YARN");
String currentRepositoryVersion = yarnService.getDesiredRepositoryVersion().getVersion();
return VersionUtils.compareVersions(currentRepositoryVersion, minStackVersion) >= 0;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
index 9fb77e8..9977210 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
@@ -54,6 +54,7 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
@@ -146,8 +147,6 @@ public class AmbariActionExecutionHelper {
actionRequest.getClusterName());
}
- StackId stackId = cluster.getCurrentStackVersion();
-
String expectedService = actionDef.getTargetService() == null ? "" : actionDef.getTargetService();
String actualService = resourceFilter == null || resourceFilter.getServiceName() == null ? "" : resourceFilter.getServiceName();
@@ -157,11 +156,14 @@ public class AmbariActionExecutionHelper {
}
targetService = expectedService;
- if (targetService == null || targetService.isEmpty()) {
+ if (StringUtils.isBlank(targetService)) {
targetService = actualService;
}
- if (targetService != null && !targetService.isEmpty()) {
+ if (StringUtils.isNotBlank(targetService)) {
+ Service service = cluster.getService(targetService);
+ StackId stackId = service.getDesiredStackId();
+
ServiceInfo serviceInfo;
try {
serviceInfo = ambariMetaInfo.getService(stackId.getStackName(), stackId.getStackVersion(),
@@ -184,16 +186,20 @@ public class AmbariActionExecutionHelper {
}
targetComponent = expectedComponent;
- if (targetComponent == null || targetComponent.isEmpty()) {
+ if (StringUtils.isBlank(targetComponent)) {
targetComponent = actualComponent;
}
- if (!targetComponent.isEmpty() && targetService.isEmpty()) {
+ if (StringUtils.isNotBlank(targetComponent) && StringUtils.isBlank(targetService)) {
throw new AmbariException("Action " + actionRequest.getActionName() + " targets component " + targetComponent +
" without specifying the target service.");
}
- if (targetComponent != null && !targetComponent.isEmpty()) {
+ if (StringUtils.isNotBlank(targetComponent)) {
+ Service service = cluster.getService(targetService);
+ ServiceComponent component = service.getServiceComponent(targetComponent);
+ StackId stackId = component.getDesiredStackId();
+
ComponentInfo compInfo;
try {
compInfo = ambariMetaInfo.getComponent(stackId.getStackName(), stackId.getStackVersion(),
@@ -281,13 +287,16 @@ public class AmbariActionExecutionHelper {
}
if (null != cluster) {
- StackId stackId = cluster.getCurrentStackVersion();
+// StackId stackId = cluster.getCurrentStackVersion();
if (serviceName != null && !serviceName.isEmpty()) {
if (componentName != null && !componentName.isEmpty()) {
- Map<String, ServiceComponentHost> componentHosts =
- cluster.getService(serviceName)
- .getServiceComponent(componentName).getServiceComponentHosts();
+ Service service = cluster.getService(serviceName);
+ ServiceComponent component = service.getServiceComponent(componentName);
+ StackId stackId = component.getDesiredStackId();
+
+ Map<String, ServiceComponentHost> componentHosts = component.getServiceComponentHosts();
candidateHosts.addAll(componentHosts.keySet());
+
try {
componentInfo = ambariMetaInfo.getComponent(stackId.getStackName(),
stackId.getStackVersion(), serviceName, componentName);
@@ -297,8 +306,7 @@ public class AmbariActionExecutionHelper {
}
} else {
for (String component : cluster.getService(serviceName).getServiceComponents().keySet()) {
- Map<String, ServiceComponentHost> componentHosts =
- cluster.getService(serviceName)
+ Map<String, ServiceComponentHost> componentHosts = cluster.getService(serviceName)
.getServiceComponent(component).getServiceComponentHosts();
candidateHosts.addAll(componentHosts.keySet());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/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 397c1c2..31a34fe 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
@@ -195,12 +195,15 @@ public class AmbariCustomCommandExecutionHelper {
String serviceName, String componentName, String commandName)
throws AmbariException {
- Cluster cluster = clusters.getCluster(clusterName);
- StackId stackId = cluster.getDesiredStackVersion();
-
if (componentName == null) {
return false;
}
+
+ Cluster cluster = clusters.getCluster(clusterName);
+ Service service = cluster.getService(serviceName);
+ ServiceComponent component = service.getServiceComponent(componentName);
+ StackId stackId = component.getDesiredStackId();
+
ComponentInfo componentInfo = ambariMetaInfo.getComponent(
stackId.getStackName(), stackId.getStackVersion(),
serviceName, componentName);
@@ -320,12 +323,12 @@ public class AmbariCustomCommandExecutionHelper {
throw new AmbariException(message);
}
- StackId stackId = cluster.getDesiredStackVersion();
+ Service service = cluster.getService(serviceName);
+ StackId stackId = service.getDesiredStackId();
+
AmbariMetaInfo ambariMetaInfo = managementController.getAmbariMetaInfo();
- ServiceInfo serviceInfo = ambariMetaInfo.getService(
- stackId.getStackName(), stackId.getStackVersion(), serviceName);
- StackInfo stackInfo = ambariMetaInfo.getStack
- (stackId.getStackName(), stackId.getStackVersion());
+ ServiceInfo serviceInfo = ambariMetaInfo.getService(service);
+ StackInfo stackInfo = ambariMetaInfo.getStack(stackId);
CustomCommandDefinition customCommandDefinition = null;
ComponentInfo ci = serviceInfo.getComponentByName(componentName);
@@ -691,7 +694,13 @@ public class AmbariCustomCommandExecutionHelper {
String clusterName = stage.getClusterName();
Cluster cluster = clusters.getCluster(clusterName);
- StackId stackId = cluster.getDesiredStackVersion();
+ Service service = cluster.getService(serviceName);
+ ServiceComponent component = null;
+ if (null != componentName) {
+ component = service.getServiceComponent(componentName);
+ }
+ StackId stackId = (null != component) ? component.getDesiredStackId() : service.getDesiredStackId();
+
AmbariMetaInfo ambariMetaInfo = managementController.getAmbariMetaInfo();
ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(),
stackId.getStackVersion(), serviceName);
@@ -1252,7 +1261,7 @@ public class AmbariCustomCommandExecutionHelper {
}
final CommandRepository command = new CommandRepository();
- StackId stackId = cluster.getDesiredStackVersion();
+ StackId stackId = component.getDesiredStackId();
command.setRepositories(repoInfos);
command.setStackName(stackId.getStackName());
@@ -1310,7 +1319,7 @@ public class AmbariCustomCommandExecutionHelper {
String hostOsFamily = host.getOsFamily();
String hostName = host.getHostName();
- StackId stackId = cluster.getDesiredStackVersion();
+ StackId stackId = component.getDesiredStackId();
Map<String, List<RepositoryInfo>> repos = ambariMetaInfo.getRepository(
stackId.getStackName(), stackId.getStackVersion());
@@ -1409,6 +1418,10 @@ public class AmbariCustomCommandExecutionHelper {
}
if (serviceName != null && componentName != null && null != stackId) {
+ Service service = cluster.getService(serviceName);
+ ServiceComponent component = service.getServiceComponent(componentName);
+ stackId = component.getDesiredStackId();
+
ComponentInfo componentInfo = ambariMetaInfo.getComponent(
stackId.getStackName(), stackId.getStackVersion(),
serviceName, componentName);
@@ -1448,8 +1461,8 @@ public class AmbariCustomCommandExecutionHelper {
}
Map<String, String> createDefaultHostParams(Cluster cluster, RepositoryVersionEntity repositoryVersion) throws AmbariException {
- StackId stackId = cluster.getDesiredStackVersion();
- if (null == stackId && null != repositoryVersion) {
+ StackId stackId = null;
+ if (null != repositoryVersion) {
stackId = repositoryVersion.getStackId();
}
@@ -1482,6 +1495,7 @@ public class AmbariCustomCommandExecutionHelper {
for (Map.Entry<String, String> dbConnectorName : configs.getDatabaseConnectorNames().entrySet()) {
hostLevelParams.put(dbConnectorName.getKey(), dbConnectorName.getValue());
}
+
for (Map.Entry<String, String> previousDBConnectorName : configs.getPreviousDatabaseConnectorNames().entrySet()) {
hostLevelParams.put(previousDBConnectorName.getKey(), previousDBConnectorName.getValue());
}
@@ -1501,9 +1515,18 @@ public class AmbariCustomCommandExecutionHelper {
*/
public boolean isTopologyRefreshRequired(String actionName, String clusterName, String serviceName)
throws AmbariException {
+
if (actionName.equals(START_COMMAND_NAME) || actionName.equals(RESTART_COMMAND_NAME)) {
Cluster cluster = clusters.getCluster(clusterName);
- StackId stackId = cluster.getDesiredStackVersion();
+ StackId stackId = null;
+ try {
+ Service service = cluster.getService(serviceName);
+ stackId = service.getDesiredStackId();
+ } catch (AmbariException e) {
+ LOG.debug("Could not load service {}, skipping topology check", serviceName);
+ stackId = cluster.getDesiredStackVersion();
+ }
+
AmbariMetaInfo ambariMetaInfo = managementController.getAmbariMetaInfo();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
index 96bab85..fe01a0d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
@@ -57,6 +57,7 @@ import org.apache.ambari.server.state.ServiceComponentFactory;
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.State;
import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
import org.apache.ambari.server.state.quicklinksprofile.QuickLinkVisibilityController;
@@ -114,7 +115,7 @@ public interface AmbariManagementController {
* TODO move this method to Cluster? doesn't seem to be on its place
* @return config created
*/
- Config createConfig(Cluster cluster, String type, Map<String, String> properties,
+ Config createConfig(StackId stackId, Cluster cluster, String type, Map<String, String> properties,
String versionTag, Map<String, Map<String, String>> propertiesAttributes);
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/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 e373f81..faa9c54 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
@@ -199,6 +199,7 @@ import org.apache.ambari.server.utils.SecretReference;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.http.client.utils.URIBuilder;
@@ -696,27 +697,25 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
for (ServiceComponentHostRequest request : requests) {
Cluster cluster = clusters.getCluster(request.getClusterName());
- StackId stackId = cluster.getCurrentStackVersion();
- Collection<String> monitoringServices = ambariMetaInfo.getMonitoringServiceNames(
- stackId.getStackName(), stackId.getStackVersion());
+ for (Service service : cluster.getServices().values()) {
+ ServiceInfo serviceInfo = ambariMetaInfo.getService(service);
- for (String serviceName : monitoringServices) {
- if (cluster.getServices().containsKey(serviceName)) {
- Service service = cluster.getService(serviceName);
-
- for (ServiceComponent sc : service.getServiceComponents().values()) {
- if (sc.isMasterComponent()) {
- for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
- sch.setRestartRequired(true);
- }
- continue;
- }
+ if (!BooleanUtils.toBoolean(serviceInfo.isMonitoringService())) {
+ continue;
+ }
- String hostname = request.getHostname();
- if (sc.getServiceComponentHosts().containsKey(hostname)) {
- ServiceComponentHost sch = sc.getServiceComponentHost(hostname);
+ for (ServiceComponent sc : service.getServiceComponents().values()) {
+ if (sc.isMasterComponent()) {
+ for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
sch.setRestartRequired(true);
}
+ continue;
+ }
+
+ String hostname = request.getHostname();
+ if (sc.getServiceComponentHosts().containsKey(hostname)) {
+ ServiceComponentHost sch = sc.getServiceComponentHost(hostname);
+ sch.setRestartRequired(true);
}
}
}
@@ -725,8 +724,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
private void setRestartRequiredServices(
Service service, String componentName) throws AmbariException {
- Cluster cluster = service.getCluster();
- StackId stackId = cluster.getCurrentStackVersion();
+
+ StackId stackId = service.getDesiredStackId();
if (service.getServiceComponent(componentName).isClientComponent()) {
return;
}
@@ -751,22 +750,21 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
@Override
public void registerRackChange(String clusterName) throws AmbariException {
Cluster cluster = clusters.getCluster(clusterName);
- StackId stackId = cluster.getCurrentStackVersion();
- Set<String> rackSensitiveServices =
- ambariMetaInfo.getRackSensitiveServicesNames(stackId.getStackName(), stackId.getStackVersion());
+ for (Service service : cluster.getServices().values()) {
+ ServiceInfo serviceInfo = ambariMetaInfo.getService(service);
- Map<String, Service> services = cluster.getServices();
+ if (!BooleanUtils.toBoolean(serviceInfo.isRestartRequiredAfterRackChange())) {
+ continue;
+ }
- for (Service service : services.values()) {
- if(rackSensitiveServices.contains(service.getName())) {
- Map<String, ServiceComponent> serviceComponents = service.getServiceComponents();
- for (ServiceComponent serviceComponent : serviceComponents.values()) {
- Map<String, ServiceComponentHost> schMap = serviceComponent.getServiceComponentHosts();
- for (Entry<String, ServiceComponentHost> sch : schMap.entrySet()) {
- ServiceComponentHost serviceComponentHost = sch.getValue();
- serviceComponentHost.setRestartRequired(true);
- }
+ Map<String, ServiceComponent> serviceComponents = service.getServiceComponents();
+
+ for (ServiceComponent serviceComponent : serviceComponents.values()) {
+ Map<String, ServiceComponentHost> schMap = serviceComponent.getServiceComponentHosts();
+ for (Entry<String, ServiceComponentHost> sch : schMap.entrySet()) {
+ ServiceComponentHost serviceComponentHost = sch.getValue();
+ serviceComponentHost.setRestartRequired(true);
}
}
}
@@ -895,13 +893,24 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
Map<String, Map<String, String>> propertiesAttributes = new HashMap<>();
- StackId currentStackId = cluster.getCurrentStackVersion();
- StackInfo currentStackInfo = ambariMetaInfo.getStack(currentStackId.getStackName(), currentStackId.getStackVersion());
- Map<String, Map<String, String>> defaultConfigAttributes = currentStackInfo.getDefaultConfigAttributesForConfigType(configType);
+ Set<StackId> visitedStacks = new HashSet<>();
+
+ for (Service clusterService : cluster.getServices().values()) {
+ StackId stackId = clusterService.getDesiredStackId();
+ StackInfo stackInfo = ambariMetaInfo.getStack(clusterService.getDesiredStackId());
- if(defaultConfigAttributes != null){
- ConfigHelper.mergeConfigAttributes(propertiesAttributes, defaultConfigAttributes);
+ if (visitedStacks.contains(stackId)) {
+ continue;
+ }
+
+ Map<String, Map<String, String>> defaultConfigAttributes = stackInfo.getDefaultConfigAttributesForConfigType(configType);
+ if (null != defaultConfigAttributes) {
+ ConfigHelper.mergeConfigAttributes(propertiesAttributes, defaultConfigAttributes);
+ }
+
+ visitedStacks.add(stackId);
}
+
// overwrite default attributes with request attributes
if(requestPropertiesAttributes != null){
ConfigHelper.mergeConfigAttributes(propertiesAttributes, requestPropertiesAttributes);
@@ -913,7 +922,15 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
request.getType()));
}
- Config config = createConfig(cluster, request.getType(), requestProperties,
+ StackId stackId = null;
+ if (null != service) {
+ Service svc = cluster.getService(service);
+ stackId = svc.getDesiredStackId();
+ } else {
+ stackId = cluster.getDesiredStackVersion();
+ }
+
+ Config config = createConfig(stackId, cluster, request.getType(), requestProperties,
request.getVersionTag(), propertiesAttributes);
LOG.info(MessageFormat.format("Creating configuration with tag ''{0}'' to cluster ''{1}'' for configuration type {2}",
@@ -925,10 +942,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
@Override
- public Config createConfig(Cluster cluster, String type, Map<String, String> properties,
+ public Config createConfig(StackId stackId, Cluster cluster, String type, Map<String, String> properties,
String versionTag, Map<String, Map<String, String>> propertiesAttributes) {
- Config config = configFactory.createNew(cluster, type, versionTag, properties,
+ Config config = configFactory.createNew(stackId, cluster, type, versionTag, properties,
propertiesAttributes);
cluster.addConfig(config);
@@ -1091,13 +1108,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
Map<String, Cluster> allClusters = clusters.getClusters();
for (Cluster c : allClusters.values()) {
- if (request.getStackVersion() != null) {
- if (!request.getStackVersion().equals(
- c.getDesiredStackVersion().getStackId())) {
- // skip non matching stack versions
- continue;
- }
- }
// TODO: Uncomment this when the UI doesn't require view access for View-only users.
// If the user is authorized to view information about this cluster, add it to the response
@@ -1154,20 +1164,13 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
if (request.getComponentName() != null) {
- if (request.getServiceName() == null
- || request.getServiceName().isEmpty()) {
- StackId stackId = cluster.getDesiredStackVersion();
- String serviceName =
- ambariMetaInfo.getComponentToService(stackId.getStackName(),
- stackId.getStackVersion(), request.getComponentName());
- if (LOG.isDebugEnabled()) {
- LOG.debug("Looking up service name for component"
- + ", componentName=" + request.getComponentName()
- + ", serviceName=" + serviceName
- + ", stackInfo=" + stackId.getStackId());
- }
- if (serviceName == null
- || serviceName.isEmpty()) {
+ if (StringUtils.isBlank(request.getServiceName())) {
+
+ // !!! FIXME the assumption that a component is unique across all stacks is a ticking
+ // time bomb. Blueprints are making this assumption.
+ String serviceName = findServiceName(cluster, request.getComponentName());
+
+ if (StringUtils.isBlank(serviceName)) {
LOG.error("Unable to find service for component {}", request.getComponentName());
throw new ServiceComponentHostNotFoundException(
cluster.getClusterName(), null, request.getComponentName(), request.getHostname());
@@ -2194,7 +2197,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
HostEntity hostEntity = host.getHostEntity();
Map<String, String> hostAttributes = gson.fromJson(hostEntity.getHostAttributes(), hostAttributesType);
String osFamily = host.getOSFamilyFromHostAttributes(hostAttributes);
- StackId stackId = cluster.getDesiredStackVersion();
+
+ StackId stackId = scHost.getServiceComponent().getDesiredStackId();
+
ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(),
stackId.getStackVersion(), serviceName);
ComponentInfo componentInfo = ambariMetaInfo.getComponent(
@@ -2593,12 +2598,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
Map<String, Set<String>> clusterHostInfo = StageUtils.getClusterHostInfo(cluster);
String clusterHostInfoJson = StageUtils.getGson().toJson(clusterHostInfo);
- String hostParamsJson = StageUtils.getGson().toJson(
- customCommandExecutionHelper.createDefaultHostParams(cluster, null));
Stage stage = createNewStage(requestStages.getLastStageId(), cluster,
requestStages.getId(), requestProperties.get(REQUEST_CONTEXT_PROPERTY),
- clusterHostInfoJson, "{}", hostParamsJson);
+ clusterHostInfoJson, "{}", null);
boolean skipFailure = false;
if (requestProperties.containsKey(Setting.SETTING_NAME_SKIP_FAILURE) && requestProperties.get(Setting.SETTING_NAME_SKIP_FAILURE).equalsIgnoreCase("true")) {
skipFailure = true;
@@ -2711,6 +2714,13 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
Service service = cluster.getService(scHost.getServiceName());
ServiceComponent serviceComponent = service.getServiceComponent(compName);
+ if (StringUtils.isBlank(stage.getHostParamsStage())) {
+ RepositoryVersionEntity repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
+ stage.setHostParamsStage(StageUtils.getGson().toJson(
+ customCommandExecutionHelper.createDefaultHostParams(cluster, repositoryVersion)));
+ }
+
+
// Do not create role command for hosts that are not responding
if (scHost.getHostState().equals(HostState.HEARTBEAT_LOST)) {
LOG.info("Command is not created for servicecomponenthost "
@@ -3290,24 +3300,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
@Override
public String findServiceName(Cluster cluster, String componentName) throws AmbariException {
- StackId stackId = cluster.getDesiredStackVersion();
- String serviceName =
- ambariMetaInfo.getComponentToService(stackId.getStackName(),
- stackId.getStackVersion(), componentName);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Looking up service name for component"
- + ", componentName=" + componentName
- + ", serviceName=" + serviceName);
- }
-
- if (serviceName == null
- || serviceName.isEmpty()) {
- throw new AmbariException("Could not find service for component"
- + ", componentName=" + componentName
- + ", clusterName=" + cluster.getClusterName()
- + ", stackInfo=" + stackId.getStackId());
- }
- return serviceName;
+ return cluster.getServiceByComponentName(componentName).getName();
}
/**
@@ -3991,13 +3984,51 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
RepositoryVersionEntity desiredRepositoryVersion = null;
RequestOperationLevel operationLevel = actionExecContext.getOperationLevel();
- if (null != operationLevel && null != operationLevel.getServiceName()) {
+ if (null != operationLevel && StringUtils.isNotBlank(operationLevel.getServiceName())) {
Service service = cluster.getService(operationLevel.getServiceName());
if (null != service) {
desiredRepositoryVersion = service.getDesiredRepositoryVersion();
}
}
+ if (null == desiredRepositoryVersion && CollectionUtils.isNotEmpty(actionExecContext.getResourceFilters())) {
+ Set<RepositoryVersionEntity> versions = new HashSet<>();
+
+ for (RequestResourceFilter filter : actionExecContext.getResourceFilters()) {
+ RepositoryVersionEntity repoVersion = null;
+
+ if (StringUtils.isNotBlank(filter.getServiceName())) {
+ Service service = cluster.getService(filter.getServiceName());
+
+ if (StringUtils.isNotBlank(filter.getComponentName())) {
+ ServiceComponent serviceComponent = service.getServiceComponent(filter.getComponentName());
+
+ repoVersion = serviceComponent.getDesiredRepositoryVersion();
+ }
+
+ if (null == repoVersion) {
+ repoVersion = service.getDesiredRepositoryVersion();
+ }
+ }
+
+ if (null != repoVersion) {
+ versions.add(repoVersion);
+ }
+ }
+
+ if (1 == versions.size()) {
+ desiredRepositoryVersion = versions.iterator().next();
+ } else if (versions.size() > 1) {
+ Set<String> errors = new HashSet<>();
+ for (RepositoryVersionEntity version : versions) {
+ errors.add(String.format("%s/%s", version.getStackId(), version.getVersion()));
+ }
+ throw new IllegalArgumentException(String.format("More than one repository is resolved with this Action: %s",
+ StringUtils.join(errors, ';')));
+ }
+ }
+
+
ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext,
cluster, desiredRepositoryVersion);
@@ -5013,52 +5044,52 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
@SuppressWarnings("unchecked")
@Override
public void initializeWidgetsAndLayouts(Cluster cluster, Service service) throws AmbariException {
- StackId stackId = cluster.getDesiredStackVersion();
Type widgetLayoutType = new TypeToken<Map<String, List<WidgetLayout>>>(){}.getType();
- try {
- Map<String, Object> widgetDescriptor = null;
- StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
- if (service != null) {
- // Service widgets
- ServiceInfo serviceInfo = stackInfo.getService(service.getName());
- File widgetDescriptorFile = serviceInfo.getWidgetsDescriptorFile();
- if (widgetDescriptorFile != null && widgetDescriptorFile.exists()) {
- try {
- widgetDescriptor = gson.fromJson(new FileReader(widgetDescriptorFile), widgetLayoutType);
- } catch (Exception ex) {
- String msg = "Error loading widgets from file: " + widgetDescriptorFile;
- LOG.error(msg, ex);
- throw new AmbariException(msg);
- }
- }
- } else {
- // Cluster level widgets
+ Set<File> widgetDescriptorFiles = new HashSet<>();
+
+ if (null != service) {
+ ServiceInfo serviceInfo = ambariMetaInfo.getService(service);
+ File widgetDescriptorFile = serviceInfo.getWidgetsDescriptorFile();
+ if (widgetDescriptorFile != null && widgetDescriptorFile.exists()) {
+ widgetDescriptorFiles.add(widgetDescriptorFile);
+ }
+ } else {
+ Set<StackId> stackIds = new HashSet<>();
+
+ for (Service svc : cluster.getServices().values()) {
+ stackIds.add(svc.getDesiredStackId());
+ }
+
+ for (StackId stackId : stackIds) {
+ StackInfo stackInfo = ambariMetaInfo.getStack(stackId);
+
String widgetDescriptorFileLocation = stackInfo.getWidgetsDescriptorFileLocation();
if (widgetDescriptorFileLocation != null) {
File widgetDescriptorFile = new File(widgetDescriptorFileLocation);
if (widgetDescriptorFile.exists()) {
- try {
- widgetDescriptor = gson.fromJson(new FileReader(widgetDescriptorFile), widgetLayoutType);
- } catch (Exception ex) {
- String msg = "Error loading widgets from file: " + widgetDescriptorFile;
- LOG.error(msg, ex);
- throw new AmbariException(msg);
- }
+ widgetDescriptorFiles.add(widgetDescriptorFile);
}
}
}
- if (widgetDescriptor != null) {
- LOG.debug("Loaded widget descriptor: " + widgetDescriptor);
+ }
+
+ for (File widgetDescriptorFile : widgetDescriptorFiles) {
+ Map<String, Object> widgetDescriptor = null;
+
+ try {
+ widgetDescriptor = gson.fromJson(new FileReader(widgetDescriptorFile), widgetLayoutType);
+
for (Object artifact : widgetDescriptor.values()) {
List<WidgetLayout> widgetLayouts = (List<WidgetLayout>) artifact;
createWidgetsAndLayouts(cluster, widgetLayouts);
}
+
+ } catch (Exception ex) {
+ String msg = "Error loading widgets from file: " + widgetDescriptorFile;
+ LOG.error(msg, ex);
+ throw new AmbariException(msg);
}
- } catch (Exception e) {
- throw new AmbariException("Error creating stack widget artifacts. " +
- (service != null ? "Service: " + service.getName() + ", " : "") +
- "Cluster: " + cluster.getClusterName(), e);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
index 8a5731b..55b5811 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
@@ -426,8 +426,6 @@ public class KerberosHelperImpl implements KerberosHelper {
Map<String, Set<String>> propertiesToRemove,
boolean kerberosEnabled) throws AmbariException {
- StackId stackVersion = cluster.getCurrentStackVersion();
-
List<String> hostNames = new ArrayList<>();
Collection<Host> hosts = cluster.getHosts();
@@ -488,44 +486,58 @@ public class KerberosHelperImpl implements KerberosHelper {
}
}
- StackAdvisorRequest request = StackAdvisorRequest.StackAdvisorRequestBuilder
- .forStack(stackVersion.getStackName(), stackVersion.getStackVersion())
- .forServices(new ArrayList<>(services))
- .forHosts(hostNames)
- .withComponentHostsMap(cluster.getServiceComponentHostMap(null, services))
- .withConfigurations(requestConfigurations)
- .ofType(StackAdvisorRequest.StackAdvisorRequestType.CONFIGURATIONS)
- .build();
+ Set<StackId> visitedStacks = new HashSet<>();
- try {
- RecommendationResponse response = stackAdvisorHelper.recommend(request);
-
- RecommendationResponse.Recommendation recommendation = (response == null) ? null : response.getRecommendations();
- RecommendationResponse.Blueprint blueprint = (recommendation == null) ? null : recommendation.getBlueprint();
- Map<String, RecommendationResponse.BlueprintConfigurations> configurations = (blueprint == null) ? null : blueprint.getConfigurations();
-
- if (configurations != null) {
- for (Map.Entry<String, RecommendationResponse.BlueprintConfigurations> configuration : configurations.entrySet()) {
- String configType = configuration.getKey();
- Map<String, String> recommendedConfigProperties = configuration.getValue().getProperties();
- Map<String, ValueAttributesInfo> recommendedConfigPropertyAttributes = configuration.getValue().getPropertyAttributes();
- Map<String, String> existingConfigProperties = (existingConfigurations == null) ? null : existingConfigurations.get(configType);
- Map<String, String> kerberosConfigProperties = kerberosConfigurations.get(configType);
- Set<String> ignoreProperties = (propertiesToIgnore == null) ? null : propertiesToIgnore.get(configType);
-
- addRecommendedPropertiesForConfigType(kerberosConfigurations, configType, recommendedConfigProperties,
- existingConfigProperties, kerberosConfigProperties, ignoreProperties);
-
- if (recommendedConfigPropertyAttributes != null) {
- removeRecommendedPropertiesForConfigType(configType, recommendedConfigPropertyAttributes,
- existingConfigProperties, kerberosConfigurations, ignoreProperties, propertiesToRemove);
+ for (String serviceName : services) {
+ Service service = cluster.getService(serviceName);
+ StackId stackId = service.getDesiredStackId();
+
+ if (visitedStacks.contains(stackId)) {
+ continue;
+ }
+
+ StackAdvisorRequest request = StackAdvisorRequest.StackAdvisorRequestBuilder
+ .forStack(stackId.getStackName(), stackId.getStackVersion())
+ .forServices(new ArrayList<>(services))
+ .forHosts(hostNames)
+ .withComponentHostsMap(cluster.getServiceComponentHostMap(null, services))
+ .withConfigurations(requestConfigurations)
+ .ofType(StackAdvisorRequest.StackAdvisorRequestType.CONFIGURATIONS)
+ .build();
+
+ try {
+ RecommendationResponse response = stackAdvisorHelper.recommend(request);
+
+ RecommendationResponse.Recommendation recommendation = (response == null) ? null : response.getRecommendations();
+ RecommendationResponse.Blueprint blueprint = (recommendation == null) ? null : recommendation.getBlueprint();
+ Map<String, RecommendationResponse.BlueprintConfigurations> configurations = (blueprint == null) ? null : blueprint.getConfigurations();
+
+ if (configurations != null) {
+ for (Map.Entry<String, RecommendationResponse.BlueprintConfigurations> configuration : configurations.entrySet()) {
+ String configType = configuration.getKey();
+ Map<String, String> recommendedConfigProperties = configuration.getValue().getProperties();
+ Map<String, ValueAttributesInfo> recommendedConfigPropertyAttributes = configuration.getValue().getPropertyAttributes();
+ Map<String, String> existingConfigProperties = (existingConfigurations == null) ? null : existingConfigurations.get(configType);
+ Map<String, String> kerberosConfigProperties = kerberosConfigurations.get(configType);
+ Set<String> ignoreProperties = (propertiesToIgnore == null) ? null : propertiesToIgnore.get(configType);
+
+ addRecommendedPropertiesForConfigType(kerberosConfigurations, configType, recommendedConfigProperties,
+ existingConfigProperties, kerberosConfigProperties, ignoreProperties);
+
+ if (recommendedConfigPropertyAttributes != null) {
+ removeRecommendedPropertiesForConfigType(configType, recommendedConfigPropertyAttributes,
+ existingConfigProperties, kerberosConfigurations, ignoreProperties, propertiesToRemove);
+ }
}
}
+
+ } catch (Exception e) {
+ throw new AmbariException(e.getMessage(), e);
}
- } catch (Exception e) {
- throw new AmbariException(e.getMessage(), e);
+ visitedStacks.add(stackId);
}
+
}
return kerberosConfigurations;
@@ -2559,7 +2571,18 @@ public class KerberosHelperImpl implements KerberosHelper {
* @throws AmbariException if an error occurs while retrieving the Kerberos descriptor
*/
private KerberosDescriptor getKerberosDescriptorFromStack(Cluster cluster) throws AmbariException {
- StackId stackId = cluster.getCurrentStackVersion();
+ // !!! FIXME in a per-service view, what does this become?
+ Set<StackId> stackIds = new HashSet<>();
+
+ for (Service service : cluster.getServices().values()) {
+ stackIds.add(service.getDesiredStackId());
+ }
+
+ if (1 != stackIds.size()) {
+ throw new AmbariException("Services are deployed from multiple stacks and cannot determine a unique one.");
+ }
+
+ StackId stackId = stackIds.iterator().next();
// -------------------------------
// Get the default Kerberos descriptor from the stack, which is the same as the value from
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java
index 66c1a93..7a5abbb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java
@@ -17,7 +17,7 @@
*/
package org.apache.ambari.server.controller;
-
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
public class ServiceRequest {
@@ -30,6 +30,10 @@ public class ServiceRequest {
private String desiredStack;
private String desiredRepositoryVersion;
+ /**
+ * Short-lived object that gets set while validating a request
+ */
+ private RepositoryVersionEntity resolvedRepository;
public ServiceRequest(String clusterName, String serviceName, String desiredStack,
String desiredRepositoryVersion, String desiredState) {
@@ -154,4 +158,15 @@ public class ServiceRequest {
.append(", credentialStoreSupported=").append(credentialStoreSupported);
return sb.toString();
}
+
+ /**
+ * @param repositoryVersion
+ */
+ public void setResolvedRepository(RepositoryVersionEntity repositoryVersion) {
+ resolvedRepository = repositoryVersion;
+ }
+
+ public RepositoryVersionEntity getResolvedRepository() {
+ return resolvedRepository;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
index 4ad01a5..846ce09 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
@@ -89,6 +89,8 @@ import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.PropertyInfo.PropertyType;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.ServiceOsSpecific;
import org.apache.ambari.server.state.StackId;
@@ -224,15 +226,19 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv
try {
cluster = clusters.getCluster(response.getClusterName());
- StackId stackId = cluster.getCurrentStackVersion();
String serviceName = response.getServiceName();
String componentName = response.getComponentName();
String hostName = response.getHostname();
ComponentInfo componentInfo = null;
String packageFolder = null;
+ Service service = cluster.getService(serviceName);
+ ServiceComponent component = service.getServiceComponent(componentName);
+ StackId stackId = component.getDesiredStackId();
+
componentInfo = managementController.getAmbariMetaInfo().
getComponent(stackId.getStackName(), stackId.getStackVersion(), serviceName, componentName);
+
packageFolder = managementController.getAmbariMetaInfo().
getService(stackId.getStackName(), stackId.getStackVersion(), serviceName).getServicePackageFolder();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index 6447888..14c9501 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -70,6 +70,7 @@ import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.RepositoryType;
import org.apache.ambari.server.state.RepositoryVersionState;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
@@ -217,7 +218,6 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
Long id = Long.parseLong(propertyMap.get(CLUSTER_STACK_VERSION_ID_PROPERTY_ID).toString());
requestedEntities.add(id);
} else {
- cluster.getCurrentStackVersion();
List<RepositoryVersionEntity> entities = repositoryVersionDAO.findAll();
for (RepositoryVersionEntity entity : entities) {
@@ -327,21 +327,31 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
cluster.getClusterName(), entity.getDirection().getText(false)));
}
- final StackId stackId;
+ Set<StackId> stackIds = new HashSet<>();
if (propertyMap.containsKey(CLUSTER_STACK_VERSION_STACK_PROPERTY_ID) &&
propertyMap.containsKey(CLUSTER_STACK_VERSION_VERSION_PROPERTY_ID)) {
stackName = (String) propertyMap.get(CLUSTER_STACK_VERSION_STACK_PROPERTY_ID);
stackVersion = (String) propertyMap.get(CLUSTER_STACK_VERSION_VERSION_PROPERTY_ID);
- stackId = new StackId(stackName, stackVersion);
+ StackId stackId = new StackId(stackName, stackVersion);
if (! ami.isSupportedStack(stackName, stackVersion)) {
throw new NoSuchParentResourceException(String.format("Stack %s is not supported",
stackId));
}
+ stackIds.add(stackId);
} else { // Using stack that is current for cluster
- StackId currentStackVersion = cluster.getCurrentStackVersion();
- stackId = currentStackVersion;
+ for (Service service : cluster.getServices().values()) {
+ stackIds.add(service.getDesiredStackId());
+ }
+ }
+
+ if (stackIds.size() > 1) {
+ throw new SystemException("Could not determine stack to add out of " + StringUtils.join(stackIds, ','));
}
+ StackId stackId = stackIds.iterator().next();
+ stackName = stackId.getStackName();
+ stackVersion = stackId.getStackVersion();
+
RepositoryVersionEntity repoVersionEntity = repositoryVersionDAO.findByStackAndVersion(
stackId, desiredRepoVersion);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
index 24ef41a..026ccb9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
@@ -333,6 +333,7 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
if (!componentNames.containsKey(request.getClusterName())) {
componentNames.put(request.getClusterName(), new HashMap<String, Set<String>>());
}
+
Map<String, Set<String>> serviceComponents = componentNames.get(request.getClusterName());
if (!serviceComponents.containsKey(request.getServiceName())) {
serviceComponents.put(request.getServiceName(), new HashSet<String>());
@@ -449,7 +450,6 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
Set<ServiceComponentResponse> response = new HashSet<>();
String category = null;
- StackId stackId = cluster.getDesiredStackVersion();
if (request.getComponentName() != null) {
setServiceNameIfAbsent(request, cluster, ambariMetaInfo);
@@ -458,6 +458,8 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
ServiceComponent sc = s.getServiceComponent(request.getComponentName());
ServiceComponentResponse serviceComponentResponse = sc.convertToResponse();
+ StackId stackId = sc.getDesiredStackId();
+
try {
ComponentInfo componentInfo = ambariMetaInfo.getComponent(stackId.getStackName(),
stackId.getStackVersion(), s.getName(), request.getComponentName());
@@ -489,6 +491,8 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
continue;
}
+ StackId stackId = sc.getDesiredStackId();
+
ServiceComponentResponse serviceComponentResponse = sc.convertToResponse();
try {
ComponentInfo componentInfo = ambariMetaInfo.getComponent(stackId.getStackName(),
@@ -826,17 +830,17 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
final Cluster cluster,
final AmbariMetaInfo ambariMetaInfo) throws AmbariException {
if (StringUtils.isEmpty(request.getServiceName())) {
- StackId stackId = cluster.getDesiredStackVersion();
+
String componentName = request.getComponentName();
- String serviceName = ambariMetaInfo.getComponentToService(stackId.getStackName(),
- stackId.getStackVersion(), componentName);
+
+ String serviceName = getManagementController().findServiceName(cluster, componentName);
+
debug("Looking up service name for component, componentName={}, serviceName={}", componentName, serviceName);
if (StringUtils.isEmpty(serviceName)) {
throw new AmbariException("Could not find service for component"
+ ", componentName=" + request.getComponentName()
- + ", clusterName=" + cluster.getClusterName()
- + ", stackInfo=" + stackId.getStackId());
+ + ", clusterName=" + cluster.getClusterName());
}
request.setServiceName(serviceName);
}
[31/50] [abbrv] ambari git commit: AMBARI-21059. Reduce Dependency on
Cluster Desired Stack ID (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
index 8cfe258..4045ad3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
@@ -341,11 +341,6 @@ public class KerberosHelperTest extends EasyMockSupport {
}
@Test
- public void testEnableKerberos_UpgradeFromAmbari170KerberizedCluster() throws Exception {
- testEnableKerberos_UpgradeFromAmbari170KerberizedCluster(new PrincipalKeyCredential("principal", "password"), "mit-kdc", "true");
- }
-
- @Test
public void testEnableKerberos_ManageIdentitiesFalseKdcNone() throws Exception {
testEnableKerberos(new PrincipalKeyCredential("principal", "password"), "none", "false");
}
@@ -957,197 +952,12 @@ public class KerberosHelperTest extends EasyMockSupport {
}
}
-
- private void testEnableKerberos_UpgradeFromAmbari170KerberizedCluster(final PrincipalKeyCredential PrincipalKeyCredential,
- String kdcType,
- String manageIdentities) throws Exception {
-
- KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class);
- boolean identitiesManaged = (manageIdentities == null) || !"false".equalsIgnoreCase(manageIdentities);
-
- final ServiceComponentHost schKerberosClient = createMock(ServiceComponentHost.class);
- expect(schKerberosClient.getServiceName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
- expect(schKerberosClient.getServiceComponentName()).andReturn(Role.KERBEROS_CLIENT.name()).anyTimes();
- expect(schKerberosClient.getSecurityState()).andReturn(SecurityState.UNSECURED).anyTimes();
- expect(schKerberosClient.getDesiredSecurityState()).andReturn(SecurityState.UNSECURED).anyTimes();
- expect(schKerberosClient.getHostName()).andReturn("host1").anyTimes();
- expect(schKerberosClient.getState()).andReturn(State.INSTALLED).anyTimes();
-
- final ServiceComponentHost sch1 = createMock(ServiceComponentHost.class);
- expect(sch1.getServiceName()).andReturn("SERVICE1").anyTimes();
- expect(sch1.getServiceComponentName()).andReturn("COMPONENT1").anyTimes();
- expect(sch1.getSecurityState()).andReturn(SecurityState.SECURED_KERBEROS).anyTimes();
- expect(sch1.getDesiredSecurityState()).andReturn(SecurityState.SECURED_KERBEROS).anyTimes();
- expect(sch1.getHostName()).andReturn("host1").anyTimes();
- expect(sch1.getState()).andReturn(State.INSTALLED).anyTimes();
-
- sch1.setDesiredSecurityState(SecurityState.SECURED_KERBEROS);
- expect(expectLastCall()).once();
- sch1.setSecurityState(SecurityState.SECURING);
- expect(expectLastCall()).once();
-
- final ServiceComponentHost sch2 = createMock(ServiceComponentHost.class);
- expect(sch2.getServiceName()).andReturn("SERVICE2").anyTimes();
- expect(sch2.getServiceComponentName()).andReturn("COMPONENT2").anyTimes();
- expect(sch2.getSecurityState()).andReturn(SecurityState.SECURED_KERBEROS).anyTimes();
- expect(sch2.getDesiredSecurityState()).andReturn(SecurityState.SECURED_KERBEROS).anyTimes();
- expect(sch2.getHostName()).andReturn("host1").anyTimes();
- expect(sch2.getState()).andReturn(State.INSTALLED).anyTimes();
-
- sch2.setDesiredSecurityState(SecurityState.SECURED_KERBEROS);
- expect(expectLastCall()).once();
- sch2.setSecurityState(SecurityState.SECURING);
- expect(expectLastCall()).once();
-
- final Host host = createMockHost("host1");
-
- final ServiceComponent serviceComponentKerberosClient = createNiceMock(ServiceComponent.class);
- expect(serviceComponentKerberosClient.getName()).andReturn(Role.KERBEROS_CLIENT.name()).anyTimes();
- expect(serviceComponentKerberosClient.getServiceComponentHosts()).andReturn(Collections.singletonMap("host1", schKerberosClient)).anyTimes();
-
- final Service serviceKerberos = createStrictMock(Service.class);
- expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
- expect(serviceKerberos.getServiceComponents())
- .andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
- .times(1);
- serviceKerberos.setSecurityState(SecurityState.SECURED_KERBEROS);
- expectLastCall().once();
-
- final Service service1 = createStrictMock(Service.class);
- expect(service1.getName()).andReturn("SERVICE1").anyTimes();
- expect(service1.getServiceComponents())
- .andReturn(Collections.<String, ServiceComponent>emptyMap())
- .times(1);
- service1.setSecurityState(SecurityState.SECURED_KERBEROS);
- expectLastCall().once();
-
- final Service service2 = createStrictMock(Service.class);
- expect(service2.getName()).andReturn("SERVICE2").anyTimes();
- expect(service2.getServiceComponents())
- .andReturn(Collections.<String, ServiceComponent>emptyMap())
- .times(1);
- service2.setSecurityState(SecurityState.SECURED_KERBEROS);
- expectLastCall().once();
-
- final Map<String, String> kerberosEnvProperties = createMock(Map.class);
- expect(kerberosEnvProperties.get("kdc_type")).andReturn(kdcType).anyTimes();
- expect(kerberosEnvProperties.get("manage_identities")).andReturn(manageIdentities).anyTimes();
- expect(kerberosEnvProperties.get("realm")).andReturn("FOOBAR.COM").anyTimes();
- expect(kerberosEnvProperties.get("create_ambari_principal")).andReturn("false").anyTimes();
-
- final Config kerberosEnvConfig = createMock(Config.class);
- expect(kerberosEnvConfig.getProperties()).andReturn(kerberosEnvProperties).anyTimes();
-
- final Map<String, String> krb5ConfProperties = createMock(Map.class);
-
- final Config krb5ConfConfig = createMock(Config.class);
- expect(krb5ConfConfig.getProperties()).andReturn(krb5ConfProperties).anyTimes();
-
- final Cluster cluster = createMockCluster("c1", Collections.singleton(host), SecurityType.KERBEROS, krb5ConfConfig, kerberosEnvConfig);
- expect(cluster.getServices())
- .andReturn(new HashMap<String, Service>() {
- {
- put(Service.Type.KERBEROS.name(), serviceKerberos);
- put("SERVICE1", service1);
- put("SERVICE2", service2);
- }
- })
- .anyTimes();
- expect(cluster.getServiceComponentHosts("host1"))
- .andReturn(new ArrayList<ServiceComponentHost>() {
- {
- add(schKerberosClient);
- add(sch1);
- add(sch2);
- }
- })
- .once();
-
- if (identitiesManaged) {
- final Clusters clusters = injector.getInstance(Clusters.class);
- expect(clusters.getHost("host1"))
- .andReturn(host)
- .once();
- }
- expect(cluster.getServiceComponentHosts("KERBEROS", "KERBEROS_CLIENT"))
- .andReturn(Collections.singletonList(schKerberosClient))
- .once();
-
- final AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
- expect(ambariManagementController.findConfigurationTagsWithOverrides(cluster, null))
- .andReturn(Collections.<String, Map<String, String>>emptyMap())
- .once();
- expect(ambariManagementController.getRoleCommandOrder(cluster))
- .andReturn(createMock(RoleCommandOrder.class))
- .once();
-
- final KerberosServiceDescriptor serviceDescriptor1 = createMock(KerberosServiceDescriptor.class);
-
- final KerberosServiceDescriptor serviceDescriptor2 = createMock(KerberosServiceDescriptor.class);
-
- final KerberosDescriptor kerberosDescriptor = createMock(KerberosDescriptor.class);
- expect(kerberosDescriptor.getService("KERBEROS")).andReturn(null).once();
- expect(kerberosDescriptor.getService("SERVICE1")).andReturn(serviceDescriptor1).once();
- expect(kerberosDescriptor.getService("SERVICE2")).andReturn(serviceDescriptor2).once();
-
- setupKerberosDescriptor(kerberosDescriptor, 1);
- setupStageFactory();
-
- // This is a STRICT mock to help ensure that the end result is what we want.
- final RequestStageContainer requestStageContainer = createStrictMock(RequestStageContainer.class);
- // Create Preparation Stage
- expect(requestStageContainer.getLastStageId()).andReturn(-1L).anyTimes();
- expect(requestStageContainer.getId()).andReturn(1L).once();
- requestStageContainer.addStages(EasyMock.<List<Stage>>anyObject());
- expectLastCall().once();
-
- if (identitiesManaged) {
- // Create Principals Stage
- expect(requestStageContainer.getLastStageId()).andReturn(-1L).anyTimes();
- expect(requestStageContainer.getId()).andReturn(1L).once();
- requestStageContainer.addStages(EasyMock.<List<Stage>>anyObject());
- expectLastCall().once();
- // Create Keytabs Stage
- expect(requestStageContainer.getLastStageId()).andReturn(0L).anyTimes();
- expect(requestStageContainer.getId()).andReturn(1L).once();
- requestStageContainer.addStages(EasyMock.<List<Stage>>anyObject());
- expectLastCall().once();
- // Distribute Keytabs Stage
- expect(requestStageContainer.getLastStageId()).andReturn(1L).anyTimes();
- expect(requestStageContainer.getId()).andReturn(1L).once();
- requestStageContainer.addStages(EasyMock.<List<Stage>>anyObject());
- expectLastCall().once();
- }
- // Update Configs Stage
- expect(requestStageContainer.getLastStageId()).andReturn(2L).anyTimes();
- expect(requestStageContainer.getId()).andReturn(1L).once();
- requestStageContainer.addStages(EasyMock.<List<Stage>>anyObject());
- expectLastCall().once();
- // TODO: Add more of these when more stages are added.
- // Clean-up/Finalize Stage
- expect(requestStageContainer.getLastStageId()).andReturn(3L).anyTimes();
- expect(requestStageContainer.getId()).andReturn(1L).once();
- requestStageContainer.addStages(EasyMock.<List<Stage>>anyObject());
- expectLastCall().once();
-
- replayAll();
-
- // Needed by infrastructure
- metaInfo.init();
-
- CredentialStoreService credentialStoreService = injector.getInstance(CredentialStoreService.class);
- credentialStoreService.setCredential(cluster.getClusterName(), KerberosHelper.KDC_ADMINISTRATOR_CREDENTIAL_ALIAS,
- PrincipalKeyCredential, CredentialStoreType.TEMPORARY);
-
- kerberosHelper.toggleKerberos(cluster, SecurityType.KERBEROS, requestStageContainer, null);
-
- verifyAll();
- }
-
private void testEnableKerberos(final PrincipalKeyCredential PrincipalKeyCredential,
String kdcType,
String manageIdentities) throws Exception {
+ StackId stackId = new StackId("HDP", "2.2");
+
KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class);
boolean identitiesManaged = (manageIdentities == null) || !"false".equalsIgnoreCase(manageIdentities);
@@ -1192,6 +1002,7 @@ public class KerberosHelperTest extends EasyMockSupport {
expect(serviceComponentKerberosClient.getServiceComponentHosts()).andReturn(Collections.singletonMap("host1", schKerberosClient)).anyTimes();
final Service serviceKerberos = createStrictMock(Service.class);
+ expect(serviceKerberos.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
expect(serviceKerberos.getServiceComponents())
.andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
@@ -1200,6 +1011,7 @@ public class KerberosHelperTest extends EasyMockSupport {
expectLastCall().once();
final Service service1 = createStrictMock(Service.class);
+ expect(service1.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(service1.getName()).andReturn("SERVICE1").anyTimes();
expect(service1.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
@@ -1209,6 +1021,7 @@ public class KerberosHelperTest extends EasyMockSupport {
final Service service2 = createStrictMock(Service.class);
expect(service2.getName()).andReturn("SERVICE2").anyTimes();
+ expect(service2.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(service2.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
.times(1);
@@ -1375,6 +1188,7 @@ public class KerberosHelperTest extends EasyMockSupport {
expect(serviceComponentKerberosClient.getServiceComponentHosts()).andReturn(Collections.singletonMap("host1", schKerberosClient)).anyTimes();
final Service serviceKerberos = createNiceMock(Service.class);
+ expect(serviceKerberos.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
expect(serviceKerberos.getServiceComponents())
.andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
@@ -1383,6 +1197,7 @@ public class KerberosHelperTest extends EasyMockSupport {
expectLastCall().once();
final Service service1 = createNiceMock(Service.class);
+ expect(service1.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service1.getName()).andReturn("SERVICE1").anyTimes();
expect(service1.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
@@ -1391,6 +1206,7 @@ public class KerberosHelperTest extends EasyMockSupport {
expectLastCall().once();
final Service service2 = createNiceMock(Service.class);
+ expect(service2.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service2.getName()).andReturn("SERVICE2").anyTimes();
expect(service2.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
@@ -1578,18 +1394,21 @@ public class KerberosHelperTest extends EasyMockSupport {
expect(serviceComponentKerberosClient.getServiceComponentHosts()).andReturn(map).anyTimes();
final Service serviceKerberos = createStrictMock(Service.class);
+ expect(serviceKerberos.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
expect(serviceKerberos.getServiceComponents())
.andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
.times(1);
final Service service1 = createStrictMock(Service.class);
+ expect(service1.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service1.getName()).andReturn("SERVICE1").anyTimes();
expect(service1.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
.times(1);
final Service service2 = createStrictMock(Service.class);
+ expect(service2.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service2.getName()).andReturn("SERVICE2").anyTimes();
expect(service2.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
@@ -2282,6 +2101,9 @@ public class KerberosHelperTest extends EasyMockSupport {
final Cluster cluster = createMockCluster("c1", hosts, SecurityType.KERBEROS, krb5ConfConfig, kerberosEnvConfig);
expect(cluster.getServices()).andReturn(services).anyTimes();
+ expect(cluster.getService("SERVICE1")).andReturn(service1).atLeastOnce();
+ expect(cluster.getService("SERVICE2")).andReturn(service2).atLeastOnce();
+ expect(cluster.getService("SERVICE3")).andReturn(service3).atLeastOnce();
expect(cluster.getServiceComponentHostMap(EasyMock.<Set<String>>anyObject(), EasyMock.<Set<String>>anyObject())).andReturn(serviceComponentHostMap).anyTimes();
final Map<String, Map<String, String>> existingConfigurations = new HashMap<String, Map<String, String>>() {
@@ -2521,7 +2343,7 @@ public class KerberosHelperTest extends EasyMockSupport {
servicesMap.put("SERVICE2", service2);
Cluster cluster = createMockCluster(clusterName, Arrays.asList(host1, host2, host3), SecurityType.KERBEROS, configKrb5Conf, configKerberosEnv);
- expect(cluster.getServices()).andReturn(servicesMap).times(1);
+ expect(cluster.getServices()).andReturn(servicesMap).times(2);
Map<String, String> kerberosDescriptorProperties = new HashMap<>();
kerberosDescriptorProperties.put("additional_realms", "");
@@ -2728,7 +2550,7 @@ public class KerberosHelperTest extends EasyMockSupport {
servicesMap.put("SERVICE1", service1);
Cluster cluster = createMockCluster("c1", Arrays.asList(host1), SecurityType.KERBEROS, configKrb5Conf, configKerberosEnv);
- expect(cluster.getServices()).andReturn(servicesMap).times(1);
+ expect(cluster.getServices()).andReturn(servicesMap).times(2);
Map<String, String> kerberosDescriptorProperties = new HashMap<>();
kerberosDescriptorProperties.put("additional_realms", "");
@@ -2869,18 +2691,21 @@ public class KerberosHelperTest extends EasyMockSupport {
).anyTimes();
final Service serviceKerberos = createStrictMock(Service.class);
+ expect(serviceKerberos.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
expect(serviceKerberos.getServiceComponents())
.andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
.times(1);
final Service service1 = createStrictMock(Service.class);
+ expect(service1.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service1.getName()).andReturn("SERVICE1").anyTimes();
expect(service1.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
.times(1);
final Service service2 = createStrictMock(Service.class);
+ expect(service2.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service2.getName()).andReturn("SERVICE2").anyTimes();
expect(service2.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
@@ -3114,18 +2939,21 @@ public class KerberosHelperTest extends EasyMockSupport {
expect(serviceComponentKerberosClient.getServiceComponentHosts()).andReturn(Collections.singletonMap("host1", schKerberosClient)).anyTimes();
final Service serviceKerberos = createStrictMock(Service.class);
+ expect(serviceKerberos.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
expect(serviceKerberos.getServiceComponents())
.andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
.times(1);
final Service service1 = createStrictMock(Service.class);
+ expect(service1.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service1.getName()).andReturn("SERVICE1").anyTimes();
expect(service1.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
.times(1);
final Service service2 = createStrictMock(Service.class);
+ expect(service2.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service2.getName()).andReturn("SERVICE2").anyTimes();
expect(service2.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
@@ -3317,18 +3145,21 @@ public class KerberosHelperTest extends EasyMockSupport {
expect(serviceComponentKerberosClient.getServiceComponentHosts()).andReturn(Collections.singletonMap("host1", schKerberosClient)).anyTimes();
final Service serviceKerberos = createStrictMock(Service.class);
+ expect(serviceKerberos.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
expect(serviceKerberos.getServiceComponents())
.andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
.times(2);
final Service service1 = createStrictMock(Service.class);
+ expect(service1.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service1.getName()).andReturn("SERVICE1").anyTimes();
expect(service1.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
.times(2);
final Service service2 = createStrictMock(Service.class);
+ expect(service2.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service2.getName()).andReturn("SERVICE2").anyTimes();
expect(service2.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
@@ -3477,18 +3308,21 @@ public class KerberosHelperTest extends EasyMockSupport {
expect(serviceComponentKerberosClient.getServiceComponentHosts()).andReturn(Collections.singletonMap("host1", schKerberosClient)).anyTimes();
final Service serviceKerberos = createStrictMock(Service.class);
+ expect(serviceKerberos.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
expect(serviceKerberos.getServiceComponents())
.andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
.times(2);
final Service service1 = createStrictMock(Service.class);
+ expect(service1.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service1.getName()).andReturn("SERVICE1").anyTimes();
expect(service1.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
.times(2);
final Service service2 = createStrictMock(Service.class);
+ expect(service2.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service2.getName()).andReturn("SERVICE2").anyTimes();
expect(service2.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
@@ -3639,18 +3473,21 @@ public class KerberosHelperTest extends EasyMockSupport {
expect(serviceComponentKerberosClient.getServiceComponentHosts()).andReturn(Collections.singletonMap("host1", schKerberosClient1)).anyTimes();
final Service serviceKerberos = createStrictMock(Service.class);
+ expect(serviceKerberos.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
expect(serviceKerberos.getServiceComponents())
.andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
.anyTimes();
final Service service1 = createStrictMock(Service.class);
+ expect(service1.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service1.getName()).andReturn("SERVICE1").anyTimes();
expect(service1.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
.anyTimes();
final Service service2 = createStrictMock(Service.class);
+ expect(service2.getDesiredStackId()).andReturn(new StackId("HDP-2.2"));
expect(service2.getName()).andReturn("SERVICE2").anyTimes();
expect(service2.getServiceComponents())
.andReturn(Collections.<String, ServiceComponent>emptyMap())
@@ -4006,6 +3843,7 @@ public class KerberosHelperTest extends EasyMockSupport {
private Service createMockService(String serviceName, Map<String, ServiceComponent> componentMap) {
Service service = createMock(Service.class);
+ expect(service.getDesiredStackId()).andReturn(new StackId("HDP-2.2")).anyTimes();
expect(service.getName()).andReturn(serviceName).anyTimes();
expect(service.getServiceComponents()).andReturn(componentMap).anyTimes();
return service;
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
index 7b3837e..92a79ce 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
@@ -283,7 +283,6 @@ public class ClientConfigResourceProviderTest {
expect(configHelper.getEffectiveDesiredTags(cluster, null)).andReturn(allConfigTags);
expect(cluster.getClusterName()).andReturn(clusterName);
expect(managementController.getHostComponents(EasyMock.<Set<ServiceComponentHostRequest>>anyObject())).andReturn(responses).anyTimes();
- expect(cluster.getCurrentStackVersion()).andReturn(stackId);
PowerMock.mockStaticPartial(StageUtils.class, "getClusterHostInfo");
Map<String, Set<String>> clusterHostInfo = new HashMap<>();
@@ -319,6 +318,10 @@ public class ClientConfigResourceProviderTest {
expect(cluster.getDesiredConfigs()).andReturn(desiredConfigMap);
expect(clusters.getHost(hostName)).andReturn(host);
+ expect(cluster.getService(serviceName)).andReturn(service).atLeastOnce();
+ expect(service.getServiceComponent(componentName)).andReturn(serviceComponent).atLeastOnce();
+ expect(serviceComponent.getDesiredStackId()).andReturn(stackId).atLeastOnce();
+
HashMap<String, String> rcaParams = new HashMap<>();
rcaParams.put("key","value");
expect(managementController.getRcaParameters()).andReturn(rcaParams).anyTimes();
@@ -534,7 +537,6 @@ public class ClientConfigResourceProviderTest {
expect(configHelper.getEffectiveDesiredTags(cluster, null)).andReturn(allConfigTags);
expect(cluster.getClusterName()).andReturn(clusterName);
expect(managementController.getHostComponents(EasyMock.<Set<ServiceComponentHostRequest>>anyObject())).andReturn(responses).anyTimes();
- expect(cluster.getCurrentStackVersion()).andReturn(stackId);
PowerMock.mockStaticPartial(StageUtils.class, "getClusterHostInfo");
Map<String, Set<String>> clusterHostInfo = new HashMap<>();
@@ -570,6 +572,10 @@ public class ClientConfigResourceProviderTest {
expect(cluster.getDesiredConfigs()).andReturn(desiredConfigMap);
expect(clusters.getHost(hostName)).andReturn(host);
+ expect(cluster.getService(serviceName)).andReturn(service).atLeastOnce();
+ expect(service.getServiceComponent(componentName)).andReturn(serviceComponent).atLeastOnce();
+ expect(serviceComponent.getDesiredStackId()).andReturn(stackId).atLeastOnce();
+
HashMap<String, String> rcaParams = new HashMap<>();
rcaParams.put("key","value");
expect(managementController.getRcaParameters()).andReturn(rcaParams).anyTimes();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
index 03e3e66..647206e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
@@ -231,10 +231,12 @@ public class ComponentResourceProviderTest {
expect(managementController.getClusters()).andReturn(clusters);
expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo);
expect(clusters.getCluster("Cluster100")).andReturn(cluster).anyTimes();
- expect(cluster.getDesiredStackVersion()).andReturn(stackId);
expect(serviceComponent1.getName()).andReturn("Component100");
+ expect(serviceComponent1.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(serviceComponent2.getName()).andReturn("Component101");
+ expect(serviceComponent2.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(serviceComponent3.getName()).andReturn("Component102");
+ expect(serviceComponent3.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(cluster.getServices()).andReturn(Collections.singletonMap("Service100", service)).anyTimes();
@@ -389,7 +391,6 @@ public class ComponentResourceProviderTest {
capture(EasyMock.<ServiceComponentHost>newCapture()))).andReturn(MaintenanceState.OFF).anyTimes();
expect(clusters.getCluster("Cluster100")).andReturn(cluster).anyTimes();
- expect(cluster.getDesiredStackVersion()).andReturn(stackId);
expect(cluster.getService("Service100")).andReturn(service).anyTimes();
expect(service.getName()).andReturn("Service100").anyTimes();
@@ -398,8 +399,11 @@ public class ComponentResourceProviderTest {
expect(service.getServiceComponent("Component103")).andReturn(serviceComponent2).anyTimes();
expect(serviceComponent1.getName()).andReturn("Component101").anyTimes();
+ expect(serviceComponent1.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(serviceComponent2.getName()).andReturn("Component102").anyTimes();
+ expect(serviceComponent2.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(serviceComponent3.getName()).andReturn("Component103").anyTimes();
+ expect(serviceComponent3.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(cluster.getServices()).andReturn(Collections.singletonMap("Service100", service)).anyTimes();
expect(cluster.getClusterId()).andReturn(2L).anyTimes();
@@ -701,7 +705,6 @@ public class ComponentResourceProviderTest {
expect(clusters.getCluster("Cluster100")).andReturn(cluster).anyTimes();
- expect(cluster.getDesiredStackVersion()).andReturn(stackId);
expect(cluster.getResourceId()).andReturn(4l).atLeastOnce();
expect(cluster.getServices()).andReturn(Collections.singletonMap("Service100", service)).anyTimes();
expect(cluster.getClusterId()).andReturn(2L).anyTimes();
@@ -712,6 +715,7 @@ public class ComponentResourceProviderTest {
expect(serviceComponent1.getName()).andReturn("Component101").atLeastOnce();
expect(serviceComponent1.isRecoveryEnabled()).andReturn(false).atLeastOnce();
+ expect(serviceComponent1.getDesiredStackId()).andReturn(stackId).anyTimes();
serviceComponent1.setRecoveryEnabled(true);
expectLastCall().once();
@@ -805,13 +809,13 @@ public class ComponentResourceProviderTest {
// getComponents
expect(clusters.getCluster("cluster1")).andReturn(cluster);
expect(cluster.getService("service1")).andReturn(service);
- expect(cluster.getDesiredStackVersion()).andReturn(stackId).anyTimes();
expect(service.getName()).andReturn("service1").anyTimes();
expect(service.getServiceComponent("component1")).andReturn(component);
expect(ambariMetaInfo.getComponent("stackName", "1", "service1", "component1")).andReturn(componentInfo);
expect(componentInfo.getCategory()).andReturn(null);
+ expect(component.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(component.convertToResponse()).andReturn(response);
// replay mocks
replay(clusters, cluster, service, componentInfo, component, response, ambariMetaInfo, stackId, managementController);
@@ -893,7 +897,9 @@ public class ComponentResourceProviderTest {
expect(service.getServiceComponent("component4")).andReturn(component2);
expect(component1.convertToResponse()).andReturn(response1);
+ expect(component1.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(component2.convertToResponse()).andReturn(response2);
+ expect(component2.getDesiredStackId()).andReturn(stackId).anyTimes();
// replay mocks
replay(clusters, cluster, service, component3Info, component4Info, component1, component2, response1,
response2, ambariMetaInfo, stackId, managementController);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
index b075b71..4138e3e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
@@ -37,6 +37,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.UUID;
import javax.persistence.EntityManager;
@@ -1319,8 +1320,12 @@ public class HostResourceProviderTest extends EasyMockSupport {
Map<String, Object> requestProperties = new HashMap<>();
requestProperties.put(HostResourceProvider.HOST_NAME_PROPERTY_ID, request.getHostname());
requestProperties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, request.getClusterName());
+ if (null != request.getRackInfo()) {
+ requestProperties.put(HostResourceProvider.HOST_RACK_INFO_PROPERTY_ID, UUID.randomUUID().toString());
+ }
properties.add(requestProperties);
}
+
provider.createHosts(PropertyHelper.getCreateRequest(properties, Collections.<String, String>emptyMap()));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
index c82c884..49a3009 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
@@ -152,6 +152,7 @@ public class ServiceResourceProviderTest {
properties.put(ServiceResourceProvider.SERVICE_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
properties.put(ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID, "Service100");
properties.put(ServiceResourceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID, "INIT");
+ properties.put(ServiceResourceProvider.SERVICE_DESIRED_STACK_PROPERTY_ID, "HDP-1.1");
propertySet.add(properties);
@@ -1157,6 +1158,8 @@ public class ServiceResourceProviderTest {
RepositoryVersionEntity repositoryVersion = createNiceMock(RepositoryVersionEntity.class);
expect(repositoryVersionDAO.findByStack(EasyMock.anyObject(StackId.class))).andReturn(
Collections.singletonList(repositoryVersion)).atLeastOnce();
+ expect(repositoryVersion.getStackId()).andReturn(new StackId("HDP-2.2")).anyTimes();
+ replay(repositoryVersion);
}
replay(maintenanceStateHelperMock, repositoryVersionDAO);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
index 4d44576..ba24839 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
@@ -57,11 +57,13 @@ import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.security.TestAuthenticationFactory;
import org.apache.ambari.server.security.authorization.AuthorizationException;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.services.MetricsRetrievalService;
import org.apache.ambari.server.state.stack.Metric;
@@ -136,7 +138,24 @@ public class StackDefinedPropertyProviderTest {
Cluster cluster = clusters.getCluster("c2");
cluster.setDesiredStackVersion(stackId);
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
+ Service service = cluster.addService("HDFS", repositoryVersion);
+ service.addServiceComponent("NAMENODE");
+ service.addServiceComponent("DATANODE");
+ service.addServiceComponent("JOURNALNODE");
+
+ service = cluster.addService("YARN", repositoryVersion);
+ service.addServiceComponent("RESOURCEMANAGER");
+
+ service = cluster.addService("HBASE", repositoryVersion);
+ service.addServiceComponent("HBASE_MASTER");
+ service.addServiceComponent("HBASE_REGIONSERVER");
+
+ stackId = new StackId("HDP-2.1.1");
+ repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
+
+ service = cluster.addService("STORM", repositoryVersion);
+ service.addServiceComponent("STORM_REST_API");
clusters.addHost("h1");
Host host = clusters.getHost("h1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
index 1f2322c..1d19632 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
@@ -44,6 +44,7 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.LogDefinition;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.easymock.Capture;
import org.easymock.EasyMockSupport;
@@ -196,14 +197,17 @@ public class LoggingSearchPropertyProviderTest {
LogDefinition logDefinitionMock =
mockSupport.createMock(LogDefinition.class);
+ Service serviceMock = mockSupport.createNiceMock(Service.class);
+ expect(controllerMock.findServiceName(clusterMock, expectedComponentName)).andReturn(expectedServiceName).atLeastOnce();
+ expect(clusterMock.getService(expectedServiceName)).andReturn(serviceMock).anyTimes();
+ expect(serviceMock.getDesiredStackId()).andReturn(stackIdMock).anyTimes();
+
expect(controllerMock.getAmbariServerURI(expectedSearchEnginePath)).
andReturn(expectedAmbariURL + expectedSearchEnginePath).atLeastOnce();
expect(controllerMock.getAmbariMetaInfo()).andReturn(metaInfoMock).atLeastOnce();
- expect(metaInfoMock.getComponentToService(expectedStackName, expectedStackVersion, expectedComponentName)).andReturn(expectedServiceName).atLeastOnce();
expect(metaInfoMock.getComponent(expectedStackName, expectedStackVersion, expectedServiceName, expectedComponentName)).andReturn(componentInfoMock).atLeastOnce();
expect(stackIdMock.getStackName()).andReturn(expectedStackName).atLeastOnce();
expect(stackIdMock.getStackVersion()).andReturn(expectedStackVersion).atLeastOnce();
- expect(clusterMock.getCurrentStackVersion()).andReturn(stackIdMock).atLeastOnce();
expect(componentInfoMock.getLogs()).andReturn(Collections.singletonList(logDefinitionMock)).atLeastOnce();
expect(logDefinitionMock.getLogId()).andReturn(expectedLogSearchComponentName).atLeastOnce();
@@ -401,6 +405,11 @@ public class LoggingSearchPropertyProviderTest {
LoggingRequestHelper loggingRequestHelperMock =
mockSupport.createMock(LoggingRequestHelper.class);
+ Service serviceMock = mockSupport.createNiceMock(Service.class);
+ expect(controllerMock.findServiceName(clusterMock, expectedComponentName)).andReturn(expectedServiceName).atLeastOnce();
+ expect(clusterMock.getService(expectedServiceName)).andReturn(serviceMock).anyTimes();
+ expect(serviceMock.getDesiredStackId()).andReturn(stackIdMock).anyTimes();
+
expect(dataRetrievalServiceMock.getLogFileNames(expectedLogSearchComponentName, "c6401.ambari.apache.org", "clusterone")).andReturn(Collections.singleton(expectedLogFilePath)).atLeastOnce();
// return null, to simulate the case when the LogSearch service goes down, and the helper object
// is not available to continue servicing the request.
@@ -413,7 +422,6 @@ public class LoggingSearchPropertyProviderTest {
andReturn(expectedAmbariURL + expectedSearchEnginePath).atLeastOnce();
expect(controllerMock.getAmbariMetaInfo()).andReturn(metaInfoMock).atLeastOnce();
- expect(metaInfoMock.getComponentToService(expectedStackName, expectedStackVersion, expectedComponentName)).andReturn(expectedServiceName).atLeastOnce();
expect(metaInfoMock.getComponent(expectedStackName, expectedStackVersion, expectedServiceName, expectedComponentName)).andReturn(componentInfoMock).atLeastOnce();
expect(componentInfoMock.getLogs()).andReturn(Collections.singletonList(logDefinitionMock)).atLeastOnce();
@@ -421,9 +429,8 @@ public class LoggingSearchPropertyProviderTest {
expect(stackIdMock.getStackName()).andReturn(expectedStackName).atLeastOnce();
expect(stackIdMock.getStackVersion()).andReturn(expectedStackVersion).atLeastOnce();
- expect(clusterMock.getCurrentStackVersion()).andReturn(stackIdMock).atLeastOnce();
}
-
+
expect(controllerMock.getClusters()).andReturn(clustersMock).atLeastOnce();
expect(clustersMock.getCluster("clusterone")).andReturn(clusterMock).atLeastOnce();
expect(clusterMock.getResourceId()).andReturn(4L).atLeastOnce();
@@ -502,7 +509,7 @@ public class LoggingSearchPropertyProviderTest {
public void testCheckWhenLogSearchNotAvailableAsClusterUser() throws Exception {
testCheckWhenLogSearchNotAvailable(TestAuthenticationFactory.createClusterUser(), false);
}
-
+
/**
* Verifies that this property provider implementation will
* properly handle the case of LogSearch not being deployed in
@@ -565,12 +572,16 @@ public class LoggingSearchPropertyProviderTest {
LoggingRequestHelper loggingRequestHelperMock =
mockSupport.createMock(LoggingRequestHelper.class);
+ Service serviceMock = mockSupport.createNiceMock(Service.class);
+ expect(controllerMock.findServiceName(clusterMock, expectedComponentName)).andReturn(expectedServiceName).atLeastOnce();
+ expect(clusterMock.getService(expectedServiceName)).andReturn(serviceMock).anyTimes();
+ expect(serviceMock.getDesiredStackId()).andReturn(stackIdMock).anyTimes();
+
+
expect(controllerMock.getAmbariMetaInfo()).andReturn(metaInfoMock).atLeastOnce();
expect(stackIdMock.getStackName()).andReturn(expectedStackName).atLeastOnce();
expect(stackIdMock.getStackVersion()).andReturn(expectedStackVersion).atLeastOnce();
- expect(clusterMock.getCurrentStackVersion()).andReturn(stackIdMock).atLeastOnce();
- expect(metaInfoMock.getComponentToService(expectedStackName, expectedStackVersion, expectedComponentName)).andReturn(expectedServiceName).atLeastOnce();
expect(metaInfoMock.getComponent(expectedStackName, expectedStackVersion, expectedServiceName, expectedComponentName)).andReturn(componentInfoMock).atLeastOnce();
// simulate the case when LogSearch is not deployed, or is not available for some reason
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
index 66e62a0..0587fa0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
@@ -52,6 +52,8 @@ import org.apache.ambari.server.controller.utilities.StreamProvider;
import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.security.TestAuthenticationFactory;
import org.apache.ambari.server.security.authorization.AuthorizationException;
import org.apache.ambari.server.state.Cluster;
@@ -115,9 +117,21 @@ public class RestMetricsPropertyProviderTest {
injector = Guice.createInjector(new InMemoryDefaultTestModule());
injector.getInstance(GuiceJpaInitializer.class);
clusters = injector.getInstance(Clusters.class);
+ StackDAO stackDAO = injector.getInstance(StackDAO.class);
+
+
+ StackEntity stackEntity = new StackEntity();
+ stackEntity.setStackName("HDP");
+ stackEntity.setStackVersion("2.1.1");
+ stackDAO.create(stackEntity);
+
+
clusters.addCluster("c1", new StackId("HDP-2.1.1"));
c1 = clusters.getCluster("c1");
+
+
+
// disable request TTL for these tests
Configuration configuration = injector.getInstance(Configuration.class);
configuration.setProperty(Configuration.METRIC_RETRIEVAL_SERVICE_REQUEST_TTL_ENABLED.getKey(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java
index 24fd47b..258c774 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java
@@ -17,7 +17,6 @@
*/
package org.apache.ambari.server.controller.metrics.timeline;
-import static org.apache.ambari.server.controller.metrics.MetricsServiceProvider.MetricsService;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
@@ -51,6 +50,7 @@ import org.apache.ambari.server.controller.internal.ResourceImpl;
import org.apache.ambari.server.controller.internal.TemporalInfoImpl;
import org.apache.ambari.server.controller.internal.URLStreamProvider;
import org.apache.ambari.server.controller.metrics.MetricHostProvider;
+import org.apache.ambari.server.controller.metrics.MetricsServiceProvider.MetricsService;
import org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider;
import org.apache.ambari.server.controller.metrics.timeline.cache.TimelineMetricCache;
import org.apache.ambari.server.controller.metrics.timeline.cache.TimelineMetricCacheEntryFactory;
@@ -66,6 +66,7 @@ import org.apache.ambari.server.security.authorization.internal.InternalAuthenti
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.http.client.utils.URIBuilder;
import org.easymock.EasyMock;
@@ -535,14 +536,14 @@ public class AMSPropertyProviderTest {
@Test
public void testPopulateMetricsForEmbeddedHBase() throws Exception {
- AmbariManagementController ams = createNiceMock(AmbariManagementController.class);
+ AmbariManagementController amc = createNiceMock(AmbariManagementController.class);
PowerMock.mockStatic(AmbariServer.class);
- expect(AmbariServer.getController()).andReturn(ams).anyTimes();
+ expect(AmbariServer.getController()).andReturn(amc).anyTimes();
AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
Clusters clusters = createNiceMock(Clusters.class);
Cluster cluster = createNiceMock(Cluster.class);
ComponentInfo componentInfo = createNiceMock(ComponentInfo.class);
- expect(ams.getClusters()).andReturn(clusters).anyTimes();
+ expect(amc.getClusters()).andReturn(clusters).anyTimes();
expect(clusters.getCluster("HostRoles/cluster_name")).andReturn(cluster).anyTimes();
expect(cluster.getResourceId()).andReturn(2L).anyTimes();
@@ -552,13 +553,19 @@ public class AMSPropertyProviderTest {
} catch (AmbariException e) {
e.printStackTrace();
}
+
+ Service amsService = createNiceMock(Service.class);
+ expect(amsService.getDesiredStackId()).andReturn(stackId);
+ expect(amsService.getName()).andReturn("AMS");
+ expect(cluster.getServiceByComponentName("METRICS_COLLECTOR")).andReturn(amsService);
+
expect(cluster.getCurrentStackVersion()).andReturn(stackId).anyTimes();
- expect(ams.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+ expect(amc.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
expect(ambariMetaInfo.getComponentToService("HDP", "2.2", "METRICS_COLLECTOR")).andReturn("AMS").anyTimes();
expect(ambariMetaInfo.getComponent("HDP", "2.2", "AMS", "METRICS_COLLECTOR"))
.andReturn(componentInfo).anyTimes();
expect(componentInfo.getTimelineAppid()).andReturn("AMS-HBASE");
- replay(ams, clusters, cluster, ambariMetaInfo, componentInfo);
+ replay(amc, clusters, cluster, amsService, ambariMetaInfo, componentInfo);
PowerMock.replayAll();
TestStreamProvider streamProvider = new TestStreamProvider(EMBEDDED_METRICS_FILE_PATH);
@@ -609,15 +616,15 @@ public class AMSPropertyProviderTest {
@Test
public void testAggregateFunctionForComponentMetrics() throws Exception {
- AmbariManagementController ams = createNiceMock(AmbariManagementController.class);
+ AmbariManagementController amc = createNiceMock(AmbariManagementController.class);
PowerMock.mockStatic(AmbariServer.class);
- expect(AmbariServer.getController()).andReturn(ams).anyTimes();
+ expect(AmbariServer.getController()).andReturn(amc).anyTimes();
AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
Clusters clusters = createNiceMock(Clusters.class);
Cluster cluster = createNiceMock(Cluster.class);
ComponentInfo componentInfo = createNiceMock(ComponentInfo.class);
StackId stackId = new StackId("HDP", "2.2");
- expect(ams.getClusters()).andReturn(clusters).anyTimes();
+ expect(amc.getClusters()).andReturn(clusters).anyTimes();
expect(clusters.getCluster("HostRoles/cluster_name")).andReturn(cluster).anyTimes();
expect(cluster.getResourceId()).andReturn(2L).anyTimes();
@@ -626,13 +633,20 @@ public class AMSPropertyProviderTest {
} catch (AmbariException e) {
e.printStackTrace();
}
+
+ Service hbaseService = createNiceMock(Service.class);
+ expect(hbaseService.getDesiredStackId()).andReturn(stackId);
+ expect(hbaseService.getName()).andReturn("HBASE");
+ expect(cluster.getServiceByComponentName("HBASE_REGIONSERVER")).andReturn(hbaseService);
+
+
expect(cluster.getCurrentStackVersion()).andReturn(stackId).anyTimes();
- expect(ams.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+ expect(amc.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
expect(ambariMetaInfo.getComponentToService("HDP", "2.2", "HBASE_REGIONSERVER")).andReturn("HBASE").anyTimes();
expect(ambariMetaInfo.getComponent("HDP", "2.2", "HBASE", "HBASE_REGIONSERVER"))
.andReturn(componentInfo).anyTimes();
expect(componentInfo.getTimelineAppid()).andReturn("HBASE");
- replay(ams, clusters, cluster, ambariMetaInfo, componentInfo);
+ replay(amc, clusters, cluster, hbaseService, ambariMetaInfo, componentInfo);
PowerMock.replayAll();
TestStreamProvider streamProvider = new TestStreamProvider(AGGREGATE_METRICS_FILE_PATH);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
index 710e4e7..c37ecfe 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
@@ -106,6 +106,7 @@ public class EventsTest {
m_clusterName = "foo";
StackId stackId = new StackId("HDP", STACK_VERSION);
+ m_helper.createStack(stackId);
m_clusters.addCluster(m_clusterName, stackId);
m_clusters.addHost(HOSTNAME);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
index 4ca2070..3ee3299 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
@@ -99,6 +99,9 @@ public class HostVersionOutOfSyncListenerTest {
injector.injectMembers(this);
StackId stackId = new StackId(this.stackId);
+
+ helper.createStack(stackId);
+
clusters.addCluster("c1", stackId);
c1 = clusters.getCluster("c1");
addHost("h1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java
index d2cc345..0e5254f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java
@@ -60,6 +60,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import com.google.common.collect.ImmutableMap;
import com.google.inject.Guice;
import com.google.inject.Injector;
@@ -92,21 +93,26 @@ public class RoleCommandOrderTest {
@Test
public void testInitializeAtGLUSTERFSCluster() throws AmbariException {
-
+ StackId stackId = new StackId("HDP", "2.0.6");
ClusterImpl cluster = createMock(ClusterImpl.class);
Service service = createMock(Service.class);
+ expect(service.getDesiredStackId()).andReturn(stackId);
expect(cluster.getClusterId()).andReturn(1L);
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6"));
expect(cluster.getService("GLUSTERFS")).andReturn(service);
expect(cluster.getService("HDFS")).andReturn(null);
expect(cluster.getService("YARN")).andReturn(null);
- replay(cluster);
+
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("GLUSTERFS", service)
+ .build()).atLeastOnce();
+
+ replay(cluster, service);
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
Map<RoleCommandPair, Set<RoleCommandPair>> deps = rco.getDependencies();
assertTrue("Dependencies are loaded after initialization", deps.size() > 0);
- verify(cluster);
+ verify(cluster, service);
// Check that HDFS components are not present in dependencies
// Checking blocked roles
assertFalse(dependenciesContainBlockedRole(deps, Role.DATANODE));
@@ -144,10 +150,13 @@ public class RoleCommandOrderTest {
expect(cluster.getService("HDFS")).andReturn(hdfsService).atLeastOnce();
expect(cluster.getService("YARN")).andReturn(null).atLeastOnce();
expect(hdfsService.getServiceComponent("JOURNALNODE")).andReturn(null);
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6"));
+ expect(hdfsService.getDesiredStackId()).andReturn(new StackId("HDP", "2.0.6"));
+// expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6"));
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", hdfsService)
+ .build()).anyTimes();
- replay(cluster);
- replay(hdfsService);
+ replay(cluster, hdfsService);
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
Map<RoleCommandPair, Set<RoleCommandPair>> deps = rco.getDependencies();
@@ -188,10 +197,13 @@ public class RoleCommandOrderTest {
expect(cluster.getService("HDFS")).andReturn(hdfsService).atLeastOnce();
expect(cluster.getService("YARN")).andReturn(null);
expect(hdfsService.getServiceComponent("JOURNALNODE")).andReturn(journalnodeSC);
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6"));
+ expect(hdfsService.getDesiredStackId()).andReturn(new StackId("HDP", "2.0.6"));
+// expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6"));
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", hdfsService)
+ .build()).anyTimes();
- replay(cluster);
- replay(hdfsService);
+ replay(cluster, hdfsService);
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
Map<RoleCommandPair, Set<RoleCommandPair>> deps = rco.getDependencies();
@@ -235,7 +247,11 @@ public class RoleCommandOrderTest {
expect(cluster.getService("HDFS")).andReturn(null);
expect(yarnService.getServiceComponent("RESOURCEMANAGER")).andReturn(resourcemanagerSC).anyTimes();
expect(resourcemanagerSC.getServiceComponentHosts()).andReturn(hostComponents).anyTimes();
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6"));
+// expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6"));
+ expect(yarnService.getDesiredStackId()).andReturn(new StackId("HDP", "2.0.6"));
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("YARN", yarnService)
+ .build()).anyTimes();
replay(cluster, yarnService, sch1, sch2, resourcemanagerSC);
@@ -286,8 +302,12 @@ public class RoleCommandOrderTest {
expect(cluster.getService("YARN")).andReturn(yarnService).atLeastOnce();
expect(cluster.getService("HDFS")).andReturn(null);
expect(yarnService.getServiceComponent("RESOURCEMANAGER")).andReturn(resourcemanagerSC).anyTimes();
+ expect(yarnService.getDesiredStackId()).andReturn(new StackId("HDP", "2.0.6")).anyTimes();
expect(resourcemanagerSC.getServiceComponentHosts()).andReturn(hostComponents).anyTimes();
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6"));
+// expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6"));
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("YARN", yarnService)
+ .build()).anyTimes();
replay(cluster, yarnService, sch1, sch2, resourcemanagerSC);
@@ -380,7 +400,11 @@ public class RoleCommandOrderTest {
expect(cluster.getService("YARN")).andReturn(null);
expect(hdfsService.getServiceComponent("JOURNALNODE")).andReturn(null);
//There is no rco file in this stack, should use default
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.5"));
+// expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.5"));
+ expect(hdfsService.getDesiredStackId()).andReturn(new StackId("HDP", "2.0.5"));
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", hdfsService)
+ .build()).anyTimes();
replay(cluster);
replay(hdfsService);
@@ -420,12 +444,13 @@ public class RoleCommandOrderTest {
installedServices.put("HBASE", hbaseService);
expect(cluster.getServices()).andReturn(installedServices).atLeastOnce();
-
expect(cluster.getService("HDFS")).andReturn(hdfsService).atLeastOnce();
expect(cluster.getService("GLUSTERFS")).andReturn(null);
expect(cluster.getService("YARN")).andReturn(null);
expect(hdfsService.getServiceComponent("JOURNALNODE")).andReturn(null);
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.5"));
+// expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.5"));
+ expect(hdfsService.getDesiredStackId()).andReturn(new StackId("HDP", "2.0.5"));
+ expect(hbaseService.getDesiredStackId()).andReturn(new StackId("HDP", "2.0.5"));
//replay
replay(cluster, hdfsService, hbaseService, hbaseMaster, namenode);
@@ -466,12 +491,15 @@ public class RoleCommandOrderTest {
expect(cluster.getService("HDFS")).andReturn(hdfsService).atLeastOnce();
expect(cluster.getService("YARN")).andReturn(null).atLeastOnce();
expect(hdfsService.getServiceComponent("JOURNALNODE")).andReturn(null);
+ expect(hdfsService.getDesiredStackId()).andReturn(new StackId("HDP", "2.2.0")).anyTimes();
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", hdfsService)
+ .build()).anyTimes();
// There is no rco file in this stack, should use default
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.2.0")).atLeastOnce();
+// expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.2.0")).atLeastOnce();
- replay(cluster);
- replay(hdfsService);
+ replay(cluster, hdfsService);
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java
index 303ee89..7659357 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java
@@ -46,6 +46,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.inject.Guice;
import com.google.inject.Injector;
@@ -79,6 +80,12 @@ public class RoleGraphTest {
when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6"));
when(cluster.getClusterId()).thenReturn(1L);
+ Service hdfsService = mock(Service.class);
+ when(hdfsService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+ when (cluster.getServices()).thenReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", hdfsService)
+ .build());
+
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
RoleGraphNode datanode_upgrade = new RoleGraphNode(Role.DATANODE, RoleCommand.UPGRADE);
@@ -166,6 +173,22 @@ public class RoleGraphTest {
when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6"));
when(cluster.getClusterId()).thenReturn(1L);
+ Service hdfsService = mock(Service.class);
+ when(hdfsService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service zkService = mock(Service.class);
+ when(zkService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service hbaseService = mock(Service.class);
+ when(hbaseService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ when(cluster.getServices()).thenReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", hdfsService)
+ .put("ZOOKEEPER", zkService)
+ .put("HBASE", hbaseService)
+ .build());
+
+
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
RoleGraph roleGraph = roleGraphFactory.createNew(rco);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
index 469e8c8..2fc2752 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
@@ -313,6 +313,20 @@ public class OrmTestHelper {
hostDAO.merge(host2);
}
+ @Transactional
+ public StackEntity createStack(StackId stackId) throws AmbariException {
+ StackEntity stackEntity = stackDAO.find(stackId.getStackName(), stackId.getStackVersion());
+
+ if (null == stackEntity) {
+ stackEntity = new StackEntity();
+ stackEntity.setStackName(stackId.getStackName());
+ stackEntity.setStackVersion(stackId.getStackVersion());
+ stackDAO.create(stackEntity);
+ }
+
+ return stackEntity;
+ }
+
/**
* Creates an empty cluster with an ID.
*
@@ -386,6 +400,8 @@ public class OrmTestHelper {
String clusterName = "cluster-" + System.currentTimeMillis();
StackId stackId = new StackId("HDP", "2.0.6");
+ createStack(stackId);
+
clusters.addCluster(clusterName, stackId);
Cluster cluster = clusters.getCluster(clusterName);
cluster = initializeClusterWithStack(cluster);
@@ -642,9 +658,12 @@ public class OrmTestHelper {
*/
public RepositoryVersionEntity getOrCreateRepositoryVersion(StackId stackId,
String version) {
- StackDAO stackDAO = injector.getInstance(StackDAO.class);
- StackEntity stackEntity = stackDAO.find(stackId.getStackName(),
- stackId.getStackVersion());
+ StackEntity stackEntity = null;
+ try {
+ stackEntity = createStack(stackId);
+ } catch (Exception e) {
+ LOG.error("Expected successful repository", e);
+ }
assertNotNull(stackEntity);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java
index fbad1b1..60e76db 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java
@@ -58,9 +58,11 @@ import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
import org.apache.ambari.server.serveraction.AbstractServerAction;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponentHostEvent;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpInProgressEvent;
+import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -203,6 +205,18 @@ public class AutoSkipFailedSummaryActionTest {
AutoSkipFailedSummaryAction action = new AutoSkipFailedSummaryAction();
m_injector.injectMembers(action);
+ EasyMock.reset(clusterMock);
+
+ Service hdfsService = createNiceMock(Service.class);
+ expect(hdfsService.getName()).andReturn("HDFS").anyTimes();
+ expect(clusterMock.getServiceByComponentName("DATANODE")).andReturn(hdfsService).anyTimes();
+
+ Service zkService = createNiceMock(Service.class);
+ expect(zkService.getName()).andReturn("ZOOKEEPER").anyTimes();
+ expect(clusterMock.getServiceByComponentName("ZOOKEEPER_CLIENT")).andReturn(zkService).anyTimes();
+
+ replay(clusterMock, hdfsService, zkService);
+
ServiceComponentHostEvent event = createNiceMock(ServiceComponentHostEvent.class);
// Set mock for parent's getHostRoleCommand()
@@ -269,6 +283,7 @@ public class AutoSkipFailedSummaryActionTest {
assertEquals("There were 3 skipped failure(s) that must be addressed " +
"before you can proceed. Please resolve each failure before continuing with the upgrade.",
result.getStdOut());
+
assertEquals("{\"failures\":" +
"{\"service_check\":[\"ZOOKEEPER\"]," +
"\"host_component\":{" +
@@ -363,6 +378,15 @@ public class AutoSkipFailedSummaryActionTest {
AutoSkipFailedSummaryAction action = new AutoSkipFailedSummaryAction();
m_injector.injectMembers(action);
+ EasyMock.reset(clusterMock);
+
+ Service hdfsService = createNiceMock(Service.class);
+ expect(hdfsService.getName()).andReturn("HDFS").anyTimes();
+ expect(clusterMock.getServiceByComponentName("DATANODE")).andReturn(hdfsService).anyTimes();
+
+ replay(clusterMock, hdfsService);
+
+
ServiceComponentHostEvent event = createNiceMock(ServiceComponentHostEvent.class);
// Set mock for parent's getHostRoleCommand()
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
index b06117b..941c424 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
@@ -137,6 +137,8 @@ public class ComponentVersionCheckActionTest {
String clusterName = "c1";
String hostName = "h1";
+ m_helper.createStack(sourceStack);
+
Clusters clusters = m_injector.getInstance(Clusters.class);
clusters.addCluster(clusterName, sourceStack);
@@ -206,6 +208,9 @@ public class ComponentVersionCheckActionTest {
private void makeCrossStackUpgradeCluster(StackId sourceStack, String sourceRepo, StackId targetStack,
String targetRepo, String clusterName, String hostName) throws Exception {
+ m_helper.createStack(sourceStack);
+ m_helper.createStack(targetStack);
+
Clusters clusters = m_injector.getInstance(Clusters.class);
clusters.addCluster(clusterName, sourceStack);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java b/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
index 7063147..3a67b6c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
@@ -35,6 +35,7 @@ import org.apache.ambari.server.metadata.RoleCommandOrder;
import org.apache.ambari.server.metadata.RoleCommandOrderProvider;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.cluster.ClusterImpl;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostServerActionEvent;
@@ -44,6 +45,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import com.google.common.collect.ImmutableMap;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
@@ -97,6 +99,18 @@ public class TestStagePlanner {
public void testMultiStagePlan() {
ClusterImpl cluster = mock(ClusterImpl.class);
when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service hbaseService = mock(Service.class);
+ when(hbaseService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+ Service zkService = mock(Service.class);
+ when(zkService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ when(cluster.getServices()).thenReturn(ImmutableMap.<String, Service>builder()
+ .put("HBASE", hbaseService)
+ .put("ZOOKEEPER", zkService)
+ .build());
+
+
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
RoleGraph rg = roleGraphFactory.createNew(rco);
long now = System.currentTimeMillis();
@@ -122,9 +136,17 @@ public class TestStagePlanner {
public void testRestartStagePlan() {
ClusterImpl cluster = mock(ClusterImpl.class);
when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service hiveService = mock(Service.class);
+ when(hiveService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ when(cluster.getServices()).thenReturn(ImmutableMap.<String, Service>builder()
+ .put("HIVE", hiveService)
+ .build());
+
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
RoleGraph rg = roleGraphFactory.createNew(rco);
- long now = System.currentTimeMillis();
+
Stage stage = stageFactory.createNew(1, "/tmp", "cluster1", 1L, "execution command wrapper test",
"clusterHostInfo", "commandParamsStage", "hostParamsStage");
stage.setStageId(1);
@@ -151,6 +173,39 @@ public class TestStagePlanner {
public void testManyStages() {
ClusterImpl cluster = mock(ClusterImpl.class);
when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service hdfsService = mock(Service.class);
+ when(hdfsService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service hbaseService = mock(Service.class);
+ when(hbaseService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service zkService = mock(Service.class);
+ when(zkService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service mrService = mock(Service.class);
+ when(mrService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service oozieService = mock(Service.class);
+ when(oozieService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service webhcatService = mock(Service.class);
+ when(webhcatService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service gangliaService = mock(Service.class);
+ when(gangliaService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ when(cluster.getServices()).thenReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", hdfsService)
+ .put("HBASE", hbaseService)
+ .put("ZOOKEEPER", zkService)
+ .put("MAPREDUCE", mrService)
+ .put("OOZIE", oozieService)
+ .put("WEBHCAT", webhcatService)
+ .put("GANGLIA", gangliaService)
+ .build());
+
+
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
RoleGraph rg = roleGraphFactory.createNew(rco);
long now = System.currentTimeMillis();
@@ -188,6 +243,7 @@ public class TestStagePlanner {
stage.addHostRoleExecutionCommand("host9", Role.GANGLIA_SERVER,
RoleCommand.START, new ServiceComponentHostStartEvent("GANGLIA_SERVER",
"host9", now), "cluster1", "GANGLIA", false, false);
+
System.out.println(stage.toString());
rg.build(stage);
System.out.println(rg.stringifyGraph());
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
index 4437e60..f43dbd8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
@@ -26,6 +26,7 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.H2DatabaseCleaner;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.ConfigGroupDAO;
import org.apache.ambari.server.orm.dao.ConfigGroupHostMappingDAO;
import org.apache.ambari.server.orm.entities.ConfigGroupConfigMappingEntity;
@@ -65,8 +66,12 @@ public class ConfigGroupTest {
configGroupHostMappingDAO = injector.getInstance
(ConfigGroupHostMappingDAO.class);
+ StackId stackId = new StackId("HDP-0.1");
+ OrmTestHelper helper = injector.getInstance(OrmTestHelper.class);
+ helper.createStack(stackId);
+
clusterName = "foo";
- clusters.addCluster(clusterName, new StackId("HDP-0.1"));
+ clusters.addCluster(clusterName, stackId);
cluster = clusters.getCluster(clusterName);
Assert.assertNotNull(cluster);
clusters.addHost("h1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
index 1709da8..dd0a840 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
@@ -49,7 +49,9 @@ import org.apache.ambari.server.controller.spi.ClusterController;
import org.apache.ambari.server.orm.DBAccessor;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.security.SecurityHelper;
import org.apache.ambari.server.security.TestAuthenticationFactory;
import org.apache.ambari.server.stack.StackManagerFactory;
@@ -104,8 +106,14 @@ public class ConfigHelperTest {
metaInfo = injector.getInstance(AmbariMetaInfo.class);
configFactory = injector.getInstance(ConfigFactory.class);
+ StackId stackId = new StackId("HDP-2.0.6");
+ OrmTestHelper helper = injector.getInstance(OrmTestHelper.class);
+ helper.createStack(stackId);
+
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, "2.0.6");
+
clusterName = "c1";
- clusters.addCluster(clusterName, new StackId("HDP-2.0.6"));
+ clusters.addCluster(clusterName, stackId);
cluster = clusters.getCluster(clusterName);
Assert.assertNotNull(cluster);
clusters.addHost("h1");
@@ -147,6 +155,8 @@ public class ConfigHelperTest {
cr2.setType("flume-conf");
cr2.setVersionTag("version1");
+ cluster.addService("FLUME", repositoryVersion);
+ cluster.addService("OOZIE", repositoryVersion);
final ClusterRequest clusterRequest2 =
new ClusterRequest(cluster.getClusterId(), clusterName,
@@ -893,15 +903,21 @@ public class ConfigHelperTest {
hc.setDefaultVersionTag("version2");
schReturn.put("flume-conf", hc);
+ ServiceComponent sc = createNiceMock(ServiceComponent.class);
+
// set up mocks
ServiceComponentHost sch = createNiceMock(ServiceComponentHost.class);
+ expect(sc.getDesiredStackId()).andReturn(cluster.getDesiredStackVersion()).anyTimes();
+
// set up expectations
expect(sch.getActualConfigs()).andReturn(schReturn).times(6);
expect(sch.getHostName()).andReturn("h1").anyTimes();
expect(sch.getClusterId()).andReturn(cluster.getClusterId()).anyTimes();
expect(sch.getServiceName()).andReturn("FLUME").anyTimes();
expect(sch.getServiceComponentName()).andReturn("FLUME_HANDLER").anyTimes();
- replay(sch);
+ expect(sch.getServiceComponent()).andReturn(sc).anyTimes();
+
+ replay(sc, sch);
// Cluster level config changes
Assert.assertTrue(configHelper.isStaleConfigs(sch, null));
@@ -1002,6 +1018,7 @@ public class ConfigHelperTest {
Cluster mockCluster = createStrictMock(Cluster.class);
StackId mockStackVersion = createStrictMock(StackId.class);
AmbariMetaInfo mockAmbariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
+ Service mockService = createStrictMock(Service.class);
ServiceInfo mockServiceInfo = createStrictMock(ServiceInfo.class);
PropertyInfo mockPropertyInfo1 = createStrictMock(PropertyInfo.class);
@@ -1009,8 +1026,8 @@ public class ConfigHelperTest {
List<PropertyInfo> serviceProperties = Arrays.asList(mockPropertyInfo1, mockPropertyInfo2);
- expect(mockCluster.getCurrentStackVersion()).andReturn(mockStackVersion).once();
-
+ expect(mockCluster.getService("SERVICE")).andReturn(mockService).once();
+ expect(mockService.getDesiredStackId()).andReturn(mockStackVersion).once();
expect(mockStackVersion.getStackName()).andReturn("HDP").once();
expect(mockStackVersion.getStackVersion()).andReturn("2.2").once();
@@ -1018,7 +1035,7 @@ public class ConfigHelperTest {
expect(mockServiceInfo.getProperties()).andReturn(serviceProperties).once();
- replay(mockAmbariMetaInfo, mockCluster, mockStackVersion, mockServiceInfo, mockPropertyInfo1, mockPropertyInfo2);
+ replay(mockAmbariMetaInfo, mockCluster, mockService, mockStackVersion, mockServiceInfo, mockPropertyInfo1, mockPropertyInfo2);
mockAmbariMetaInfo.init();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
index 4c9ffcc..1aea85a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
@@ -86,6 +86,9 @@ public class ServiceComponentTest {
serviceName = "HDFS";
StackId stackId = new StackId("HDP-0.1");
+
+ helper.createStack(stackId);
+
clusters.addCluster(clusterName, stackId);
cluster = clusters.getCluster(clusterName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
index f5f4e10..f6e66e5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
@@ -99,7 +99,10 @@ public class AlertEventPublisherTest {
aggregateMapping = injector.getInstance(AggregateDefinitionMapping.class);
clusterName = "foo";
- clusters.addCluster(clusterName, new StackId("HDP", STACK_VERSION));
+ StackId stackId = new StackId("HDP", STACK_VERSION);
+ ormHelper.createStack(stackId);
+
+ clusters.addCluster(clusterName, stackId);
cluster = clusters.getCluster(clusterName);
Assert.assertNotNull(cluster);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
index e7516e6..fbe610c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
@@ -120,6 +120,9 @@ public class ClusterDeadlockTest {
injector.getInstance(GuiceJpaInitializer.class);
injector.injectMembers(this);
+
+ helper.createStack(stackId);
+
clusters.addCluster("c1", stackId);
cluster = clusters.getCluster("c1");
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
[18/50] [abbrv] ambari git commit: AMBARI-21022 - Upgrades Should Be
Associated With Repositories Instead of String Versions (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index e3ffe8f..98f5228 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@ -76,7 +76,9 @@ import org.apache.ambari.server.state.stack.upgrade.TaskWrapper;
import org.apache.ambari.server.state.stack.upgrade.UpgradeScope;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.utils.EventBusSynchronizer;
+import org.easymock.Capture;
import org.easymock.EasyMock;
+import org.easymock.IAnswer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -98,8 +100,7 @@ import com.google.inject.util.Modules;
*/
public class UpgradeHelperTest {
-// private static final StackId HDP_21 = new StackId("HDP-2.1.1");
-// private static final StackId HDP_22 = new StackId("HDP-2.2.0");
+ private static final StackId STACK_ID_HDP_220 = new StackId("HDP-2.2.0");
private static final String UPGRADE_VERSION = "2.2.1.0-1234";
private static final String DOWNGRADE_VERSION = "2.2.0.0-1234";
@@ -114,6 +115,9 @@ public class UpgradeHelperTest {
private Gson m_gson = new Gson();
private UpgradeContextFactory m_upgradeContextFactory;
+ private RepositoryVersionEntity repositoryVersion2200;
+ private RepositoryVersionEntity repositoryVersion2210;
+
/**
* Because test cases need to share config mocks, put common ones in this function.
* @throws Exception
@@ -158,6 +162,9 @@ public class UpgradeHelperTest {
m_managementController = injector.getInstance(AmbariManagementController.class);
m_upgradeContextFactory = injector.getInstance(UpgradeContextFactory.class);
+ repositoryVersion2200 = helper.getOrCreateRepositoryVersion(STACK_ID_HDP_220, DOWNGRADE_VERSION);
+ repositoryVersion2210 = helper.getOrCreateRepositoryVersion(STACK_ID_HDP_220, UPGRADE_VERSION);
+
// Set the authenticated user
// TODO: remove this or replace the authenticated user to test authorization rules
SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator("admin"));
@@ -207,10 +214,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
-
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -289,11 +293,15 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
- context.setSupportedServices(Collections.singleton("ZOOKEEPER"));
- context.setScope(UpgradeScope.PARTIAL);
+ Set<String> services = Collections.singleton("ZOOKEEPER");
+ UpgradeContext context = EasyMock.createNiceMock(UpgradeContext.class);
+ EasyMock.expect(context.getCluster()).andReturn(cluster).anyTimes();
+ EasyMock.expect(context.getType()).andReturn(UpgradeType.ROLLING).anyTimes();
+ EasyMock.expect(context.getDirection()).andReturn(Direction.UPGRADE).anyTimes();
+ EasyMock.expect(context.getRepositoryVersion()).andReturn(repositoryVersion2210).anyTimes();
+ EasyMock.expect(context.getSupportedServices()).andReturn(services).anyTimes();
+ EasyMock.expect(context.getRepositoryType()).andReturn(RepositoryType.PATCH).anyTimes();
+ EasyMock.replay(context);
List<Grouping> groupings = upgrade.getGroups(Direction.UPGRADE);
assertEquals(8, groupings.size());
@@ -347,12 +355,8 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
-
- context.setResolver(m_masterHostResolver);
- context.setSupportedServices(Collections.singleton("ZOOKEEPER"));
- context.setScope(UpgradeScope.COMPLETE);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING,
+ repositoryVersion2210, RepositoryType.STANDARD, Collections.singleton("ZOOKEEPER"));
List<Grouping> groupings = upgrade.getGroups(Direction.UPGRADE);
assertEquals(8, groupings.size());
@@ -404,9 +408,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -454,12 +456,14 @@ public class UpgradeHelperTest {
Host hostInMaintenanceMode = cluster.getHosts().iterator().next();
hostInMaintenanceMode.setMaintenanceState(cluster.getClusterId(), MaintenanceState.ON);
+ UpgradeContext context = getMockUpgradeContextNoReplay(cluster, Direction.UPGRADE,
+ UpgradeType.ROLLING, repositoryVersion2210);
+
// use a "real" master host resolver here so that we can actually test MM
- MasterHostResolver masterHostResolver = new MasterHostResolver(null, cluster, "");
+ MasterHostResolver masterHostResolver = new MasterHostResolver(null, context);
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(masterHostResolver);
+ EasyMock.expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
+ replay(context);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
assertEquals(7, groups.size());
@@ -489,9 +493,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -539,9 +541,7 @@ public class UpgradeHelperTest {
assertEquals(1, schs.size());
assertEquals(HostState.HEARTBEAT_LOST, schs.get(0).getHostState());
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -577,9 +577,8 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.DOWNGRADE, DOWNGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.DOWNGRADE,
+ UpgradeType.ROLLING, repositoryVersion2200);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -618,9 +617,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -648,11 +645,7 @@ public class UpgradeHelperTest {
assertNotNull(upgrade);
Cluster cluster = makeCluster();
-
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
-
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
assertEquals(7, groups.size());
@@ -678,9 +671,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -750,9 +741,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade,
context);
@@ -862,9 +851,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade,
context);
@@ -925,9 +912,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade,
context);
@@ -992,9 +977,7 @@ public class UpgradeHelperTest {
assertNotNull(upgrade);
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -1066,9 +1049,7 @@ public class UpgradeHelperTest {
numServiceChecksExpected++;
}
- UpgradeContext context = m_upgradeContextFactory.create(c, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(c, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -1119,9 +1100,8 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.DOWNGRADE, DOWNGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.DOWNGRADE,
+ UpgradeType.ROLLING, repositoryVersion2200);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -1155,9 +1135,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -1248,7 +1226,6 @@ public class UpgradeHelperTest {
String repositoryVersionString = "2.1.1-1234";
StackId stackId = new StackId("HDP-2.1.1");
- StackId stackId2 = new StackId("HDP-2.2.0");
clusters.addCluster(clusterName, stackId);
Cluster c = clusters.getCluster(clusterName);
@@ -1256,9 +1233,9 @@ public class UpgradeHelperTest {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
repositoryVersionString);
- helper.getOrCreateRepositoryVersion(stackId2,"2.2.0");
+ helper.getOrCreateRepositoryVersion(STACK_ID_HDP_220, "2.2.0");
- helper.getOrCreateRepositoryVersion(stackId2, UPGRADE_VERSION);
+ helper.getOrCreateRepositoryVersion(STACK_ID_HDP_220, UPGRADE_VERSION);
for (int i = 0; i < 4; i++) {
String hostName = "h" + (i+1);
@@ -1420,9 +1397,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -1516,9 +1491,8 @@ public class UpgradeHelperTest {
expect(m_masterHostResolver.getCluster()).andReturn(c).anyTimes();
replay(m_masterHostResolver);
- UpgradeContext context = m_upgradeContextFactory.create(c, UpgradeType.ROLLING,
- Direction.DOWNGRADE, DOWNGRADE_VERSION, new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(c, Direction.DOWNGRADE, UpgradeType.ROLLING,
+ repositoryVersion2200);
Map<String, UpgradePack> upgrades = ambariMetaInfo.getUpgradePacks("HDP", "2.1.1");
assertTrue(upgrades.containsKey("upgrade_direction"));
@@ -1556,7 +1530,7 @@ public class UpgradeHelperTest {
clusters.addCluster(clusterName, stackId);
Cluster c = clusters.getCluster(clusterName);
- RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
+ RepositoryVersionEntity repositoryVersion211 = helper.getOrCreateRepositoryVersion(stackId,
version);
for (int i = 0; i < 2; i++) {
@@ -1574,28 +1548,34 @@ public class UpgradeHelperTest {
}
// !!! add services
- c.addService(serviceFactory.createNew(c, "ZOOKEEPER", repositoryVersion));
+ c.addService(serviceFactory.createNew(c, "ZOOKEEPER", repositoryVersion211));
Service s = c.getService("ZOOKEEPER");
ServiceComponent sc = s.addServiceComponent("ZOOKEEPER_SERVER");
ServiceComponentHost sch1 = sc.addServiceComponentHost("h1");
- sch1.setVersion("2.1.1.0-1234");
+ sch1.setVersion(repositoryVersion211.getVersion());
ServiceComponentHost sch2 = sc.addServiceComponentHost("h2");
- sch2.setVersion("2.1.1.0-1234");
+ sch2.setVersion(repositoryVersion211.getVersion());
List<ServiceComponentHost> schs = c.getServiceComponentHosts("ZOOKEEPER", "ZOOKEEPER_SERVER");
assertEquals(2, schs.size());
- MasterHostResolver mhr = new MasterHostResolver(null, c, "2.1.1.0-1234");
- HostsType ht = mhr.getMasterAndHosts("ZOOKEEPER", "ZOOKEEPER_SERVER");
+ UpgradeContext context = getMockUpgradeContextNoReplay(c, Direction.UPGRADE,
+ UpgradeType.HOST_ORDERED, repositoryVersion211);
+
+ MasterHostResolver resolver = new MasterHostResolver(m_configHelper, context);
+ EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ replay(context);
+
+ HostsType ht = resolver.getMasterAndHosts("ZOOKEEPER", "ZOOKEEPER_SERVER");
assertEquals(0, ht.hosts.size());
// !!! if one of them is failed, it should be scheduled
sch2.setUpgradeState(UpgradeState.FAILED);
- ht = mhr.getMasterAndHosts("ZOOKEEPER", "ZOOKEEPER_SERVER");
+ ht = resolver.getMasterAndHosts("ZOOKEEPER", "ZOOKEEPER_SERVER");
assertEquals(1, ht.hosts.size());
assertEquals("h2", ht.hosts.iterator().next());
@@ -1617,7 +1597,7 @@ public class UpgradeHelperTest {
clusters.addCluster(clusterName, stackId);
Cluster c = clusters.getCluster(clusterName);
- RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
+ RepositoryVersionEntity repositoryVersion211 = helper.getOrCreateRepositoryVersion(stackId,
version);
for (int i = 0; i < 2; i++) {
@@ -1635,7 +1615,7 @@ public class UpgradeHelperTest {
}
// Add services
- c.addService(serviceFactory.createNew(c, "HDFS", repositoryVersion));
+ c.addService(serviceFactory.createNew(c, "HDFS", repositoryVersion211));
Service s = c.getService("HDFS");
ServiceComponent sc = s.addServiceComponent("NAMENODE");
@@ -1655,7 +1635,15 @@ public class UpgradeHelperTest {
expect(m_configHelper.getValueFromDesiredConfigurations(c, "hdfs-site", "dfs.namenode.http-address.ha.nn2")).andReturn("H2:50070").anyTimes();
replay(m_configHelper);
- MasterHostResolver mhr = new MockMasterHostResolver(m_configHelper, c, version);
+ UpgradeContext context = getMockUpgradeContextNoReplay(c, Direction.UPGRADE,
+ UpgradeType.NON_ROLLING, repositoryVersion211);
+
+ // use a "real" master host resolver here so that we can actually test MM
+ MasterHostResolver mhr = new MockMasterHostResolver(m_configHelper, context);
+
+ EasyMock.expect(context.getResolver()).andReturn(mhr).anyTimes();
+ replay(context);
+
HostsType ht = mhr.getMasterAndHosts("HDFS", "NAMENODE");
assertNotNull(ht.master);
@@ -1679,8 +1667,7 @@ public class UpgradeHelperTest {
clusters.addCluster(clusterName, stackId);
Cluster c = clusters.getCluster(clusterName);
- RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
- version);
+ RepositoryVersionEntity repositoryVersion211 = helper.getOrCreateRepositoryVersion(stackId, version);
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
@@ -1697,7 +1684,7 @@ public class UpgradeHelperTest {
}
// Add services
- c.addService(serviceFactory.createNew(c, "HDFS", repositoryVersion));
+ c.addService(serviceFactory.createNew(c, "HDFS", repositoryVersion211));
Service s = c.getService("HDFS");
ServiceComponent sc = s.addServiceComponent("NAMENODE");
@@ -1717,7 +1704,14 @@ public class UpgradeHelperTest {
expect(m_configHelper.getValueFromDesiredConfigurations(c, "hdfs-site", "dfs.namenode.http-address.ha.nn2")).andReturn("H2:50070").anyTimes();
replay(m_configHelper);
- MasterHostResolver mhr = new BadMasterHostResolver(m_configHelper, c, version);
+ UpgradeContext context = getMockUpgradeContextNoReplay(c, Direction.UPGRADE,
+ UpgradeType.NON_ROLLING, repositoryVersion211);
+
+ // use a "real" master host resolver here so that we can actually test MM
+ MasterHostResolver mhr = new BadMasterHostResolver(m_configHelper, context);
+
+ EasyMock.expect(context.getResolver()).andReturn(mhr).anyTimes();
+ replay(context);
HostsType ht = mhr.getMasterAndHosts("HDFS", "NAMENODE");
assertNotNull(ht.master);
@@ -1754,13 +1748,8 @@ public class UpgradeHelperTest {
assertEquals(upgradeType, upgradePack.getType());
// get an upgrade
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
-
- context.setResolver(m_masterHostResolver);
-
- context.setSupportedServices(Collections.singleton("ZOOKEEPER"));
- context.setScope(UpgradeScope.COMPLETE);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING,
+ repositoryVersion2210, RepositoryType.STANDARD, Collections.singleton("ZOOKEEPER"));
List<Grouping> groupings = upgradePack.getGroups(Direction.UPGRADE);
assertEquals(2, groupings.size());
@@ -1795,10 +1784,10 @@ public class UpgradeHelperTest {
clusters.addCluster(clusterName, stackId);
Cluster c = clusters.getCluster(clusterName);
- RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
+ RepositoryVersionEntity repoVersion211 = helper.getOrCreateRepositoryVersion(stackId,
version);
- helper.getOrCreateRepositoryVersion(stackId2,"2.2.0");
+ RepositoryVersionEntity repoVersion220 = helper.getOrCreateRepositoryVersion(stackId2, "2.2.0");
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
@@ -1815,7 +1804,7 @@ public class UpgradeHelperTest {
}
// !!! add storm
- c.addService(serviceFactory.createNew(c, "STORM", repositoryVersion));
+ c.addService(serviceFactory.createNew(c, "STORM", repoVersion211));
Service s = c.getService("STORM");
ServiceComponent sc = s.addServiceComponent("NIMBUS");
@@ -1853,23 +1842,30 @@ public class UpgradeHelperTest {
};
- MasterHostResolver resolver = new MasterHostResolver(m_configHelper, c);
+ UpgradeContext context = getMockUpgradeContextNoReplay(c, Direction.UPGRADE,
+ UpgradeType.NON_ROLLING, repoVersion220);
- UpgradeContext context = m_upgradeContextFactory.create(c, UpgradeType.NON_ROLLING,
- Direction.UPGRADE, "2.2.0", new HashMap<String, Object>());
- context.setResolver(resolver);
+ // use a "real" master host resolver here so that we can actually test MM
+ MasterHostResolver masterHostResolver = new MasterHostResolver(m_configHelper, context);
+
+ EasyMock.expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
+ replay(context);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgradePack, context);
assertEquals(1, groups.size());
- sch1.setVersion("2.1.1");
- sch2.setVersion("2.1.1");
- resolver = new MasterHostResolver(m_configHelper, c, "2.1.1");
+ sch1.setVersion(repoVersion211.getVersion());
+ sch2.setVersion(repoVersion211.getVersion());
+
+ context = getMockUpgradeContextNoReplay(c, Direction.DOWNGRADE, UpgradeType.NON_ROLLING,
+ repoVersion211);
- context = m_upgradeContextFactory.create(c, UpgradeType.NON_ROLLING, Direction.DOWNGRADE,
- "2.1.1", new HashMap<String, Object>());
- context.setResolver(resolver);
+ // use a "real" master host resolver here so that we can actually test MM
+ masterHostResolver = new MasterHostResolver(m_configHelper, context);
+
+ EasyMock.expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
+ replay(context);
groups = m_upgradeHelper.createSequence(upgradePack, context);
@@ -1895,7 +1891,7 @@ public class UpgradeHelperTest {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
version);
- helper.getOrCreateRepositoryVersion(stackId2,"2.2.0");
+ RepositoryVersionEntity repoVersion220 = helper.getOrCreateRepositoryVersion(stackId2, "2.2.0");
helper.getOrCreateRepositoryVersion(stackId2, UPGRADE_VERSION);
@@ -1949,9 +1945,8 @@ public class UpgradeHelperTest {
UpgradePack upgrade = upgrades.get("upgrade_multi_server_tasks");
assertNotNull(upgrade);
- UpgradeContext context = m_upgradeContextFactory.create(c, UpgradeType.NON_ROLLING,
- Direction.UPGRADE, "2.2.0", new HashMap<String, Object>());
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(c, Direction.UPGRADE, UpgradeType.NON_ROLLING,
+ repoVersion220);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -2078,9 +2073,9 @@ public class UpgradeHelperTest {
clusters.addCluster(clusterName, stackId);
Cluster c = clusters.getCluster(clusterName);
- RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, version);
+ RepositoryVersionEntity repoVersion211 = helper.getOrCreateRepositoryVersion(stackId, version);
- helper.getOrCreateRepositoryVersion(stackId2, "2.2.0");
+ RepositoryVersionEntity repoVersion220 = helper.getOrCreateRepositoryVersion(stackId2, "2.2.0");
// create 2 hosts
for (int i = 0; i < 2; i++) {
@@ -2099,8 +2094,8 @@ public class UpgradeHelperTest {
// add ZK Server to both hosts, and then Nimbus to only 1 - this will test
// how the HOU breaks out dependencies into stages
- c.addService(serviceFactory.createNew(c, "ZOOKEEPER", repositoryVersion));
- c.addService(serviceFactory.createNew(c, "HBASE", repositoryVersion));
+ c.addService(serviceFactory.createNew(c, "ZOOKEEPER", repoVersion211));
+ c.addService(serviceFactory.createNew(c, "HBASE", repoVersion211));
Service zookeeper = c.getService("ZOOKEEPER");
Service hbase = c.getService("HBASE");
ServiceComponent zookeeperServer = zookeeper.addServiceComponent("ZOOKEEPER_SERVER");
@@ -2131,12 +2126,14 @@ public class UpgradeHelperTest {
field.setAccessible(true);
field.set(upgradePack, UpgradeType.HOST_ORDERED);
- MasterHostResolver resolver = new MasterHostResolver(m_configHelper, c);
+ UpgradeContext context = getMockUpgradeContextNoReplay(c, Direction.UPGRADE,
+ UpgradeType.HOST_ORDERED, repoVersion220);
+
+ MasterHostResolver resolver = new MasterHostResolver(m_configHelper, context);
+ EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ replay(context);
- UpgradeContext context = m_upgradeContextFactory.create(c, UpgradeType.HOST_ORDERED,
- Direction.UPGRADE, "2.2.0", new HashMap<String, Object>());
- context.setResolver(resolver);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgradePack, context);
assertEquals(1, groups.size());
@@ -2169,30 +2166,34 @@ public class UpgradeHelperTest {
assertEquals(StageWrapper.Type.SERVICE_CHECK, holder.items.get(8).getType());
// !!! test downgrade when all host components have failed
- zookeeperServer1.setVersion("2.1.1");
- zookeeperServer2.setVersion("2.1.1");
- hbaseMaster1.setVersion("2.1.1");
- resolver = new MasterHostResolver(m_configHelper, c, "2.1.1");
+ zookeeperServer1.setVersion(repoVersion211.getVersion());
+ zookeeperServer2.setVersion(repoVersion211.getVersion());
+ hbaseMaster1.setVersion(repoVersion211.getVersion());
- m_upgradeContextFactory.create(c, UpgradeType.HOST_ORDERED, Direction.DOWNGRADE,
- "2.1.1", new HashMap<String, Object>());
+ context = getMockUpgradeContextNoReplay(c, Direction.DOWNGRADE, UpgradeType.HOST_ORDERED,
+ repoVersion211);
+
+ resolver = new MasterHostResolver(m_configHelper, context);
+ EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ replay(context);
- context.setResolver(resolver);
groups = m_upgradeHelper.createSequence(upgradePack, context);
assertEquals(1, groups.size());
assertEquals(2, groups.get(0).items.size());
// !!! test downgrade when one of the hosts had failed
- zookeeperServer1.setVersion("2.1.1");
- zookeeperServer2.setVersion("2.2.0");
- hbaseMaster1.setVersion("2.1.1");
- resolver = new MasterHostResolver(m_configHelper, c, "2.1.1");
+ zookeeperServer1.setVersion(repoVersion211.getVersion());
+ zookeeperServer2.setVersion(repoVersion220.getVersion());
+ hbaseMaster1.setVersion(repoVersion211.getVersion());
+
+ context = getMockUpgradeContextNoReplay(c, Direction.DOWNGRADE, UpgradeType.HOST_ORDERED,
+ repoVersion211);
- m_upgradeContextFactory.create(c, UpgradeType.HOST_ORDERED, Direction.DOWNGRADE,
- "2.1.1", new HashMap<String, Object>());
+ resolver = new MasterHostResolver(m_configHelper, context);
+ EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ replay(context);
- context.setResolver(resolver);
groups = m_upgradeHelper.createSequence(upgradePack, context);
assertEquals(1, groups.size());
@@ -2214,10 +2215,7 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
- UpgradeContext context = m_upgradeContextFactory.create(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, UPGRADE_VERSION, new HashMap<String, Object>());
-
- context.setResolver(m_masterHostResolver);
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING);
// initially, no conditions should be met
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -2251,13 +2249,177 @@ public class UpgradeHelperTest {
}
/**
+ * @param cluster
+ * @param direction
+ * @param type
+ * @return
+ */
+ private UpgradeContext getMockUpgradeContext(Cluster cluster, Direction direction, UpgradeType type){
+ return getMockUpgradeContext(cluster, direction, type, repositoryVersion2210);
+ }
+
+ /**
+ * @param cluster
+ * @param direction
+ * @param type
+ * @return
+ */
+ private UpgradeContext getMockUpgradeContext(Cluster cluster, Direction direction,
+ UpgradeType type, RepositoryVersionEntity repositoryVersion) {
+ Set<String> allServices = cluster.getServices().keySet();
+ return getMockUpgradeContext(cluster, direction, type, repositoryVersion,
+ RepositoryType.STANDARD, allServices);
+ }
+
+ /**
+ * @param cluster
+ * @param direction
+ * @param type
+ * @return
+ */
+ private UpgradeContext getMockUpgradeContext(Cluster cluster, Direction direction,
+ UpgradeType type, RepositoryVersionEntity repositoryVersion, RepositoryType repositoryType,
+ Set<String> services) {
+ return getMockUpgradeContext(cluster, direction, type, repositoryVersion,
+ repositoryType, services, m_masterHostResolver);
+ }
+
+ /**
+ * @param cluster
+ * @param direction
+ * @param type
+ * @return
+ */
+ private UpgradeContext getMockUpgradeContextNoReplay(Cluster cluster, Direction direction,
+ UpgradeType type, RepositoryVersionEntity repositoryVersion) {
+ Set<String> allServices = cluster.getServices().keySet();
+
+ UpgradeContext context = EasyMock.createNiceMock(UpgradeContext.class);
+ EasyMock.expect(context.getCluster()).andReturn(cluster).anyTimes();
+ EasyMock.expect(context.getType()).andReturn(type).anyTimes();
+ EasyMock.expect(context.getDirection()).andReturn(direction).anyTimes();
+ EasyMock.expect(context.getRepositoryVersion()).andReturn(repositoryVersion).anyTimes();
+ EasyMock.expect(context.getSupportedServices()).andReturn(allServices).anyTimes();
+ EasyMock.expect(context.getRepositoryType()).andReturn(RepositoryType.STANDARD).anyTimes();
+ EasyMock.expect(context.isScoped(EasyMock.anyObject(UpgradeScope.class))).andReturn(true).anyTimes();
+ return context;
+ }
+
+ /**
+ * @param cluster
+ * @param direction
+ * @param type
+ * @param repositoryType
+ * @param services
+ * @return
+ */
+ private UpgradeContext getMockUpgradeContext(Cluster cluster, Direction direction,
+ UpgradeType type, RepositoryVersionEntity repositoryVersion, RepositoryType repositoryType,
+ Set<String> services, MasterHostResolver resolver) {
+ UpgradeContext context = EasyMock.createNiceMock(UpgradeContext.class);
+ EasyMock.expect(context.getCluster()).andReturn(cluster).anyTimes();
+ EasyMock.expect(context.getType()).andReturn(type).anyTimes();
+ EasyMock.expect(context.getDirection()).andReturn(direction).anyTimes();
+ EasyMock.expect(context.getRepositoryVersion()).andReturn(repositoryVersion).anyTimes();
+ EasyMock.expect(context.getSupportedServices()).andReturn(services).anyTimes();
+ EasyMock.expect(context.getRepositoryType()).andReturn(repositoryType).anyTimes();
+ EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ EasyMock.expect(context.isScoped(EasyMock.anyObject(UpgradeScope.class))).andReturn(true).anyTimes();
+ EasyMock.expect(context.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+
+ final Map<String, RepositoryVersionEntity> targetRepositoryVersions = new HashMap<>();
+ for( String serviceName : services ){
+ targetRepositoryVersions.put(serviceName, repositoryVersion);
+ }
+
+ final Capture<String> repoVersionServiceName = EasyMock.newCapture();
+ EasyMock.expect(
+ context.getTargetRepositoryVersion(EasyMock.capture(repoVersionServiceName))).andAnswer(
+ new IAnswer<RepositoryVersionEntity>() {
+ @Override
+ public RepositoryVersionEntity answer() {
+ return targetRepositoryVersions.get(repoVersionServiceName.getValue());
+ }
+ }).anyTimes();
+
+ final Capture<String> serviceNameSupported = EasyMock.newCapture();
+ EasyMock.expect(context.isServiceSupported(EasyMock.capture(serviceNameSupported))).andAnswer(
+ new IAnswer<Boolean>() {
+ @Override
+ public Boolean answer() {
+ return targetRepositoryVersions.containsKey(serviceNameSupported.getValue());
+ }
+ }).anyTimes();
+
+
+ final Map<String, String> serviceNames = new HashMap<>();
+
+
+ final Capture<String> serviceDisplayNameArg1 = EasyMock.newCapture();
+ final Capture<String> serviceDisplayNameArg2 = EasyMock.newCapture();
+
+ context.setServiceDisplay(EasyMock.capture(serviceDisplayNameArg1), EasyMock.capture(serviceDisplayNameArg2));
+ EasyMock.expectLastCall().andAnswer(
+ new IAnswer<Object>() {
+ @Override
+ public Object answer() {
+ serviceNames.put(serviceDisplayNameArg1.getValue(), serviceDisplayNameArg2.getValue());
+ return null;
+ }
+ }).anyTimes();
+
+
+ final Map<String, String> componentNames = new HashMap<>();
+ final Capture<String> componentDisplayNameArg1 = EasyMock.newCapture();
+ final Capture<String> componentDisplayNameArg2 = EasyMock.newCapture();
+ final Capture<String> componentDisplayNameArg3 = EasyMock.newCapture();
+
+ context.setComponentDisplay(EasyMock.capture(componentDisplayNameArg1),
+ EasyMock.capture(componentDisplayNameArg2), EasyMock.capture(componentDisplayNameArg3));
+
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ @Override
+ public Object answer() {
+ componentNames.put(
+ componentDisplayNameArg1.getValue() + ":" + componentDisplayNameArg2.getValue(),
+ componentDisplayNameArg3.getValue());
+ return null;
+ }
+ }).anyTimes();
+
+ final Capture<String> getServiceDisplayArgument1 = EasyMock.newCapture();
+ EasyMock.expect(
+ context.getServiceDisplay(EasyMock.capture(getServiceDisplayArgument1))).andAnswer(
+ new IAnswer<String>() {
+ @Override
+ public String answer() {
+ return serviceNames.get(getServiceDisplayArgument1.getValue());
+ }
+ }).anyTimes();
+
+ final Capture<String> getComponentDisplayArgument1 = EasyMock.newCapture();
+ final Capture<String> getComponentDisplayArgument2 = EasyMock.newCapture();
+ EasyMock.expect(context.getComponentDisplay(EasyMock.capture(getComponentDisplayArgument1),
+ EasyMock.capture(getComponentDisplayArgument2))).andAnswer(new IAnswer<String>() {
+ @Override
+ public String answer() {
+ return componentNames.get(getComponentDisplayArgument1.getValue() + ":"
+ + getComponentDisplayArgument2.getValue());
+ }
+ }).anyTimes();
+
+ replay(context);
+ return context;
+ }
+
+ /**
* Extend {@link org.apache.ambari.server.stack.MasterHostResolver} in order
* to overwrite the JMX methods.
*/
private class MockMasterHostResolver extends MasterHostResolver {
- public MockMasterHostResolver(ConfigHelper configHelper, Cluster cluster, String version) {
- super(configHelper, cluster, version);
+ public MockMasterHostResolver(ConfigHelper configHelper, UpgradeContext context) {
+ super(configHelper, context);
}
/**
@@ -2299,8 +2461,8 @@ public class UpgradeHelperTest {
private static class BadMasterHostResolver extends MasterHostResolver {
- public BadMasterHostResolver(ConfigHelper configHelper, Cluster cluster, String version) {
- super(configHelper, cluster, version);
+ public BadMasterHostResolver(ConfigHelper configHelper, UpgradeContext context) {
+ super(configHelper, context);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
index 83a8945..f996aac 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
@@ -286,8 +286,7 @@ public class RetryUpgradeActionServiceTest {
upgrade.setUpgradePackage("some-name");
upgrade.setUpgradeType(UpgradeType.ROLLING);
upgrade.setDirection(Direction.UPGRADE);
- upgrade.setFromVersion("2.2.0.0");
- upgrade.setToVersion("2.2.0.1");
+ upgrade.setRepositoryVersion(repoVersionEntity);
upgradeDAO.create(upgrade);
cluster.setUpgradeEntity(upgrade);
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
index 0eef638..09fc5cd 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
@@ -19,7 +19,6 @@ package org.apache.ambari.server.state.stack.upgrade;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -52,8 +51,6 @@ public class StageWrapperBuilderTest extends EasyMockSupport {
@Test
public void testBuildOrder() throws Exception {
Cluster cluster = createNiceMock(Cluster.class);
- EasyMock.expect(cluster.getCurrentStackVersion()).andReturn(HDP_21).atLeastOnce();
- EasyMock.expect(cluster.getDesiredStackVersion()).andReturn(HDP_21).anyTimes();
RepositoryVersionEntity repoVersionEntity = createNiceMock(RepositoryVersionEntity.class);
EasyMock.expect(repoVersionEntity.getStackId()).andReturn(HDP_21).anyTimes();
@@ -62,10 +59,15 @@ public class StageWrapperBuilderTest extends EasyMockSupport {
EasyMock.expect(repoVersionDAO.findByStackNameAndVersion(EasyMock.anyString(),
EasyMock.anyString())).andReturn(repoVersionEntity).anyTimes();
- replayAll();
+ UpgradeContext upgradeContext = EasyMock.createNiceMock(UpgradeContext.class);
+ EasyMock.expect(upgradeContext.getCluster()).andReturn(cluster).anyTimes();
+ EasyMock.expect(upgradeContext.getType()).andReturn(UpgradeType.ROLLING).anyTimes();
+ EasyMock.expect(upgradeContext.getDirection()).andReturn(Direction.UPGRADE).anyTimes();
+ EasyMock.expect(upgradeContext.getRepositoryVersion()).andReturn(repoVersionEntity).anyTimes();
+ EasyMock.expect(upgradeContext.isComponentFailureAutoSkipped()).andReturn(false).anyTimes();
+ EasyMock.expect(upgradeContext.isServiceCheckFailureAutoSkipped()).andReturn(false).anyTimes();
- UpgradeContext upgradeContext = new UpgradeContext(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, HDP_21.toString(), new HashMap<String, Object>(), repoVersionDAO);
+ replayAll();
MockStageWrapperBuilder builder = new MockStageWrapperBuilder(null);
List<StageWrapper> stageWrappers = builder.build(upgradeContext);
@@ -90,8 +92,6 @@ public class StageWrapperBuilderTest extends EasyMockSupport {
@Test
public void testAutoSkipCheckInserted() throws Exception {
Cluster cluster = createNiceMock(Cluster.class);
- EasyMock.expect(cluster.getCurrentStackVersion()).andReturn(HDP_21).atLeastOnce();
- EasyMock.expect(cluster.getDesiredStackVersion()).andReturn(HDP_21).anyTimes();
RepositoryVersionEntity repoVersionEntity = createNiceMock(RepositoryVersionEntity.class);
EasyMock.expect(repoVersionEntity.getStackId()).andReturn(HDP_21).anyTimes();
@@ -100,13 +100,15 @@ public class StageWrapperBuilderTest extends EasyMockSupport {
EasyMock.expect(repoVersionDAO.findByStackNameAndVersion(EasyMock.anyString(),
EasyMock.anyString())).andReturn(repoVersionEntity).anyTimes();
- replayAll();
+ UpgradeContext upgradeContext = EasyMock.createNiceMock(UpgradeContext.class);
+ EasyMock.expect(upgradeContext.getCluster()).andReturn(cluster).anyTimes();
+ EasyMock.expect(upgradeContext.getType()).andReturn(UpgradeType.ROLLING).anyTimes();
+ EasyMock.expect(upgradeContext.getDirection()).andReturn(Direction.UPGRADE).anyTimes();
+ EasyMock.expect(upgradeContext.getRepositoryVersion()).andReturn(repoVersionEntity).anyTimes();
+ EasyMock.expect(upgradeContext.isComponentFailureAutoSkipped()).andReturn(true).anyTimes();
+ EasyMock.expect(upgradeContext.isServiceCheckFailureAutoSkipped()).andReturn(true).anyTimes();
- UpgradeContext upgradeContext = new UpgradeContext(cluster, UpgradeType.ROLLING,
- Direction.UPGRADE, HDP_21.toString(), new HashMap<String, Object>(), repoVersionDAO);
-
- upgradeContext.setAutoSkipComponentFailures(true);
- upgradeContext.setAutoSkipServiceCheckFailures(true);
+ replayAll();
Grouping grouping = new Grouping();
grouping.skippable = true;
[28/50] [abbrv] ambari git commit: AMBARI-21103. Creating a Downgrade
From the Web Client Is Passing an Unsupported Property (alexantonenko)
Posted by jo...@apache.org.
AMBARI-21103. Creating a Downgrade From the Web Client Is Passing an Unsupported Property (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a436eb2f
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a436eb2f
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a436eb2f
Branch: refs/heads/trunk
Commit: a436eb2f6f5b7c36d370bcc24de6edafd35ab72a
Parents: 11325b7
Author: Alex Antonenko <hi...@gmail.com>
Authored: Tue May 23 17:08:03 2017 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Tue May 23 17:08:03 2017 +0300
----------------------------------------------------------------------
.../app/controllers/main/admin/stack_and_upgrade_controller.js | 1 -
ambari-web/app/utils/ajax/ajax.js | 2 --
.../controllers/main/admin/stack_and_upgrade_controller_test.js | 1 -
3 files changed, 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/a436eb2f/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index 8c97d7b..a676f7429 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -734,7 +734,6 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
name: 'admin.downgrade.start',
sender: this,
data: {
- from: App.RepositoryVersion.find().findProperty('displayName', this.get('upgradeVersion')).get('repositoryVersion'),
value: currentVersion.repository_version,
label: currentVersion.repository_name,
id: currentVersion.id,
http://git-wip-us.apache.org/repos/asf/ambari/blob/a436eb2f/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 888dee3..929214c 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1730,8 +1730,6 @@ var urls = {
return {
data: JSON.stringify({
"Upgrade": {
- "from_version": data.from,
- "repository_version_id": data.id,
"upgrade_type": data.upgradeType,
"direction": "DOWNGRADE"
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a436eb2f/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index 698331e..4585991 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -1143,7 +1143,6 @@ describe('App.MainAdminStackAndUpgradeController', function() {
it('request-data is valid', function () {
expect(this.callArgs.data).to.eql({
- from: '2.3',
id: '1',
value: '2.2',
label: 'HDP-2.2',
[11/50] [abbrv] ambari git commit: AMBARI-20958 - Host Version on
Finalization Must Be Scoped Correctly Based on Upgrade Type (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 576f308..e2d9cc6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -973,7 +973,7 @@ public class UpgradeResourceProviderTest {
requestProps.clear();
// Now perform a downgrade
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.0");
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_direction");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.2.2.3");
@@ -992,8 +992,9 @@ public class UpgradeResourceProviderTest {
}
}
assertNotNull(upgrade);
- assertEquals("Downgrade groups reduced from 3 to 2", 2, upgrade.getUpgradeGroups().size());
- group = upgrade.getUpgradeGroups().get(1);
+ List<UpgradeGroupEntity> groups = upgrade.getUpgradeGroups();
+ assertEquals("Downgrade groups reduced from 3 to 2", 1, groups.size());
+ group = upgrade.getUpgradeGroups().get(0);
assertEquals("Execution items increased from 1 to 2", 2, group.getItems().size());
}
@@ -1060,7 +1061,7 @@ public class UpgradeResourceProviderTest {
assertEquals(oldStack, sc.getDesiredStackId());
for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
- assertEquals(oldStack.getStackVersion(), sch.getVersion());
+ assertEquals(repoVersionEntity2110.getVersion(), sch.getVersion());
}
}
}
@@ -1100,14 +1101,10 @@ public class UpgradeResourceProviderTest {
assertFalse(oldStack.equals(newStack));
for (Service s : cluster.getServices().values()) {
- assertEquals(newStack, s.getDesiredStackId());
+ assertEquals(repoVersionEntity2200, s.getDesiredRepositoryVersion());
for (ServiceComponent sc : s.getServiceComponents().values()) {
- assertEquals(newStack, sc.getDesiredStackId());
-
- for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
- assertEquals(newStack.getStackVersion(), sch.getVersion());
- }
+ assertEquals(repoVersionEntity2200, sc.getDesiredRepositoryVersion());
}
}
}
@@ -1568,7 +1565,7 @@ public class UpgradeResourceProviderTest {
component = service.getServiceComponent("DRPC_SERVER");
assertNotNull(component);
- assertEquals("UNKNOWN", component.getDesiredVersion());
+ assertEquals(repoVersionEntity2110, component.getDesiredRepositoryVersion());
hostComponent = component.getServiceComponentHost("h1");
assertEquals(UpgradeState.NONE, hostComponent.getUpgradeState());
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
index a74a1d2..e2e68fc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
@@ -17,7 +17,6 @@
*/
package org.apache.ambari.server.events.listeners.upgrade;
-import static org.easymock.EasyMock.anyString;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
@@ -28,6 +27,7 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.events.HostComponentVersionAdvertisedEvent;
import org.apache.ambari.server.events.publishers.VersionEventPublisher;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.state.Cluster;
@@ -63,6 +63,7 @@ public class StackVersionListenerTest extends EasyMockSupport {
private static final String UNKNOWN_VERSION = "UNKNOWN";
private static final String VALID_PREVIOUS_VERSION = "2.2.0.0";
private static final RepositoryVersionEntity DUMMY_REPOSITORY_VERSION_ENTITY = new RepositoryVersionEntity();
+ private static final HostVersionEntity DUMMY_HOST_VERSION_ENTITY = new HostVersionEntity();
private static final UpgradeEntity DUMMY_UPGRADE_ENTITY = new UpgradeEntity();
public static final String STACK_NAME = "HDP-2.4.0.0";
public static final String STACK_VERSION = "2.4.0.0";
@@ -72,7 +73,6 @@ public class StackVersionListenerTest extends EasyMockSupport {
private Service service;
private ServiceComponent serviceComponent;
private VersionEventPublisher publisher = new VersionEventPublisher();
- private AmbariMetaInfo ambariMetaInfo;
private ComponentInfo componentInfo;
private StackId stackId;
@@ -91,14 +91,6 @@ public class StackVersionListenerTest extends EasyMockSupport {
componentInfo = createNiceMock(ComponentInfo.class);
stackId = createNiceMock(StackId.class);
- ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
-
- expect(ambariMetaInfoProvider.get()).andReturn(ambariMetaInfo);
- expect(ambariMetaInfo.getComponent(anyString(),anyString(),anyString(),anyString())).andReturn(componentInfo);
-
- expect(cluster.getDesiredStackVersion()).andReturn(stackId).atLeastOnce();
- expect(stackId.getStackName()).andReturn(STACK_NAME);
- expect(stackId.getStackVersion()).andReturn(STACK_VERSION);
expect(cluster.getClusterId()).andReturn(CLUSTER_ID);
expect(cluster.getService(SERVICE_NAME)).andReturn(service).atLeastOnce();
@@ -139,7 +131,7 @@ public class StackVersionListenerTest extends EasyMockSupport {
expect(serviceComponent.isVersionAdvertised()).andReturn(Boolean.TRUE);
sch.setVersion(VALID_NEW_VERSION);
expectLastCall().once();
- expect(sch.recalculateHostVersionState()).andReturn(DUMMY_REPOSITORY_VERSION_ENTITY).once();
+ expect(sch.recalculateHostVersionState()).andReturn(DUMMY_HOST_VERSION_ENTITY).once();
replayAll();
@@ -152,7 +144,7 @@ public class StackVersionListenerTest extends EasyMockSupport {
expect(serviceComponent.isVersionAdvertised()).andReturn(Boolean.TRUE);
sch.setVersion(VALID_NEW_VERSION);
expectLastCall().once();
- expect(sch.recalculateHostVersionState()).andReturn(DUMMY_REPOSITORY_VERSION_ENTITY).once();
+ expect(sch.recalculateHostVersionState()).andReturn(DUMMY_HOST_VERSION_ENTITY).once();
replayAll();
@@ -182,7 +174,7 @@ public class StackVersionListenerTest extends EasyMockSupport {
expectLastCall().once();
sch.setVersion(VALID_NEW_VERSION);
expectLastCall().once();
- expect(sch.recalculateHostVersionState()).andReturn(DUMMY_REPOSITORY_VERSION_ENTITY).once();
+ expect(sch.recalculateHostVersionState()).andReturn(DUMMY_HOST_VERSION_ENTITY).once();
replayAll();
@@ -208,6 +200,8 @@ public class StackVersionListenerTest extends EasyMockSupport {
@Test
public void testSetUpgradeStateToCompleteWhenUpgradeIsInProgressAndNewVersionIsEqualToComponentDesiredVersion() {
+ expect(cluster.getUpgradeInProgress()).andReturn(DUMMY_UPGRADE_ENTITY);
+
expect(sch.getVersion()).andReturn(VALID_PREVIOUS_VERSION);
expect(sch.getUpgradeState()).andReturn(UpgradeState.IN_PROGRESS);
expect(serviceComponent.isVersionAdvertised()).andReturn(Boolean.TRUE);
@@ -221,6 +215,20 @@ public class StackVersionListenerTest extends EasyMockSupport {
}
@Test
+ public void testSetUpgradeStateToNoneWhenNoUpgradeAndNewVersionIsEqualToComponentDesiredVersion() {
+ expect(sch.getVersion()).andReturn(VALID_PREVIOUS_VERSION);
+ expect(sch.getUpgradeState()).andReturn(UpgradeState.IN_PROGRESS);
+ expect(serviceComponent.isVersionAdvertised()).andReturn(Boolean.TRUE);
+ sch.setUpgradeState(UpgradeState.NONE);
+ expectLastCall().once();
+
+ expect(serviceComponent.getDesiredVersion()).andStubReturn(VALID_NEW_VERSION);
+ replayAll();
+
+ sendEventAndVerify(VALID_NEW_VERSION);
+ }
+
+ @Test
public void testSetUpgradeStateToVersionMismatchWhenUpgradeIsInProgressAndNewVersionIsNotEqualToComponentDesiredVersion() {
expect(sch.getVersion()).andReturn(VALID_PREVIOUS_VERSION);
expect(sch.getUpgradeState()).andReturn(UpgradeState.IN_PROGRESS);
@@ -228,6 +236,9 @@ public class StackVersionListenerTest extends EasyMockSupport {
sch.setUpgradeState(UpgradeState.VERSION_MISMATCH);
expectLastCall().once();
+ sch.setVersion(VALID_NEW_VERSION);
+ expectLastCall().once();
+
expect(serviceComponent.getDesiredVersion()).andStubReturn(VALID_PREVIOUS_VERSION);
replayAll();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
index 6f06f43..38c9d1c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
@@ -26,10 +26,8 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import java.lang.reflect.Field;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -110,7 +108,6 @@ import org.apache.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.ArgumentCaptor;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -443,12 +440,14 @@ public class ClusterTest {
* @param hostAttributes Host Attributes
* @throws Exception
*/
- private void addHost(String hostName, Map<String, String> hostAttributes) throws Exception {
+ private Host addHost(String hostName, Map<String, String> hostAttributes) throws Exception {
clusters.addHost(hostName);
Host host = clusters.getHost(hostName);
host.setIPv4("ipv4");
host.setIPv6("ipv6");
host.setHostAttributes(hostAttributes);
+
+ return host;
}
/**
@@ -1640,14 +1639,16 @@ public class ClusterTest {
}
/**
- * Comprehensive test for transitionHostVersion and recalculateClusterVersion.
- * It creates a cluster with 3 hosts and 3 services, one of which does not advertise a version.
- * It then verifies that all 3 hosts have a version of CURRENT, and so does the cluster.
- * It then adds one more host with a component, so its HostVersion will initialize in CURRENT.
- * Next, it distributes a repo so that it is INSTALLED on the 4 hosts.
- * It then adds one more host, whose HostVersion will be OUT_OF_SYNC for the new repo.
- * After redistributing bits again, it simulates an RU.
- * Finally, some of the hosts will end up with a HostVersion in UPGRADED, and others still in INSTALLED.
+ * Comprehensive test for host versions. It creates a cluster with 3 hosts and
+ * 3 services, one of which does not advertise a version. It then verifies
+ * that all 3 hosts have a version of CURRENT, and so does the cluster. It
+ * then adds one more host with a component, so its HostVersion will
+ * initialize in CURRENT. Next, it distributes a repo so that it is INSTALLED
+ * on the 4 hosts. It then adds one more host, whose HostVersion will be
+ * OUT_OF_SYNC for the new repo. After redistributing bits again, it simulates
+ * an RU. Finally, some of the hosts will end up with a HostVersion in
+ * UPGRADED, and others still in INSTALLED.
+ *
* @throws Exception
*/
@Test
@@ -1736,13 +1737,21 @@ public class ClusterTest {
// Add one more Host, with only Ganglia on it. It should have a HostVersion in NOT_REQUIRED for v2,
// as Ganglia isn't versionable
- addHost("h-5", hostAttributes);
+ Host host5 = addHost("h-5", hostAttributes);
clusters.mapAndPublishHostsToCluster(Collections.singleton("h-5"), clusterName);
+
+ // verify that the new host version was added for the existing repo
+ HostVersionEntity h5Version1 = hostVersionDAO.findHostVersionByHostAndRepository(host5.getHostEntity(), rv1);
+ HostVersionEntity h5Version2 = hostVersionDAO.findHostVersionByHostAndRepository(host5.getHostEntity(), rv2);
+
+ Assert.assertEquals(RepositoryVersionState.NOT_REQUIRED, h5Version1.getState());
+ Assert.assertEquals(RepositoryVersionState.NOT_REQUIRED, h5Version2.getState());
+
ServiceComponentHost schHost5Serv3CompB = serviceComponentHostFactory.createNew(sc3CompB, "h-5");
sc3CompB.addServiceComponentHost(schHost5Serv3CompB);
// Host 5 will be in OUT_OF_SYNC, so redistribute bits to it so that it reaches a state of INSTALLED
- HostVersionEntity h5Version2 = hostVersionDAO.findByClusterStackVersionAndHost(clusterName, stackId, v2, "h-5");
+ h5Version2 = hostVersionDAO.findByClusterStackVersionAndHost(clusterName, stackId, v2, "h-5");
Assert.assertNotNull(h5Version2);
Assert.assertEquals(RepositoryVersionState.NOT_REQUIRED, h5Version2.getState());
@@ -1897,84 +1906,13 @@ public class ClusterTest {
List<HostVersionEntity> entities = hostVersionDAO.findByClusterAndHost(clusterName, "h-3");
assertTrue("Expected no host versions", null == entities || 0 == entities.size());
- c1.transitionHostVersionState(hostEntity, repositoryVersion, c1.getDesiredStackVersion());
+ List<ServiceComponentHost> componentsOnHost3 = c1.getServiceComponentHosts("h-3");
+ componentsOnHost3.iterator().next().recalculateHostVersionState();
entities = hostVersionDAO.findByClusterAndHost(clusterName, "h-3");
-
assertEquals(1, entities.size());
}
- @Test
- public void testTransitionHostVersionState_OutOfSync_BlankCurrent() throws Exception {
- /**
- * Checks case when there are 2 cluster stack versions present (CURRENT and OUT_OF_SYNC),
- * and we add a new host to cluster. On a new host, both CURRENT and OUT_OF_SYNC host
- * versions should be present
- */
- StackId stackId = new StackId("HDP-2.0.5");
- String clusterName = "c1";
- clusters.addCluster(clusterName, stackId);
- final Cluster c1 = clusters.getCluster(clusterName);
- Assert.assertEquals(clusterName, c1.getClusterName());
-
- clusters.addHost("h-1");
- clusters.addHost("h-2");
- String h3 = "h-3";
- clusters.addHost(h3);
-
- for (String hostName : new String[] { "h-1", "h-2", h3}) {
- Host h = clusters.getHost(hostName);
- h.setIPv4("ipv4");
- h.setIPv6("ipv6");
-
- Map<String, String> hostAttributes = new HashMap<>();
- hostAttributes.put("os_family", "redhat");
- hostAttributes.put("os_release_version", "5.9");
- h.setHostAttributes(hostAttributes);
- }
-
- String v1 = "2.0.5-1";
- String v2 = "2.0.5-2";
- c1.setDesiredStackVersion(stackId);
- RepositoryVersionEntity rve1 = helper.getOrCreateRepositoryVersion(stackId,
- v1);
- RepositoryVersionEntity rve2 = helper.getOrCreateRepositoryVersion(stackId,
- v2);
-
- c1.setCurrentStackVersion(stackId);
-
- clusters.mapHostToCluster("h-1", clusterName);
- clusters.mapHostToCluster("h-2", clusterName);
-
- RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
-
- Service service = c1.addService("ZOOKEEPER", repositoryVersion);
- ServiceComponent sc = service.addServiceComponent("ZOOKEEPER_SERVER");
- sc.addServiceComponentHost("h-1");
- sc.addServiceComponentHost("h-2");
-
- clusters.mapHostToCluster(h3, clusterName);
-
- // This method is usually called when we receive heartbeat from new host
- HostEntity hostEntity3 = mock(HostEntity.class);
- when(hostEntity3.getHostName()).thenReturn(h3);
-
- // HACK: to workaround issue with NullPointerException at
- // org.eclipse.persistence.internal.sessions.MergeManager.registerObjectForMergeCloneIntoWorkingCopy(MergeManager.java:1037)
- // during hostVersionDAO.merge()
- HostVersionDAO hostVersionDAOMock = mock(HostVersionDAO.class);
- Field field = ClusterImpl.class.getDeclaredField("hostVersionDAO");
- field.setAccessible(true);
- field.set(c1, hostVersionDAOMock);
-
- ArgumentCaptor<HostVersionEntity> hostVersionCaptor = ArgumentCaptor.forClass(HostVersionEntity.class);
-
- c1.transitionHostVersionState(hostEntity3, rve1, stackId);
-
- verify(hostVersionDAOMock).merge(hostVersionCaptor.capture());
- assertEquals(hostVersionCaptor.getValue().getState(), RepositoryVersionState.CURRENT);
- }
-
/**
* Tests that an existing configuration can be successfully updated without
* creating a new version.
[26/50] [abbrv] ambari git commit: AMBARI-21072. Removal of from/to
Upgrade Versions in Web Client (alexantonenko)
Posted by jo...@apache.org.
AMBARI-21072. Removal of from/to Upgrade Versions in Web Client (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1e2ccbf0
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1e2ccbf0
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1e2ccbf0
Branch: refs/heads/trunk
Commit: 1e2ccbf0869283aafcdab8d37ee3fc36e4b41179
Parents: ace89b7
Author: Alex Antonenko <hi...@gmail.com>
Authored: Fri May 19 15:52:06 2017 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Fri May 19 15:52:06 2017 +0300
----------------------------------------------------------------------
.../assets/data/stack_versions/upgrades.json | 17 +++++++++--
.../main/admin/stack_and_upgrade_controller.js | 19 ++++++------
.../app/mappers/stack_upgrade_history_mapper.js | 10 ++++--
ambari-web/app/messages.js | 11 ++++---
.../stack_version/stack_upgrade_history.js | 3 +-
ambari-web/app/utils/ajax/ajax.js | 2 +-
.../admin/stack_upgrade/upgrade_history_view.js | 5 +--
.../admin/stack_and_upgrade_controller_test.js | 7 ++---
.../test/controllers/wizard/step8_test.js | 5 ++-
.../stack_upgrade_history_mapper_test.js | 32 +++++++++-----------
10 files changed, 62 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/app/assets/data/stack_versions/upgrades.json
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/data/stack_versions/upgrades.json b/ambari-web/app/assets/data/stack_versions/upgrades.json
index 5d0d743..f041994 100644
--- a/ambari-web/app/assets/data/stack_versions/upgrades.json
+++ b/ambari-web/app/assets/data/stack_versions/upgrades.json
@@ -1,5 +1,5 @@
{
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c/upgrades?fields=Upgrade/request_status,Upgrade/to_version,Upgrade/request_id,Upgrade/direction",
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c/upgrades?fields=Upgrade/request_status,Upgrade/versions,Upgrade/request_id,Upgrade/direction",
"items": [
{
"href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c/upgrades/19",
@@ -8,7 +8,20 @@
"direction": "UPGRADE",
"request_id": 19,
"request_status": "COMPLETED",
- "to_version": "2.2.3.0-2610"
+ "versions": {
+ "STORM": {
+ "from_repository_id": 1,
+ "from_repository_version": "2.5.0.0-1237",
+ "target_repository_id": 5,
+ "target_repository_version": "2.5.4.0-121"
+ },
+ "ZOOKEEPER": {
+ "from_repository_id": 2,
+ "from_repository_version": "2.5.2.9-9999",
+ "target_repository_id": 5,
+ "target_repository_version": "2.5.4.0-121"
+ }
+ }
}
}
]
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index d444b2d..8c97d7b 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -154,7 +154,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
if (this.get('isDowngrade')) {
return Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format(this.get('upgradeVersion'));
}
- return Em.I18n.t('admin.stackUpgrade.dialog.header').format(this.get('upgradeTypeDisplayName'), this.get('upgradeVersion'));
+ return Em.I18n.t('admin.stackUpgrade.dialog.header').format(this.get('upgradeVersion'));
}.property('upgradeTypeDisplayName', 'upgradeVersion', 'isDowngrade'),
/**
@@ -897,7 +897,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
upgradeSuccessCallback: function (data, opt, params) {
this.set('upgradeData', null);
this.set('upgradeId', data.resources[0].Upgrade.request_id);
- this.set('fromVersion', data.resources[0].Upgrade.from_version);
+ this.set('fromVersion', params.isDowngrade ? data.resources[0].Upgrade.associated_version : null);
this.set('upgradeVersion', params.label);
this.set('isDowngrade', !!params.isDowngrade);
var upgradeMethod = this.get('upgradeMethods').findProperty('type', params.type),
@@ -921,7 +921,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
this.setDBProperties({
upgradeVersion: params.label,
upgradeId: data.resources[0].Upgrade.request_id,
- fromVersion: data.resources[0].Upgrade.from_version,
+ fromVersion: params.isDowngrade ? data.resources[0].Upgrade.associated_version : null,
upgradeState: 'PENDING',
isDowngrade: !!params.isDowngrade,
upgradeType: upgradeType,
@@ -1176,13 +1176,12 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
version.skipComponentFailures = this.get('skipComponentFailures');
version.skipSCFailures = this.get('skipSCFailures');
- var fromVersion = self.get('upgradeVersion') || App.RepositoryVersion.find().findProperty('status', 'CURRENT').get('displayName');
var toVersion = version.get('displayName');
var bodyMessage = Em.Object.create({
confirmButton: Em.I18n.t('yes'),
confirmMsg: upgradeMethod.get('type') === 'ROLLING' ?
- Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg').format(fromVersion, toVersion) :
- Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg').format(fromVersion, toVersion)
+ Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg').format(toVersion) :
+ Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg').format(toVersion)
});
return App.showConfirmationFeedBackPopup(function (query) {
return self.runPreUpgradeCheck.call(self, version);
@@ -1954,11 +1953,11 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
restoreLastUpgrade: function(lastUpgradeData) {
var self = this;
var upgradeType = this.get('upgradeMethods').findProperty('type', lastUpgradeData.Upgrade.upgrade_type);
-
+ const isDowngrade = lastUpgradeData.Upgrade.direction === 'DOWNGRADE';
this.setDBProperties({
- fromVersion: lastUpgradeData.Upgrade.from_version,
+ fromVersion: isDowngrade ? lastUpgradeData.Upgrade.associated_version : null,
upgradeId: lastUpgradeData.Upgrade.request_id,
- isDowngrade: lastUpgradeData.Upgrade.direction === 'DOWNGRADE',
+ isDowngrade,
upgradeState: lastUpgradeData.Upgrade.request_status,
upgradeType: lastUpgradeData.Upgrade.upgrade_type,
isWizardRestricted: upgradeType.get('isWizardRestricted'),
@@ -1970,7 +1969,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
})
});
this.loadRepoVersionsToModel().done(function () {
- var toVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', lastUpgradeData.Upgrade.to_version);
+ var toVersion = isDowngrade ? null : App.RepositoryVersion.find().findProperty('repositoryVersion', lastUpgradeData.Upgrade.associated_version);
self.setDBProperty('upgradeVersion', toVersion && toVersion.get('displayName'));
self.initDBProperties();
self.loadUpgradeData(true);
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/app/mappers/stack_upgrade_history_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/stack_upgrade_history_mapper.js b/ambari-web/app/mappers/stack_upgrade_history_mapper.js
index 25e9d06..47d248a 100644
--- a/ambari-web/app/mappers/stack_upgrade_history_mapper.js
+++ b/ambari-web/app/mappers/stack_upgrade_history_mapper.js
@@ -26,8 +26,8 @@ App.stackUpgradeHistoryMapper = App.QuickDataMapper.create({
"request_id": "Upgrade.request_id",
"cluster_name": "Upgrade.cluster_name",
"direction": "Upgrade.direction",
- "from_version": "Upgrade.from_version",
- "to_version": "Upgrade.to_version",
+ "associated_version": "Upgrade.associated_version",
+ "versions" : "Upgrade.versions",
"end_time":"Upgrade.end_time",
"start_time":"Upgrade.start_time",
"create_time": "Upgrade.create_time",
@@ -44,6 +44,12 @@ App.stackUpgradeHistoryMapper = App.QuickDataMapper.create({
var result = [];
json.items.forEach(function(item) {
var parseResult = this.parseIt(item, this.get('config'));
+ if (parseResult.direction === 'UPGRADE') {
+ parseResult.to_version = parseResult.associated_version;
+ }
+ else {
+ parseResult.from_version = parseResult.associated_version;
+ }
result.push(parseResult);
}, this);
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index f34cbdc..b7ccdd5 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1779,8 +1779,8 @@ Em.I18n.translations = {
'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed.msg':'All checks passed',
'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.failed.tooltip':'Option not available',
'admin.stackVersions.version.upgrade.upgradeOptions.notAllowed':'Not allowed by the current version',
- 'admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg': 'You are about to perform an <b>Express Upgrade</b> from <b>{0}</b> to <b>{1}</b>. This will incur cluster downtime. Are you sure you want to proceed?',
- 'admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg': 'You are about to perform a <b>Rolling Upgrade</b> from <b>{0}</b> to <b>{1}</b>. Are you sure you want to proceed?',
+ 'admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg': 'You are about to perform an <b>Express Upgrade</b> to <b>{1}</b>. This will incur cluster downtime. Are you sure you want to proceed?',
+ 'admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg': 'You are about to perform a <b>Rolling Upgrade</b> to <b>{1}</b>. Are you sure you want to proceed?',
'admin.stackVersions.version.upgrade.upgradeOptions.error': 'Could not proceed with upgrade:',
'admin.stackVersions.version.upgrade.upgradeOptions.loading': 'Checking for supported upgrade types...',
@@ -1815,7 +1815,8 @@ Em.I18n.translations = {
'admin.stackVersions.upgradeHistory.filter.failed.upgrade': 'Failed Upgrade ({0})',
'admin.stackVersions.upgradeHistory.filter.failed.downgrade': 'Failed Downgrade ({0})',
'admin.stackVersions.upgradeHistory.no.history': 'No upgrade/downgrade history available',
- 'admin.stackVersions.upgradeHistory.record.title': '{0} {1} to {2}',
+ 'admin.stackVersions.upgradeHistory.record.title.upgrade': '{0} {1} to {2}',
+ 'admin.stackVersions.upgradeHistory.record.title.downgrade': '{0} {1} from {2}',
'admin.stackUpgrade.preCheck.warning.message': "{0} Warning {1}",
'admin.stackUpgrade.preCheck.bypass.message': "{0} Error {1}",
@@ -1866,8 +1867,8 @@ Em.I18n.translations = {
'admin.stackUpgrade.state.paused.downgrade': "Downgrade Paused",
'admin.stackUpgrade.state.aborted.downgrade': "Downgrade Aborted",
'admin.stackUpgrade.state.completed.downgrade': "Downgrade Finished",
- 'admin.stackUpgrade.dialog.header': "{0} to {1}",
- 'admin.stackUpgrade.dialog.downgrade.header': "Downgrade to {0}",
+ 'admin.stackUpgrade.dialog.header': "Upgrade to {0}",
+ 'admin.stackUpgrade.dialog.downgrade.header': "Downgrade from {0}",
'admin.stackUpgrade.dialog.operationFailed': "This operation failed.",
'admin.stackUpgrade.dialog.stop': "Stop Upgrade",
'admin.stackUpgrade.dialog.continue': "Ignore and Proceed",
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/app/models/stack_version/stack_upgrade_history.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_version/stack_upgrade_history.js b/ambari-web/app/models/stack_version/stack_upgrade_history.js
index 7276c5c..9b0c8b2 100644
--- a/ambari-web/app/models/stack_version/stack_upgrade_history.js
+++ b/ambari-web/app/models/stack_version/stack_upgrade_history.js
@@ -24,8 +24,7 @@ App.StackUpgradeHistory = DS.Model.extend({
requestId: DS.attr('number'),
clusterName: DS.attr('string'),
direction: DS.attr('string'),
- fromVersion: DS.attr('string'),
- toVersion: DS.attr('string'),
+ associatedVersion: DS.attr('string'),
requestStatus: DS.attr('string'),
upgradeType: DS.attr('string'),
downgradeAllowed: DS.attr('boolean'),
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 4dc04f4..888dee3 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1357,7 +1357,7 @@ var urls = {
'mock': '/data/clusters/info.json'
},
'cluster.load_last_upgrade': {
- 'real': '/clusters/{clusterName}/upgrades?fields=Upgrade/request_status,Upgrade/request_id,Upgrade/to_version,Upgrade/from_version,Upgrade/direction,Upgrade/upgrade_type,Upgrade/downgrade_allowed,Upgrade/skip_failures,Upgrade/skip_service_check_failures',
+ 'real': `/clusters/{clusterName}/upgrades?fields=Upgrade/request_status,Upgrade/request_id,Upgrade/versions,Upgrade/associated_version,Upgrade/direction,Upgrade/upgrade_type,Upgrade/downgrade_allowed,Upgrade/skip_failures,Upgrade/skip_service_check_failures`,
'mock': '/data/stack_versions/upgrades.json'
},
'cluster.update_upgrade_version': {
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js
index aeee96e..718ddc7 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js
@@ -290,16 +290,17 @@ App.MainAdminStackUpgradeHistoryView = App.TableView.extend(App.TableServerViewM
showUpgradeHistoryRecord: function (event) {
var record = event.context;
var direction = App.format.normalizeName(record.get('direction'));
- var toVersion = record.get('toVersion');
+ var associatedVersion = record.get('associatedVersion');
var type = this.get('upgradeMethods').findProperty('type', record.get('upgradeType'));
var displayName = type ? type.get('displayName') : App.format.normalizeName(record.get('upgradeType'));
+ const i18nKeySuffix = direction === 'UPGRADE' ? 'upgrade' : 'downgrade';
this.get('controller').set('currentUpgradeRecord', record);
App.ModalPopup.show({
classNames: ['wide-modal-wrapper'],
modalDialogClasses: ['modal-xlg'],
- header: Em.I18n.t('admin.stackVersions.upgradeHistory.record.title').format(displayName, direction, toVersion),
+ header: Em.I18n.t(`admin.stackVersions.upgradeHistory.record.title.${i18nKeySuffix}`).format(displayName, direction, associatedVersion),
bodyClass: App.MainAdminStackUpgradeHistoryDetailsView,
primary: Em.I18n.t('common.dismiss'),
secondary: null,
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index fa0a0b9..698331e 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -1741,7 +1741,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
var data = {
Upgrade: {
- from_version: '1.1',
+ associated_version: '1.1',
request_id: 1,
direction: 'UPGRADE',
request_status: 'PENDING',
@@ -1781,7 +1781,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
it('proper data is saved to the localDB', function () {
expect(controller.setDBProperties.getCall(0).args[0]).to.eql({
- fromVersion: '1.1',
+ fromVersion: null,
upgradeId: 1,
isDowngrade: false,
upgradeState: 'PENDING',
@@ -1798,9 +1798,6 @@ describe('App.MainAdminStackAndUpgradeController', function() {
it('models are saved', function () {
expect(controller.loadRepoVersionsToModel.calledOnce).to.be.true;
});
- it('correct upgradeVersion is saved to the DB', function () {
- expect(controller.setDBProperty.calledWith('upgradeVersion', 'HDP-1')).to.be.true;
- });
it('initDBProperties is called', function () {
expect(controller.initDBProperties.calledOnce).to.be.true;
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/test/controllers/wizard/step8_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step8_test.js b/ambari-web/test/controllers/wizard/step8_test.js
index 1a3214e..6435aa3 100644
--- a/ambari-web/test/controllers/wizard/step8_test.js
+++ b/ambari-web/test/controllers/wizard/step8_test.js
@@ -157,11 +157,11 @@ describe('App.WizardStep8Controller', function () {
tests.forEach(function (test) {
it(test.selectedServices.join(','), function () {
- var services = test.selectedServices.map(function (serviceName) {
+ var mappedServices = test.selectedServices.map(function (serviceName) {
return Em.Object.create({isSelected: true, isInstalled: false, serviceName: serviceName});
});
installerStep8Controller = App.WizardStep8Controller.create({
- content: {controllerName: 'addServiceController', services: services},
+ content: {controllerName: 'addServiceController', services: mappedServices},
configs: configs
});
var serviceData = installerStep8Controller.createSelectedServicesData();
@@ -2343,7 +2343,6 @@ describe('App.WizardStep8Controller', function () {
});
//TODO
describe('#generateBlueprint', function () {
- console.log("testing.......")
beforeEach(function () {
installerStep8Controller = getController();
installerStep8Controller.set('configs', configs);
http://git-wip-us.apache.org/repos/asf/ambari/blob/1e2ccbf0/ambari-web/test/mappers/stack_upgrade_history_mapper_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mappers/stack_upgrade_history_mapper_test.js b/ambari-web/test/mappers/stack_upgrade_history_mapper_test.js
index 07027e1..aa1501f 100644
--- a/ambari-web/test/mappers/stack_upgrade_history_mapper_test.js
+++ b/ambari-web/test/mappers/stack_upgrade_history_mapper_test.js
@@ -37,7 +37,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1463779266087,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "nonrolling-upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Upgrading to 2.4.0.0-169",
@@ -61,7 +61,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1463779299440,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "nonrolling-upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Downgrading to 2.3.6.0-3712",
@@ -85,7 +85,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1463780757685,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "nonrolling-upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Upgrading to 2.4.0.0-169",
@@ -109,7 +109,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1463780794009,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "nonrolling-upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Downgrading to 2.3.6.0-3712",
@@ -133,7 +133,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1463781341452,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "nonrolling-upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Upgrading to 2.4.0.0-169",
@@ -157,7 +157,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1463781371778,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "nonrolling-upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Downgrading to 2.3.6.0-3712",
@@ -181,7 +181,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1464120881477,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Upgrading to 2.4.0.0-169",
@@ -205,7 +205,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1464120918774,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Downgrading to 2.3.6.0-3712",
@@ -229,7 +229,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1464121132856,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Upgrading to 2.4.0.0-169",
@@ -253,7 +253,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1464121167178,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Downgrading to 2.3.6.0-3712",
@@ -277,7 +277,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1464121301821,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "nonrolling-upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Upgrading to 2.4.0.0-169",
@@ -301,7 +301,7 @@ describe('App.stackUpgradeHistoryMapper', function () {
"downgrade_allowed" : true,
"end_time" : 1464121336149,
"exclusive" : false,
- "from_version" : "2.3.6.0-3712",
+ "associated_version" : "2.3.6.0-3712",
"pack" : "nonrolling-upgrade-2.4",
"progress_percent" : 100.0,
"request_context" : "Downgrading to 2.3.6.0-3712",
@@ -325,13 +325,11 @@ describe('App.stackUpgradeHistoryMapper', function () {
"direction" : "DOWNGRADE",
"downgradeAllowed" : true,
"endTime" : 1464121336149,
- "fromVersion" : "2.3.6.0-3712",
"requestId" : 18,
"requestStatus" : "COMPLETED",
"skipFailures" : false,
"skipServiceCheckFailures" : false,
"startTime" : 1464121302941,
- "toVersion" : "2.3.6.0-3712",
"upgradeType" : "NON_ROLLING"
};
@@ -353,10 +351,10 @@ describe('App.stackUpgradeHistoryMapper', function () {
var total_upgrades = 0;
upgrades.forEach(function(upgrade){
var direction = upgrade.get('direction')
- if ('DOWNGRADE' == direction){
+ if ('DOWNGRADE' === direction){
total_downgrades++;
}
- if ('UPGRADE' == direction){
+ if ('UPGRADE' === direction){
total_upgrades++;
}
});
@@ -369,4 +367,4 @@ describe('App.stackUpgradeHistoryMapper', function () {
});
});
});
-});
\ No newline at end of file
+});
[08/50] [abbrv] ambari git commit: AMBARI-20957. Remove
cluster_version use (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java b/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java
index 584ce98..c43d3ba 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java
@@ -30,7 +30,6 @@ import org.apache.ambari.server.AmbariService;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.state.Cluster;
@@ -165,12 +164,6 @@ public class RetryUpgradeActionService extends AbstractScheduledService {
* @return Request Id of active stack upgrade.
*/
private Long getActiveUpgradeRequestId(Cluster cluster) {
- ClusterVersionEntity currentVersion = cluster.getCurrentClusterVersion();
-
- if (currentVersion == null) {
- LOG.debug("No Cluster Version exists as CURRENT. Skip retrying failed tasks.");
- return null;
- }
// May be null, and either upgrade or downgrade
UpgradeEntity currentUpgrade = cluster.getUpgradeInProgress();
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
index 11e90ee..a11fd96 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
@@ -51,7 +51,6 @@ import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
import org.apache.ambari.server.orm.dao.AlertDefinitionDAO;
import org.apache.ambari.server.orm.dao.ArtifactDAO;
import org.apache.ambari.server.orm.dao.ClusterDAO;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.DaoUtils;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
@@ -60,7 +59,6 @@ import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
import org.apache.ambari.server.orm.entities.ArtifactEntity;
import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@ -724,7 +722,6 @@ public class UpgradeCatalog220 extends AbstractUpgradeCatalog {
StackDAO stackDAO = injector.getInstance(StackDAO.class);
RepositoryVersionHelper repositoryVersionHelper = injector.getInstance(RepositoryVersionHelper.class);
RepositoryVersionDAO repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
- ClusterVersionDAO clusterVersionDAO = injector.getInstance(ClusterVersionDAO.class);
HostVersionDAO hostVersionDAO = injector.getInstance(HostVersionDAO.class);
Clusters clusters = amc.getClusters();
@@ -766,6 +763,7 @@ public class UpgradeCatalog220 extends AbstractUpgradeCatalog {
repoVersionEntity.getId(), displayName, operatingSystems));
}
+ /*
// Create the Cluster Version if it doesn't already exist.
ClusterVersionEntity clusterVersionEntity = clusterVersionDAO.findByClusterAndStackAndVersion(cluster.getClusterName(),
stackId, hardcodedInitialVersion);
@@ -791,6 +789,7 @@ public class UpgradeCatalog220 extends AbstractUpgradeCatalog {
clusterVersionEntity.getId(), cluster.getClusterName(), clusterVersionEntity.getRepositoryVersion().getVersion(),
clusterVersionEntity.getState()));
}
+ */
// Create the Host Versions if they don't already exist.
Collection<HostEntity> hosts = clusterEntity.getHostEntities();
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
index c2a9239..359d446 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -163,17 +163,6 @@ CREATE TABLE repo_version (
CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
-CREATE TABLE cluster_version (
- id BIGINT NOT NULL,
- repo_version_id BIGINT NOT NULL,
- cluster_id BIGINT NOT NULL,
- state VARCHAR(32) NOT NULL,
- start_time BIGINT NOT NULL,
- end_time BIGINT,
- user_name VARCHAR(32),
- CONSTRAINT PK_cluster_version PRIMARY KEY (id),
- CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
- CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
CREATE TABLE servicecomponentdesiredstate (
id BIGINT NOT NULL,
@@ -1102,8 +1091,6 @@ INSERT INTO ambari_sequences (sequence_name, sequence_value)
union all
select 'repo_version_id_seq', 0 FROM SYSIBM.SYSDUMMY1
union all
- select 'cluster_version_id_seq', 0 FROM SYSIBM.SYSDUMMY1
- union all
select 'host_version_id_seq', 0 FROM SYSIBM.SYSDUMMY1
union all
select 'service_config_id_seq', 1 FROM SYSIBM.SYSDUMMY1
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 48d2c35..d5221dc 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -183,17 +183,6 @@ CREATE TABLE repo_version (
CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
-CREATE TABLE cluster_version (
- id BIGINT NOT NULL,
- repo_version_id BIGINT NOT NULL,
- cluster_id BIGINT NOT NULL,
- state VARCHAR(32) NOT NULL,
- start_time BIGINT NOT NULL,
- end_time BIGINT,
- user_name VARCHAR(32),
- CONSTRAINT PK_cluster_version PRIMARY KEY (id),
- CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
- CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
CREATE TABLE servicecomponentdesiredstate (
id BIGINT NOT NULL,
@@ -1086,7 +1075,6 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES
('permission_id_seq', 7),
('privilege_id_seq', 1),
('config_id_seq', 1),
- ('cluster_version_id_seq', 0),
('host_version_id_seq', 0),
('service_config_id_seq', 1),
('alert_definition_id_seq', 0),
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index 26201fc..d49bd95 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -164,17 +164,6 @@ CREATE TABLE repo_version (
CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
-CREATE TABLE cluster_version (
- id NUMBER(19) NULL,
- repo_version_id NUMBER(19) NOT NULL,
- cluster_id NUMBER(19) NOT NULL,
- state VARCHAR2(32) NOT NULL,
- start_time NUMBER(19) NOT NULL,
- end_time NUMBER(19),
- user_name VARCHAR2(32),
- CONSTRAINT PK_cluster_version PRIMARY KEY (id),
- CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
- CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
CREATE TABLE servicecomponentdesiredstate (
id NUMBER(19) NOT NULL,
@@ -1065,7 +1054,6 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('principal_i
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('permission_id_seq', 7);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('privilege_id_seq', 1);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('config_id_seq', 1);
-INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('cluster_version_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('host_version_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('service_config_id_seq', 1);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('alert_definition_id_seq', 0);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index 156fc08..2bd5a9d 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -163,18 +163,6 @@ CREATE TABLE repo_version (
CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
-CREATE TABLE cluster_version (
- id BIGINT NOT NULL,
- repo_version_id BIGINT NOT NULL,
- cluster_id BIGINT NOT NULL,
- state VARCHAR(32) NOT NULL,
- start_time BIGINT NOT NULL,
- end_time BIGINT,
- user_name VARCHAR(32),
- CONSTRAINT PK_cluster_version PRIMARY KEY (id),
- CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
- CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
-
CREATE TABLE servicecomponentdesiredstate (
id BIGINT NOT NULL,
component_name VARCHAR(255) NOT NULL,
@@ -1074,7 +1062,6 @@ INSERT INTO ambari_sequences (sequence_name, sequence_value) VALUES
('alert_current_id_seq', 0),
('config_id_seq', 1),
('repo_version_id_seq', 0),
- ('cluster_version_id_seq', 0),
('host_version_id_seq', 0),
('service_config_id_seq', 1),
('upgrade_id_seq', 0),
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
index 979ea44..72ae04b 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -162,18 +162,6 @@ CREATE TABLE repo_version (
CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
-CREATE TABLE cluster_version (
- id NUMERIC(19) NOT NULL,
- repo_version_id NUMERIC(19) NOT NULL,
- cluster_id NUMERIC(19) NOT NULL,
- state VARCHAR(32) NOT NULL,
- start_time NUMERIC(19) NOT NULL,
- end_time NUMERIC(19),
- user_name VARCHAR(32),
- CONSTRAINT PK_cluster_version PRIMARY KEY (id),
- CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
- CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
-
CREATE TABLE servicecomponentdesiredstate (
id NUMERIC(19) NOT NULL,
component_name VARCHAR(255) NOT NULL,
@@ -1064,7 +1052,6 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('principal_i
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('permission_id_seq', 7);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('privilege_id_seq', 1);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('config_id_seq', 1);
-INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('cluster_version_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('host_version_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('service_config_id_seq', 1);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('alert_definition_id_seq', 0);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
index 08c71ff..676fde2 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -176,18 +176,6 @@ CREATE TABLE repo_version (
CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
-CREATE TABLE cluster_version (
- id BIGINT NOT NULL,
- cluster_id BIGINT NOT NULL,
- repo_version_id BIGINT NOT NULL,
- STATE VARCHAR(255) NOT NULL,
- start_time BIGINT NOT NULL,
- end_time BIGINT,
- user_name VARCHAR(255),
- CONSTRAINT PK_cluster_version PRIMARY KEY CLUSTERED (id),
- CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
- CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
-
CREATE TABLE servicecomponentdesiredstate (
id BIGINT NOT NULL,
component_name VARCHAR(255) NOT NULL,
@@ -1098,7 +1086,6 @@ BEGIN TRANSACTION
('alert_current_id_seq', 0),
('config_id_seq', 11),
('repo_version_id_seq', 0),
- ('cluster_version_id_seq', 0),
('host_version_id_seq', 0),
('service_config_id_seq', 1),
('upgrade_id_seq', 0),
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/META-INF/persistence.xml b/ambari-server/src/main/resources/META-INF/persistence.xml
index 0375650..8fd539a 100644
--- a/ambari-server/src/main/resources/META-INF/persistence.xml
+++ b/ambari-server/src/main/resources/META-INF/persistence.xml
@@ -24,11 +24,9 @@
<class>org.apache.ambari.server.orm.entities.BlueprintSettingEntity</class>
<class>org.apache.ambari.server.orm.entities.BlueprintEntity</class>
<class>org.apache.ambari.server.orm.entities.ClusterConfigEntity</class>
- <class>org.apache.ambari.server.orm.entities.ClusterConfigMappingEntity</class>
<class>org.apache.ambari.server.orm.entities.ClusterEntity</class>
<class>org.apache.ambari.server.orm.entities.ClusterServiceEntity</class>
<class>org.apache.ambari.server.orm.entities.ClusterStateEntity</class>
- <class>org.apache.ambari.server.orm.entities.ClusterVersionEntity</class>
<class>org.apache.ambari.server.orm.entities.ConfigGroupConfigMappingEntity</class>
<class>org.apache.ambari.server.orm.entities.ConfigGroupEntity</class>
<class>org.apache.ambari.server.orm.entities.ConfigGroupHostMappingEntity</class>
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java
index c5be8f4..898875e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java
@@ -27,16 +27,14 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.sql.SQLException;
-import java.util.ArrayList;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
+import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.easymock.Capture;
import org.easymock.EasyMock;
@@ -44,6 +42,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import com.google.common.collect.Lists;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
@@ -53,13 +52,13 @@ public class StateRecoveryManagerTest {
private Injector injector;
private HostVersionDAO hostVersionDAOMock;
- private ClusterVersionDAO clusterVersionDAOMock;
+ private ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAOMock;
@Before
public void setup() throws Exception {
// Create instances of mocks
- clusterVersionDAOMock = createNiceMock(ClusterVersionDAO.class);
hostVersionDAOMock = createNiceMock(HostVersionDAO.class);
+ serviceComponentDesiredStateDAOMock = createNiceMock(ServiceComponentDesiredStateDAO.class);
// Initialize injector
InMemoryDefaultTestModule module = new InMemoryDefaultTestModule();
injector = Guice.createInjector(Modules.override(module).with(new MockModule()));
@@ -86,13 +85,12 @@ public class StateRecoveryManagerTest {
final Capture<RepositoryVersionState> upgradedHostVersionCapture = EasyMock.newCapture();
final Capture<RepositoryVersionState> currentHostVersionCapture = EasyMock.newCapture();
- expect(hostVersionDAOMock.findAll()).andReturn(new ArrayList<HostVersionEntity>() {{
- add(getHostVersionMock("install_failed_version", RepositoryVersionState.INSTALL_FAILED, installFailedHostVersionCapture));
- add(getHostVersionMock("installing_version", RepositoryVersionState.INSTALLING, installingHostVersionCapture));
- add(getHostVersionMock("installed_version", RepositoryVersionState.INSTALLED, installedHostVersionCapture));
- add(getHostVersionMock("out_of_sync_version", RepositoryVersionState.OUT_OF_SYNC, outOfSyncHostVersionCapture));
- add(getHostVersionMock("current_version", RepositoryVersionState.CURRENT, currentHostVersionCapture));
- }});
+ expect(hostVersionDAOMock.findAll()).andReturn(Lists.newArrayList(
+ getHostVersionMock("install_failed_version", RepositoryVersionState.INSTALL_FAILED, installFailedHostVersionCapture),
+ getHostVersionMock("installing_version", RepositoryVersionState.INSTALLING, installingHostVersionCapture),
+ getHostVersionMock("installed_version", RepositoryVersionState.INSTALLED, installedHostVersionCapture),
+ getHostVersionMock("out_of_sync_version", RepositoryVersionState.OUT_OF_SYNC, outOfSyncHostVersionCapture),
+ getHostVersionMock("current_version", RepositoryVersionState.CURRENT, currentHostVersionCapture)));
// Adding all possible cluster version states
@@ -105,15 +103,14 @@ public class StateRecoveryManagerTest {
final Capture<RepositoryVersionState> upgradedClusterVersionCapture = EasyMock.newCapture();
final Capture<RepositoryVersionState> currentClusterVersionCapture = EasyMock.newCapture();
- expect(clusterVersionDAOMock.findAll()).andReturn(new ArrayList<ClusterVersionEntity>() {{
- add(getClusterVersionMock("install_failed_version", RepositoryVersionState.INSTALL_FAILED, installFailedClusterVersionCapture));
- add(getClusterVersionMock("installing_version", RepositoryVersionState.INSTALLING, installingClusterVersionCapture));
- add(getClusterVersionMock("installed_version", RepositoryVersionState.INSTALLED, installedClusterVersionCapture));
- add(getClusterVersionMock("out_of_sync_version", RepositoryVersionState.OUT_OF_SYNC, outOfSyncClusterVersionCapture));
- add(getClusterVersionMock("current_version", RepositoryVersionState.CURRENT, currentClusterVersionCapture));
- }});
+ expect(serviceComponentDesiredStateDAOMock.findAll()).andReturn(Lists.newArrayList(
+ getDesiredStateEntityMock("install_failed_version", RepositoryVersionState.INSTALL_FAILED, installFailedClusterVersionCapture),
+ getDesiredStateEntityMock("installing_version", RepositoryVersionState.INSTALLING, installingClusterVersionCapture),
+ getDesiredStateEntityMock("installed_version", RepositoryVersionState.INSTALLED, installedClusterVersionCapture),
+ getDesiredStateEntityMock("out_of_sync_version", RepositoryVersionState.OUT_OF_SYNC, outOfSyncClusterVersionCapture),
+ getDesiredStateEntityMock("current_version", RepositoryVersionState.CURRENT, currentClusterVersionCapture)));
- replay(hostVersionDAOMock, clusterVersionDAOMock);
+ replay(hostVersionDAOMock, serviceComponentDesiredStateDAOMock);
stateRecoveryManager.checkHostAndClusterVersions();
@@ -158,35 +155,30 @@ public class StateRecoveryManagerTest {
return hvMock;
}
+ private ServiceComponentDesiredStateEntity getDesiredStateEntityMock(String name, RepositoryVersionState state, Capture<RepositoryVersionState> newStateCapture) {
- private ClusterVersionEntity getClusterVersionMock(String name, RepositoryVersionState state,
- Capture<RepositoryVersionState> newStateCaptor) {
- ClusterVersionEntity cvMock = createNiceMock(ClusterVersionEntity.class);
- expect(cvMock.getState()).andReturn(state);
-
- cvMock.setState(capture(newStateCaptor));
+ ServiceComponentDesiredStateEntity mock = createNiceMock(ServiceComponentDesiredStateEntity.class);
+ expect(mock.getRepositoryState()).andReturn(state);
+ mock.setRepositoryState(capture(newStateCapture));
expectLastCall();
- RepositoryVersionEntity rvMock = createNiceMock(RepositoryVersionEntity.class);
- expect(rvMock.getDisplayName()).andReturn(name);
+ RepositoryVersionEntity repositoryVersionMock = createNiceMock(RepositoryVersionEntity.class);
+ expect(repositoryVersionMock.getVersion()).andReturn(name);
- expect(cvMock.getRepositoryVersion()).andReturn(rvMock);
+ expect(mock.getDesiredRepositoryVersion()).andReturn(repositoryVersionMock);
- ClusterEntity ceMock = createNiceMock(ClusterEntity.class);
- expect(ceMock.getClusterName()).andReturn("somecluster");
+ replay(mock, repositoryVersionMock);
- expect(cvMock.getClusterEntity()).andReturn(ceMock);
+ return mock;
+ }
- replay(cvMock, rvMock, ceMock);
- return cvMock;
- }
public class MockModule extends AbstractModule {
@Override
protected void configure() {
bind(HostVersionDAO.class).toInstance(hostVersionDAOMock);
- bind(ClusterVersionDAO.class).toInstance(clusterVersionDAOMock);
+ bind(ServiceComponentDesiredStateDAO.class).toInstance(serviceComponentDesiredStateDAOMock);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
index 5afeb77..5fa3e41 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
@@ -62,9 +62,9 @@ import org.apache.ambari.server.audit.AuditLogger;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Alert;
@@ -86,21 +86,17 @@ import org.apache.ambari.server.utils.EventBusSynchronizer;
import org.apache.ambari.server.utils.StageUtils;
import org.easymock.EasyMock;
import org.junit.After;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.gson.JsonObject;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
-import junit.framework.Assert;
-
public class HeartbeatProcessorTest {
- private static final Logger log = LoggerFactory.getLogger(TestHeartbeatHandler.class);
private Injector injector;
private long requestId = 23;
private long stageId = 31;
@@ -132,6 +128,9 @@ public class HeartbeatProcessorTest {
@Inject
private AmbariMetaInfo metaInfo;
+ @Inject
+ private OrmTestHelper helper;
+
public HeartbeatProcessorTest(){
InMemoryDefaultTestModule module = HeartbeatTestHelper.getTestModule();
@@ -153,7 +152,6 @@ public class HeartbeatProcessorTest {
}
@Test
- @SuppressWarnings("unchecked")
public void testHeartbeatWithConfigs() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -222,7 +220,6 @@ public class HeartbeatProcessorTest {
}
@Test
- @SuppressWarnings("unchecked")
public void testRestartRequiredAfterInstallClient() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -287,7 +284,6 @@ public class HeartbeatProcessorTest {
@Test
- @SuppressWarnings("unchecked")
public void testHeartbeatCustomCommandWithConfigs() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -371,7 +367,6 @@ public class HeartbeatProcessorTest {
}
@Test
- @SuppressWarnings("unchecked")
public void testHeartbeatCustomStartStop() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -455,7 +450,6 @@ public class HeartbeatProcessorTest {
}
@Test
- @SuppressWarnings("unchecked")
public void testStatusHeartbeat() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -580,7 +574,6 @@ public class HeartbeatProcessorTest {
* @throws InvalidStateTransitionException
*/
@Test
- @SuppressWarnings("unchecked")
public void testCommandReportOnHeartbeatUpdatedState()
throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
@@ -700,7 +693,6 @@ public class HeartbeatProcessorTest {
}
@Test
- @SuppressWarnings("unchecked")
public void testUpgradeSpecificHandling() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -794,7 +786,6 @@ public class HeartbeatProcessorTest {
@Test
- @SuppressWarnings("unchecked")
public void testCommandStatusProcesses() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -873,7 +864,6 @@ public class HeartbeatProcessorTest {
}
@Test
- @SuppressWarnings("unchecked")
public void testComponentUpgradeFailReport() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -985,7 +975,6 @@ public class HeartbeatProcessorTest {
@Test
- @SuppressWarnings("unchecked")
public void testComponentUpgradeInProgressReport() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -1068,7 +1057,6 @@ public class HeartbeatProcessorTest {
* @throws Exception
*/
@Test
- @SuppressWarnings("unchecked")
public void testHeartBeatWithAlertAndInvalidCluster() throws Exception {
ActionManager am = actionManagerTestHelper.getMockActionManager();
@@ -1173,20 +1161,16 @@ public class HeartbeatProcessorTest {
StackId stackId = new StackId("HDP", "0.1");
RepositoryVersionDAO dao = injector.getInstance(RepositoryVersionDAO.class);
- RepositoryVersionEntity entity = dao.findByStackAndVersion(stackId, "0.1-1234");
+ RepositoryVersionEntity entity = helper.getOrCreateRepositoryVersion(cluster);
Assert.assertNotNull(entity);
heartbeatProcessor.processHeartbeat(hb);
entity = dao.findByStackAndVersion(stackId, "0.1-1234");
Assert.assertNull(entity);
-
- entity = dao.findByStackAndVersion(stackId, "2.2.1.0-2222");
- Assert.assertNotNull(entity);
}
@Test
- @SuppressWarnings("unchecked")
public void testComponentInProgressStatusSafeAfterStatusReport() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -1270,8 +1254,7 @@ public class HeartbeatProcessorTest {
* @throws AmbariException
*/
private Service addService(Cluster cluster, String serviceName) throws AmbariException {
- ClusterVersionEntity clusterVersion = cluster.getCurrentClusterVersion();
- RepositoryVersionEntity repositoryVersion = clusterVersion.getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(cluster);
return cluster.addService(serviceName, repositoryVersion);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatTestHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatTestHelper.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatTestHelper.java
index 6e1ebdd..2f2c79e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatTestHelper.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatTestHelper.java
@@ -60,7 +60,6 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.cluster.ClustersImpl;
import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
@@ -196,9 +195,6 @@ public class HeartbeatTestHelper {
Config config = cf.createNew(cluster, "cluster-env", "version1", configProperties, new HashMap<String, Map<String, String>>());
cluster.addDesiredConfig("user", Collections.singleton(config));
- helper.getOrCreateRepositoryVersion(stackId, repositoryVersion);
- cluster.createClusterVersion(stackId, repositoryVersion, "admin",
- RepositoryVersionState.INSTALLING);
Map<String, String> hostAttributes = new HashMap<>();
hostAttributes.put("os_family", "redhat");
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
index 83e7d56..76de02c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
@@ -75,7 +75,7 @@ import org.apache.ambari.server.audit.AuditLogger;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
+import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.serveraction.kerberos.KerberosIdentityDataFileWriter;
import org.apache.ambari.server.serveraction.kerberos.KerberosIdentityDataFileWriterFactory;
@@ -145,6 +145,9 @@ public class TestHeartbeatHandler {
@Inject
AuditLogger auditLogger;
+ @Inject
+ private OrmTestHelper helper;
+
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -168,7 +171,6 @@ public class TestHeartbeatHandler {
}
@Test
- @SuppressWarnings("unchecked")
public void testHeartbeat() throws Exception {
ActionManager am = actionManagerTestHelper.getMockActionManager();
expect(am.getTasks(EasyMock.<List<Long>>anyObject())).andReturn(new ArrayList<HostRoleCommand>());
@@ -223,14 +225,7 @@ public class TestHeartbeatHandler {
assertEquals(0, aq.dequeueAll(hostname).size());
}
-
-
-
-
-
-
@Test
- @SuppressWarnings("unchecked")
public void testStatusHeartbeatWithAnnotation() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -281,7 +276,6 @@ public class TestHeartbeatHandler {
}
@Test
- @SuppressWarnings("unchecked")
public void testLiveStatusUpdateAfterStopFailed() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -791,7 +785,6 @@ public class TestHeartbeatHandler {
}
@Test
- @SuppressWarnings("unchecked")
public void testTaskInProgressHandling() throws Exception, InvalidStateTransitionException {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -848,7 +841,6 @@ public class TestHeartbeatHandler {
}
@Test
- @SuppressWarnings("unchecked")
public void testOPFailedEventForAbortedTask() throws Exception, InvalidStateTransitionException {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -918,11 +910,7 @@ public class TestHeartbeatHandler {
componentState1);
}
-
-
-
@Test
- @SuppressWarnings("unchecked")
public void testStatusHeartbeat() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -979,10 +967,7 @@ public class TestHeartbeatHandler {
assertTrue(hb.getAgentEnv().getHostHealth().getServerTimeStampAtReporting() >= hb.getTimestamp());
}
-
-
@Test
- @SuppressWarnings("unchecked")
public void testRecoveryStatusReports() throws Exception {
Clusters fsm = clusters;
@@ -1063,7 +1048,6 @@ public class TestHeartbeatHandler {
}
@Test
- @SuppressWarnings("unchecked")
public void testProcessStatusReports() throws Exception {
Clusters fsm = clusters;
@@ -1263,7 +1247,6 @@ public class TestHeartbeatHandler {
}
@Test
- @SuppressWarnings("unchecked")
public void testIgnoreCustomActionReport() throws Exception, InvalidStateTransitionException {
CommandReport cr1 = new CommandReport();
cr1.setActionId(StageUtils.getActionId(requestId, stageId));
@@ -1390,7 +1373,6 @@ public class TestHeartbeatHandler {
}
@Test
- @SuppressWarnings("unchecked")
public void testCommandStatusProcesses_empty() throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
Service hdfs = addService(cluster, HDFS);
@@ -1398,7 +1380,6 @@ public class TestHeartbeatHandler {
hdfs.getServiceComponent(DATANODE).addServiceComponentHost(DummyHostname1);
hdfs.getServiceComponent(DATANODE).getServiceComponentHost(DummyHostname1).setState(State.STARTED);
- ActionQueue aq = new ActionQueue();
HeartBeat hb = new HeartBeat();
hb.setTimestamp(System.currentTimeMillis());
hb.setResponseId(0);
@@ -1427,7 +1408,6 @@ public class TestHeartbeatHandler {
}});
replay(am);
- HeartBeatHandler handler = heartbeatTestHelper.getHeartBeatHandler(am, aq);
ServiceComponentHost sch = hdfs.getServiceComponent(DATANODE).getServiceComponentHost(DummyHostname1);
Assert.assertEquals(Integer.valueOf(0), Integer.valueOf(sch.getProcesses().size()));
@@ -1592,8 +1572,7 @@ public class TestHeartbeatHandler {
* @throws AmbariException
*/
private Service addService(Cluster cluster, String serviceName) throws AmbariException {
- ClusterVersionEntity clusterVersion = cluster.getCurrentClusterVersion();
- RepositoryVersionEntity repositoryVersion = clusterVersion.getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(cluster);
return cluster.addService(serviceName, repositoryVersion);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
index 4c536a9..e7bccc3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
@@ -48,7 +48,6 @@ import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
@@ -155,8 +154,6 @@ public class TestHeartbeatMonitor {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
Set<String> hostNames = new HashSet<String>(){{
add(hostname1);
add(hostname2);
@@ -238,8 +235,7 @@ public class TestHeartbeatMonitor {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
+
Set<String> hostNames = new HashSet<String>() {{
add(hostname1);
add(hostname2);
@@ -250,6 +246,8 @@ public class TestHeartbeatMonitor {
new HashMap<String, String>() {{
put("a", "b");
}}, new HashMap<String, Map<String,String>>());
+
+
Config hbaseEnvConfig = configFactory.createNew(cluster, "hbase-env", "version1",
new HashMap<String, String>() {{
put("a", "b");
@@ -359,8 +357,6 @@ public class TestHeartbeatMonitor {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
Set<String> hostNames = new HashSet<String>(){{
add(hostname1);
@@ -442,8 +438,6 @@ public class TestHeartbeatMonitor {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
Set<String> hostNames = new HashSet<String>(){{
add(hostname1);
@@ -561,8 +555,6 @@ public class TestHeartbeatMonitor {
cluster.setDesiredStackVersion(stackId);
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
Set<String> hostNames = new HashSet<String>(){{
add(hostname1);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/checks/InstallPackagesCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/InstallPackagesCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/InstallPackagesCheckTest.java
index 86a682c..986a0f1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/InstallPackagesCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/InstallPackagesCheckTest.java
@@ -24,10 +24,8 @@ import java.util.List;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
@@ -58,7 +56,7 @@ import com.google.inject.Provider;
@PrepareForTest(HostComponentSummary.class) // This class has a static method that will be mocked
public class InstallPackagesCheckTest {
private final Clusters clusters = Mockito.mock(Clusters.class);
- private final ClusterVersionDAO clusterVersionDAO = Mockito.mock(ClusterVersionDAO.class);
+
private final HostVersionDAO hostVersionDAO = Mockito.mock(HostVersionDAO.class);
private final RepositoryVersionDAO repositoryVersionDAO = Mockito.mock(RepositoryVersionDAO.class);
private AmbariMetaInfo ambariMetaInfo = Mockito.mock(AmbariMetaInfo.class);
@@ -101,13 +99,6 @@ public class InstallPackagesCheckTest {
}
};
- installPackagesCheck.clusterVersionDAOProvider = new Provider<ClusterVersionDAO>() {
- @Override
- public ClusterVersionDAO get() {
- return clusterVersionDAO;
- }
- };
-
installPackagesCheck.hostVersionDaoProvider = new Provider<HostVersionDAO>() {
@Override
public HostVersionDAO get() {
@@ -132,10 +123,6 @@ public class InstallPackagesCheckTest {
Mockito.when(cluster.getCurrentStackVersion()).thenReturn(stackId);
Mockito.when(clusters.getCluster(clusterName)).thenReturn(cluster);
- ClusterVersionEntity clusterVersionEntity = Mockito.mock(ClusterVersionEntity.class);
- Mockito.when(clusterVersionEntity.getState()).thenReturn(RepositoryVersionState.INSTALLED);
- Mockito.when(clusterVersionDAO.findByClusterAndStackAndVersion(
- clusterName, targetStackId, repositoryVersion)).thenReturn(clusterVersionEntity);
final List<String> hostNames = new ArrayList<>();
hostNames.add("host1");
hostNames.add("host2");
@@ -168,21 +155,10 @@ public class InstallPackagesCheckTest {
// Case 2: Install Packages failed on host1
Mockito.when(hostVersionEntities.get(0).getState()).thenReturn(RepositoryVersionState.INSTALL_FAILED);
- Mockito.when(clusterVersionEntity.getState()).thenReturn(RepositoryVersionState.INSTALL_FAILED);
check = new PrerequisiteCheck(null, null);
installPackagesCheck.perform(check, checkRequest);
Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
Assert.assertNotNull(check.getFailedOn());
Assert.assertTrue(check.getFailedOn().contains("host1"));
-
- // Case 3: Install Packages failed on host1 and host1 was put in Maintenance Mode
- Mockito.when(hostVersionEntities.get(0).getState()).thenReturn(RepositoryVersionState.INSTALL_FAILED);
- Mockito.when(hosts.get(0).getMaintenanceState(1L)).thenReturn(MaintenanceState.ON);
- Mockito.when(clusterVersionEntity.getState()).thenReturn(RepositoryVersionState.INSTALL_FAILED);
- check = new PrerequisiteCheck(null, null);
- installPackagesCheck.perform(check, checkRequest);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Assert.assertNotNull(check.getFailedOn());
- Assert.assertTrue(check.getFailedOn().contains(clusterName));
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheckTest.java
index c899af6..016bdd08 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheckTest.java
@@ -23,7 +23,6 @@ import java.util.Map;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
@@ -91,9 +90,6 @@ public class MapReduce2JobHistoryStatePreservingCheckTest {
Map<String, Service> services = new HashMap<>();
Mockito.when(cluster.getServices()).thenReturn(services);
- ClusterVersionEntity clusterVersionEntity = Mockito.mock(ClusterVersionEntity.class);
- Mockito.when(cluster.getCurrentClusterVersion()).thenReturn(clusterVersionEntity);
-
PrereqCheckRequest request = new PrereqCheckRequest("cluster");
request.setTargetStackId(new StackId("HDP", "2.3.1.1"));
request.setSourceStackId(new StackId("HDP", "2.3.0.0"));
@@ -156,10 +152,7 @@ public class MapReduce2JobHistoryStatePreservingCheckTest {
}
});
Mockito.when(cluster.getCurrentStackVersion()).thenReturn(new StackId("MYSTACK-12.2"));
- ClusterVersionEntity clusterVersionEntity = Mockito.mock(ClusterVersionEntity.class);
- Mockito.when(cluster.getCurrentClusterVersion()).thenReturn(clusterVersionEntity);
RepositoryVersionEntity repositoryVersionEntity = Mockito.mock(RepositoryVersionEntity.class);
- Mockito.when(clusterVersionEntity.getRepositoryVersion()).thenReturn(repositoryVersionEntity);
Mockito.when(m_clusters.getCluster("c1")).thenReturn(cluster);
PrereqCheckRequest request = new PrereqCheckRequest("c1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheckTest.java
index 7486c71..5c423b5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheckTest.java
@@ -22,7 +22,6 @@ import java.util.Map;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
@@ -80,11 +79,7 @@ public class YarnTimelineServerStatePreservingCheckTest {
Map<String, Service> services = new HashMap<>();
Mockito.when(cluster.getServices()).thenReturn(services);
- ClusterVersionEntity clusterVersionEntity = Mockito.mock(ClusterVersionEntity.class);
- Mockito.when(cluster.getCurrentClusterVersion()).thenReturn(clusterVersionEntity);
-
RepositoryVersionEntity repositoryVersionEntity = Mockito.mock(RepositoryVersionEntity.class);
- Mockito.when(clusterVersionEntity.getRepositoryVersion()).thenReturn(repositoryVersionEntity);
Mockito.when(repositoryVersionEntity.getVersion()).thenReturn("2.2.4.2");
Map<String, String> checkProperties = new HashMap<>();
@@ -150,10 +145,7 @@ public class YarnTimelineServerStatePreservingCheckTest {
}
});
Mockito.when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.2"));
- ClusterVersionEntity clusterVersionEntity = Mockito.mock(ClusterVersionEntity.class);
- Mockito.when(cluster.getCurrentClusterVersion()).thenReturn(clusterVersionEntity);
RepositoryVersionEntity repositoryVersionEntity = Mockito.mock(RepositoryVersionEntity.class);
- Mockito.when(clusterVersionEntity.getRepositoryVersion()).thenReturn(repositoryVersionEntity);
Mockito.when(m_clusters.getCluster("c1")).thenReturn(cluster);
Map<String, String> checkProperties = new HashMap<>();
@@ -198,10 +190,7 @@ public class YarnTimelineServerStatePreservingCheckTest {
}
});
Mockito.when(cluster.getCurrentStackVersion()).thenReturn(new StackId("MYSTACK-12.2"));
- ClusterVersionEntity clusterVersionEntity = Mockito.mock(ClusterVersionEntity.class);
- Mockito.when(cluster.getCurrentClusterVersion()).thenReturn(clusterVersionEntity);
RepositoryVersionEntity repositoryVersionEntity = Mockito.mock(RepositoryVersionEntity.class);
- Mockito.when(clusterVersionEntity.getRepositoryVersion()).thenReturn(repositoryVersionEntity);
Mockito.when(m_clusters.getCluster("c1")).thenReturn(cluster);
Map<String, String> checkProperties = new HashMap<>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
index 00fc962..0ae79d0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
@@ -38,6 +38,7 @@ import org.apache.ambari.server.agent.RecoveryConfig;
import org.apache.ambari.server.agent.RecoveryConfigHelper;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
@@ -74,10 +75,8 @@ public class RecoveryConfigHelperTest {
@Inject
private RepositoryVersionDAO repositoryVersionDAO;
- /**
- * The repository created when creating the test cluster.
- */
- private RepositoryVersionEntity repositoryVersion;
+ @Inject
+ private OrmTestHelper helper;
private final String STACK_VERSION = "0.1";
private final String REPO_VERSION = "0.1-1234";
@@ -146,7 +145,8 @@ public class RecoveryConfigHelperTest {
public void testServiceComponentInstalled()
throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
- repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, REPO_VERSION);
+
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(cluster);
Service hdfs = cluster.addService(HDFS, repositoryVersion);
hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
@@ -180,7 +180,7 @@ public class RecoveryConfigHelperTest {
public void testServiceComponentUninstalled()
throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
- repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, REPO_VERSION);
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(cluster);
Service hdfs = cluster.addService(HDFS, repositoryVersion);
hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
@@ -216,7 +216,7 @@ public class RecoveryConfigHelperTest {
public void testClusterEnvConfigChanged()
throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
- repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, REPO_VERSION);
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(cluster);
Service hdfs = cluster.addService(HDFS, repositoryVersion);
hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
@@ -256,7 +256,7 @@ public class RecoveryConfigHelperTest {
public void testMaintenanceModeChanged()
throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
- repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, REPO_VERSION);
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(cluster);
Service hdfs = cluster.addService(HDFS, repositoryVersion);
hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
@@ -291,7 +291,7 @@ public class RecoveryConfigHelperTest {
public void testServiceComponentRecoveryChanged()
throws Exception {
Cluster cluster = heartbeatTestHelper.getDummyCluster();
- repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, REPO_VERSION);
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(cluster);
Service hdfs = cluster.addService(HDFS, repositoryVersion);
hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
@@ -332,6 +332,8 @@ public class RecoveryConfigHelperTest {
// Create a cluster with 2 hosts
Cluster cluster = getDummyCluster(hostNames);
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(cluster);
+
// Add HDFS service with DATANODE component to the cluster
Service hdfs = cluster.addService(HDFS, repositoryVersion);
@@ -357,6 +359,7 @@ public class RecoveryConfigHelperTest {
private Cluster getDummyCluster(Set<String> hostNames)
throws Exception {
+
Map<String, String> configProperties = new HashMap<String, String>() {{
put(RecoveryConfigHelper.RECOVERY_ENABLED_KEY, "true");
put(RecoveryConfigHelper.RECOVERY_TYPE_KEY, "AUTO_START");
@@ -369,8 +372,6 @@ public class RecoveryConfigHelperTest {
Cluster cluster = heartbeatTestHelper.getDummyCluster("cluster1", stackId, REPO_VERSION,
configProperties, hostNames);
- repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, REPO_VERSION);
- assertNotNull(repositoryVersion);
return cluster;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/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 f5848f4..4170342 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
@@ -73,9 +73,7 @@ import org.apache.ambari.server.configuration.Configuration;
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;
import org.apache.ambari.server.security.authorization.Users;
@@ -94,7 +92,6 @@ 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;
@@ -919,7 +916,6 @@ public class AmbariManagementControllerImplTest {
expect(cluster.getResourceId()).andReturn(1L).times(3);
expect(cluster.getClusterName()).andReturn("cluster").times(1);
expect(cluster.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes();
- expect(cluster.getCurrentClusterVersion()).andReturn(null).anyTimes();
expect(cluster.getCurrentStackVersion()).andReturn(null).anyTimes();
expect(cluster.getDesiredStackVersion()).andReturn(null).anyTimes();
@@ -2059,8 +2055,6 @@ public class AmbariManagementControllerImplTest {
Cluster cluster = createNiceMock(Cluster.class);
Injector injector = createNiceMock(Injector.class);
Configuration configuration = createNiceMock(Configuration.class);
- ClusterVersionDAO clusterVersionDAO = createNiceMock(ClusterVersionDAO.class);
- ClusterVersionEntity clusterVersionEntity = createNiceMock(ClusterVersionEntity.class);
RepositoryVersionEntity repositoryVersionEntity = createNiceMock(RepositoryVersionEntity.class);
ConfigHelper configHelper = createNiceMock(ConfigHelper.class);
@@ -2081,15 +2075,12 @@ public class AmbariManagementControllerImplTest {
expect(configuration.areHostsSysPrepped()).andReturn("true");
expect(configuration.getDatabaseConnectorNames()).andReturn(new HashMap<String, String>()).anyTimes();
expect(configuration.getPreviousDatabaseConnectorNames()).andReturn(new HashMap<String, String>()).anyTimes();
- expect(clusterVersionDAO.findByClusterAndStateCurrent(clusterName)).andReturn(clusterVersionEntity).anyTimes();
- expect(clusterVersionEntity.getRepositoryVersion()).andReturn(repositoryVersionEntity).anyTimes();
expect(repositoryVersionEntity.getVersion()).andReturn("1234").anyTimes();
expect(configHelper.getPropertyValuesWithPropertyType(stackId,
PropertyInfo.PropertyType.NOT_MANAGED_HDFS_PATH, cluster, desiredConfigs)).andReturn(
notManagedHdfsPathSet);
- replay(manager, clusters, cluster, injector, stackId, configuration, clusterVersionDAO, clusterVersionEntity,
- repositoryVersionEntity, configHelper);
+ replay(manager, clusters, cluster, injector, stackId, configuration, repositoryVersionEntity, configHelper);
AmbariManagementControllerImpl ambariManagementControllerImpl =
createMockBuilder(AmbariManagementControllerImpl.class)
@@ -2116,10 +2107,6 @@ public class AmbariManagementControllerImplTest {
f.setAccessible(true);
f.set(helper, configuration);
- f = helperClass.getDeclaredField("clusterVersionDAO");
- f.setAccessible(true);
- f.set(helper, clusterVersionDAO);
-
f = helperClass.getDeclaredField("configHelper");
f.setAccessible(true);
f.set(helper, configHelper);
@@ -2128,7 +2115,7 @@ public class AmbariManagementControllerImplTest {
f.setAccessible(true);
f.set(helper, gson);
- Map<String, String> defaultHostParams = helper.createDefaultHostParams(cluster);
+ Map<String, String> defaultHostParams = helper.createDefaultHostParams(cluster, repositoryVersionEntity);
assertEquals(defaultHostParams.size(), 16);
assertEquals(defaultHostParams.get(DB_DRIVER_FILENAME), MYSQL_JAR);
@@ -2221,10 +2208,10 @@ public class AmbariManagementControllerImplTest {
super(actionManager, clusters, injector);
}
- public ServiceOsSpecific testPopulateServicePackagesInfo(ServiceInfo serviceInfo, Map<String, String> hostParams,
- String osFamily) {
- return super.populateServicePackagesInfo(serviceInfo, hostParams, osFamily);
- }
+// public ServiceOsSpecific testPopulateServicePackagesInfo(ServiceInfo serviceInfo, Map<String, String> hostParams,
+// String osFamily) {
+// return super.populateServicePackagesInfo(serviceInfo, hostParams, osFamily);
+// }
}
@@ -2341,10 +2328,6 @@ public class AmbariManagementControllerImplTest {
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),
@@ -2353,17 +2336,10 @@ public class AmbariManagementControllerImplTest {
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
- ClusterVersionEntity clusterVersionEntity = createNiceMock(ClusterVersionEntity.class);
- expect(cluster.createClusterVersion(anyObject(StackId.class), anyObject(String.class),
- anyObject(String.class), anyObject(RepositoryVersionState.class))).andReturn(
- clusterVersionEntity).once();
-
expect(clusters.getCluster("c1")).andReturn(cluster).atLeastOnce();
StackInfo stackInfo = createNiceMock(StackInfo.class);
@@ -2371,7 +2347,7 @@ public class AmbariManagementControllerImplTest {
expect(ambariMetaInfo.getStack("HDP", "2.1")).andReturn(stackInfo).atLeastOnce();
- replay(injector, clusters, ambariMetaInfo, stackInfo, cluster, repoVersionDAO, repoVersion, clusterVersionDAO);
+ replay(injector, clusters, ambariMetaInfo, stackInfo, cluster, repoVersionDAO, repoVersion);
AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector);
setAmbariMetaInfo(ambariMetaInfo, controller);
@@ -2393,7 +2369,7 @@ public class AmbariManagementControllerImplTest {
controller.createCluster(cr);
// verification
- verify(injector, clusters, ambariMetaInfo, stackInfo, cluster, repoVersionDAO, repoVersion, clusterVersionDAO);
+ verify(injector, clusters, ambariMetaInfo, stackInfo, cluster, repoVersionDAO, repoVersion);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 1899b3a..d1d819f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -128,7 +128,6 @@ import org.apache.ambari.server.state.HostComponentAdminState;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.MaintenanceState;
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;
@@ -381,15 +380,6 @@ public class AmbariManagementControllerTest {
dStateStr = desiredState.toString();
}
- Cluster cluster = clusters.getCluster(clusterName);
- if (null == cluster.getCurrentClusterVersion()) {
- StackId stackId = cluster.getCurrentStackVersion();
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
-
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
- }
-
ServiceRequest r1 = new ServiceRequest(clusterName, serviceName,
repositoryVersion.getStackId().getStackId(), repositoryVersion.getVersion(), dStateStr,
null);
@@ -685,11 +675,6 @@ public class AmbariManagementControllerTest {
}
@Test
- public void testCreateClusterWithDesiredClusterConfigs() {
- // TODO implement after configs integration
- }
-
- @Test
public void testCreateClusterWithInvalidRequest() {
ClusterRequest r = new ClusterRequest(null, null, null, null);
r.toString();
@@ -1052,9 +1037,6 @@ public class AmbariManagementControllerTest {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
stackId.getStackVersion());
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
-
Service s1 = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
Service s2 = serviceFactory.createNew(c1, "MAPREDUCE", repositoryVersion);
c1.addService(s1);
@@ -1378,8 +1360,6 @@ public class AmbariManagementControllerTest {
StackId stackId = new StackId("HDP-0.2");
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
Service s1 = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
Service s2 = serviceFactory.createNew(c1, "MAPREDUCE", repositoryVersion);
@@ -1664,23 +1644,14 @@ public class AmbariManagementControllerTest {
foo.setDesiredStackVersion(stackId);
foo.setCurrentStackVersion(stackId);
- foo.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
- foo.transitionClusterVersion(stackId, stackId.getStackVersion(), RepositoryVersionState.CURRENT);
stackId = new StackId("HDP-0.2");
c1.setDesiredStackVersion(stackId);
c1.setCurrentStackVersion(stackId);
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, stackId.getStackVersion(), RepositoryVersionState.CURRENT);
stackId = new StackId("HDP-0.2");
c2.setDesiredStackVersion(stackId);
c2.setCurrentStackVersion(stackId);
- c2.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
- c2.transitionClusterVersion(stackId, stackId.getStackVersion(), RepositoryVersionState.CURRENT);
try {
set1.clear();
@@ -1886,8 +1857,6 @@ public class AmbariManagementControllerTest {
c.setDesiredStackVersion(stackId);
c.setCurrentStackVersion(stackId);
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- c.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
HostResourceProviderTest.createHosts(controller, requests);
@@ -1915,8 +1884,6 @@ public class AmbariManagementControllerTest {
c.setDesiredStackVersion(stackID);
c.setCurrentStackVersion(stackID);
helper.getOrCreateRepositoryVersion(stackID, stackID.getStackVersion());
- c.createClusterVersion(stackID, stackID.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
setOsFamily(clusters.getHost(host1), "redhat", "5.9");
setOsFamily(clusters.getHost(host2), "redhat", "5.9");
@@ -2261,8 +2228,6 @@ public class AmbariManagementControllerTest {
StackId stackId = new StackId("HDP-0.1");
c1.setDesiredStackVersion(stackId);
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
ClusterRequest r = new ClusterRequest(null, null, null, null);
Set<ClusterResponse> resp = controller.getClusters(Collections.singleton(r));
@@ -7694,8 +7659,6 @@ public class AmbariManagementControllerTest {
Long clusterId = c.getClusterId();
helper.getOrCreateRepositoryVersion(stackID, stackID.getStackVersion());
- c.createClusterVersion(stackID, stackID.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
clusters.addHost(hostName1);
setOsFamily(clusters.getHost(hostName1), "redhat", "5.9");
[38/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0f266ed6
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0f266ed6
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0f266ed6
Branch: refs/heads/trunk
Commit: 0f266ed6a7b1df2c3d3b18aa49649e12d01b1a4b
Parents: c4148d8 1c19200
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue May 23 18:49:01 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue May 23 19:58:42 2017 -0400
----------------------------------------------------------------------
LICENSE.txt | 17 +
.../stackVersions/StackVersionsCreateCtrl.js | 1 -
.../ui/admin-web/app/scripts/i18n.config.js | 2 +-
.../ui/admin-web/app/scripts/services/Stack.js | 32 +-
.../views/stackVersions/stackVersionPage.html | 4 +-
.../StackVersionsCreateCtrl_test.js | 6 +-
.../libraries/functions/conf_select.py | 13 +-
.../org/apache/ambari/infra/InfraManager.java | 30 +-
.../infra/common/InfraManagerConstants.java | 2 +
.../conf/batch/InfraManagerBatchConfig.java | 55 +
.../apache/ambari/infra/manager/JobManager.java | 274 +
.../infra/model/ExecutionContextResponse.java | 40 +
.../ambari/infra/model/JobDetailsResponse.java | 53 +
.../model/JobExecutionDetailsResponse.java | 49 +
.../infra/model/JobExecutionInfoResponse.java | 141 +
.../ambari/infra/model/JobExecutionRequest.java | 46 +
.../infra/model/JobExecutionRestartRequest.java | 52 +
.../infra/model/JobExecutionStopRequest.java | 50 +
.../infra/model/JobInstanceDetailsResponse.java | 54 +
.../infra/model/JobInstanceStartRequest.java | 49 +
.../ambari/infra/model/JobOperationParams.java | 31 +
.../apache/ambari/infra/model/JobRequest.java | 37 +
.../apache/ambari/infra/model/PageRequest.java | 49 +
.../model/StepExecutionContextResponse.java | 58 +
.../infra/model/StepExecutionInfoResponse.java | 115 +
.../model/StepExecutionProgressResponse.java | 53 +
.../infra/model/StepExecutionRequest.java | 49 +
.../infra/model/wrapper/JobExecutionData.java | 118 +
.../infra/model/wrapper/StepExecutionData.java | 133 +
.../ambari/infra/rest/JobExceptionMapper.java | 110 +
.../apache/ambari/infra/rest/JobResource.java | 151 +-
.../ambari-logsearch-config-api/pom.xml | 14 +-
.../config/api/InputConfigMonitor.java | 13 +-
.../logsearch/config/api/LogSearchConfig.java | 3 +-
.../config/api/LogSearchConfigFactory.java | 10 +-
.../api/model/inputconfig/Conditions.java | 24 +
.../config/api/model/inputconfig/Fields.java | 26 +
.../api/model/inputconfig/FilterDescriptor.java | 39 +
.../model/inputconfig/FilterGrokDescriptor.java | 28 +
.../model/inputconfig/FilterJsonDescriptor.java | 23 +
.../inputconfig/FilterKeyValueDescriptor.java | 28 +
.../api/model/inputconfig/InputConfig.java | 28 +
.../api/model/inputconfig/InputDescriptor.java | 54 +
.../inputconfig/InputFileBaseDescriptor.java | 28 +
.../model/inputconfig/InputFileDescriptor.java | 23 +
.../inputconfig/InputS3FileDescriptor.java | 26 +
.../model/inputconfig/MapDateDescriptor.java | 26 +
.../inputconfig/MapFieldCopyDescriptor.java | 24 +
.../model/inputconfig/MapFieldDescriptor.java | 24 +
.../inputconfig/MapFieldNameDescriptor.java | 24 +
.../inputconfig/MapFieldValueDescriptor.java | 26 +
.../api/model/inputconfig/PostMapValues.java | 26 +
.../config/api/LogSearchConfigClass1.java | 3 +-
.../config/api/LogSearchConfigClass2.java | 3 +-
.../config/api/LogSearchConfigFactoryTest.java | 16 +-
.../ambari-logsearch-config-zookeeper/pom.xml | 6 +
.../config/zookeeper/LogSearchConfigZK.java | 72 +-
.../model/inputconfig/impl/ConditionsImpl.java | 37 +
.../model/inputconfig/impl/FieldsImpl.java | 39 +
.../model/inputconfig/impl/FilterAdapter.java | 42 +
.../inputconfig/impl/FilterDescriptorImpl.java | 113 +
.../impl/FilterGrokDescriptorImpl.java | 66 +
.../impl/FilterJsonDescriptorImpl.java | 25 +
.../impl/FilterKeyValueDescriptorImpl.java | 63 +
.../model/inputconfig/impl/InputAdapter.java | 58 +
.../model/inputconfig/impl/InputConfigGson.java | 46 +
.../model/inputconfig/impl/InputConfigImpl.java | 54 +
.../inputconfig/impl/InputDescriptorImpl.java | 204 +
.../impl/InputFileBaseDescriptorImpl.java | 66 +
.../impl/InputFileDescriptorImpl.java | 25 +
.../impl/InputS3FileDescriptorImpl.java | 53 +
.../inputconfig/impl/MapDateDescriptorImpl.java | 58 +
.../impl/MapFieldCopyDescriptorImpl.java | 45 +
.../impl/MapFieldNameDescriptorImpl.java | 45 +
.../impl/MapFieldValueDescriptorImpl.java | 58 +
.../inputconfig/impl/PostMapValuesAdapter.java | 99 +
.../inputconfig/impl/PostMapValuesImpl.java | 40 +
.../org/apache/ambari/logfeeder/LogFeeder.java | 2 +-
.../ambari/logfeeder/common/ConfigBlock.java | 107 +-
.../ambari/logfeeder/common/ConfigHandler.java | 126 +-
.../ambari/logfeeder/common/ConfigItem.java | 97 +
.../apache/ambari/logfeeder/filter/Filter.java | 53 +-
.../ambari/logfeeder/filter/FilterGrok.java | 11 +-
.../ambari/logfeeder/filter/FilterJSON.java | 3 -
.../ambari/logfeeder/filter/FilterKeyValue.java | 12 +-
.../logfeeder/input/AbstractInputFile.java | 16 +-
.../apache/ambari/logfeeder/input/Input.java | 112 +-
.../ambari/logfeeder/input/InputFile.java | 6 +-
.../ambari/logfeeder/input/InputS3File.java | 5 +-
.../ambari/logfeeder/input/InputSimulate.java | 23 +-
.../logfeeder/loglevelfilter/FilterLogData.java | 2 +-
.../apache/ambari/logfeeder/mapper/Mapper.java | 4 +-
.../ambari/logfeeder/mapper/MapperDate.java | 15 +-
.../logfeeder/mapper/MapperFieldCopy.java | 13 +-
.../logfeeder/mapper/MapperFieldName.java | 14 +-
.../logfeeder/mapper/MapperFieldValue.java | 14 +-
.../apache/ambari/logfeeder/output/Output.java | 3 -
.../logfeeder/output/OutputLineFilter.java | 2 +-
.../ambari/logfeeder/output/OutputManager.java | 8 +-
.../ambari/logfeeder/output/OutputS3File.java | 96 +-
.../ambari/logfeeder/util/LogFeederUtil.java | 51 -
.../ambari/logfeeder/filter/FilterGrokTest.java | 37 +-
.../ambari/logfeeder/filter/FilterJSONTest.java | 14 +-
.../logfeeder/filter/FilterKeyValueTest.java | 41 +-
.../ambari/logfeeder/input/InputFileTest.java | 22 +-
.../logconfig/LogConfigHandlerTest.java | 18 +-
.../ambari/logfeeder/mapper/MapperDateTest.java | 44 +-
.../logfeeder/mapper/MapperFieldCopyTest.java | 19 +-
.../logfeeder/mapper/MapperFieldNameTest.java | 19 +-
.../logfeeder/mapper/MapperFieldValueTest.java | 29 +-
.../logfeeder/output/OutputLineFilterTest.java | 22 +-
.../logfeeder/output/OutputManagerTest.java | 10 +-
.../logfeeder/output/OutputS3FileTest.java | 17 +-
.../logsearch/manager/ShipperConfigManager.java | 7 +-
.../model/common/LSServerConditions.java | 41 +
.../logsearch/model/common/LSServerFields.java | 43 +
.../logsearch/model/common/LSServerFilter.java | 130 +
.../model/common/LSServerFilterGrok.java | 73 +
.../model/common/LSServerFilterJson.java | 31 +
.../model/common/LSServerFilterKeyValue.java | 71 +
.../logsearch/model/common/LSServerInput.java | 149 +
.../model/common/LSServerInputConfig.java | 87 +
.../model/common/LSServerInputFile.java | 31 +
.../model/common/LSServerInputFileBase.java | 72 +
.../model/common/LSServerInputS3File.java | 59 +
.../logsearch/model/common/LSServerMapDate.java | 61 +
.../model/common/LSServerMapField.java | 30 +
.../model/common/LSServerMapFieldCopy.java | 49 +
.../model/common/LSServerMapFieldName.java | 49 +
.../model/common/LSServerMapFieldValue.java | 61 +
.../model/common/LSServerPostMapValues.java | 63 +
.../common/LSServerPostMapValuesSerializer.java | 39 +
.../logsearch/rest/ShipperConfigResource.java | 6 +-
.../test-config/logfeeder/logfeeder.properties | 1 +
.../test-config/logsearch/logsearch.properties | 4 -
.../timeline/HadoopTimelineMetricsSink.java | 2 +-
.../timeline/HadoopTimelineMetricsSinkTest.java | 2 +-
.../kafka/KafkaTimelineMetricsReporter.java | 4 +-
.../storm/StormTimelineMetricsReporter.java | 6 +-
.../sink/storm/StormTimelineMetricsSink.java | 2 +-
.../sink/storm/StormTimelineMetricsSink.java | 2 +-
ambari-server/checkstyle.xml | 1 +
ambari-server/docs/api/generated/index.html | 17421 +++++++++++++
ambari-server/docs/api/generated/swagger.json | 2305 ++
ambari-server/pom.xml | 121 +-
ambari-server/src/main/assemblies/server.xml | 2 +-
.../server/actionmanager/ActionManager.java | 4 +-
.../server/actionmanager/ActionScheduler.java | 25 +-
.../ambari/server/actionmanager/Request.java | 18 +-
.../server/actionmanager/RequestFactory.java | 4 +-
.../ambari/server/actionmanager/Stage.java | 14 -
.../server/actionmanager/StageFactory.java | 1 -
.../server/actionmanager/StageFactoryImpl.java | 4 +-
.../server/api/services/ActionService.java | 98 +-
.../api/services/ActiveWidgetLayoutService.java | 76 -
.../server/api/services/AmbariMetaInfo.java | 21 +
.../ambari/server/api/services/BaseService.java | 41 +
.../server/api/services/BlueprintService.java | 105 +-
.../api/services/ClusterRequestSwagger.java | 30 +
.../server/api/services/ClusterService.java | 305 +-
.../api/services/GroupPrivilegeService.java | 77 -
.../server/api/services/GroupService.java | 155 -
.../ambari/server/api/services/HostService.java | 188 +-
.../server/api/services/MemberService.java | 163 -
.../server/api/services/RequestService.java | 105 +-
.../server/api/services/RootServiceService.java | 363 +-
.../server/api/services/ServiceService.java | 293 +-
.../api/services/SettingRequestSwagger.java | 30 +
.../server/api/services/SettingService.java | 126 +-
.../server/api/services/StacksService.java | 730 +-
.../api/services/UserAuthorizationService.java | 103 -
.../api/services/UserPrivilegeService.java | 79 -
.../ambari/server/api/services/UserService.java | 175 -
.../api/services/ViewDataMigrationService.java | 122 -
.../ViewExternalSubResourceService.java | 146 -
.../api/services/ViewInstanceService.java | 282 -
.../api/services/ViewPermissionService.java | 186 -
.../api/services/ViewPrivilegeService.java | 55 -
.../ambari/server/api/services/ViewService.java | 162 -
.../api/services/ViewSubResourceService.java | 134 -
.../server/api/services/ViewVersionService.java | 199 -
.../services/groups/GroupPrivilegeService.java | 113 +
.../api/services/groups/GroupService.java | 177 +
.../api/services/groups/MemberService.java | 200 +
.../users/ActiveWidgetLayoutService.java | 111 +
.../users/UserAuthorizationService.java | 120 +
.../services/users/UserPrivilegeService.java | 113 +
.../server/api/services/users/UserService.java | 193 +
.../views/ViewDataMigrationService.java | 113 +
.../views/ViewExternalSubResourceService.java | 148 +
.../api/services/views/ViewInstanceService.java | 313 +
.../services/views/ViewPermissionService.java | 208 +
.../services/views/ViewPrivilegeService.java | 268 +
.../server/api/services/views/ViewService.java | 181 +
.../services/views/ViewSubResourceService.java | 136 +
.../api/services/views/ViewVersionService.java | 208 +
.../request/eventcreator/HostEventCreator.java | 4 +-
.../server/checks/RangerSSLConfigCheck.java | 1 -
.../ambari/server/controller/ActionRequest.java | 19 +
.../server/controller/ActionRequestSwagger.java | 31 +
.../server/controller/ActionResponse.java | 20 +-
.../controller/ActiveWidgetLayoutRequest.java | 66 +
.../controller/ActiveWidgetLayoutResponse.java | 142 +
.../AmbariCustomCommandExecutionHelper.java | 12 +-
.../AmbariManagementControllerImpl.java | 16 +-
.../ambari/server/controller/ApiModel.java | 28 +
.../server/controller/BlueprintSwagger.java | 91 +
.../controller/ClusterArtifactRequest.java | 46 +
.../controller/ClusterArtifactResponse.java | 49 +
.../server/controller/ClusterRequest.java | 111 +-
.../server/controller/ClusterResponse.java | 106 +-
.../ClusterServiceArtifactRequest.java | 46 +
.../ClusterServiceArtifactResponse.java | 52 +
.../controller/ComponentDependencyResponse.java | 64 +
.../controller/ExtensionLinkResponse.java | 137 +-
.../controller/GroupPrivilegeResponse.java | 61 +
.../ambari/server/controller/GroupRequest.java | 5 +-
.../ambari/server/controller/GroupResponse.java | 7 +-
.../ambari/server/controller/HostRequest.java | 72 +-
.../ambari/server/controller/HostResponse.java | 287 +-
.../server/controller/KerberosHelperImpl.java | 51 +-
.../ambari/server/controller/MemberRequest.java | 4 +
.../server/controller/MemberResponse.java | 6 +-
.../server/controller/PrivilegeResponse.java | 175 +
.../server/controller/QuickLinksResponse.java | 56 +
.../server/controller/RequestPostRequest.java | 96 +
.../server/controller/RequestPostResponse.java | 43 +
.../server/controller/RequestPutRequest.java | 33 +
.../server/controller/RequestRequest.java | 6 +
.../server/controller/RequestResponse.java | 100 +
.../RootServiceComponentResponse.java | 56 +-
.../RootServiceHostComponentResponse.java | 72 +-
.../server/controller/RootServiceResponse.java | 24 +-
.../controller/RootServiceResponseFactory.java | 29 +-
.../server/controller/ServiceRequest.java | 8 +
.../controller/ServiceRequestSwagger.java | 31 +
.../server/controller/ServiceResponse.java | 18 +
.../server/controller/SettingRequest.java | 69 +
.../server/controller/SettingResponse.java | 90 +
.../controller/StackArtifactResponse.java | 52 +
.../StackConfigurationDependencyResponse.java | 17 +
.../controller/StackConfigurationResponse.java | 26 +-
.../ambari/server/controller/StackResponse.java | 12 +
.../StackServiceArtifactResponse.java | 53 +
.../StackServiceComponentResponse.java | 27 +
.../server/controller/StackServiceResponse.java | 31 +-
.../server/controller/StackVersionResponse.java | 59 +-
.../ambari/server/controller/ThemeResponse.java | 56 +
.../controller/UserAuthorizationResponse.java | 153 +
.../controller/UserPrivilegeResponse.java | 61 +
.../ambari/server/controller/UserRequest.java | 17 +-
.../ambari/server/controller/UserResponse.java | 48 +-
.../server/controller/ViewInstanceRequest.java | 209 +
.../server/controller/ViewInstanceResponse.java | 198 +
.../controller/ViewPermissionResponse.java | 122 +
.../server/controller/ViewPrivilegeRequest.java | 79 +
.../controller/ViewPrivilegeResponse.java | 55 +
.../ambari/server/controller/ViewResponse.java | 82 +
.../server/controller/ViewVersionResponse.java | 234 +
.../ActiveWidgetLayoutResourceProvider.java | 59 +-
.../internal/ArtifactResourceProvider.java | 33 +-
.../internal/ClusterResourceProvider.java | 90 +-
.../ClusterStackVersionResourceProvider.java | 3 +-
.../GroupPrivilegeResourceProvider.java | 80 +-
.../internal/HostResourceProvider.java | 190 +-
.../HostStackVersionResourceProvider.java | 4 +-
.../controller/internal/HostStatusHelper.java | 7 +-
.../internal/ProvisionClusterRequest.java | 4 +-
.../internal/RequestResourceFilter.java | 3 +-
.../internal/RequestResourceProvider.java | 81 +-
.../internal/RequestStageContainer.java | 11 +-
.../RootServiceComponentResourceProvider.java | 63 +-
...ootServiceHostComponentResourceProvider.java | 72 +-
.../internal/RootServiceResourceProvider.java | 20 +-
.../internal/ScaleClusterRequest.java | 10 +-
.../internal/SettingResourceProvider.java | 64 +-
.../internal/StageResourceProvider.java | 8 -
.../internal/UpgradeResourceProvider.java | 13 +-
.../UserAuthorizationResourceProvider.java | 64 +-
.../internal/UserPrivilegeResourceProvider.java | 82 +-
.../ViewPermissionResourceProvider.java | 44 +-
.../internal/ViewVersionResourceProvider.java | 61 +-
.../controller/utilities/PropertyHelper.java | 2 +-
.../server/hooks/users/UserHookService.java | 3 +-
.../system/impl/AmbariMetricSinkImpl.java | 1 -
.../apache/ambari/server/orm/DBAccessor.java | 24 +
.../ambari/server/orm/DBAccessorImpl.java | 44 +
.../orm/entities/PrincipalTypeEntity.java | 12 +-
.../server/orm/entities/RequestEntity.java | 19 +
.../ambari/server/orm/entities/StageEntity.java | 18 -
.../server/orm/entities/StageEntity_.java | 4 -
.../server/orm/helpers/dbms/DbmsHelper.java | 21 +
.../orm/helpers/dbms/GenericDbmsHelper.java | 8 +
.../server/orm/helpers/dbms/MySqlHelper.java | 12 +
.../server/orm/helpers/dbms/OracleHelper.java | 12 +
.../server/orm/helpers/dbms/PostgresHelper.java | 12 +
.../server/security/authorization/User.java | 12 +
.../ambari/server/stageplanner/RoleGraph.java | 2 +-
.../server/state/ClusterHealthReport.java | 43 +-
.../state/QuickLinksConfigurationInfo.java | 8 +-
.../apache/ambari/server/state/StackInfo.java | 2 +-
.../server/state/ValueAttributesInfo.java | 87 +-
.../ambari/server/state/ValueEntryInfo.java | 8 +-
.../ambari/server/state/host/HostImpl.java | 5 +-
.../server/state/theme/ConfigCondition.java | 13 +-
.../server/state/theme/ConfigPlacement.java | 25 +-
.../ambari/server/state/theme/Layout.java | 5 +
.../ambari/server/state/theme/Section.java | 22 +-
.../ambari/server/state/theme/Subsection.java | 13 +-
.../apache/ambari/server/state/theme/Tab.java | 12 +-
.../ambari/server/state/theme/TabLayout.java | 8 +-
.../apache/ambari/server/state/theme/Theme.java | 9 +-
.../server/state/theme/ThemeConfiguration.java | 10 +-
.../apache/ambari/server/state/theme/Unit.java | 7 +-
.../ambari/server/state/theme/Widget.java | 12 +-
.../ambari/server/state/theme/WidgetEntry.java | 9 +-
.../ambari/server/topology/AmbariContext.java | 2 +-
.../ambari/server/topology/Blueprint.java | 3 +
.../ambari/server/topology/BlueprintImpl.java | 33 +-
.../ambari/server/topology/HostRequest.java | 2 +-
.../server/topology/RepositorySetting.java | 116 +
.../apache/ambari/server/topology/Setting.java | 2 +
.../ambari/server/topology/TopologyManager.java | 49 +-
.../server/upgrade/UpgradeCatalog251.java | 30 +
.../apache/ambari/server/utils/StageUtils.java | 8 +-
.../apache/ambari/server/view/ViewRegistry.java | 4 +-
.../main/resources/Ambari-DDL-Derby-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 2 +-
.../hadoop-metrics2-accumulo.properties.j2 | 2 -
.../hadoop-metrics2-hbase.properties.j2 | 2 -
.../configuration/application-properties.xml | 10 +-
.../templates/flume-metrics2.properties.j2 | 3 -
...-metrics2-hbase.properties-GANGLIA-MASTER.j2 | 2 -
...doop-metrics2-hbase.properties-GANGLIA-RS.j2 | 2 -
.../hadoop-metrics2.properties.xml | 2 -
.../hadoop-metrics2-hivemetastore.properties.j2 | 2 -
.../hadoop-metrics2-hiveserver2.properties.j2 | 2 -
.../templates/hadoop-metrics2-llapdaemon.j2 | 2 -
.../hadoop-metrics2-llaptaskscheduler.j2 | 2 -
.../hadoop-metrics2-hivemetastore.properties.j2 | 2 -
.../hadoop-metrics2-hiveserver2.properties.j2 | 2 -
.../templates/hadoop-metrics2-llapdaemon.j2 | 2 -
.../hadoop-metrics2-llaptaskscheduler.j2 | 2 -
.../0.10.0.3.0/configuration/kafka-broker.xml | 10 -
.../KAFKA/0.8.1/configuration/kafka-broker.xml | 10 -
.../common-services/OOZIE/4.2.0.3.0/alerts.json | 45 +
.../OOZIE/4.2.0.3.0/configuration/oozie-env.xml | 255 +
.../4.2.0.3.0/configuration/oozie-log4j.xml | 149 +
.../4.2.0.3.0/configuration/oozie-site.xml | 254 +
.../OOZIE/4.2.0.3.0/kerberos.json | 70 +
.../OOZIE/4.2.0.3.0/metainfo.xml | 203 +
.../package/alerts/alert_check_oozie_server.py | 244 +
.../4.2.0.3.0/package/files/oozieSmoke2.sh | 84 +
.../files/prepareOozieHdfsDirectories.sh | 42 +
.../4.2.0.3.0/package/files/wrap_ooziedb.sh | 31 +
.../scripts/check_oozie_server_status.py | 38 +
.../OOZIE/4.2.0.3.0/package/scripts/oozie.py | 516 +
.../4.2.0.3.0/package/scripts/oozie_client.py | 78 +
.../4.2.0.3.0/package/scripts/oozie_server.py | 163 +
.../package/scripts/oozie_server_upgrade.py | 237 +
.../4.2.0.3.0/package/scripts/oozie_service.py | 188 +
.../OOZIE/4.2.0.3.0/package/scripts/params.py | 39 +
.../4.2.0.3.0/package/scripts/params_linux.py | 374 +
.../4.2.0.3.0/package/scripts/params_windows.py | 34 +
.../4.2.0.3.0/package/scripts/service_check.py | 140 +
.../4.2.0.3.0/package/scripts/status_params.py | 65 +
.../package/templates/adminusers.txt.j2 | 28 +
.../templates/input.config-oozie.json.j2 | 48 +
.../package/templates/oozie-log4j.properties.j2 | 93 +
.../4.2.0.3.0/package/templates/oozie.conf.j2 | 35 +
.../package/templates/zkmigrator_jaas.conf.j2 | 26 +
.../OOZIE/4.2.0.3.0/quicklinks/quicklinks.json | 45 +
.../OOZIE/4.2.0.3.0/role_command_order.json | 9 +
.../OOZIE/4.2.0.3.0/service_advisor.py | 314 +
.../OOZIE/4.2.0.3.0/themes/theme.json | 116 +
.../STORM/0.9.1/configuration/storm-env.xml | 11 +
.../0.9.1/package/templates/config.yaml.j2 | 3 -
.../templates/storm-metrics2.properties.j2 | 2 -
.../common-services/STORM/1.0.1.3.0/alerts.json | 145 +
.../configuration/ranger-storm-audit.xml | 133 +
.../ranger-storm-plugin-properties.xml | 121 +
.../ranger-storm-policymgr-ssl.xml | 70 +
.../configuration/ranger-storm-security.xml | 67 +
.../storm-atlas-application.properties.xml | 31 +
.../configuration/storm-cluster-log4j.xml | 133 +
.../STORM/1.0.1.3.0/configuration/storm-env.xml | 165 +
.../1.0.1.3.0/configuration/storm-site.xml | 1002 +
.../configuration/storm-worker-log4j.xml | 189 +
.../STORM/1.0.1.3.0/kerberos.json | 134 +
.../STORM/1.0.1.3.0/metainfo.xml | 179 +
.../STORM/1.0.1.3.0/metrics.json | 1202 +
.../alerts/check_supervisor_process_win.py | 50 +
.../STORM/1.0.1.3.0/package/files/wordCount.jar | Bin 0 -> 690588 bytes
.../1.0.1.3.0/package/scripts/drpc_server.py | 91 +
.../STORM/1.0.1.3.0/package/scripts/nimbus.py | 116 +
.../1.0.1.3.0/package/scripts/nimbus_prod.py | 81 +
.../1.0.1.3.0/package/scripts/pacemaker.py | 90 +
.../STORM/1.0.1.3.0/package/scripts/params.py | 28 +
.../1.0.1.3.0/package/scripts/params_linux.py | 424 +
.../1.0.1.3.0/package/scripts/params_windows.py | 60 +
.../STORM/1.0.1.3.0/package/scripts/rest_api.py | 85 +
.../STORM/1.0.1.3.0/package/scripts/service.py | 95 +
.../1.0.1.3.0/package/scripts/service_check.py | 79 +
.../package/scripts/setup_ranger_storm.py | 133 +
.../1.0.1.3.0/package/scripts/status_params.py | 83 +
.../STORM/1.0.1.3.0/package/scripts/storm.py | 182 +
.../1.0.1.3.0/package/scripts/storm_upgrade.py | 177 +
.../package/scripts/storm_yaml_utils.py | 53 +
.../1.0.1.3.0/package/scripts/supervisor.py | 117 +
.../package/scripts/supervisor_prod.py | 84 +
.../package/scripts/supervisord_service.py | 33 +
.../1.0.1.3.0/package/scripts/ui_server.py | 137 +
.../package/templates/client_jaas.conf.j2 | 33 +
.../1.0.1.3.0/package/templates/config.yaml.j2 | 72 +
.../templates/input.config-storm.json.j2 | 78 +
.../templates/storm-metrics2.properties.j2 | 32 +
.../1.0.1.3.0/package/templates/storm.conf.j2 | 35 +
.../package/templates/storm_jaas.conf.j2 | 65 +
.../package/templates/worker-launcher.cfg.j2 | 19 +
.../STORM/1.0.1.3.0/quicklinks/quicklinks.json | 45 +
.../STORM/1.0.1.3.0/role_command_order.json | 13 +
.../STORM/1.0.1.3.0/service_advisor.py | 387 +
.../STORM/1.0.1.3.0/widgets.json | 127 +
.../STORM/1.1.0/configuration/storm-site.xml | 44 +
.../common-services/STORM/1.1.0/kerberos.json | 138 +
.../common-services/STORM/1.1.0/metainfo.xml | 44 +
.../ZEPPELIN/0.6.0.3.0/alerts.json | 18 +
.../0.6.0.3.0/configuration/zeppelin-config.xml | 189 +
.../0.6.0.3.0/configuration/zeppelin-env.xml | 185 +
.../configuration/zeppelin-log4j-properties.xml | 37 +
.../configuration/zeppelin-shiro-ini.xml | 90 +
.../ZEPPELIN/0.6.0.3.0/kerberos.json | 53 +
.../ZEPPELIN/0.6.0.3.0/metainfo.xml | 111 +
.../package/scripts/alert_check_zeppelin.py | 47 +
.../package/scripts/livy2_config_template.py | 107 +
.../0.6.0.3.0/package/scripts/master.py | 448 +
.../0.6.0.3.0/package/scripts/params.py | 228 +
.../0.6.0.3.0/package/scripts/service_check.py | 39 +
.../package/scripts/spark2_config_template.py | 84 +
.../0.6.0.3.0/package/scripts/status_params.py | 29 +
.../templates/input.config-zeppelin.json.j2 | 48 +
.../0.6.0.3.0/quicklinks/quicklinks.json | 35 +
.../ZEPPELIN/0.6.0.3.0/role_command_order.json | 7 +
.../src/main/resources/properties.json | 1 +
.../templates/hadoop-metrics2.properties.j2 | 2 -
.../services/YARN/configuration/yarn-site.xml | 8 +-
.../stacks/HDP/2.3/upgrades/config-upgrade.xml | 8 -
.../HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml | 6 -
.../stacks/HDP/2.3/upgrades/upgrade-2.6.xml | 1 -
.../stacks/HDP/2.4/upgrades/config-upgrade.xml | 6 +-
.../HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml | 6 -
.../stacks/HDP/2.4/upgrades/upgrade-2.6.xml | 1 -
.../stacks/HDP/2.5/upgrades/config-upgrade.xml | 10 +-
.../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml | 6 -
.../stacks/HDP/2.5/upgrades/upgrade-2.6.xml | 4 -
.../hadoop-metrics2.properties.xml | 2 -
.../HIVE/configuration/tez-interactive-site.xml | 12 +
.../stacks/HDP/2.6/services/STORM/metainfo.xml | 4 +
.../services/YARN/configuration/yarn-site.xml | 13 +-
.../stacks/HDP/2.6/upgrades/config-upgrade.xml | 5 +-
.../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml | 6 +-
.../stacks/HDP/2.6/upgrades/upgrade-2.6.xml | 2 +-
.../templates/hadoop-metrics2.properties.j2 | 2 -
.../stacks/HDP/3.0/services/OOZIE/metainfo.xml | 27 +
.../stacks/HDP/3.0/services/STORM/metainfo.xml | 27 +
.../HDP/3.0/services/ZEPPELIN/metainfo.xml | 27 +
.../ExecutionCommandWrapperTest.java | 4 +-
.../ambari/server/actionmanager/StageTest.java | 2 +-
.../actionmanager/TestActionDBAccessorImpl.java | 34 +-
.../server/actionmanager/TestActionManager.java | 8 +-
.../actionmanager/TestActionScheduler.java | 43 +-
.../ambari/server/actionmanager/TestStage.java | 5 +-
.../server/agent/HeartbeatProcessorTest.java | 4 +-
.../server/agent/HeartbeatTestHelper.java | 4 +-
.../server/agent/TestHeartbeatHandler.java | 4 +-
.../services/ActiveWidgetLayoutServiceTest.java | 75 -
.../server/api/services/ClusterServiceTest.java | 30 +-
.../api/services/GroupPrivilegeServiceTest.java | 111 -
.../server/api/services/GroupServiceTest.java | 1 +
.../server/api/services/HostServiceTest.java | 2 +-
.../server/api/services/MemberServiceTest.java | 110 -
.../api/services/RootServiceServiceTest.java | 11 +-
.../server/api/services/SettingServiceTest.java | 2 +-
.../services/UserAuthorizationServiceTest.java | 100 -
.../api/services/UserPrivilegeServiceTest.java | 124 -
.../services/ViewDataMigrationServiceTest.java | 81 -
.../ViewExternalSubResourceServiceTest.java | 50 -
.../api/services/ViewPermissionServiceTest.java | 101 -
.../services/ViewSubResourceServiceTest.java | 1 +
.../views/ViewDataMigrationServiceTest.java | 81 +
.../ViewExternalSubResourceServiceTest.java | 50 +
.../request/creator/HostEventCreatorTest.java | 4 +-
.../AmbariManagementControllerTest.java | 157 +-
.../server/controller/ClusterRequestTest.java | 16 -
.../server/controller/ClusterResponseTest.java | 11 +-
.../server/controller/KerberosHelperTest.java | 93 +-
.../RootServiceResponseFactoryTest.java | 9 +-
.../internal/AbstractResourceProviderTest.java | 5 +-
.../internal/CalculatedStatusTest.java | 2 +-
.../internal/ClusterResourceProviderTest.java | 20 +-
...ClusterStackVersionResourceProviderTest.java | 10 +-
.../GroupPrivilegeResourceProviderTest.java | 13 +-
.../internal/HostResourceProviderTest.java | 74 +-
.../internal/ProvisionClusterRequestTest.java | 6 +-
.../internal/RequestStageContainerTest.java | 2 +-
...ootServiceComponentResourceProviderTest.java | 21 +-
...erviceHostComponentResourceProviderTest.java | 11 +-
.../internal/ScaleClusterRequestTest.java | 14 +-
.../UserPrivilegeResourceProviderTest.java | 13 +-
.../LogSearchDataRetrievalServiceTest.java | 1 -
.../credentialapi/CredentialUtilTest.java | 1 -
.../server/hooks/users/UserHookServiceTest.java | 4 +-
.../AmbariPamAuthenticationProviderTest.java | 1 -
.../serveraction/ServerActionExecutorTest.java | 9 +-
.../server/stageplanner/TestStagePlanner.java | 2 +-
.../server/state/cluster/ClusterTest.java | 6 +-
.../ClusterDeployWithStartOnlyTest.java | 5 +-
...InstallWithoutStartOnComponentLevelTest.java | 5 +-
.../ClusterInstallWithoutStartTest.java | 7 +-
.../ambari/server/topology/SettingTest.java | 18 +
.../server/topology/TopologyManagerTest.java | 9 +-
.../server/upgrade/UpgradeCatalog251Test.java | 5 +
.../ambari/server/utils/StageUtilsTest.java | 2 +-
ambari-web/api-docs/css/api-explorer.css | 2423 ++
ambari-web/api-docs/css/index.css | 17430 +++++++++++++
ambari-web/api-docs/css/print.css | 1167 +
ambari-web/api-docs/css/reset.css | 125 +
ambari-web/api-docs/css/screen.css | 9 +
ambari-web/api-docs/css/standalone.css | 293 +
ambari-web/api-docs/css/typography.css | 26 +
.../api-docs/fonts/droid-sans-v6-latin-700.eot | Bin 0 -> 22922 bytes
.../api-docs/fonts/droid-sans-v6-latin-700.svg | 411 +
.../api-docs/fonts/droid-sans-v6-latin-700.ttf | Bin 0 -> 40513 bytes
.../api-docs/fonts/droid-sans-v6-latin-700.woff | Bin 0 -> 25992 bytes
.../fonts/droid-sans-v6-latin-700.woff2 | Bin 0 -> 11480 bytes
.../fonts/droid-sans-v6-latin-regular.eot | Bin 0 -> 22008 bytes
.../fonts/droid-sans-v6-latin-regular.svg | 403 +
.../fonts/droid-sans-v6-latin-regular.ttf | Bin 0 -> 39069 bytes
.../fonts/droid-sans-v6-latin-regular.woff | Bin 0 -> 24868 bytes
.../fonts/droid-sans-v6-latin-regular.woff2 | Bin 0 -> 11304 bytes
ambari-web/api-docs/images/Swagger_explorer.png | Bin 0 -> 108087 bytes
.../api-docs/images/Swagger_explorer_min.png | Bin 0 -> 46646 bytes
ambari-web/api-docs/images/explorer_icons.png | Bin 0 -> 5763 bytes
ambari-web/api-docs/images/favicon-16x16.png | Bin 0 -> 645 bytes
ambari-web/api-docs/images/favicon-32x32.png | Bin 0 -> 1654 bytes
ambari-web/api-docs/images/favicon.ico | Bin 0 -> 5430 bytes
.../api-docs/images/json_editor_integration.png | Bin 0 -> 63019 bytes
ambari-web/api-docs/images/logo_small.png | Bin 0 -> 770 bytes
ambari-web/api-docs/images/pet_store_api.png | Bin 0 -> 824 bytes
ambari-web/api-docs/images/senodio.png | Bin 0 -> 22838 bytes
ambari-web/api-docs/images/throbber.gif | Bin 0 -> 9257 bytes
ambari-web/api-docs/images/wordnik_api.png | Bin 0 -> 980 bytes
ambari-web/api-docs/index.html | 241 +
ambari-web/api-docs/lib/backbone-min.js | 15 +
ambari-web/api-docs/lib/bootstrap.min.js | 6 +
ambari-web/api-docs/lib/handlebars-2.0.0.js | 28 +
ambari-web/api-docs/lib/highlight.7.3.pack.js | 1 +
ambari-web/api-docs/lib/jquery-1.8.0.min.js | 2 +
ambari-web/api-docs/lib/jquery.ba-bbq.min.js | 18 +
ambari-web/api-docs/lib/jquery.slideto.min.js | 1 +
ambari-web/api-docs/lib/jquery.wiggle.min.js | 8 +
ambari-web/api-docs/lib/jsoneditor.js | 7287 ++++++
ambari-web/api-docs/lib/marked.js | 1272 +
ambari-web/api-docs/lib/swagger-oauth.js | 286 +
ambari-web/api-docs/lib/underscore-min.js | 6 +
ambari-web/api-docs/lib/underscore-min.map | 1 +
ambari-web/api-docs/o2c.html | 20 +
ambari-web/api-docs/swagger-ui.js | 22644 +++++++++++++++++
ambari-web/api-docs/swagger-ui.min.js | 12 +
.../main/admin/stack_and_upgrade_controller.js | 7 +-
ambari-web/app/messages.js | 6 +-
ambari-web/app/styles/application.less | 11 +-
.../wizard/step3/step3_host_warnings_popup.hbs | 4 +-
ambari-web/app/templates/wizard/step4.hbs | 16 +-
ambari-web/app/utils/ajax/ajax.js | 2 +-
ambari-web/app/views/wizard/step4_view.js | 7 +-
ambari-web/brunch-config.js | 3 +-
ambari-web/pom.xml | 1 +
.../admin/stack_and_upgrade_controller_test.js | 6 -
.../view/filebrowser/DownloadService.java | 4 +-
.../src/main/resources/ui/hive-web/Brocfile.js | 1 +
.../ui/hive-web/vendor/browser-pollyfills.js | 213 +
.../ambari/storm/StormDetailsServlet.java | 81 +
.../storm/src/main/resources/WEB-INF/web.xml | 8 +
.../resources/scripts/components/SearchLogs.jsx | 38 +-
.../ui/app/components/search-create-new-bar.js | 12 +-
.../components/search-create-new-bar.hbs | 4 +
.../config-utils/diff_stack_properties.py | 154 +
utility/checkstyle.xml | 38 +
utility/pom.xml | 5 +-
.../apache/ambari/annotations/ApiIgnore.java | 29 +
.../UndocumentedRestApiOperationCheck.java | 76 +
...dTransactionalOnPrivateMethodsCheckTest.java | 4 +-
.../UndocumentedRestApiOperationCheckTest.java | 53 +
.../checkstyle/InputRestApiOperation.java | 138 +
599 files changed, 102767 insertions(+), 5685 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java
index 562024b,5295536..f17c739
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java
@@@ -197,11 -193,8 +193,10 @@@ public class Stage
stageEntity.setRequestContext(requestContext);
stageEntity.setHostRoleCommands(new ArrayList<HostRoleCommandEntity>());
stageEntity.setRoleSuccessCriterias(new ArrayList<RoleSuccessCriteriaEntity>());
- stageEntity.setClusterHostInfo(clusterHostInfo);
stageEntity.setCommandParamsStage(commandParamsStage);
- stageEntity.setHostParamsStage(hostParamsStage);
+ if (null != hostParamsStage) {
+ stageEntity.setHostParamsStage(hostParamsStage);
+ }
stageEntity.setCommandExecutionType(commandExecutionType);
stageEntity.setStatus(status);
stageEntity.setDisplayStatus(displayStatus);
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index 31a34fe,520dcab..0b507fb
--- 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
@@@ -76,7 -73,10 +76,8 @@@ import org.apache.ambari.server.control
import org.apache.ambari.server.controller.internal.RequestResourceFilter;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.metadata.ActionMetadata;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
+ import org.apache.ambari.server.orm.dao.RequestDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@@ -174,6 -175,12 +176,9 @@@ public class AmbariCustomCommandExecuti
private OsFamily os_family;
@Inject
- private ClusterVersionDAO clusterVersionDAO;
-
- @Inject
+ private RequestDAO requestDAO;
+
+ @Inject
private HostRoleCommandDAO hostRoleCommandDAO;
private Map<String, Map<String, Map<String, String>>> configCredentialsForService = new HashMap<>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index 3a5a4e6,9bc7f4a..dcd8048
--- 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
@@@ -3049,16 -3066,10 +3050,13 @@@ public class AmbariManagementController
RoleCommand roleCommand) throws AmbariException {
Map<String, Set<String>> clusterHostInfo = StageUtils.getClusterHostInfo(cluster);
String clusterHostInfoJson = StageUtils.getGson().toJson(clusterHostInfo);
- Map<String, String> hostParamsCmd = customCommandExecutionHelper.createDefaultHostParams(cluster);
- Stage stage = createNewStage(0, cluster,1, "","{}", "");
+ Map<String, String> hostParamsCmd = customCommandExecutionHelper.createDefaultHostParams(
+ cluster, scHost.getServiceComponent().getDesiredRepositoryVersion());
+
- Stage stage = createNewStage(0, cluster,
- 1, "",
- clusterHostInfoJson, "{}", "");
-
++ Stage stage = createNewStage(0, cluster, 1, "", clusterHostInfoJson, "{}", "");
+
Map<String, Map<String, String>> configTags = configHelper.getEffectiveDesiredTags(cluster, scHost.getHostName());
Map<String, Map<String, String>> configurations = configHelper.getEffectiveConfigProperties(cluster, configTags);
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java
index 7a5abbb,5ac6251..5d7d9bc
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceRequest.java
@@@ -17,8 -17,9 +17,10 @@@
*/
package org.apache.ambari.server.controller;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+ import io.swagger.annotations.ApiModelProperty;
+
public class ServiceRequest {
private String clusterName; // REF
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java
index a16b688,44bdfc7..00c6c2b
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java
@@@ -18,9 -18,9 +18,11 @@@
package org.apache.ambari.server.controller;
+import org.apache.ambari.server.state.RepositoryVersionState;
+import org.apache.ambari.server.state.StackId;
+ import io.swagger.annotations.ApiModelProperty;
+
public class ServiceResponse {
private Long clusterId;
@@@ -108,19 -108,11 +114,21 @@@
}
/**
- * @return the desiredStackVersion
+ * @return the desired stack ID.
*/
+ @ApiModelProperty(hidden = true)
- public String getDesiredStackVersion() {
- return desiredStackVersion;
+ public String getDesiredStackId() {
+ return desiredStackId.getStackId();
++
+ }
+
+ /**
+ * Gets the desired repository version.
+ *
+ * @return the desired repository version.
+ */
+ public String getDesiredRepositoryVersion() {
+ return desiredRepositoryVersion;
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index de2386a,0ebf3aa..4e6fa61
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@@ -897,11 -1368,10 +897,10 @@@ public class UpgradeResourceProvider ex
actionContext.setAutoSkipFailures(context.isComponentFailureAutoSkipped());
ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext,
- cluster, context.getEffectiveStackId());
+ cluster, effectiveRepositoryVersion);
Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari",
- cluster.getClusterName(), cluster.getClusterId(), entity.getText(),
- jsons.getClusterHostInfo(), jsons.getCommandParamsForStage(),
+ cluster.getClusterName(), cluster.getClusterId(), entity.getText(), jsons.getCommandParamsForStage(),
jsons.getHostParamsForStage());
stage.setSkippable(skippable);
@@@ -980,11 -1450,10 +979,10 @@@
actionContext.setMaintenanceModeHostExcluded(true);
ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext,
- cluster, context.getEffectiveStackId());
+ cluster, effectiveRepositoryVersion);
Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari",
- cluster.getClusterName(), cluster.getClusterId(), entity.getText(),
- jsons.getClusterHostInfo(), jsons.getCommandParamsForStage(),
+ cluster.getClusterName(), cluster.getClusterId(), entity.getText(), jsons.getCommandParamsForStage(),
jsons.getHostParamsForStage());
stage.setSkippable(skippable);
@@@ -1042,11 -1511,10 +1040,10 @@@
actionContext.setMaintenanceModeHostExcluded(true);
ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext,
- cluster, context.getEffectiveStackId());
+ cluster, effectiveRepositoryVersion);
Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari",
- cluster.getClusterName(), cluster.getClusterId(), entity.getText(),
- jsons.getClusterHostInfo(), jsons.getCommandParamsForStage(),
+ cluster.getClusterName(), cluster.getClusterId(), entity.getText(), jsons.getCommandParamsForStage(),
jsons.getHostParamsForStage());
stage.setSkippable(skippable);
@@@ -1173,14 -1642,14 +1170,14 @@@
actionContext.setMaintenanceModeHostExcluded(true);
ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext,
- cluster, context.getEffectiveStackId());
+ cluster, context.getRepositoryVersion());
Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari",
- cluster.getClusterName(), cluster.getClusterId(), stageText, jsons.getClusterHostInfo(),
- jsons.getCommandParamsForStage(), jsons.getHostParamsForStage());
+ cluster.getClusterName(), cluster.getClusterId(), stageText, jsons.getCommandParamsForStage(),
+ jsons.getHostParamsForStage());
- stage.setSkippable(skippable);
- stage.setAutoSkipFailureSupported(supportsAutoSkipOnFailure);
+ stage.setSkippable(group.skippable);
+ stage.setAutoSkipFailureSupported(group.supportsAutoSkipOnFailure);
long stageId = request.getLastStageId() + 1;
if (0L == stageId) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/main/resources/properties.json
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
index 5fa3e41,ceda927..b960b29
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
@@@ -885,8 -982,12 +885,8 @@@ public class HeartbeatProcessorTest
serviceComponentHost1.setState(State.UPGRADING);
serviceComponentHost2.setState(State.INSTALLING);
- serviceComponentHost1.setStackVersion(stack120);
- serviceComponentHost1.setDesiredStackVersion(stack130);
- serviceComponentHost2.setStackVersion(stack120);
-
Stage s = stageFactory.createNew(requestId, "/a/b", "cluster1", 1L, "action manager test",
- "clusterHostInfo", "commandParamsStage", "hostParamsStage");
+ "commandParamsStage", "hostParamsStage");
s.setStageId(stageId);
s.addHostRoleExecutionCommand(DummyHostname1, Role.DATANODE, RoleCommand.UPGRADE,
new ServiceComponentHostUpgradeEvent(Role.DATANODE.toString(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatTestHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index a12e834,83ba0bb..eb82ba3
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@@ -676,45 -630,34 +676,29 @@@ public class AmbariManagementController
Assert.assertNotNull(clusters.getCluster(cluster1));
}
-- @Test
- public void testCreateClusterWithInvalidRequest() {
- public void testCreateClusterWithDesiredClusterConfigs() {
- // TODO implement after configs integration
- }
-
+ @Test(expected = IllegalArgumentException.class)
+ public void testCreateClusterWithInvalidRequest1() throws Exception {
ClusterRequest r = new ClusterRequest(null, null, null, null);
- r.toString();
-
- try {
- controller.createCluster(r);
- fail("Expected create cluster for invalid request");
- } catch (Exception e) {
- // Expected
- }
-
- r.setClusterId(1L);
- try {
- controller.createCluster(r);
- fail("Expected create cluster for invalid request");
- } catch (Exception e) {
- // Expected
- }
- r.setClusterId(null);
+ controller.createCluster(r);
+ }
- r.setClusterName(getUniqueName());
- try {
- controller.createCluster(r);
- fail("Expected create cluster for invalid request - no stack version");
- } catch (Exception e) {
- // Expected
- }
+ @Test(expected = IllegalArgumentException.class)
+ public void testCreateClusterWithInvalidRequest2() throws Exception {
+ ClusterRequest r = new ClusterRequest(1L, null, null, null);
+ controller.createCluster(r);
+ }
- r.setStackVersion("HDP-1.2.0");
- r.setProvisioningState(State.INSTALLING.name());
- try {
- controller.createCluster(r);
- controller.updateClusters(Collections.singleton(r), null);
+ @Test(expected = IllegalArgumentException.class)
+ public void testCreateClusterWithInvalidRequest3() throws Exception {
+ ClusterRequest r = new ClusterRequest(null, getUniqueName(), null, null);
+ controller.createCluster(r);
+ }
- fail("Expected create cluster for invalid request - invalid provisioning state");
- } catch (Exception e) {
- // Expected
- }
+ @Test(expected = IllegalArgumentException.class)
+ public void testCreateClusterWithInvalidRequest4() throws Exception {
+ ClusterRequest r = new ClusterRequest(null, null, State.INSTALLING.name(), null, "HDP-1.2.0", null);
+ controller.createCluster(r);
+ controller.updateClusters(Collections.singleton(r), null);
}
@Test
@@@ -1942,16 -1905,15 +1926,16 @@@
} catch (Exception e) {
// Expected
}
--
++
clusters.addCluster(cluster1, new StackId("HDP-0.1"));
--
++
try {
set1.clear();
HostRequest rInvalid1 =
- new HostRequest(host1, cluster1, null);
+ new HostRequest(host1, cluster1);
+ rInvalid1.setRackInfo(UUID.randomUUID().toString());
HostRequest rInvalid2 =
- new HostRequest(host1, cluster1, null);
+ new HostRequest(host1, cluster1);
set1.add(rInvalid1);
set1.add(rInvalid2);
HostResourceProviderTest.createHosts(controller, set1);
@@@ -1959,7 -1921,7 +1943,6 @@@
} catch (Exception e) {
// Expected
}
--
}
@Test
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
index 4138e3e,78752dc..a4cc6fc
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
@@@ -1318,14 -1306,10 +1300,14 @@@ public class HostResourceProviderTest e
for (HostRequest request : requests) {
Map<String, Object> requestProperties = new HashMap<>();
- requestProperties.put(HostResourceProvider.HOST_NAME_PROPERTY_ID, request.getHostname());
+ requestProperties.put(HostResourceProvider.HOST_HOST_NAME_PROPERTY_ID, request.getHostname());
requestProperties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, request.getClusterName());
+ if (null != request.getRackInfo()) {
+ requestProperties.put(HostResourceProvider.HOST_RACK_INFO_PROPERTY_ID, UUID.randomUUID().toString());
+ }
properties.add(requestProperties);
}
+
provider.createHosts(PropertyHelper.getCreateRequest(properties, Collections.<String, String>emptyMap()));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
index 3a67b6c,3e592b2..0b251ef
--- a/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
@@@ -136,19 -122,11 +136,19 @@@ public class TestStagePlanner
public void testRestartStagePlan() {
ClusterImpl cluster = mock(ClusterImpl.class);
when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6"));
+
+ Service hiveService = mock(Service.class);
+ when(hiveService.getDesiredStackId()).thenReturn(new StackId("HDP-2.0.6"));
+
+ when(cluster.getServices()).thenReturn(ImmutableMap.<String, Service>builder()
+ .put("HIVE", hiveService)
+ .build());
+
RoleCommandOrder rco = roleCommandOrderProvider.getRoleCommandOrder(cluster);
RoleGraph rg = roleGraphFactory.createNew(rco);
- long now = System.currentTimeMillis();
+
Stage stage = stageFactory.createNew(1, "/tmp", "cluster1", 1L, "execution command wrapper test",
- "clusterHostInfo", "commandParamsStage", "hostParamsStage");
+ "commandParamsStage", "hostParamsStage");
stage.setStageId(1);
stage.addServerActionCommand("RESTART", null, Role.HIVE_METASTORE,
RoleCommand.CUSTOM_COMMAND, "cluster1",
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-server/src/test/java/org/apache/ambari/server/utils/StageUtilsTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --cc ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index a676f7429,0f2efb0..d6829d9
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@@ -734,9 -733,9 +733,8 @@@ App.MainAdminStackAndUpgradeController
name: 'admin.downgrade.start',
sender: this,
data: {
- from: App.RepositoryVersion.find().findProperty('displayName', this.get('upgradeVersion')).get('repositoryVersion'),
value: currentVersion.repository_version,
label: currentVersion.repository_name,
- id: currentVersion.id,
isDowngrade: true,
upgradeType: this.get('upgradeType')
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-web/app/messages.js
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0f266ed6/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --cc ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index 4585991,e696bb1..81be6af
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@@ -1143,7 -1138,7 +1138,6 @@@ describe('App.MainAdminStackAndUpgradeC
it('request-data is valid', function () {
expect(this.callArgs.data).to.eql({
- id: '1',
- from: '2.3',
value: '2.2',
label: 'HDP-2.2',
isDowngrade: true,
[09/50] [abbrv] ambari git commit: AMBARI-20957. Remove
cluster_version use (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
index b4ddf09..c0a074f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
@@ -20,10 +20,8 @@ package org.apache.ambari.server.events.listeners.upgrade;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.locks.Lock;
import org.apache.ambari.server.AmbariException;
@@ -38,7 +36,7 @@ import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.logging.LockFactory;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
+import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
@@ -87,6 +85,9 @@ public class HostVersionOutOfSyncListener {
@Inject
private Provider<AmbariMetaInfo> ami;
+ @Inject
+ private Provider<RepositoryVersionDAO> repositoryVersionDAO;
+
/**
* The publisher may be an asynchronous, multi-threaded one, so to avoid the (rare, but possible) case
* of both an Install and Uninstall event occurring at the same time, we use a Lock.
@@ -140,7 +141,6 @@ public class HostVersionOutOfSyncListener {
case NOT_REQUIRED:
hostVersionEntity.setState(RepositoryVersionState.OUT_OF_SYNC);
hostVersionDAO.get().merge(hostVersionEntity);
- cluster.recalculateClusterVersionState(hostVersionEntity.getRepositoryVersion());
break;
default:
break;
@@ -224,7 +224,7 @@ public class HostVersionOutOfSyncListener {
try {
Cluster cluster = clusters.get().getClusterById(event.getClusterId());
- Set<RepositoryVersionEntity> changedRepositoryVersions = new HashSet<>();
+
Map<String, ServiceComponent> serviceComponents = cluster.getService(event.getServiceName()).getServiceComponents();
// Determine hosts that become OUT_OF_SYNC when adding components for new service
Map<String, List<ServiceComponent>> affectedHosts =
@@ -262,18 +262,20 @@ public class HostVersionOutOfSyncListener {
if (hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
hostVersionEntity.setState(RepositoryVersionState.OUT_OF_SYNC);
hostVersionDAO.get().merge(hostVersionEntity);
- changedRepositoryVersions.add(repositoryVersion);
}
}
}
- for (RepositoryVersionEntity repositoryVersion : changedRepositoryVersions) {
- cluster.recalculateClusterVersionState(repositoryVersion);
- }
+
} catch (AmbariException e) {
LOG.error("Can not update hosts about out of sync", e);
}
}
+ /**
+ * When hosts are added, add a host_version record for every repo_version in the database.
+ *
+ * @param event the add event
+ */
@Subscribe
@Transactional
public void onHostEvent(HostsAddedEvent event) {
@@ -281,37 +283,28 @@ public class HostVersionOutOfSyncListener {
LOG.debug(event.toString());
}
- try {
- Cluster cluster = clusters.get().getClusterById(event.getClusterId());
+ List<RepositoryVersionEntity> repos = repositoryVersionDAO.get().findAllDefinitions();
- Collection<ClusterVersionEntity> allClusterVersions = cluster.getAllClusterVersions();
- for (ClusterVersionEntity clusterVersion : allClusterVersions) {
- if (clusterVersion.getState() != RepositoryVersionState.CURRENT) { // Current version is taken care of automatically
- RepositoryVersionEntity repositoryVersion = clusterVersion.getRepositoryVersion();
- for (String hostName : event.getHostNames()) {
- HostEntity hostEntity = hostDAO.get().findByName(hostName);
- HostVersionEntity missingHostVersion = new HostVersionEntity(hostEntity,
- repositoryVersion, RepositoryVersionState.OUT_OF_SYNC);
-
- LOG.info("Creating host version for {}, state={}, repo={} (repo_id={})",
- missingHostVersion.getHostName(), missingHostVersion.getState(),
- missingHostVersion.getRepositoryVersion().getVersion(), missingHostVersion.getRepositoryVersion().getId());
- hostVersionDAO.get().create(missingHostVersion);
- }
- cluster.recalculateClusterVersionState(repositoryVersion);
- }
+ for (String hostName : event.getHostNames()) {
+ HostEntity hostEntity = hostDAO.get().findByName(hostName);
+
+ for (RepositoryVersionEntity repositoryVersion : repos) {
+
+ // we don't have the knowledge yet to know if we need the record
+ HostVersionEntity missingHostVersion = new HostVersionEntity(hostEntity,
+ repositoryVersion, RepositoryVersionState.NOT_REQUIRED);
+
+ LOG.info("Creating host version for {}, state={}, repo={} (repo_id={})",
+ missingHostVersion.getHostName(), missingHostVersion.getState(),
+ missingHostVersion.getRepositoryVersion().getVersion(), missingHostVersion.getRepositoryVersion().getId());
+
+ hostVersionDAO.get().create(missingHostVersion);
}
- } catch (AmbariException e) {
- LOG.error("Can not update hosts about out of sync", e);
}
}
/**
- * Recalculates the cluster repo version state when a host is removed. If
- * hosts are removed during an upgrade, the remaining hosts will all be in the
- * {@link RepositoryVersionState#INSTALLED} state, but the cluster will never
- * transition into this state. This is because when the host is removed, a
- * recalculation must happen.
+ * Host repo_version entities are removed via cascade.
*
* @param event
* the removal event.
@@ -322,36 +315,6 @@ public class HostVersionOutOfSyncListener {
if (LOG.isDebugEnabled()) {
LOG.debug(event.toString());
}
-
- try {
- Set<Cluster> clusters = event.getClusters();
- for (Cluster cluster : clusters) {
- Collection<ClusterVersionEntity> allClusterVersions = cluster.getAllClusterVersions();
-
- for (ClusterVersionEntity clusterVersion : allClusterVersions) {
- RepositoryVersionState repositoryVersionState = clusterVersion.getState();
-
- // the CURRENT/INSTALLED states should not be affected by a host
- // removal - if it's already current then removing a host will never
- // make it not CURRENT or not INSTALLED
- switch (repositoryVersionState) {
- case CURRENT:
- case INSTALLED:
- continue;
- default:
- break;
- }
-
- RepositoryVersionEntity repositoryVersion = clusterVersion.getRepositoryVersion();
- cluster.recalculateClusterVersionState(repositoryVersion);
- }
- }
-
- } catch (AmbariException ambariException) {
- LOG.error(
- "Unable to recalculate the cluster repository version state when a host was removed",
- ambariException);
- }
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
index 33c622f..1cedea8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
@@ -43,9 +43,7 @@ import com.google.inject.Singleton;
* The {@link StackVersionListener} class handles the propagation of versions
* advertised by the {@link org.apache.ambari.server.state.ServiceComponentHost}
* that bubble up to the
- * {@link org.apache.ambari.server.orm.entities.HostVersionEntity} and
- * eventually the
- * {@link org.apache.ambari.server.orm.entities.ClusterVersionEntity}
+ * {@link org.apache.ambari.server.orm.entities.HostVersionEntity}
*/
@Singleton
@EagerSingleton
@@ -167,10 +165,7 @@ public class StackVersionListener {
* @throws AmbariException
*/
private void bootstrapVersion(Cluster cluster, ServiceComponentHost sch) throws AmbariException {
- RepositoryVersionEntity repoVersion = sch.recalculateHostVersionState();
- if (null != repoVersion) {
- cluster.recalculateClusterVersionState(repoVersion);
- }
+ sch.recalculateHostVersionState();
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterVersionDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterVersionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterVersionDAO.java
deleted file mode 100644
index 1bcca60..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterVersionDAO.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.server.orm.dao;
-
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
-import javax.persistence.TypedQuery;
-
-import org.apache.ambari.server.orm.RequiresSession;
-import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.state.RepositoryVersionState;
-import org.apache.ambari.server.state.StackId;
-
-import com.google.inject.Singleton;
-import com.google.inject.persist.Transactional;
-
-/**
- * The {@link ClusterVersionDAO} class manages the {@link ClusterVersionEntity} instances associated with a cluster.
- * Each cluster can have multiple stack versions {@link org.apache.ambari.server.state.RepositoryVersionState#INSTALLED},
- * exactly one stack version that is {@link org.apache.ambari.server.state.RepositoryVersionState#CURRENT}, and at most one
- * stack version that is {@link org.apache.ambari.server.state.RepositoryVersionState#UPGRADING}.
- */
-@Singleton
-public class ClusterVersionDAO extends CrudDAO<ClusterVersionEntity, Long>{
- /**
- * Constructor.
- */
- public ClusterVersionDAO() {
- super(ClusterVersionEntity.class);
- }
-
- /**
- * Retrieve all of the cluster versions for the given stack and version.
- *
- * @param stackName
- * the stack name (for example "HDP")
- * @param stackVersion
- * the stack version (for example "2.2")
- * @param version
- * Repository version (e.g., 2.2.0.1-995)
- * @return Return a list of cluster versions that match the stack and version.
- */
- @RequiresSession
- public List<ClusterVersionEntity> findByStackAndVersion(String stackName,
- String stackVersion, String version) {
- final TypedQuery<ClusterVersionEntity> query = entityManagerProvider.get().createNamedQuery("clusterVersionByStackVersion", ClusterVersionEntity.class);
- query.setParameter("stackName", stackName);
- query.setParameter("stackVersion", stackVersion);
- query.setParameter("version", version);
-
- return daoUtils.selectList(query);
- }
-
- /**
- * Get the cluster version for the given cluster name, stack name, and stack
- * version.
- *
- * @param clusterName
- * Cluster name
- * @param stackId
- * Stack id (e.g., HDP-2.2)
- * @param version
- * Repository version (e.g., 2.2.0.1-995)
- * @return Return all of the cluster versions associated with the given
- * cluster.
- */
- @RequiresSession
- public ClusterVersionEntity findByClusterAndStackAndVersion(
- String clusterName, StackId stackId, String version) {
- final TypedQuery<ClusterVersionEntity> query = entityManagerProvider.get()
- .createNamedQuery("clusterVersionByClusterAndStackAndVersion", ClusterVersionEntity.class);
- query.setParameter("clusterName", clusterName);
- query.setParameter("stackName", stackId.getStackName());
- query.setParameter("stackVersion", stackId.getStackVersion());
- query.setParameter("version", version);
-
- return daoUtils.selectSingle(query);
- }
-
- /**
- * Retrieve all of the cluster versions for the given cluster.
- *
- * @param clusterName Cluster name
- * @return Return all of the cluster versions associated with the given cluster.
- */
- @RequiresSession
- public List<ClusterVersionEntity> findByCluster(String clusterName) {
- final TypedQuery<ClusterVersionEntity> query = entityManagerProvider.get()
- .createNamedQuery("clusterVersionByCluster", ClusterVersionEntity.class);
- query.setParameter("clusterName", clusterName);
-
- return daoUtils.selectList(query);
- }
-
- /**
- * Retrieve the single cluster version whose state is {@link org.apache.ambari.server.state.RepositoryVersionState#CURRENT}, of which there should be exactly one at all times
- * for the given cluster.
- *
- * @param clusterName Cluster name
- * @return Returns the single cluster version for this cluster whose state is {@link org.apache.ambari.server.state.RepositoryVersionState#CURRENT}, or {@code null} otherwise.
- */
- @RequiresSession
- public ClusterVersionEntity findByClusterAndStateCurrent(String clusterName) {
- final TypedQuery<ClusterVersionEntity> query = entityManagerProvider.get()
- .createNamedQuery("clusterVersionByClusterAndState", ClusterVersionEntity.class);
- query.setParameter("clusterName", clusterName);
- query.setParameter("state", RepositoryVersionState.CURRENT);
-
- try {
- List results = query.getResultList();
- if (results.isEmpty()) {
- return null;
- } else {
- if (results.size() == 1) {
- return (ClusterVersionEntity) results.get(0);
- }
- }
- throw new NonUniqueResultException();
- } catch (NoResultException ignored) {
- return null;
- }
- }
-
- /**
- * Retrieve all of the cluster versions for the cluster with the given name and a state.
- *
- * @param clusterName Cluster name
- * @param state Cluster version state
- * @return Returns a list of cluster versions for the given cluster and a state.
- */
- @RequiresSession
- public List<ClusterVersionEntity> findByClusterAndState(String clusterName, RepositoryVersionState state) {
- final TypedQuery<ClusterVersionEntity> query = entityManagerProvider.get()
- .createNamedQuery("clusterVersionByClusterAndState", ClusterVersionEntity.class);
- query.setParameter("clusterName", clusterName);
- query.setParameter("state", state);
-
- return daoUtils.selectList(query);
- }
-
- /**
- * Construct a Cluster Version. Additionally this will update parent connection relations without
- * forcing refresh of parent entity
- * @param entity entity to create
- */
- @Override
- @Transactional
- public void create(ClusterVersionEntity entity) throws IllegalArgumentException {
- // check if repository version is not missing, to avoid NPE
- if (entity.getRepositoryVersion() == null) {
- throw new IllegalArgumentException("RepositoryVersion argument is not set for the entity");
- }
-
- super.create(entity);
- entity.getRepositoryVersion().updateClusterVersionEntityRelation(entity);
- }
-
- /**
- * Construct a Cluster Version and return it. This is primarily used to be able to construct the object and mock
- * the function call.
- * @param cluster Cluster
- * @param repositoryVersion Repository Version
- * @param state Initial State
- * @param startTime Start Time
- * @param endTime End Time
- * @param userName Username, such as "admin"
- * @return Return new ClusterVersion object.
- */
- @Transactional
- public ClusterVersionEntity create(ClusterEntity cluster, RepositoryVersionEntity repositoryVersion,
- RepositoryVersionState state, long startTime, long endTime, String userName) {
- ClusterVersionEntity clusterVersionEntity = new ClusterVersionEntity(cluster,
- repositoryVersion, state, startTime, endTime, userName);
- this.create(clusterVersionEntity);
- return clusterVersionEntity;
- }
-
- /**
- * Updates the cluster version's existing CURRENT record to the INSTALLED, and the target
- * becomes CURRENT. This method invokes {@code clear()} on the entity manager to force entities to be refreshed.
- * @param clusterId the cluster
- * @param target the repo version that will be marked as CURRENT
- * @param current the cluster's current record to be marked INSTALLED
- */
- @Transactional
- public void updateVersions(Long clusterId, RepositoryVersionEntity target, RepositoryVersionEntity current) {
- // !!! first update target to be current
- StringBuilder sb = new StringBuilder("UPDATE ClusterVersionEntity cve");
- sb.append(" SET cve.state = ?1 ");
- sb.append(" WHERE cve.clusterId = ?2");
- sb.append(" AND cve.repositoryVersion = ?3");
-
- EntityManager em = entityManagerProvider.get();
-
- TypedQuery<Long> query = em.createQuery(sb.toString(), Long.class);
- daoUtils.executeUpdate(query, RepositoryVersionState.CURRENT, clusterId, target);
-
- // !!! then move existing current to installed
- sb = new StringBuilder("UPDATE ClusterVersionEntity cve");
- sb.append(" SET cve.state = ?1 ");
- sb.append(" WHERE cve.clusterId = ?2");
- sb.append(" AND cve.repositoryVersion = ?3");
- sb.append(" AND cve.state = ?4");
-
- query = em.createQuery(sb.toString(), Long.class);
- daoUtils.executeUpdate(query, RepositoryVersionState.INSTALLED, clusterId, current,
- RepositoryVersionState.CURRENT);
-
- em.clear();
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
index 3871b67..d367aa0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
@@ -297,6 +297,28 @@ public class HostVersionDAO extends CrudDAO<HostVersionEntity, Long> {
return daoUtils.selectList(query);
}
+ /**
+ * Gets all host version entities that are of the given states
+ *
+ * @param repositoryVersion
+ * the repository (not {@code null})
+ * @param states
+ * the states
+ * @return the host versions
+ */
+ @RequiresSession
+ public List<HostVersionEntity> findByRepositoryAndStates(RepositoryVersionEntity repositoryVersion,
+ Collection<RepositoryVersionState> states) {
+
+ TypedQuery<HostVersionEntity> query = entityManagerProvider.get().createNamedQuery(
+ "hostVersionByRepositoryAndStates", HostVersionEntity.class);
+
+ query.setParameter("repositoryVersion", repositoryVersion);
+ query.setParameter("states", states);
+
+ return daoUtils.selectList(query);
+ }
+
@Transactional
public void removeByHostName(String hostName) {
Collection<HostVersionEntity> hostVersions = findByHost(hostName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterEntity.java
index 527fd7a..0f8f336 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterEntity.java
@@ -20,7 +20,6 @@ package org.apache.ambari.server.orm.entities;
import static org.apache.commons.lang.StringUtils.defaultString;
-import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Basic;
@@ -128,9 +127,6 @@ public class ClusterEntity {
private Collection<AlertDefinitionEntity> alertDefinitionEntities;
@OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
- private Collection<ClusterVersionEntity> clusterVersionEntities;
-
- @OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
private Collection<WidgetEntity> widgetEntities;
@OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
@@ -326,19 +322,6 @@ public class ClusterEntity {
return alertDefinitionEntities;
}
- public Collection<ClusterVersionEntity> getClusterVersionEntities() {
- return clusterVersionEntities;
- }
-
- public void setClusterVersionEntities(Collection<ClusterVersionEntity> clusterVersionEntities) { this.clusterVersionEntities = clusterVersionEntities; }
-
- public void addClusterVersionEntity(ClusterVersionEntity clusterVersionEntity) {
- if (clusterVersionEntities == null) {
- clusterVersionEntities = new ArrayList<>();
- }
- clusterVersionEntities.add(clusterVersionEntity);
- }
-
/**
* Get the admin resource entity.
*
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterVersionEntity.java
deleted file mode 100644
index f1867b4..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterVersionEntity.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.server.orm.entities;
-
-import static org.apache.commons.lang.StringUtils.defaultString;
-
-import javax.persistence.Basic;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-
-import org.apache.ambari.server.state.RepositoryVersionState;
-
-@Table(name = "cluster_version")
-@Entity
-@TableGenerator(name = "cluster_version_id_generator",
- table = "ambari_sequences", pkColumnName = "sequence_name", valueColumnName = "sequence_value"
- , pkColumnValue = "cluster_version_id_seq"
- , initialValue = 0
-)
-@NamedQueries({
- @NamedQuery(name = "clusterVersionByClusterAndStackAndVersion", query =
- "SELECT clusterVersion FROM ClusterVersionEntity clusterVersion JOIN clusterVersion.clusterEntity cluster " +
- "WHERE cluster.clusterName=:clusterName AND clusterVersion.repositoryVersion.stack.stackName=:stackName AND clusterVersion.repositoryVersion.stack.stackVersion=:stackVersion AND clusterVersion.repositoryVersion.version=:version"),
- @NamedQuery(name = "clusterVersionByClusterAndState", query =
- "SELECT clusterVersion FROM ClusterVersionEntity clusterVersion JOIN clusterVersion.clusterEntity cluster " +
- "WHERE cluster.clusterName=:clusterName AND clusterVersion.state=:state"),
- @NamedQuery(name = "clusterVersionByCluster", query =
- "SELECT clusterVersion FROM ClusterVersionEntity clusterVersion JOIN clusterVersion.clusterEntity cluster " +
- "WHERE cluster.clusterName=:clusterName"),
- @NamedQuery(name = "clusterVersionByStackVersion", query = "SELECT clusterVersion FROM ClusterVersionEntity clusterVersion WHERE clusterVersion.repositoryVersion.stack.stackName=:stackName AND clusterVersion.repositoryVersion.stack.stackVersion=:stackVersion AND clusterVersion.repositoryVersion.version=:version"),
-})
-public class ClusterVersionEntity {
-
- @Id
- @Column(name = "id", nullable = false, insertable = true, updatable = false)
- @GeneratedValue(strategy = GenerationType.TABLE, generator = "cluster_version_id_generator")
- private Long id;
-
- @Column(name = "cluster_id", nullable = false, insertable = false, updatable = false)
- private Long clusterId;
-
- @ManyToOne
- @JoinColumn(name = "cluster_id", referencedColumnName = "cluster_id", nullable = false)
- private ClusterEntity clusterEntity;
-
- @ManyToOne
- @JoinColumn(name = "repo_version_id", referencedColumnName = "repo_version_id", nullable = false)
- private RepositoryVersionEntity repositoryVersion;
-
- @Column(name = "state", nullable = false, insertable = true, updatable = true)
- @Enumerated(value = EnumType.STRING)
- private RepositoryVersionState state = RepositoryVersionState.CURRENT;
-
- @Basic
- @Column(name = "start_time", nullable = false, insertable = true, updatable = true)
- private Long startTime = System.currentTimeMillis();
-
- @Basic
- @Column(name = "end_time", insertable = true, updatable = true)
- private Long endTime;
-
- @Basic
- @Column(name = "user_name", insertable = true, updatable = true)
- private String userName = "";
-
- /**
- * Empty constructor primarily used by unit tests.
- */
- public ClusterVersionEntity() {
- }
-
- /**
- * Full constructor that doesn't have the endTime
- * @param cluster Cluster entity
- * @param repositoryVersion repository version
- * @param state Cluster version state
- * @param startTime Time the cluster version reached its first state
- * @param userName User who performed the action
- */
- public ClusterVersionEntity(ClusterEntity cluster, RepositoryVersionEntity repositoryVersion, RepositoryVersionState state, long startTime, String userName) {
- clusterId = cluster.getClusterId();
- this.repositoryVersion = repositoryVersion;
- clusterEntity = cluster;
- this.state = state;
- this.startTime = startTime;
- this.userName = userName;
- }
-
- /**
- * Full constructor that does have the endTime
- * @param cluster Cluster entity
- * @param repositoryVersion repository version
- * @param state Cluster version state
- * @param startTime Time the cluster version reached its first state
- * @param endTime Time the cluster version finalized its state
- * @param userName User who performed the action
- */
- public ClusterVersionEntity(ClusterEntity cluster, RepositoryVersionEntity repositoryVersion, RepositoryVersionState state, long startTime, long endTime, String userName) {
- this(cluster, repositoryVersion, state, startTime, userName);
- this.endTime = endTime;
- }
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public Long getClusterId() {
- return clusterId;
- }
-
- public void setClusterId(Long clusterId) {
- this.clusterId = clusterId;
- }
-
- public ClusterEntity getClusterEntity() {
- return clusterEntity;
- }
-
- public void setClusterEntity(ClusterEntity clusterEntity) {
- this.clusterEntity = clusterEntity;
- }
-
- public RepositoryVersionState getState() {
- return state;
- }
-
- public void setState(RepositoryVersionState state) {
- this.state = state;
- }
-
- public Long getStartTime() { return startTime; }
-
- public void setStartTime(Long startTime) { this.startTime = startTime; }
-
- public Long getEndTime() { return endTime; }
-
- public void setEndTime(Long endTime) { this.endTime = endTime; }
-
- public String getUserName() { return defaultString(userName); }
-
- public void setUserName(String userName) { this.userName = userName; }
-
- public void setRepositoryVersion(RepositoryVersionEntity repositoryVersion) {
- this.repositoryVersion = repositoryVersion;
- }
-
- public RepositoryVersionEntity getRepositoryVersion() {
- return repositoryVersion;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- ClusterVersionEntity that = (ClusterVersionEntity) o;
-
- if (id != that.id
- || clusterId != that.clusterId
- || !repositoryVersion.equals(that.repositoryVersion)
- || !state.equals(that.state)
- || !startTime.equals(that.startTime)
- || !endTime.equals(that.endTime)
- || !userName.equals(that.userName)) {
- return false;
- }
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = id !=null ? id.intValue() : 0;
- result = 31 * result + (clusterId != null ? clusterId.hashCode() : 0);
- result = 31 * result + (repositoryVersion != null ? repositoryVersion.hashCode() : 0);
- result = 31 * result + (state != null ? state.hashCode() : 0);
- result = 31 * result + (startTime != null ? startTime.hashCode() : 0);
- result = 31 * result + (endTime != null ? endTime.hashCode() : 0);
- result = 31 * result + (userName != null ? userName.hashCode() : 0);
- return result;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
index 9be30a3..4bd6e9d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
@@ -76,7 +76,10 @@ import org.apache.ambari.server.state.RepositoryVersionState;
@NamedQuery(
name = "findHostVersionByClusterAndRepository",
query = "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters "
- + "WHERE clusters.clusterId = :clusterId AND hostVersion.repositoryVersion = :repositoryVersion")
+ + "WHERE clusters.clusterId = :clusterId AND hostVersion.repositoryVersion = :repositoryVersion"),
+ @NamedQuery(
+ name = "hostVersionByRepositoryAndStates",
+ query = "SELECT hostVersion FROM HostVersionEntity hostVersion WHERE hostVersion.repositoryVersion = :repositoryVersion AND hostVersion.state IN :states")
})
public class HostVersionEntity {
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
index f5d669e..7d6db2c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
@@ -105,10 +105,6 @@ public class RepositoryVersionEntity {
@Column(name = "repositories")
private String operatingSystems;
-
- @OneToMany(cascade = CascadeType.REMOVE, mappedBy = "repositoryVersion")
- private Set<ClusterVersionEntity> clusterVersionEntities;
-
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "repositoryVersion")
private Set<HostVersionEntity> hostVersionEntities;
@@ -159,13 +155,6 @@ public class RepositoryVersionEntity {
version = version.substring(stackName.length() + 1);
}
}
- /**
- * Update one-to-many relation without rebuilding the whole entity
- * @param entity many-to-one entity
- */
- public void updateClusterVersionEntityRelation(ClusterVersionEntity entity){
- clusterVersionEntities.add(entity);
- }
/**
* Update one-to-many relation without rebuilding the whole entity
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
index 6b89c02..7576e00 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
@@ -98,7 +98,7 @@ public class ServiceComponentDesiredStateEntity {
@JoinColumn(
name = "desired_repo_version_id",
unique = false,
- nullable = true,
+ nullable = false,
insertable = true,
updatable = true)
private RepositoryVersionEntity desiredRepositoryVersion;
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
index a4cc757..7a39dcd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
@@ -255,9 +255,6 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
String.format("Finalizing the version for cluster %s.", cluster.getClusterName())).append(
System.lineSeparator());
- cluster.transitionClusterVersion(clusterDesiredStackId, version,
- RepositoryVersionState.CURRENT);
-
outSB.append("Creating upgrade history...").append(System.lineSeparator());
writeComponentHistory(upgradeContext);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/stack/RepoUtil.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/RepoUtil.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/RepoUtil.java
index 1380f93..1c73e88 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/RepoUtil.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/RepoUtil.java
@@ -32,6 +32,7 @@ import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.state.RepositoryInfo;
import org.apache.ambari.server.state.stack.RepositoryXml;
+import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -114,8 +115,9 @@ public class RepoUtil {
* service repository and will be added.
* @param operatingSystems - A list of OperatingSystemEntity objects extracted from a RepositoryVersionEntity
* @param stackReposByOs - Stack repositories loaded from the disk (including service repositories), grouped by os.
+ * @return {@code true} if there were added repositories
*/
- public static void addServiceReposToOperatingSystemEntities(List<OperatingSystemEntity> operatingSystems,
+ public static boolean addServiceReposToOperatingSystemEntities(List<OperatingSystemEntity> operatingSystems,
ListMultimap<String, RepositoryInfo> stackReposByOs) {
Set<String> addedRepos = new HashSet<>();
for (OperatingSystemEntity os : operatingSystems) {
@@ -128,6 +130,8 @@ public class RepoUtil {
}
}
LOG.info("Added {} service repos: {}", addedRepos.size(),Iterables.toString(addedRepos));
+
+ return CollectionUtils.isNotEmpty(addedRepos);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartup.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartup.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartup.java
index 29af6a8..89f16d1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartup.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartup.java
@@ -20,25 +20,21 @@ package org.apache.ambari.server.stack;
import java.util.List;
-import javax.annotation.Nullable;
-
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
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.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
+import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
-import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.RepositoryInfo;
+import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Function;
import com.google.common.collect.ListMultimap;
import com.google.inject.Inject;
import com.google.inject.persist.Transactional;
@@ -55,26 +51,17 @@ public class UpdateActiveRepoVersionOnStartup {
private static final Logger LOG = LoggerFactory.getLogger(UpdateActiveRepoVersionOnStartup.class);
-
ClusterDAO clusterDao;
- ClusterVersionDAO clusterVersionDao;
RepositoryVersionDAO repositoryVersionDao;
RepositoryVersionHelper repositoryVersionHelper;
StackManager stackManager;
-
- private static final Function<RepositoryEntity, String> REPO_TO_ID = new Function<RepositoryEntity, String>() {
- @Override public String apply(@Nullable RepositoryEntity input) { return input.getRepositoryId(); }
- };
-
@Inject
public UpdateActiveRepoVersionOnStartup(ClusterDAO clusterDao,
- ClusterVersionDAO clusterVersionDao,
RepositoryVersionDAO repositoryVersionDao,
RepositoryVersionHelper repositoryVersionHelper,
AmbariMetaInfo metaInfo) {
this.clusterDao = clusterDao;
- this.clusterVersionDao = clusterVersionDao;
this.repositoryVersionDao = repositoryVersionDao;
this.repositoryVersionHelper = repositoryVersionHelper;
this.stackManager = metaInfo.getStackManager();
@@ -87,21 +74,20 @@ public class UpdateActiveRepoVersionOnStartup {
@Transactional
public void process() throws AmbariException {
LOG.info("Updating existing repo versions with service repos.");
+
try {
+
List<ClusterEntity> clusters = clusterDao.findAll();
for (ClusterEntity cluster: clusters) {
- StackInfo stack =
- stackManager.getStack(cluster.getDesiredStack().getStackName(), cluster.getDesiredStack().getStackVersion());
- LOG.info("Updating existing repo versions for cluster {} on stack {}-{}",
- cluster.getClusterName(), stack.getName(), stack.getVersion());
- ClusterVersionEntity clusterVersion = clusterVersionDao.findByClusterAndStateCurrent(cluster.getClusterName());
- if (null != clusterVersion) {
- RepositoryVersionEntity repoVersion = clusterVersion.getRepositoryVersion();
- updateRepoVersion(stack, repoVersion);
- repositoryVersionDao.merge(repoVersion);
- }
- else {
- LOG.warn("Missing cluster version for cluster {}", cluster.getClusterName());
+ for (ClusterServiceEntity service : cluster.getClusterServiceEntities()) {
+ RepositoryVersionEntity repositoryVersion = service.getServiceDesiredStateEntity().getDesiredRepositoryVersion();
+
+ StackId stackId = repositoryVersion.getStackId();
+ StackInfo stack = stackManager.getStack(stackId.getStackName(), stackId.getStackVersion());
+
+ if (updateRepoVersion(stack, repositoryVersion)) {
+ repositoryVersionDao.merge(repositoryVersion);
+ }
}
}
}
@@ -112,13 +98,16 @@ public class UpdateActiveRepoVersionOnStartup {
}
}
- private void updateRepoVersion(StackInfo stackInfo, RepositoryVersionEntity repoVersion) throws Exception {
+ private boolean updateRepoVersion(StackInfo stackInfo, RepositoryVersionEntity repoVersion) throws Exception {
ListMultimap<String, RepositoryInfo> serviceReposByOs = stackInfo.getRepositoriesByOs();
// Update repos in the JSON representation
List<OperatingSystemEntity> operatingSystems = repoVersion.getOperatingSystems();
- RepoUtil.addServiceReposToOperatingSystemEntities(operatingSystems, serviceReposByOs);
- repoVersion.setOperatingSystems(repositoryVersionHelper.serializeOperatingSystemEntities(operatingSystems));
+ boolean changed = RepoUtil.addServiceReposToOperatingSystemEntities(operatingSystems, serviceReposByOs);
+ if (changed) {
+ repoVersion.setOperatingSystems(repositoryVersionHelper.serializeOperatingSystemEntities(operatingSystems));
+ }
+ return changed;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/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 88c5a59..6cefd42 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
@@ -28,7 +28,6 @@ import org.apache.ambari.server.controller.ClusterResponse;
import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
import org.apache.ambari.server.events.ClusterConfigChangedEvent;
import org.apache.ambari.server.metadata.RoleCommandOrder;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.PrivilegeEntity;
@@ -144,45 +143,6 @@ public interface Cluster {
void removeServiceComponentHost(ServiceComponentHost svcCompHost)
throws AmbariException;
-
- /**
- * Get the ClusterVersionEntity object whose state is CURRENT.
- * @return Cluster Version entity to whose state is CURRENT.
- */
- ClusterVersionEntity getCurrentClusterVersion();
-
- /**
- * Gets the current stack version associated with the cluster.
- * <ul>
- * <li>if there is no upgrade in progress then get the
- * {@link ClusterVersionEntity} object whose state is
- * {@link RepositoryVersionState#CURRENT}.
- * <li>If an upgrade is in progress then based on the direction and the
- * desired stack determine which version to use. Assuming upgrading from HDP
- * 2.2.0.0-1 to 2.3.0.0-2:
- * <ul>
- * <li>RU Upgrade: 2.3.0.0-2 (desired stack id)
- * <li>RU Downgrade: 2.2.0.0-1 (desired stack id)
- * <li>EU Upgrade: while stopping services and before changing desired stack,
- * use 2.2.0.0-1, after, use 2.3.0.0-2
- * <li>EU Downgrade: while stopping services and before changing desired
- * stack, use 2.3.0.0-2, after, use 2.2.0.0-1
- * </ul>
- * </ul>
- *
- * This method must take into account both a running and a suspended upgrade.
- *
- * @return the effective cluster stack version given the current upgrading
- * conditions of the cluster.
- */
- ClusterVersionEntity getEffectiveClusterVersion() throws AmbariException;
-
- /**
- * Get all of the ClusterVersionEntity objects for the cluster.
- * @return
- */
- Collection<ClusterVersionEntity> getAllClusterVersions();
-
/**
* Get desired stack version
* @return
@@ -222,10 +182,6 @@ public interface Cluster {
* the version distributed to them will move into the
* {@link RepositoryVersionState#NOT_REQUIRED} state.
*
- * @param sourceClusterVersion
- * cluster version to be queried for a stack name/version info and
- * desired RepositoryVersionState. The only valid state of a cluster
- * version is {@link RepositoryVersionState#INSTALLING}
* @param repoVersionEntity
* the repository that the hosts are being transitioned for (not
* {@code null}).
@@ -241,9 +197,8 @@ public interface Cluster {
* @return a list of hosts which need the repository installed.
* @throws AmbariException
*/
- List<Host> transitionHostsToInstalling(ClusterVersionEntity sourceClusterVersion,
- RepositoryVersionEntity repoVersionEntity, VersionDefinitionXml versionDefinitionXml,
- boolean forceInstalled) throws AmbariException;
+ List<Host> transitionHostsToInstalling(RepositoryVersionEntity repoVersionEntity,
+ VersionDefinitionXml versionDefinitionXml, boolean forceInstalled) throws AmbariException;
/**
* For a given host, will either either update an existing Host Version Entity for the given version, or create
@@ -259,40 +214,19 @@ public interface Cluster {
final RepositoryVersionEntity repositoryVersion, final StackId stack)
throws AmbariException;
+
/**
* Update state of a cluster stack version for cluster based on states of host versions and stackids.
* @param repositoryVersion the repository version entity whose version is a value like 2.2.1.0-100)
* @throws AmbariException
*/
- void recalculateClusterVersionState(RepositoryVersionEntity repositoryVersion) throws AmbariException;
+// void recalculateClusterVersionState(RepositoryVersionEntity repositoryVersion) throws AmbariException;
/**
* Update state of all cluster stack versions for cluster based on states of host versions.
* @throws AmbariException
*/
- void recalculateAllClusterVersionStates() throws AmbariException;
-
- /**
- * 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) or
- * {@link RepositoryVersionState#INIT} (if the cluster is being created using
- * a specific repository version).
- *
- * @param stackId
- * Stack ID
- * @param version
- * Stack version
- * @param userName
- * User performing the operation
- * @param state
- * Initial state
- * @return the newly created and persisted {@link ClusterVersionEntity}.
- * @throws AmbariException
- */
- ClusterVersionEntity createClusterVersion(StackId stackId, String version,
- String userName, RepositoryVersionState state) throws AmbariException;
+// void recalculateAllClusterVersionStates() throws AmbariException;
/**
* Transition an existing cluster version from one state to another.
@@ -305,8 +239,8 @@ public interface Cluster {
* Desired state
* @throws AmbariException
*/
- void transitionClusterVersion(StackId stackId, String version,
- RepositoryVersionState state) throws AmbariException;
+// void transitionClusterVersion(StackId stackId, String version,
+// RepositoryVersionState state) throws AmbariException;
/**
* Gets whether the cluster is still initializing or has finished with its
@@ -515,7 +449,7 @@ public interface Cluster {
/**
* Add service to the cluster
- *
+ *
* @param serviceName
* the name of the service to add (not {@code null}).
* @param repositoryVersion
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/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 21c275b..7e162d7 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
@@ -23,7 +23,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
-import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -46,24 +45,20 @@ import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ConfigGroupNotFoundException;
-import org.apache.ambari.server.DuplicateResourceException;
import org.apache.ambari.server.ObjectNotFoundException;
import org.apache.ambari.server.ParentObjectNotFoundException;
import org.apache.ambari.server.RoleCommand;
import org.apache.ambari.server.ServiceComponentHostNotFoundException;
import org.apache.ambari.server.ServiceComponentNotFoundException;
import org.apache.ambari.server.ServiceNotFoundException;
-import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
-import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariSessionManager;
import org.apache.ambari.server.controller.ClusterResponse;
import org.apache.ambari.server.controller.ConfigurationResponse;
import org.apache.ambari.server.controller.MaintenanceStateHelper;
import org.apache.ambari.server.controller.RootServiceResponseFactory.Services;
import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
-import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
import org.apache.ambari.server.events.AmbariEvent.AmbariEventType;
import org.apache.ambari.server.events.ClusterConfigChangedEvent;
import org.apache.ambari.server.events.ClusterEvent;
@@ -80,12 +75,9 @@ import org.apache.ambari.server.orm.dao.AlertDefinitionDAO;
import org.apache.ambari.server.orm.dao.AlertDispatchDAO;
import org.apache.ambari.server.orm.dao.ClusterDAO;
import org.apache.ambari.server.orm.dao.ClusterStateDAO;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostConfigMappingDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
-import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
-import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.dao.TopologyRequestDAO;
@@ -94,11 +86,8 @@ import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
import org.apache.ambari.server.orm.entities.ClusterEntity;
import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
import org.apache.ambari.server.orm.entities.ClusterStateEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.ConfigGroupEntity;
-import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
-import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.PermissionEntity;
import org.apache.ambari.server.orm.entities.PrivilegeEntity;
@@ -109,21 +98,16 @@ import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.TopologyRequestEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
-import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
-import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
import org.apache.ambari.server.security.authorization.AuthorizationException;
-import org.apache.ambari.server.security.authorization.AuthorizationHelper;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ClusterHealthReport;
import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostHealthStatus;
-import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.PropertyInfo;
import org.apache.ambari.server.state.RepositoryType;
@@ -147,7 +131,6 @@ import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.scheduler.RequestExecution;
import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostSummary;
import org.apache.ambari.server.topology.TopologyRequest;
import org.apache.commons.collections.CollectionUtils;
@@ -178,9 +161,6 @@ public class ClusterImpl implements Cluster {
* Prefix for cluster session attributes name.
*/
private static final String CLUSTER_SESSION_ATTRIBUTES_PREFIX = "cluster_session_attributes:";
- private static final Set<RepositoryVersionState> ALLOWED_REPOSITORY_STATES =
- EnumSet.of(RepositoryVersionState.INIT, RepositoryVersionState.INSTALLING,
- RepositoryVersionState.INSTALLED);
@Inject
private Clusters clusters;
@@ -233,12 +213,6 @@ public class ClusterImpl implements Cluster {
private ClusterStateDAO clusterStateDAO;
@Inject
- private ClusterVersionDAO clusterVersionDAO;
-
- @Inject
- private HostRoleCommandDAO hostRoleCommandDAO;
-
- @Inject
private HostDAO hostDAO;
@Inject
@@ -284,12 +258,6 @@ public class ClusterImpl implements Cluster {
private UpgradeDAO upgradeDAO;
@Inject
- private RepositoryVersionDAO repositoryVersionDAO;
-
- @Inject
- private Configuration configuration;
-
- @Inject
private AmbariSessionManager sessionManager;
@Inject
@@ -999,105 +967,6 @@ public class ClusterImpl implements Cluster {
}
/**
- * Get the ClusterVersionEntity object whose state is CURRENT.
- * @return
- */
- @Override
- @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
- public ClusterVersionEntity getCurrentClusterVersion() {
- Collection<ClusterVersionEntity> clusterVersionEntities = getClusterEntity().getClusterVersionEntities();
- for (ClusterVersionEntity clusterVersionEntity : clusterVersionEntities) {
- if (clusterVersionEntity.getState() == RepositoryVersionState.CURRENT) {
- // TODO assuming there's only 1 current version, return 1st found, exception was expected in previous implementation
- return clusterVersionEntity;
- }
- }
-
- if( clusterVersionEntities.size() == 1 ) {
- return clusterVersionEntities.iterator().next();
- }
-
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ClusterVersionEntity getEffectiveClusterVersion() throws AmbariException {
- UpgradeEntity upgradeEntity = getUpgradeInProgress();
- if (upgradeEntity == null) {
- return getCurrentClusterVersion();
- }
-
- // see if this is in the cache first, and only walk the upgrade if it's not
- Long upgradeId = upgradeEntity.getId();
- String effectiveVersion = upgradeEffectiveVersionCache.get(upgradeId);
- if (null == effectiveVersion) {
- switch (upgradeEntity.getUpgradeType()) {
- case NON_ROLLING:
- if (upgradeEntity.getDirection() == Direction.UPGRADE) {
- boolean pastChangingStack = isNonRollingUpgradePastUpgradingStack(upgradeEntity);
- effectiveVersion = pastChangingStack ? upgradeEntity.getToVersion()
- : upgradeEntity.getFromVersion();
- } else {
- // Should be the lower value during a Downgrade.
- effectiveVersion = upgradeEntity.getToVersion();
- }
- break;
- case ROLLING:
- default:
- // Version will be higher on upgrade and lower on downgrade
- // directions.
- effectiveVersion = upgradeEntity.getToVersion();
- break;
- }
-
- // cache for later use
- upgradeEffectiveVersionCache.put(upgradeId, effectiveVersion);
- }
-
- if (effectiveVersion == null) {
- throw new AmbariException("Unable to determine which version to use during Stack Upgrade, effectiveVersion is null.");
- }
-
- // Find the first cluster version whose repo matches the expected version.
- Collection<ClusterVersionEntity> clusterVersionEntities = getClusterEntity().getClusterVersionEntities();
- for (ClusterVersionEntity clusterVersionEntity : clusterVersionEntities) {
- if (clusterVersionEntity.getRepositoryVersion().getVersion().equals(effectiveVersion)) {
- return clusterVersionEntity;
- }
- }
-
- return null;
- }
-
- /**
- * Given a NonRolling stack upgrade, determine if it has already crossed the point of using the newer version.
- * @param upgrade Stack Upgrade
- * @return Return true if should be using to_version, otherwise, false to mean the from_version.
- */
- private boolean isNonRollingUpgradePastUpgradingStack(UpgradeEntity upgrade) {
- for (UpgradeGroupEntity group : upgrade.getUpgradeGroups()) {
- if (group.getName().equalsIgnoreCase(UpgradeResourceProvider.CONST_UPGRADE_GROUP_NAME)) {
- for (UpgradeItemEntity item : group.getItems()) {
- List<Long> taskIds = hostRoleCommandDAO.findTaskIdsByStage(upgrade.getRequestId(), item.getStageId());
- List<HostRoleCommandEntity> commands = hostRoleCommandDAO.findByPKs(taskIds);
- for (HostRoleCommandEntity command : commands) {
- if (command.getCustomCommandName() != null &&
- command.getCustomCommandName().equalsIgnoreCase(UpgradeResourceProvider.CONST_CUSTOM_COMMAND_NAME) &&
- command.getStatus() == HostRoleStatus.COMPLETED) {
- return true;
- }
- }
- }
- return false;
- }
- }
- return false;
- }
-
- /**
* {@inheritDoc}
*/
@Override
@@ -1106,32 +975,13 @@ public class ClusterImpl implements Cluster {
}
/**
- * Get all of the ClusterVersionEntity objects for the cluster.
- * @return
- */
- @Override
- public Collection<ClusterVersionEntity> getAllClusterVersions() {
- return clusterVersionDAO.findByCluster(getClusterName());
- }
-
- /**
* {@inheritDoc}
*/
@Override
@Transactional
- public List<Host> transitionHostsToInstalling(ClusterVersionEntity sourceClusterVersion,
- RepositoryVersionEntity repoVersionEntity, VersionDefinitionXml versionDefinitionXml,
- boolean forceInstalled) throws AmbariException {
-
- if (sourceClusterVersion == null) {
- throw new AmbariException("Could not find current stack version of cluster " + getClusterName());
- }
+ public List<Host> transitionHostsToInstalling(RepositoryVersionEntity repoVersionEntity,
+ VersionDefinitionXml versionDefinitionXml, boolean forceInstalled) throws AmbariException {
- if (RepositoryVersionState.INSTALLING != sourceClusterVersion.getState()) {
- throw new AmbariException(
- "Unable to transition cluster hosts into " + RepositoryVersionState.INSTALLING
- + ". The only valid state is " + sourceClusterVersion.getState());
- }
// the hosts to return so that INSTALL commands can be generated for them
final List<Host> hostsRequiringInstallation;
@@ -1148,6 +998,7 @@ public class ClusterImpl implements Cluster {
Collection<HostEntity> hostEntities = getClusterEntity().getHostEntities();
for (HostEntity hostEntity : hostEntities) {
+
// start with INSTALLING
RepositoryVersionState state = RepositoryVersionState.INSTALLING;
if (forceInstalled) {
@@ -1230,253 +1081,6 @@ public class ClusterImpl implements Cluster {
}
/**
- * Calculate the effective Cluster Version State based on the state of its hosts.
- *
- * CURRENT: all hosts are CURRENT
- * INSTALLED: all hosts in INSTALLED
- * INSTALL_FAILED: at least one host in INSTALL_FAILED
- * INSTALLING: all hosts in INSTALLING -or- INSTALLING and NOT_REQUIRED. Notice that if one host is CURRENT and another is INSTALLING, then the
- * effective version will be OUT_OF_SYNC.
- * OUT_OF_SYNC: otherwise
- * @param stateToHosts Map from state to the collection of hosts with that state
- * @return Return the effective Cluster Version State
- */
- private RepositoryVersionState getEffectiveState(Map<RepositoryVersionState, Set<String>> stateToHosts) {
- if (stateToHosts == null || stateToHosts.size() < 1) {
- return null;
- }
-
- int totalHosts = 0;
- for (Set<String> hosts : stateToHosts.values()) {
- totalHosts += hosts.size();
- }
-
- if (stateToHosts.containsKey(RepositoryVersionState.CURRENT) && stateToHosts.get(RepositoryVersionState.CURRENT).size() == totalHosts) {
- return RepositoryVersionState.CURRENT;
- }
- if (stateToHosts.containsKey(RepositoryVersionState.INSTALLED) && stateToHosts.get(RepositoryVersionState.INSTALLED).size() == totalHosts) {
- return RepositoryVersionState.INSTALLED;
- }
- if (stateToHosts.containsKey(RepositoryVersionState.INSTALL_FAILED) &&
- !stateToHosts.get(RepositoryVersionState.INSTALL_FAILED).isEmpty()) {
- // Installation failed on some host(s). But
- // cluster version state should transition to Install Failed only after
- // all hosts have finished installation. Otherwise, UI will misbehave
- // (hide progress dialog before installation is finished)
- if (! stateToHosts.containsKey(RepositoryVersionState.INSTALLING) ||
- stateToHosts.get(RepositoryVersionState.INSTALLING).isEmpty()) {
- return RepositoryVersionState.INSTALL_FAILED;
- }
- }
-
- int totalInstalling = stateToHosts.containsKey(RepositoryVersionState.INSTALLING) ? stateToHosts.get(RepositoryVersionState.INSTALLING).size() : 0;
- int totalInstalled = stateToHosts.containsKey(RepositoryVersionState.INSTALLED) ? stateToHosts.get(RepositoryVersionState.INSTALLED).size() : 0;
- int totalNotRequired = stateToHosts.containsKey(RepositoryVersionState.NOT_REQUIRED) ? stateToHosts.get(RepositoryVersionState.NOT_REQUIRED).size() : 0;
- int totalInstallFailed = stateToHosts.containsKey(RepositoryVersionState.INSTALL_FAILED) ? stateToHosts.get(RepositoryVersionState.INSTALL_FAILED).size() : 0;
-
- if (totalInstalling + totalInstalled + totalInstallFailed == totalHosts) {
- return RepositoryVersionState.INSTALLING;
- }
-
- if (totalNotRequired > 0) {
-
- // !!! if all we have is NOT_REQUIRED and something else, the return should be the something else
- if (2 == stateToHosts.size()) {
-
- Map<RepositoryVersionState, Set<String>> map = Maps.filterKeys(stateToHosts,
- new com.google.common.base.Predicate<RepositoryVersionState>() {
- @Override
- public boolean apply(RepositoryVersionState repoState) {
- return repoState != RepositoryVersionState.NOT_REQUIRED;
- }
- });
-
- // !!! better be true
- if (1 == map.size()) {
- return map.keySet().iterator().next();
- } else {
- LOG.warn("The mix of NON_REQUIRED hosts is unexpected: {}", stateToHosts);
- return RepositoryVersionState.OUT_OF_SYNC;
- }
- }
-
- // if any hosts are still installing, then cluster is INSTALLING
- if (totalInstalling > 0) {
- return RepositoryVersionState.INSTALLING;
- }
-
- // if any hosts are install_failed, then cluster is INSTALL_FAILED
- if (totalInstallFailed > 0) {
- return RepositoryVersionState.INSTALL_FAILED;
- }
-
- // should be covered by the 2-state check above
- if (totalInstalled > 0) {
- return RepositoryVersionState.INSTALLED;
- }
-
- // rare
- if (totalNotRequired == totalHosts) {
- return RepositoryVersionState.NOT_REQUIRED;
- }
-
- }
-
- // Also returns when have a mix of CURRENT and INSTALLING|INSTALLED
- LOG.warn("Have a mix of CURRENT and INSTALLING|INSTALLED host versions, " +
- "returning OUT_OF_SYNC as cluster version. Host version states: {}", stateToHosts);
- return RepositoryVersionState.OUT_OF_SYNC;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void recalculateClusterVersionState(RepositoryVersionEntity repositoryVersion) throws AmbariException {
- if (repositoryVersion == null) {
- return;
- }
-
- StackId stackId = repositoryVersion.getStackId();
- String version = repositoryVersion.getVersion();
-
- Map<String, Host> hosts = clusters.getHostsForCluster(getClusterName());
- clusterGlobalLock.writeLock().lock();
-
- try {
- // Part 1, bootstrap cluster version if necessary.
-
- ClusterVersionEntity clusterVersion = clusterVersionDAO.findByClusterAndStackAndVersion(
- getClusterName(), stackId, version);
-
- boolean performingInitialBootstrap = false;
- if (clusterVersion == null) {
- if (clusterVersionDAO.findByCluster(getClusterName()).isEmpty()) {
- // During an Ambari Upgrade from 1.7.0 -> 2.0.0, the Cluster Version
- // will not exist, so bootstrap it.
- // This can still fail if the Repository Version has not yet been created,
- // which can happen if the first HostComponentState to trigger this method
- // cannot advertise a version.
- performingInitialBootstrap = true;
- createClusterVersionInternal(
- stackId,
- version,
- AuthorizationHelper.getAuthenticatedName(configuration.getAnonymousAuditName()),
- RepositoryVersionState.INSTALLING);
- clusterVersion = clusterVersionDAO.findByClusterAndStackAndVersion(
- getClusterName(), stackId, version);
-
- if (clusterVersion == null) {
- LOG.warn(String.format(
- "Could not create a cluster version for cluster %s and stack %s using repo version %s",
- getClusterName(), stackId.getStackId(), repositoryVersion));
- return;
- }
- } else {
- LOG.warn(String.format(
- "Repository version %s not found for cluster %s",
- repositoryVersion, getClusterName()));
- 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.INIT) {
- // anything else is not supported as of now
- return;
- }
-
- // Part 2, check for transitions.
- Set<String> hostsWithoutHostVersion = new HashSet<>();
- Map<RepositoryVersionState, Set<String>> stateToHosts = new HashMap<>();
-
- //hack until better hostversion integration into in-memory cluster structure
-
- List<HostVersionEntity> hostVersionEntities =
- hostVersionDAO.findByClusterStackAndVersion(getClusterName(), stackId, version);
-
- Set<String> hostsWithState = new HashSet<>();
- Set<String> hostsInMaintenanceState = new HashSet<>();
- for (HostVersionEntity hostVersionEntity : hostVersionEntities) {
- String hostname = hostVersionEntity.getHostEntity().getHostName();
- Host host = hosts.get(hostname);
- if(host != null && host.getMaintenanceState(getClusterId()) == MaintenanceState.ON) {
- hostsInMaintenanceState.add(hostname);
- continue;
- }
- hostsWithState.add(hostname);
- RepositoryVersionState hostState = hostVersionEntity.getState();
-
- if (stateToHosts.containsKey(hostState)) {
- stateToHosts.get(hostState).add(hostname);
- } else {
- Set<String> hostsInState = new HashSet<>();
- hostsInState.add(hostname);
- stateToHosts.put(hostState, hostsInState);
- }
- }
-
- hostsWithoutHostVersion.addAll(hosts.keySet());
- hostsWithoutHostVersion.removeAll(hostsWithState);
- hostsWithoutHostVersion.removeAll(hostsInMaintenanceState);
-
- // Ensure that all of the hosts without a Host Version only have
- // Components that do not advertise a version.
- // Otherwise, operations are still in progress.
- for (String hostname : hostsWithoutHostVersion) {
- HostEntity hostEntity = hostDAO.findByName(hostname);
-
- // During initial bootstrap, unhealthy hosts are ignored
- // so we boostrap the CURRENT version anyway
- if (performingInitialBootstrap &&
- hostEntity.getHostStateEntity().getCurrentState() != HostState.HEALTHY) {
- continue;
- }
-
- final Collection<HostComponentStateEntity> allHostComponents = hostEntity.getHostComponentStateEntities();
-
- for (HostComponentStateEntity hostComponentStateEntity : allHostComponents) {
- if (hostComponentStateEntity.getVersion().equalsIgnoreCase(
- State.UNKNOWN.toString())) {
- // Some Components cannot advertise a version. E.g., ZKF, AMBARI_METRICS,
- // Kerberos
- ComponentInfo compInfo = ambariMetaInfo.getComponent(
- stackId.getStackName(), stackId.getStackVersion(),
- hostComponentStateEntity.getServiceName(),
- hostComponentStateEntity.getComponentName());
-
- if (compInfo.isVersionAdvertised()) {
- LOG.debug("Skipping transitioning the cluster version because host "
- + hostname + " does not have a version yet.");
- return;
- }
- }
- }
- }
-
- RepositoryVersionState effectiveClusterVersionState = getEffectiveState(stateToHosts);
-
- if (effectiveClusterVersionState != null
- && effectiveClusterVersionState != clusterVersion.getState()) {
- // Any mismatch will be caught while transitioning, and raise an
- // exception.
- try {
- transitionClusterVersion(stackId, version,
- effectiveClusterVersionState);
- } catch (AmbariException e) {
- ;
- }
- }
- } finally {
- clusterGlobalLock.writeLock().unlock();
- }
- }
-
- /**
* Transition the Host Version across states.
* @param host Host object
* @param repositoryVersion Repository Version with stack and version information
@@ -1539,262 +1143,6 @@ public class ClusterImpl implements Cluster {
}
@Override
- public void recalculateAllClusterVersionStates() throws AmbariException {
- clusterGlobalLock.writeLock().lock();
- try {
- List<ClusterVersionEntity> clusterVersionEntities = clusterVersionDAO.findByCluster(getClusterName());
- StackId currentStackId = getCurrentStackVersion();
- for (ClusterVersionEntity clusterVersionEntity : clusterVersionEntities) {
- RepositoryVersionEntity repositoryVersionEntity = clusterVersionEntity.getRepositoryVersion();
- StackId repoVersionStackId = repositoryVersionEntity.getStackId();
-
- if (repoVersionStackId.equals(currentStackId)
- && clusterVersionEntity.getState() != RepositoryVersionState.CURRENT) {
- recalculateClusterVersionState(clusterVersionEntity.getRepositoryVersion());
- }
- }
- } finally {
- clusterGlobalLock.writeLock().unlock();
- }
- }
-
- @Override
- public ClusterVersionEntity createClusterVersion(StackId stackId, String version,
- String userName, RepositoryVersionState state) throws AmbariException {
- clusterGlobalLock.writeLock().lock();
- try {
- return createClusterVersionInternal(stackId, version, userName, state);
- } finally {
- clusterGlobalLock.writeLock().unlock();
- }
- }
-
- /**
- * See {@link #createClusterVersion}
- *
- * This method is intended to be called only when cluster lock is already acquired.
- */
- private ClusterVersionEntity createClusterVersionInternal(StackId stackId, String version,
- String userName, RepositoryVersionState state) throws AmbariException {
- if (!ALLOWED_REPOSITORY_STATES.contains(state)) {
- throw new AmbariException("The allowed state for a new cluster version must be within " + ALLOWED_REPOSITORY_STATES);
- }
-
- ClusterVersionEntity existing = clusterVersionDAO.findByClusterAndStackAndVersion(
- getClusterName(), stackId, version);
- if (existing != null) {
- throw new DuplicateResourceException(
- "Duplicate item, a cluster version with stack=" + stackId
- + ", version=" +
- version + " for cluster " + getClusterName() + " already exists");
- }
-
- RepositoryVersionEntity repositoryVersionEntity = repositoryVersionDAO.findByStackAndVersion(
- stackId, version);
- if (repositoryVersionEntity == null) {
- throw new AmbariException(
- "Unable to find repository version for stack " + stackId + " and version " + version);
- }
-
- ClusterEntity clusterEntity = getClusterEntity();
- ClusterVersionEntity clusterVersionEntity = new ClusterVersionEntity(
- clusterEntity, repositoryVersionEntity, state,
- System.currentTimeMillis(), System.currentTimeMillis(), userName);
- clusterVersionDAO.create(clusterVersionEntity);
- clusterEntity.getClusterVersionEntities().add(clusterVersionEntity);
- clusterEntity = clusterDAO.merge(clusterEntity);
-
- return clusterVersionEntity;
- }
-
- /**
- * Transition an existing cluster version from one state to another. The
- * following are some of the steps that are taken when transitioning between
- * specific states:
- * <ul>
- * <li>INSTALLING/INSTALLED --> CURRENT</lki>: Set the current stack to the
- * desired stack, ensure all hosts with the desired stack are CURRENT as well.
- * </ul>
- * <li>INSTALLING/INSTALLED --> CURRENT</lki>: Set the current stack to the
- * desired stack. </ul>
- *
- * @param stackId
- * Stack ID
- * @param version
- * Stack version
- * @param state
- * Desired state
- * @throws AmbariException
- */
- @Override
- @Transactional
- public void transitionClusterVersion(StackId stackId, String version,
- RepositoryVersionState state) throws AmbariException {
- Set<RepositoryVersionState> allowedStates = new HashSet<>();
- clusterGlobalLock.writeLock().lock();
- try {
- ClusterEntity clusterEntity = getClusterEntity();
- ClusterVersionEntity existingClusterVersion = clusterVersionDAO.findByClusterAndStackAndVersion(
- getClusterName(), stackId, version);
-
- if (existingClusterVersion == null) {
- throw new AmbariException("Existing cluster version not found for cluster="
- + getClusterName() + ", stack=" + stackId + ", version=" + version);
- }
-
- // NOOP
- if (existingClusterVersion.getState() == state) {
- return;
- }
-
- switch (existingClusterVersion.getState()) {
- case CURRENT:
- // If CURRENT state is changed here cluster will not have CURRENT
- // state.
- // CURRENT state will be changed to INSTALLED when another CURRENT
- // state is added.
- // allowedStates.add(RepositoryVersionState.INSTALLED);
- break;
- case INSTALLING:
- allowedStates.add(RepositoryVersionState.INSTALLED);
- allowedStates.add(RepositoryVersionState.INSTALL_FAILED);
- allowedStates.add(RepositoryVersionState.OUT_OF_SYNC);
- if (clusterVersionDAO.findByClusterAndStateCurrent(getClusterName()) == null) {
- allowedStates.add(RepositoryVersionState.CURRENT);
- }
- break;
- case INSTALL_FAILED:
- allowedStates.add(RepositoryVersionState.INSTALLING);
- break;
- case INSTALLED:
- allowedStates.add(RepositoryVersionState.INSTALLING);
- allowedStates.add(RepositoryVersionState.OUT_OF_SYNC);
- allowedStates.add(RepositoryVersionState.CURRENT);
- break;
- case OUT_OF_SYNC:
- allowedStates.add(RepositoryVersionState.INSTALLING);
- break;
- case INIT:
- allowedStates.add(RepositoryVersionState.CURRENT);
- break;
- }
-
- if (!allowedStates.contains(state)) {
- throw new AmbariException("Invalid cluster version transition from "
- + existingClusterVersion.getState() + " to " + state);
- }
-
- // There must be at most one cluster version whose state is CURRENT at
- // all times.
- if (state == RepositoryVersionState.CURRENT) {
- ClusterVersionEntity currentVersion = clusterVersionDAO.findByClusterAndStateCurrent(
- getClusterName());
- if (currentVersion != null) {
- currentVersion.setState(RepositoryVersionState.INSTALLED);
- currentVersion = clusterVersionDAO.merge(currentVersion);
- }
- }
-
- existingClusterVersion.setState(state);
- existingClusterVersion.setEndTime(System.currentTimeMillis());
- existingClusterVersion = clusterVersionDAO.merge(existingClusterVersion);
-
- if (state == RepositoryVersionState.CURRENT) {
- for (HostEntity hostEntity : clusterEntity.getHostEntities()) {
- if (hostHasReportables(existingClusterVersion.getRepositoryVersion(), hostEntity)) {
- continue;
- }
-
- Collection<HostVersionEntity> versions = hostVersionDAO.findByHost(
- hostEntity.getHostName());
-
- HostVersionEntity target = null;
- if (null != versions) {
- // Set anything that was previously marked CURRENT as INSTALLED, and
- // the matching version as CURRENT
- for (HostVersionEntity entity : versions) {
- if (entity.getRepositoryVersion().getId().equals(
- existingClusterVersion.getRepositoryVersion().getId())) {
- target = entity;
- target.setState(state);
- target = hostVersionDAO.merge(target);
- } else if (entity.getState() == RepositoryVersionState.CURRENT) {
- entity.setState(RepositoryVersionState.INSTALLED);
- entity = hostVersionDAO.merge(entity);
- }
- }
- }
-
- if (null == target) {
- // If no matching version was found, create one with the desired
- // state
- HostVersionEntity hve = new HostVersionEntity(hostEntity,
- existingClusterVersion.getRepositoryVersion(), state);
-
- LOG.info("Creating host version for {}, state={}, repo={} (repo_id={})",
- hve.getHostName(), hve.getState(), hve.getRepositoryVersion().getVersion(),
- hve.getRepositoryVersion().getId());
-
- hostVersionDAO.create(hve);
- }
- }
-
- // when setting the cluster's state to current, we must also
- // bring the desired stack and current stack in line with each other
- StackEntity desiredStackEntity = clusterEntity.getDesiredStack();
- StackId desiredStackId = new StackId(desiredStackEntity);
-
- // if the desired stack ID doesn't match the target when setting the
- // cluster to CURRENT, then there's a problem
- if (!desiredStackId.equals(stackId)) {
- String message = MessageFormat.format(
- "The desired stack ID {0} must match {1} when transitioning the cluster''s state to {2}",
- desiredStackId, stackId, RepositoryVersionState.CURRENT);
-
- throw new AmbariException(message);
- }
-
- setCurrentStackVersion(stackId);
- }
- } catch (RollbackException e) {
- String message = MessageFormat.format(
- "Unable to transition stack {0} at version {1} for cluster {2} to state {3}",
- stackId, version, getClusterName(), state);
-
- LOG.warn(message);
- throw new AmbariException(message, e);
-
- } finally {
- clusterGlobalLock.writeLock().unlock();
- }
-
- }
-
- /**
- * Checks if the host has any components reporting version information.
- * @param repoVersion the repo version
- * @param host the host entity
- * @return {@code true} if the host has any component that report version
- * @throws AmbariException
- */
- private boolean hostHasReportables(RepositoryVersionEntity repoVersion, HostEntity host)
- throws AmbariException {
-
- for (HostComponentStateEntity hcse : host.getHostComponentStateEntities()) {
- ComponentInfo ci = ambariMetaInfo.getComponent(
- repoVersion.getStackName(),
- repoVersion.getStackVersion(),
- hcse.getServiceName(),
- hcse.getComponentName());
-
- if (ci.isVersionAdvertised()) {
- return true;
- }
- }
- return false;
- }
-
- @Override
@Transactional
public void setCurrentStackVersion(StackId stackId) throws AmbariException {
clusterGlobalLock.writeLock().lock();
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
index 99bc781..bdc4f90 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
@@ -43,10 +43,8 @@ import org.apache.ambari.server.events.HostsAddedEvent;
import org.apache.ambari.server.events.HostsRemovedEvent;
import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.orm.dao.ClusterDAO;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostConfigMappingDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
-import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.HostStateDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.KerberosPrincipalHostDAO;
@@ -59,7 +57,6 @@ import org.apache.ambari.server.orm.dao.TopologyHostRequestDAO;
import org.apache.ambari.server.orm.dao.TopologyLogicalTaskDAO;
import org.apache.ambari.server.orm.dao.TopologyRequestDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
import org.apache.ambari.server.orm.entities.PermissionEntity;
@@ -113,14 +110,10 @@ public class ClustersImpl implements Clusters {
@Inject
private HostDAO hostDAO;
@Inject
- private ClusterVersionDAO clusterVersionDAO;
- @Inject
private HostVersionDAO hostVersionDAO;
@Inject
private HostStateDAO hostStateDAO;
@Inject
- private HostRoleCommandDAO hostRoleCommandDAO;
- @Inject
private ResourceTypeDAO resourceTypeDAO;
@Inject
private RequestOperationLevelDAO requestOperationLevelDAO;
@@ -649,12 +642,6 @@ public class ClustersImpl implements Clusters {
clusterSet.remove(cluster);
}
clusterHostMap.remove(cluster.getClusterName());
-
- Collection<ClusterVersionEntity> clusterVersions = cluster.getAllClusterVersions();
- for (ClusterVersionEntity clusterVersion : clusterVersions) {
- clusterVersionDAO.remove(clusterVersion);
- }
-
clusters.remove(clusterName);
}
[02/50] [abbrv] ambari git commit: AMBARI-20940 - Propagate Component
versions and states to Service (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java
index 2e712d1..a378aba 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java
@@ -23,11 +23,18 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.server.controller.ResourceProviderFactory;
import org.apache.ambari.server.controller.spi.Request;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.junit.Before;
import org.junit.Test;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
import junit.framework.Assert;
/**
@@ -44,6 +51,23 @@ public class RequestImplTest {
propertyIds.add(PropertyHelper.getPropertyId("c3", "p4"));
}
+ @Before
+ public void setup() throws Exception {
+ Injector injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ ResourceProviderFactory resourceProviderFactory = injector.getInstance(ResourceProviderFactory.class);
+ AbstractControllerResourceProvider.init(resourceProviderFactory);
+
+ DefaultProviderModule defaultProviderModule = injector.getInstance(DefaultProviderModule.class);
+ for( Resource.Type type : Resource.Type.values() ){
+ try {
+ defaultProviderModule.getResourceProvider(type);
+ } catch (Exception exception) {
+ // ignore
+ }
+ }
+ }
+
@Test
public void testGetPropertyIds() {
Request request = PropertyHelper.getReadRequest(propertyIds);
@@ -89,9 +113,6 @@ public class RequestImplTest {
Assert.assertTrue(validPropertyIds.contains("ServiceInfo/service_name"));
Assert.assertTrue(validPropertyIds.contains("ServiceInfo/cluster_name"));
Assert.assertTrue(validPropertyIds.contains("ServiceInfo/state"));
- Assert.assertTrue(validPropertyIds.contains("Services/description"));
- Assert.assertTrue(validPropertyIds.contains("Services/display_name"));
- Assert.assertTrue(validPropertyIds.contains("Services/attributes"));
Assert.assertTrue(validPropertyIds.contains("params/run_smoke_test"));
Assert.assertTrue(validPropertyIds.contains("params/reconfigure_client"));
@@ -130,7 +151,6 @@ public class RequestImplTest {
Assert.assertTrue(validPropertyIds.contains("ServiceComponentInfo/cluster_name"));
Assert.assertTrue(validPropertyIds.contains("ServiceComponentInfo/state"));
Assert.assertTrue(validPropertyIds.contains("ServiceComponentInfo/display_name"));
- Assert.assertTrue(validPropertyIds.contains("ServiceComponentInfo/description"));
Assert.assertTrue(validPropertyIds.contains("params/run_smoke_test"));
request = PropertyHelper.getReadRequest(PropertyHelper.getPropertyIds(Resource.Type.Action));
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
index 04b7933..91b00ab 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
@@ -639,7 +639,7 @@ public class ServiceResourceProviderTest {
expect(stackId.getStackId()).andReturn("HDP-2.5").anyTimes();
expect(stackId.getStackName()).andReturn("HDP").anyTimes();
expect(stackId.getStackVersion()).andReturn("2.5").anyTimes();
- expect(service0.getDesiredStackVersion()).andReturn(stackId).anyTimes();
+ expect(service0.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(service0.getName()).andReturn("Service102").anyTimes();
expect(serviceInfo.isCredentialStoreSupported()).andReturn(true).anyTimes();
expect(serviceInfo.isCredentialStoreEnabled()).andReturn(false).anyTimes();
@@ -755,7 +755,7 @@ public class ServiceResourceProviderTest {
expect(stackId.getStackId()).andReturn("HDP-2.5").anyTimes();
expect(stackId.getStackName()).andReturn("HDP").anyTimes();
expect(stackId.getStackVersion()).andReturn("2.5").anyTimes();
- expect(service0.getDesiredStackVersion()).andReturn(stackId).anyTimes();
+ expect(service0.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(service0.getName()).andReturn("Service102").anyTimes();
expect(serviceInfo.isCredentialStoreSupported()).andReturn(true).anyTimes();
expect(serviceInfo.isCredentialStoreEnabled()).andReturn(false).anyTimes();
@@ -1127,48 +1127,34 @@ public class ServiceResourceProviderTest {
@Test
public void testCheckPropertyIds() throws Exception {
- Set<String> propertyIds = new HashSet<>();
- propertyIds.add("foo");
- propertyIds.add("cat1/foo");
- propertyIds.add("cat2/bar");
- propertyIds.add("cat2/baz");
- propertyIds.add("cat3/sub1/bam");
- propertyIds.add("cat4/sub2/sub3/bat");
- propertyIds.add("cat5/subcat5/map");
-
- Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
-
AmbariManagementController managementController = createMock(AmbariManagementController.class);
MaintenanceStateHelper maintenanceStateHelperMock = createNiceMock(MaintenanceStateHelper.class);
RepositoryVersionDAO repositoryVersionDAO = createNiceMock(RepositoryVersionDAO.class);
replay(maintenanceStateHelperMock, repositoryVersionDAO);
- AbstractResourceProvider provider = new ServiceResourceProvider(propertyIds, keyPropertyIds,
- managementController, maintenanceStateHelperMock, repositoryVersionDAO);
+ AbstractResourceProvider provider = new ServiceResourceProvider(managementController,
+ maintenanceStateHelperMock, repositoryVersionDAO);
+
+ Set<String> unsupported = provider.checkPropertyIds(
+ Collections.singleton(ServiceResourceProvider.SERVICE_CLUSTER_NAME_PROPERTY_ID));
- Set<String> unsupported = provider.checkPropertyIds(Collections.singleton("foo"));
Assert.assertTrue(unsupported.isEmpty());
// note that key is not in the set of known property ids. We allow it if its parent is a known property.
// this allows for Map type properties where we want to treat the entries as individual properties
- Assert.assertTrue(provider.checkPropertyIds(Collections.singleton("cat5/subcat5/map/key")).isEmpty());
+ String subKey = PropertyHelper.getPropertyId(ServiceResourceProvider.SERVICE_CLUSTER_NAME_PROPERTY_ID, "key");
+ unsupported = provider.checkPropertyIds(Collections.singleton(subKey));
+ Assert.assertTrue(unsupported.isEmpty());
unsupported = provider.checkPropertyIds(Collections.singleton("bar"));
Assert.assertEquals(1, unsupported.size());
Assert.assertTrue(unsupported.contains("bar"));
- unsupported = provider.checkPropertyIds(Collections.singleton("cat1/foo"));
- Assert.assertTrue(unsupported.isEmpty());
-
- unsupported = provider.checkPropertyIds(Collections.singleton("cat1"));
- Assert.assertTrue(unsupported.isEmpty());
-
- unsupported = provider.checkPropertyIds(Collections.singleton("config"));
- Assert.assertTrue(unsupported.isEmpty());
-
- unsupported = provider.checkPropertyIds(Collections.singleton("config/unknown_property"));
- Assert.assertTrue(unsupported.isEmpty());
+ for (String propertyId : provider.getPKPropertyIds()) {
+ unsupported = provider.checkPropertyIds(Collections.singleton(propertyId));
+ Assert.assertTrue(unsupported.isEmpty());
+ }
}
/**
@@ -1191,9 +1177,7 @@ public class ServiceResourceProviderTest {
AmbariManagementController managementController,
MaintenanceStateHelper maintenanceStateHelper, RepositoryVersionDAO repositoryVersionDAO) {
Resource.Type type = Resource.Type.Service;
- return new ServiceResourceProvider(PropertyHelper.getPropertyIds(type),
- PropertyHelper.getKeyPropertyIds(type),
- managementController, maintenanceStateHelper, repositoryVersionDAO);
+ return new ServiceResourceProvider(managementController, maintenanceStateHelper, repositoryVersionDAO);
}
public static void createServices(AmbariManagementController controller,
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
index 3039267..30e5c4c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
@@ -210,10 +210,10 @@ public class UpgradeResourceProviderHDP22Test {
StackId oldStack = cluster.getDesiredStackVersion();
for (Service s : cluster.getServices().values()) {
- assertEquals(oldStack, s.getDesiredStackVersion());
+ assertEquals(oldStack, s.getDesiredStackId());
for (ServiceComponent sc : s.getServiceComponents().values()) {
- assertEquals(oldStack, sc.getDesiredStackVersion());
+ assertEquals(oldStack, sc.getDesiredStackId());
for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
assertEquals("2.2.0.0", sch.getVersion());
@@ -257,10 +257,10 @@ public class UpgradeResourceProviderHDP22Test {
assertTrue(oldStack.equals(newStack));
for (Service s : cluster.getServices().values()) {
- assertEquals(newStack, s.getDesiredStackVersion());
+ assertEquals(newStack, s.getDesiredStackId());
for (ServiceComponent sc : s.getServiceComponents().values()) {
- assertEquals(newStack, sc.getDesiredStackVersion());
+ assertEquals(newStack, sc.getDesiredStackId());
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index a814ba8..d30d9e0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -1057,10 +1057,10 @@ public class UpgradeResourceProviderTest {
StackId oldStack = cluster.getDesiredStackVersion();
for (Service s : cluster.getServices().values()) {
- assertEquals(oldStack, s.getDesiredStackVersion());
+ assertEquals(oldStack, s.getDesiredStackId());
for (ServiceComponent sc : s.getServiceComponents().values()) {
- assertEquals(oldStack, sc.getDesiredStackVersion());
+ assertEquals(oldStack, sc.getDesiredStackId());
for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
assertEquals(oldStack.getStackVersion(), sch.getVersion());
@@ -1103,10 +1103,10 @@ public class UpgradeResourceProviderTest {
assertFalse(oldStack.equals(newStack));
for (Service s : cluster.getServices().values()) {
- assertEquals(newStack, s.getDesiredStackVersion());
+ assertEquals(newStack, s.getDesiredStackId());
for (ServiceComponent sc : s.getServiceComponents().values()) {
- assertEquals(newStack, sc.getDesiredStackVersion());
+ assertEquals(newStack, sc.getDesiredStackId());
for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
assertEquals(newStack.getStackVersion(), sch.getVersion());
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
index d72f018..8f2020d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
@@ -137,7 +137,7 @@ public class ServiceComponentTest {
sc.getClusterName());
Assert.assertEquals(State.INIT, sc.getDesiredState());
Assert.assertFalse(
- sc.getDesiredStackVersion().getStackId().isEmpty());
+ sc.getDesiredStackId().getStackId().isEmpty());
}
@@ -160,7 +160,7 @@ public class ServiceComponentTest {
newStackId.getStackVersion());
sc.setDesiredRepositoryVersion(repositoryVersion);
- Assert.assertEquals(newStackId.toString(), sc.getDesiredStackVersion().getStackId());
+ Assert.assertEquals(newStackId.toString(), sc.getDesiredStackId().getStackId());
ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO =
injector.getInstance(ServiceComponentDesiredStateDAO.class);
@@ -173,7 +173,7 @@ public class ServiceComponentTest {
Assert.assertNotNull(sc1);
Assert.assertEquals(State.INSTALLED, sc1.getDesiredState());
Assert.assertEquals("HDP-1.2.0",
- sc1.getDesiredStackVersion().getStackId());
+ sc1.getDesiredStackId().getStackId());
}
@@ -302,10 +302,9 @@ public class ServiceComponentTest {
Assert.assertEquals(sc.getClusterId(), r.getClusterId().longValue());
Assert.assertEquals(sc.getName(), r.getComponentName());
Assert.assertEquals(sc.getServiceName(), r.getServiceName());
- Assert.assertEquals(sc.getDesiredStackVersion().getStackId(),
- r.getDesiredStackVersion());
- Assert.assertEquals(sc.getDesiredState().toString(),
- r.getDesiredState());
+ Assert.assertEquals(sc.getDesiredStackId().getStackId(), r.getDesiredStackId());
+ Assert.assertEquals(sc.getDesiredState().toString(), r.getDesiredState());
+
int totalCount = r.getServiceComponentStateCount().get("totalCount");
int startedCount = r.getServiceComponentStateCount().get("startedCount");
int installedCount = r.getServiceComponentStateCount().get("installedCount");
@@ -368,10 +367,10 @@ public class ServiceComponentTest {
sc.setDesiredRepositoryVersion(repositoryVersion);
- StackId stackId = sc.getDesiredStackVersion();
+ StackId stackId = sc.getDesiredStackId();
Assert.assertEquals(new StackId("HDP", "2.2.0"), stackId);
- Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackVersion().getStackId());
+ Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackId().getStackId());
ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName(
cluster.getClusterId(), serviceName, componentName);
@@ -490,10 +489,10 @@ public class ServiceComponentTest {
sc.setDesiredRepositoryVersion(repositoryVersion);
- StackId stackId = sc.getDesiredStackVersion();
+ StackId stackId = sc.getDesiredStackId();
Assert.assertEquals(new StackId("HDP", "2.2.0"), stackId);
- Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackVersion().getStackId());
+ Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackId().getStackId());
ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName(
cluster.getClusterId(), serviceName, componentName);
@@ -571,9 +570,9 @@ public class ServiceComponentTest {
Assert.assertEquals(rve, sc.getDesiredRepositoryVersion());
- Assert.assertEquals(new StackId("HDP", "2.2.0"), sc.getDesiredStackVersion());
+ Assert.assertEquals(new StackId("HDP", "2.2.0"), sc.getDesiredStackId());
- Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackVersion().getStackId());
+ Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackId().getStackId());
Assert.assertNotNull(serviceComponentDesiredStateEntity);
@@ -624,10 +623,10 @@ public class ServiceComponentTest {
sc.setDesiredRepositoryVersion(rve);
- StackId stackId = sc.getDesiredStackVersion();
+ StackId stackId = sc.getDesiredStackId();
Assert.assertEquals(new StackId("HDP", "2.2.0"), stackId);
- Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackVersion().getStackId());
+ Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackId().getStackId());
Assert.assertNotNull(serviceComponentDesiredStateEntity);
@@ -684,10 +683,10 @@ public class ServiceComponentTest {
ServiceComponentDesiredStateEntity entity = serviceComponentDesiredStateDAO.findByName(cluster.getClusterId(), serviceName, componentName);
RepositoryVersionEntity repoVersion2201 = helper.getOrCreateRepositoryVersion(
- component.getDesiredStackVersion(), "2.2.0.1");
+ component.getDesiredStackId(), "2.2.0.1");
RepositoryVersionEntity repoVersion2202 = helper.getOrCreateRepositoryVersion(
- component.getDesiredStackVersion(), "2.2.0.2");
+ component.getDesiredStackId(), "2.2.0.2");
addHostToCluster("h1", clusterName);
addHostToCluster("h2", clusterName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
index dfe8f59..a1299a8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
@@ -139,7 +139,7 @@ public class ServiceTest {
desiredStackId, desiredVersion);
service.setDesiredRepositoryVersion(desiredRepositoryVersion);
- Assert.assertEquals(desiredStackId, service.getDesiredStackVersion());
+ Assert.assertEquals(desiredStackId, service.getDesiredStackId());
service.setDesiredState(State.INSTALLING);
Assert.assertEquals(State.INSTALLING, service.getDesiredState());
@@ -166,7 +166,7 @@ public class ServiceTest {
Assert.assertEquals(State.INIT, service.getDesiredState());
Assert.assertEquals(SecurityState.UNSECURED, service.getSecurityState());
Assert.assertFalse(
- service.getDesiredStackVersion().getStackId().isEmpty());
+ service.getDesiredStackId().getStackId().isEmpty());
Assert.assertTrue(s.getServiceComponents().isEmpty());
@@ -243,7 +243,7 @@ public class ServiceTest {
ServiceResponse r = s.convertToResponse();
Assert.assertEquals(s.getName(), r.getServiceName());
Assert.assertEquals(s.getCluster().getClusterName(), r.getClusterName());
- Assert.assertEquals(s.getDesiredStackVersion().getStackId(), r.getDesiredStackVersion());
+ Assert.assertEquals(s.getDesiredStackId().getStackId(), r.getDesiredStackId());
Assert.assertEquals(s.getDesiredState().toString(), r.getDesiredState());
StackId desiredStackId = new StackId("HDP-1.2.0");
@@ -257,7 +257,7 @@ public class ServiceTest {
r = s.convertToResponse();
Assert.assertEquals(s.getName(), r.getServiceName());
Assert.assertEquals(s.getCluster().getClusterName(), r.getClusterName());
- Assert.assertEquals(s.getDesiredStackVersion().getStackId(), r.getDesiredStackVersion());
+ Assert.assertEquals(s.getDesiredStackId().getStackId(), r.getDesiredStackId());
Assert.assertEquals(s.getDesiredState().toString(), r.getDesiredState());
// FIXME add checks for configs
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
index 3a80ca7..ed92db7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
@@ -232,7 +232,7 @@ public class ServiceComponentHostTest {
case HOST_SVCCOMP_INSTALL:
return new ServiceComponentHostInstallEvent(
impl.getServiceComponentName(), impl.getHostName(), timestamp,
- impl.getServiceComponent().getDesiredStackVersion().toString());
+ impl.getServiceComponent().getDesiredStackId().toString());
case HOST_SVCCOMP_START:
return new ServiceComponentHostStartEvent(
impl.getServiceComponentName(), impl.getHostName(), timestamp);
@@ -292,7 +292,7 @@ public class ServiceComponentHostTest {
Assert.assertEquals(inProgressState,
impl.getState());
if (checkStack) {
- Assert.assertNotNull(impl.getServiceComponent().getDesiredStackVersion());
+ Assert.assertNotNull(impl.getServiceComponent().getDesiredStackId());
}
ServiceComponentHostEvent installEvent2 = createEvent(impl, ++timestamp,
[48/50] [abbrv] ambari git commit: AMBARI-21149 - Configurations
Created During Upgrade Must Use Correct StackId Based on Service
(jonathanhurley)
Posted by jo...@apache.org.
AMBARI-21149 - Configurations Created During Upgrade Must Use Correct StackId Based on Service (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2892aee5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2892aee5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2892aee5
Branch: refs/heads/trunk
Commit: 2892aee53e63077c422c4c68dd565e786d83a71d
Parents: 245afc1
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue May 30 16:28:05 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue May 30 16:28:05 2017 -0400
----------------------------------------------------------------------
.../server/controller/KerberosHelperImpl.java | 3 +-
.../UpdateKerberosConfigsServerAction.java | 5 +-
.../serveraction/upgrades/ConfigureAction.java | 32 +-
.../ambari/server/state/ConfigHelper.java | 75 +-
.../ambari/server/state/UpgradeHelper.java | 7 +-
.../state/stack/upgrade/ClusterGrouping.java | 7 +
.../server/upgrade/UpgradeCatalog200.java | 3 +-
.../server/upgrade/UpgradeCatalog240.java | 5 +-
.../StackUpgradeConfigurationMergeTest.java | 2 +-
.../UpdateKerberosConfigsServerActionTest.java | 5 +-
.../upgrades/ConfigureActionTest.java | 693 +++++++++++--------
.../upgrades/UpgradeActionTest.java | 2 +-
.../ambari/server/state/ConfigHelperTest.java | 10 +-
.../ambari/server/state/UpgradeHelperTest.java | 6 +-
.../server/upgrade/UpgradeCatalog200Test.java | 7 +-
.../server/upgrade/UpgradeCatalog240Test.java | 6 +-
16 files changed, 480 insertions(+), 388 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
index db6ffc2..e1e6b4a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
@@ -336,7 +336,8 @@ public class KerberosHelperImpl implements KerberosHelper {
existingConfigurations, installedServices, serviceFilter, previouslyExistingServices, true, true);
for (Map.Entry<String, Map<String, String>> entry : updates.entrySet()) {
- configHelper.updateConfigType(cluster, ambariManagementController, entry.getKey(), entry.getValue(), null,
+ configHelper.updateConfigType(cluster, cluster.getDesiredStackVersion(),
+ ambariManagementController, entry.getKey(), entry.getValue(), null,
ambariManagementController.getAuthName(), "Enabling Kerberos for added components");
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java
index f776575..2f32312 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java
@@ -147,9 +147,8 @@ public class UpdateKerberosConfigsServerAction extends AbstractServerAction {
}
for (String configType : configTypes) {
- configHelper.updateConfigType(cluster, controller, configType,
- propertiesToSet.get(configType),
- propertiesToRemove.get(configType),
+ configHelper.updateConfigType(cluster, cluster.getDesiredStackVersion(), controller,
+ configType, propertiesToSet.get(configType), propertiesToRemove.get(configType),
authenticatedUserName, configNote);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java
index b55c52f..17bb3f8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java
@@ -34,7 +34,7 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.ConfigurationRequest;
-import org.apache.ambari.server.serveraction.AbstractServerAction;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.serveraction.ServerAction;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
@@ -45,12 +45,14 @@ import org.apache.ambari.server.state.ConfigMergeHelper.ThreeWayValue;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.PropertyInfo;
import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.ConfigurationKeyValue;
import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.Insert;
import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.Masked;
import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.Replace;
import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.Transfer;
import org.apache.ambari.server.state.stack.upgrade.ConfigureTask;
+import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.PropertyKeyState;
import org.apache.ambari.server.state.stack.upgrade.TransferOperation;
import org.apache.commons.lang.StringUtils;
@@ -82,7 +84,7 @@ import com.google.inject.Provider;
* property value</li>
* </ul>
*/
-public class ConfigureAction extends AbstractServerAction {
+public class ConfigureAction extends AbstractUpgradeServerAction {
private static Logger LOG = LoggerFactory.getLogger(ConfigureAction.class);
@@ -182,9 +184,16 @@ public class ConfigureAction extends AbstractServerAction {
String clusterName = commandParameters.get("clusterName");
Cluster cluster = m_clusters.getCluster(clusterName);
+ UpgradeContext upgradeContext = getUpgradeContext(cluster);
// such as hdfs-site or hbase-env
String configType = commandParameters.get(ConfigureTask.PARAMETER_CONFIG_TYPE);
+ String serviceName = cluster.getServiceByConfigType(configType);
+
+ RepositoryVersionEntity sourceRepoVersion = upgradeContext.getSourceRepositoryVersion(serviceName);
+ RepositoryVersionEntity targetRepoVersion = upgradeContext.getTargetRepositoryVersion(serviceName);
+ StackId sourceStackId = sourceRepoVersion.getStackId();
+ StackId targetStackId = targetRepoVersion.getStackId();
// extract setters
List<ConfigurationKeyValue> keyValuePairs = Collections.emptyList();
@@ -252,13 +261,12 @@ public class ConfigureAction extends AbstractServerAction {
if (desiredConfig == null) {
throw new AmbariException("Could not find desired config type with name " + configType);
}
+
Config config = cluster.getConfig(configType, desiredConfig.getTag());
if (config == null) {
throw new AmbariException("Could not find config type with name " + configType);
}
- StackId currentStack = cluster.getCurrentStackVersion();
- StackId targetStack = cluster.getDesiredStackVersion();
StackId configStack = config.getStackId();
// !!! initial reference values
@@ -405,8 +413,8 @@ public class ConfigureAction extends AbstractServerAction {
String oldValue = base.get(key);
// !!! values are not changing, so make this a no-op
- if (null != oldValue && value.equals(oldValue)) {
- if (currentStack.equals(targetStack) && !changedValues) {
+ if (StringUtils.equals(value, oldValue)) {
+ if (sourceStackId.equals(targetStackId) && !changedValues) {
updateBufferWithMessage(outputBuffer,
MessageFormat.format(
"{0}/{1} for cluster {2} would not change, skipping setting", configType, key,
@@ -519,7 +527,7 @@ public class ConfigureAction extends AbstractServerAction {
// !!! check to see if we're going to a new stack and double check the
// configs are for the target. Then simply update the new properties instead
// of creating a whole new history record since it was already done
- if (!targetStack.equals(currentStack) && targetStack.equals(configStack)) {
+ if (!targetStackId.equals(sourceStackId) && targetStackId.equals(configStack)) {
config.setProperties(newValues);
config.save();
@@ -528,7 +536,9 @@ public class ConfigureAction extends AbstractServerAction {
// !!! values are different and within the same stack. create a new
// config and service config version
- String serviceVersionNote = "Stack Upgrade";
+ Direction direction = upgradeContext.getDirection();
+ String serviceVersionNote = String.format("%s %s %s", direction.getText(true),
+ direction.getPreposition(), upgradeContext.getRepositoryVersion().getVersion());
String auditName = getExecutionCommand().getRoleParams().get(ServerAction.ACTION_USER_NAME);
@@ -536,12 +546,10 @@ public class ConfigureAction extends AbstractServerAction {
auditName = m_configuration.getAnonymousAuditName();
}
- m_configHelper.createConfigType(cluster, m_controller, configType,
+ m_configHelper.createConfigType(cluster, targetStackId, m_controller, configType,
newValues, auditName, serviceVersionNote);
- String message = "Finished updating configuration ''{0}''";
- message = MessageFormat.format(message, configType);
- return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", message, "");
+ return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", outputBuffer.toString(), "");
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
index 4d44e55..9f75bf9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
@@ -969,11 +969,10 @@ public class ConfigHelper {
* @param serviceVersionNote
* @throws AmbariException
*/
- public void updateConfigType(Cluster cluster,
- AmbariManagementController controller, String configType,
- Map<String, String> updates, Collection<String> removals,
- String authenticatedUserName,
- String serviceVersionNote) throws AmbariException {
+ public void updateConfigType(Cluster cluster, StackId stackId,
+ AmbariManagementController controller, String configType, Map<String, String> updates,
+ Collection<String> removals, String authenticatedUserName, String serviceVersionNote)
+ throws AmbariException {
// Nothing to update or remove
if (configType == null ||
@@ -1016,22 +1015,27 @@ public class ConfigHelper {
if ((oldConfigProperties == null)
|| !Maps.difference(oldConfigProperties, properties).areEqual()) {
- createConfigType(cluster, controller, configType, properties,
+ createConfigType(cluster, stackId, controller, configType, properties,
propertiesAttributes, authenticatedUserName, serviceVersionNote);
}
}
- private void createConfigType(Cluster cluster,
- AmbariManagementController controller,
- String configType, Map<String, String> properties,
- Map<String, Map<String, String>> propertyAttributes,
- String authenticatedUserName,
- String serviceVersionNote) throws AmbariException {
+ public void createConfigType(Cluster cluster, StackId stackId,
+ AmbariManagementController controller, String configType, Map<String, String> properties,
+ String authenticatedUserName, String serviceVersionNote) throws AmbariException {
+
+ createConfigType(cluster, stackId, controller, configType, properties,
+ new HashMap<String, Map<String, String>>(), authenticatedUserName, serviceVersionNote);
+ }
+
+ public void createConfigType(Cluster cluster, StackId stackId,
+ AmbariManagementController controller, String configType, Map<String, String> properties,
+ Map<String, Map<String, String>> propertyAttributes, String authenticatedUserName,
+ String serviceVersionNote) throws AmbariException {
// create the configuration history entry
- Config baseConfig = createConfig(cluster, controller, cluster.getDesiredStackVersion(),
- configType, FIRST_VERSION_TAG, properties,
- propertyAttributes);
+ Config baseConfig = createConfig(cluster, stackId, controller, configType, FIRST_VERSION_TAG,
+ properties, propertyAttributes);
if (baseConfig != null) {
cluster.addDesiredConfig(authenticatedUserName,
@@ -1040,34 +1044,6 @@ public class ConfigHelper {
}
/**
- * A helper method to create a new {@link Config} for a given configuration
- * type. This method will perform the following tasks:
- * <ul>
- * <li>Create a {@link Config} in the cluster for the specified type. This
- * will have the proper versions and tags set automatically.</li>
- * <li>Set the cluster's {@link DesiredConfig} to the new configuration</li>
- * <li>Create an entry in the configuration history with a note and username.</li>
- * <ul>
- *
- * @param cluster
- * @param controller
- * @param configType
- * @param properties
- * @param authenticatedUserName
- * @param serviceVersionNote
- * @throws AmbariException
- */
- public void createConfigType(Cluster cluster,
- AmbariManagementController controller,
- String configType, Map<String, String> properties,
- String authenticatedUserName,
- String serviceVersionNote) throws AmbariException {
- createConfigType(cluster, controller, configType, properties,
- new HashMap<String, Map<String, String>>(), authenticatedUserName,
- serviceVersionNote);
- }
-
- /**
* Create configurations and assign them for services.
* @param cluster the cluster
* @param controller the controller
@@ -1077,10 +1053,9 @@ public class ConfigHelper {
* @param serviceVersionNote the service version note
* @throws AmbariException
*/
- public void createConfigTypes(Cluster cluster,
- AmbariManagementController controller, StackId stackId,
- Map<String, Map<String, String>> batchProperties, String authenticatedUserName,
- String serviceVersionNote) throws AmbariException {
+ public void createConfigTypes(Cluster cluster, StackId stackId,
+ AmbariManagementController controller, Map<String, Map<String, String>> batchProperties,
+ String authenticatedUserName, String serviceVersionNote) throws AmbariException {
Map<String, Set<Config>> serviceMapped = new HashMap<>();
@@ -1088,7 +1063,7 @@ public class ConfigHelper {
String type = entry.getKey();
Map<String, String> properties = entry.getValue();
- Config baseConfig = createConfig(cluster, controller, stackId, type, FIRST_VERSION_TAG,
+ Config baseConfig = createConfig(cluster, stackId, controller, type, FIRST_VERSION_TAG,
properties, Collections.<String, Map<String, String>> emptyMap());
if (null != baseConfig) {
@@ -1121,6 +1096,8 @@ public class ConfigHelper {
*
* @param cluster
* the cluster (not {@code null}).
+ * @param stackId
+ * the stack to create the new properties for
* @param controller
* the controller which actually creates the configuration (not
* {@code null}).
@@ -1138,7 +1115,7 @@ public class ConfigHelper {
* @return
* @throws AmbariException
*/
- Config createConfig(Cluster cluster, AmbariManagementController controller, StackId stackId,
+ Config createConfig(Cluster cluster, StackId stackId, AmbariManagementController controller,
String type, String tag, Map<String, String> properties,
Map<String, Map<String, String>> propertyAttributes) throws AmbariException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index 77fabf8..5fdcd66 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -1018,8 +1018,11 @@ public class UpgradeHelper {
LOG.info("The upgrade will create the following configurations for stack {}: {}",
targetStackId, StringUtils.join(configTypes, ','));
- configHelper.createConfigTypes(cluster, controller, targetStackId,
- newServiceDefaultConfigsByType, userName, "Configuration created for Upgrade");
+ String serviceVersionNote = String.format("%s %s %s", direction.getText(true),
+ direction.getPreposition(), upgradeContext.getRepositoryVersion().getVersion());
+
+ configHelper.createConfigTypes(cluster, targetStackId, controller,
+ newServiceDefaultConfigsByType, userName, serviceVersionNote);
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java
index 05bbdc1..8e59602 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java
@@ -171,6 +171,13 @@ public class ClusterGrouping extends Grouping {
continue;
}
+ // only schedule this stage if its service is part of the upgrade
+ if (StringUtils.isNotBlank(execution.service)) {
+ if (!upgradeContext.isServiceSupported(execution.service)) {
+ continue;
+ }
+ }
+
Task task = execution.task;
StageWrapper wrapper = null;
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
index b7a2e78..a9280a4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
@@ -597,7 +597,8 @@ public class UpgradeCatalog200 extends AbstractUpgradeCatalog {
// -----------------------------------------
// Set the updated configuration
- configHelper.createConfigType(cluster, ambariManagementController, "cluster-env", properties,
+ configHelper.createConfigType(cluster, cluster.getDesiredStackVersion(),
+ ambariManagementController, "cluster-env", properties,
AUTHENTICATED_USER_NAME, "Upgrading to Ambari 2.0");
// Set configuration (end)
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
index 1e8b51b..f413c69 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
@@ -698,8 +698,9 @@ public class UpgradeCatalog240 extends AbstractUpgradeCatalog {
if (installedServices.contains(SLIDER_SERVICE_NAME)) {
Config sliderClientConfig = cluster.getDesiredConfigByType(SLIDER_CLIENT_CONFIG);
if (sliderClientConfig == null) {
- configHelper.createConfigType(cluster, ambariManagementController, SLIDER_CLIENT_CONFIG,
- new HashMap<String, String>(), AUTHENTICATED_USER_NAME, "");
+ configHelper.createConfigType(cluster, cluster.getDesiredStackVersion(),
+ ambariManagementController, SLIDER_CLIENT_CONFIG, new HashMap<String, String>(),
+ AUTHENTICATED_USER_NAME, "");
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
index 7679211..97b94c3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
@@ -241,7 +241,7 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
Capture<Map<String, Map<String, String>>> expectedConfigurationsCapture = EasyMock.newCapture();
configHelper.createConfigTypes(EasyMock.anyObject(Cluster.class),
- EasyMock.anyObject(AmbariManagementController.class), EasyMock.anyObject(StackId.class),
+ EasyMock.anyObject(StackId.class), EasyMock.anyObject(AmbariManagementController.class),
EasyMock.capture(expectedConfigurationsCapture), EasyMock.anyObject(String.class),
EasyMock.anyObject(String.class));
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java
index 722ab0c..07391b7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java
@@ -35,6 +35,7 @@ import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ConfigHelper;
+import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.OsFamily;
import org.easymock.Capture;
import org.easymock.CaptureType;
@@ -104,7 +105,7 @@ public class UpdateKerberosConfigsServerActionTest extends EasyMockSupport{
executionCommand.setCommandParams(commandParams);
ConfigHelper configHelper = injector.getInstance(ConfigHelper.class);
- configHelper.updateConfigType(anyObject(Cluster.class), anyObject(AmbariManagementController.class),
+ configHelper.updateConfigType(anyObject(Cluster.class), anyObject(StackId.class), anyObject(AmbariManagementController.class),
anyObject(String.class), EasyMock.<Map<String, String>>anyObject(), EasyMock.<Collection<String>>anyObject(), anyObject(String.class), anyObject(String.class));
expectLastCall().atLeastOnce();
@@ -157,7 +158,7 @@ public class UpdateKerberosConfigsServerActionTest extends EasyMockSupport{
Capture<String> configTypes = Capture.newInstance(CaptureType.ALL);
Capture<Map<String, String>> configUpdates = Capture.newInstance(CaptureType.ALL);
- configHelper.updateConfigType(anyObject(Cluster.class), anyObject(AmbariManagementController.class),
+ configHelper.updateConfigType(anyObject(Cluster.class), anyObject(StackId.class), anyObject(AmbariManagementController.class),
capture(configTypes), capture(configUpdates), anyObject(Collection.class), anyObject(String.class), anyObject(String.class));
expectLastCall().atLeastOnce();
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
index b12eb9b..478b126 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
@@ -32,6 +32,7 @@ import javax.persistence.EntityManager;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.H2DatabaseCleaner;
+import org.apache.ambari.server.ServiceComponentNotFoundException;
import org.apache.ambari.server.ServiceNotFoundException;
import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
import org.apache.ambari.server.actionmanager.HostRoleCommand;
@@ -41,13 +42,12 @@ import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
-import org.apache.ambari.server.orm.dao.HostDAO;
-import org.apache.ambari.server.orm.dao.HostVersionDAO;
-import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
-import org.apache.ambari.server.orm.entities.HostVersionEntity;
+import org.apache.ambari.server.orm.dao.RequestDAO;
+import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.orm.entities.RequestEntity;
+import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity;
import org.apache.ambari.server.serveraction.ServerAction;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
@@ -55,10 +55,14 @@ import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.ambari.server.state.ServiceComponentFactory;
+import org.apache.ambari.server.state.ServiceComponentHost;
+import org.apache.ambari.server.state.ServiceComponentHostFactory;
import org.apache.ambari.server.state.ServiceFactory;
import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.ConfigurationKeyValue;
import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.Insert;
import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.InsertType;
@@ -68,7 +72,10 @@ import org.apache.ambari.server.state.stack.upgrade.ConfigureTask;
import org.apache.ambari.server.state.stack.upgrade.PropertyKeyState;
import org.apache.ambari.server.state.stack.upgrade.TransferCoercionType;
import org.apache.ambari.server.state.stack.upgrade.TransferOperation;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.apache.commons.lang3.StringUtils;
import org.junit.After;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -82,41 +89,59 @@ import com.google.inject.Injector;
*/
public class ConfigureActionTest {
- private static final String HDP_2_2_0_0 = "2.2.0.0-2041";
- private static final String HDP_2_2_0_1 = "2.2.0.1-2270";
- private static final StackId HDP_211_STACK = new StackId("HDP-2.1.1");
- private static final StackId HDP_220_STACK = new StackId("HDP-2.2.0");
-
@Inject
private Injector m_injector;
+
@Inject
private OrmTestHelper m_helper;
- @Inject
- private RepositoryVersionDAO repoVersionDAO;
- @Inject
- private HostVersionDAO hostVersionDAO;
+
@Inject
private HostRoleCommandFactory hostRoleCommandFactory;
+
@Inject
private ServiceFactory serviceFactory;
+
@Inject
private ConfigHelper m_configHelper;
+
@Inject
private Clusters clusters;
+
@Inject
- private ConfigFactory cf;
+ private ConfigFactory configFactory;
+
@Inject
private ConfigureAction action;
+
@Inject
- private HostDAO hostDAO;
+ private RequestDAO requestDAO;
+
@Inject
- private StackDAO stackDAO;
+ private UpgradeDAO upgradeDAO;
+
+ @Inject
+ private ServiceComponentFactory serviceComponentFactory;
+
+ @Inject
+ private ServiceComponentHostFactory serviceComponentHostFactory;
+
+ private RepositoryVersionEntity repoVersion2110;
+ private RepositoryVersionEntity repoVersion2111;
+ private RepositoryVersionEntity repoVersion2200;
+
+ private final Map<String, Map<String, String>> NO_ATTRIBUTES = new HashMap<>();
@Before
public void setup() throws Exception {
m_injector = Guice.createInjector(new InMemoryDefaultTestModule());
m_injector.getInstance(GuiceJpaInitializer.class);
m_injector.injectMembers(this);
+
+ repoVersion2110 = m_helper.getOrCreateRepositoryVersion(new StackId("HDP-2.1.1"), "2.1.1.0-1234");
+ repoVersion2111 = m_helper.getOrCreateRepositoryVersion(new StackId("HDP-2.1.1"), "2.1.1.1-5678");
+ repoVersion2200 = m_helper.getOrCreateRepositoryVersion(new StackId("HDP-2.2.0"), "2.2.0.0-1234");
+
+ makeUpgradeCluster();
}
@After
@@ -125,18 +150,24 @@ public class ConfigureActionTest {
}
+ /**
+ * Tests that a new configuration is created when upgrading across stack when
+ * there is no existing configuration with the correct target stack.
+ *
+ * @throws Exception
+ */
@Test
- public void testConfigActionUpgradeAcrossStack() throws Exception {
- makeUpgradeCluster();
-
+ public void testNewConfigCreatedWhenUpgradingAcrossStacks() throws Exception {
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setCurrentStackVersion(HDP_211_STACK);
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
- put("initLimit", "10");
- }}, new HashMap<String, Map<String,String>>());
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ }
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -147,23 +178,73 @@ public class ConfigureActionTest {
keyValue.key = "initLimit";
keyValue.value = "11";
+ createUpgrade(c, repoVersion2200);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(
executionCommand));
+ action.setExecutionCommand(executionCommand);
+ action.setHostRoleCommand(hostRoleCommand);
+
+ CommandReport report = action.execute(null);
+ assertNotNull(report);
+
+ assertEquals(3, c.getConfigsByType("zoo.cfg").size());
+
+ config = c.getDesiredConfigByType("zoo.cfg");
+ assertNotNull(config);
+ assertFalse(StringUtils.equals("version2", config.getTag()));
+ assertEquals("11", config.getProperties().get("initLimit"));
+ }
+
+ /**
+ * Tests that if a configuration with the target stack already exists, then it
+ * will be re-used instead of a new one created.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testConfigurationWithTargetStackUsed() throws Exception {
+ Cluster c = clusters.getCluster("c1");
+ assertEquals(1, c.getConfigsByType("zoo.cfg").size());
+
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ }
+ };
+
+ Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
+
+ c.addDesiredConfig("user", Collections.singleton(config));
+ assertEquals(2, c.getConfigsByType("zoo.cfg").size());
+
+ List<ConfigurationKeyValue> configurations = new ArrayList<>();
+ ConfigurationKeyValue keyValue = new ConfigurationKeyValue();
+ configurations.add(keyValue);
+ keyValue.key = "initLimit";
+ keyValue.value = "11";
+
+ createUpgrade(c, repoVersion2200);
+
+ Map<String, String> commandParams = new HashMap<>();
+ commandParams.put("clusterName", "c1");
+ commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
+ commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
+
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
+ HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
+
+ hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
action.setExecutionCommand(executionCommand);
action.setHostRoleCommand(hostRoleCommand);
@@ -186,31 +267,29 @@ public class ConfigureActionTest {
*/
@Test
public void testDeletePreserveChanges() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
-
// create a config for zoo.cfg with two values; one is a stack value and the
// other is custom
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("tickTime", "2000");
put("foo", "bar");
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
+ createUpgrade(c, repoVersion2111);
+
// delete all keys, preserving edits or additions
List<Transfer> transfers = new ArrayList<>();
Transfer transfer = new Transfer();
@@ -221,16 +300,10 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
-
action.setExecutionCommand(executionCommand);
action.setHostRoleCommand(hostRoleCommand);
@@ -252,18 +325,19 @@ public class ConfigureActionTest {
@Test
public void testConfigTransferCopy() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
- put("initLimit", "10");
- put("copyIt", "10");
- put("moveIt", "10");
- put("deleteIt", "10");
- }}, new HashMap<String, Map<String,String>>());
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ put("copyIt", "10");
+ put("moveIt", "10");
+ put("deleteIt", "10");
+ }
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -274,9 +348,9 @@ public class ConfigureActionTest {
keyValue.key = "initLimit";
keyValue.value = "11";
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -320,12 +394,7 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
null, null);
@@ -389,24 +458,23 @@ public class ConfigureActionTest {
@Test
public void testCoerceValueOnCopy() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("zoo.server.csv", "c6401,c6402, c6403");
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
@@ -422,12 +490,7 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
@@ -452,25 +515,24 @@ public class ConfigureActionTest {
@Test
public void testValueReplacement() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("key_to_replace", "My New Cat");
put("key_with_no_match", "WxyAndZ");
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
@@ -490,12 +552,7 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_REPLACEMENTS, new Gson().toJson(replacements));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
@@ -524,25 +581,24 @@ public class ConfigureActionTest {
*/
@Test
public void testValueReplacementWithMissingConfigurations() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("existing", "This exists!");
put("missing", null);
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
@@ -581,18 +637,16 @@ public class ConfigureActionTest {
@Test
public void testMultipleKeyValuesPerTask() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setCurrentStackVersion(HDP_211_STACK);
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("fooKey", "barValue");
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -610,17 +664,14 @@ public class ConfigureActionTest {
fooKey3.value = "barValue3";
fooKey3.mask = true;
+ createUpgrade(c, repoVersion2200);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
@@ -644,21 +695,19 @@ public class ConfigureActionTest {
@Test
public void testAllowedSet() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setCurrentStackVersion(HDP_211_STACK);
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("set.key.1", "s1");
put("set.key.2", "s2");
put("set.key.3", "s3");
put("set.key.4", "s4");
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -699,18 +748,14 @@ public class ConfigureActionTest {
fooKey5.ifType = "zoo.cfg";
fooKey5.ifKeyState= PropertyKeyState.ABSENT;
+ createUpgrade(c, repoVersion2200);
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
@@ -738,21 +783,19 @@ public class ConfigureActionTest {
@Test
public void testDisallowedSet() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setCurrentStackVersion(HDP_211_STACK);
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("set.key.1", "s1");
put("set.key.2", "s2");
put("set.key.3", "s3");
put("set.key.4", "s4");
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -783,18 +826,14 @@ public class ConfigureActionTest {
fooKey5.ifType = "zoo.cfg";
fooKey5.ifKeyState= PropertyKeyState.PRESENT;
+ createUpgrade(c, repoVersion2200);
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
@@ -820,14 +859,12 @@ public class ConfigureActionTest {
@Test
public void testAllowedReplacment() throws Exception {
- makeUpgradeCluster();
+
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setCurrentStackVersion(HDP_211_STACK);
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("replace.key.1", "r1");
put("replace.key.2", "r2");
@@ -835,7 +872,9 @@ public class ConfigureActionTest {
put("replace.key.4", "r4");
put("replace.key.5", "r5");
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -878,17 +917,14 @@ public class ConfigureActionTest {
replace4.ifKeyState = PropertyKeyState.ABSENT;
replacements.add(replace4);
+ createUpgrade(c, repoVersion2200);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_REPLACEMENTS, new Gson().toJson(replacements));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
@@ -912,14 +948,10 @@ public class ConfigureActionTest {
@Test
public void testDisallowedReplacment() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setCurrentStackVersion(HDP_211_STACK);
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("replace.key.1", "r1");
put("replace.key.2", "r2");
@@ -927,7 +959,9 @@ public class ConfigureActionTest {
put("replace.key.4", "r4");
put("replace.key.5", "r5");
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -965,17 +999,14 @@ public class ConfigureActionTest {
replace4.ifKeyState = PropertyKeyState.PRESENT;
replacements.add(replace4);
+ createUpgrade(c, repoVersion2200);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_REPLACEMENTS, new Gson().toJson(replacements));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
@@ -999,17 +1030,18 @@ public class ConfigureActionTest {
@Test
public void testAllowedTransferCopy() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
- put("initLimit", "10");
- put("copy.key.1", "c1");
- put("copy.key.2", "c2");
- }}, new HashMap<String, Map<String,String>>());
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ put("copy.key.1", "c1");
+ put("copy.key.2", "c2");
+ }
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1020,9 +1052,9 @@ public class ConfigureActionTest {
keyValue.key = "initLimit";
keyValue.value = "11";
+ createUpgrade(c, repoVersion2200);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1073,12 +1105,7 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
null, null);
@@ -1112,17 +1139,18 @@ public class ConfigureActionTest {
@Test
public void testDisallowedTransferCopy() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
- put("initLimit", "10");
- put("copy.key.1", "c1");
- put("copy.key.2", "c2");
- }}, new HashMap<String, Map<String,String>>());
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ put("copy.key.1", "c1");
+ put("copy.key.2", "c2");
+ }
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1133,9 +1161,9 @@ public class ConfigureActionTest {
keyValue.key = "initLimit";
keyValue.value = "11";
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1205,19 +1233,20 @@ public class ConfigureActionTest {
@Test
public void testAllowedTransferMove() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
- put("initLimit", "10");
- put("move.key.1", "m1");
- put("move.key.2", "m2");
- put("move.key.3", "m3");
- put("move.key.4", "m4");
- }}, new HashMap<String, Map<String,String>>());
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ put("move.key.1", "m1");
+ put("move.key.2", "m2");
+ put("move.key.3", "m3");
+ put("move.key.4", "m4");
+ }
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1228,9 +1257,9 @@ public class ConfigureActionTest {
keyValue.key = "initLimit";
keyValue.value = "11";
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1271,12 +1300,7 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
null, null);
@@ -1311,20 +1335,20 @@ public class ConfigureActionTest {
@Test
public void testDisallowedTransferMove() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2",
- new HashMap<String, String>() {{
- put("initLimit", "10");
- put("move.key.1", "m1");
- put("move.key.2", "m2");
- put("move.key.3", "m3");
- put("move.key.4", "m4");
- }}, new HashMap<String, Map<String,String>>());
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ put("move.key.1", "m1");
+ put("move.key.2", "m2");
+ put("move.key.3", "m3");
+ put("move.key.4", "m4");
+ }
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1335,9 +1359,9 @@ public class ConfigureActionTest {
keyValue.key = "initLimit";
keyValue.value = "11";
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1372,12 +1396,7 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
null, null);
@@ -1413,19 +1432,20 @@ public class ConfigureActionTest {
@Test
public void testAllowedTransferDelete() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
- put("initLimit", "10");
- put("delete.key.1", "d1");
- put("delete.key.2", "d2");
- put("delete.key.3", "d3");
- put("delete.key.4", "d4");
- }}, new HashMap<String, Map<String,String>>());
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ put("delete.key.1", "d1");
+ put("delete.key.2", "d2");
+ put("delete.key.3", "d3");
+ put("delete.key.4", "d4");
+ }
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1436,9 +1456,9 @@ public class ConfigureActionTest {
keyValue.key = "initLimit";
keyValue.value = "11";
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1475,12 +1495,7 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
null, null);
@@ -1511,19 +1526,20 @@ public class ConfigureActionTest {
@Test
public void testDisallowedTransferDelete() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
- put("initLimit", "10");
- put("delete.key.1", "d1");
- put("delete.key.2", "d2");
- put("delete.key.3", "d3");
- put("delete.key.4", "d4");
- }}, new HashMap<String, Map<String,String>>());
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ put("delete.key.1", "d1");
+ put("delete.key.2", "d2");
+ put("delete.key.3", "d3");
+ put("delete.key.4", "d4");
+ }
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1534,9 +1550,9 @@ public class ConfigureActionTest {
keyValue.key = "initLimit";
keyValue.value = "11";
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1568,12 +1584,7 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
null, null);
@@ -1609,25 +1620,24 @@ public class ConfigureActionTest {
*/
@Test
public void testInsert() throws Exception {
- makeUpgradeCluster();
-
Cluster c = clusters.getCluster("c1");
assertEquals(1, c.getConfigsByType("zoo.cfg").size());
- c.setDesiredStackVersion(HDP_220_STACK);
- Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+ Map<String, String> properties = new HashMap<String, String>() {
{
put("key_to_append", "append");
put("key_to_prepend", "prepend");
}
- }, new HashMap<String, Map<String, String>>());
+ };
+
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
c.addDesiredConfig("user", Collections.singleton(config));
assertEquals(2, c.getConfigsByType("zoo.cfg").size());
+ createUpgrade(c, repoVersion2111);
+
Map<String, String> commandParams = new HashMap<>();
- commandParams.put("upgrade_direction", "upgrade");
- commandParams.put("version", HDP_2_2_0_1);
commandParams.put("clusterName", "c1");
commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
@@ -1662,12 +1672,7 @@ public class ConfigureActionTest {
commandParams.put(ConfigureTask.PARAMETER_INSERTIONS, new Gson().toJson(insertions));
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName("c1");
- executionCommand.setRoleParams(new HashMap<String, String>());
- executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+ ExecutionCommand executionCommand = getExecutionCommand(commandParams);
HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
action.setExecutionCommand(executionCommand);
@@ -1690,58 +1695,46 @@ public class ConfigureActionTest {
assertEquals(expectedAppend, config.getProperties().get("key_to_append"));
}
+ /**
+ * Creates a cluster using {@link #repoVersion2110} with ZooKeeper installed.
+ *
+ * @throws Exception
+ */
private void makeUpgradeCluster() throws Exception {
String clusterName = "c1";
String hostName = "h1";
- clusters.addCluster(clusterName, HDP_220_STACK);
-
- StackEntity stackEntity = stackDAO.find(HDP_220_STACK.getStackName(),
- HDP_220_STACK.getStackVersion());
-
- assertNotNull(stackEntity);
+ clusters.addCluster(clusterName, repoVersion2110.getStackId());
Cluster c = clusters.getCluster(clusterName);
- c.setDesiredStackVersion(HDP_220_STACK);
-
- // Creating starting repo
- RepositoryVersionEntity repositoryVersionEntity = m_helper.getOrCreateRepositoryVersion(
- HDP_220_STACK, HDP_2_2_0_0);
-
- // !!! very important, otherwise the loops that walk the list of installed
- // service properties will not run!
- installService(c, "ZOOKEEPER", repositoryVersionEntity);
-
- Config config = cf.createNew(c, "zoo.cfg", "version1", new HashMap<String, String>() {
- {
- put("initLimit", "10");
- }
- }, new HashMap<String, Map<String, String>>());
-
- c.addDesiredConfig("user", Collections.singleton(config));
// add a host component
clusters.addHost(hostName);
-
Host host = clusters.getHost(hostName);
-
Map<String, String> hostAttributes = new HashMap<>();
hostAttributes.put("os_family", "redhat");
hostAttributes.put("os_release_version", "6");
host.setHostAttributes(hostAttributes);
- String urlInfo = "[{'repositories':["
- + "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'HDP-2.2.0'}"
- + "], 'OperatingSystems/os_type':'redhat6'}]";
- repoVersionDAO.create(stackEntity, HDP_2_2_0_1, String.valueOf(System.currentTimeMillis()), urlInfo);
+ clusters.mapHostToCluster(hostName, clusterName);
+
+ // !!! very important, otherwise the loops that walk the list of installed
+ // service properties will not run!
+ Service zk = installService(c, "ZOOKEEPER", repoVersion2110);
+ addServiceComponent(c, zk, "ZOOKEEPER_SERVER");
+ addServiceComponent(c, zk, "ZOOKEEPER_CLIENT");
+ createNewServiceComponentHost(c, "ZOOKEEPER", "ZOOKEEPER_SERVER", hostName);
+ createNewServiceComponentHost(c, "ZOOKEEPER", "ZOOKEEPER_CLIENT", hostName);
+
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("initLimit", "10");
+ }
+ };
- c.setCurrentStackVersion(HDP_220_STACK);
+ Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version1", properties);
- HostVersionEntity entity = new HostVersionEntity();
- entity.setHostEntity(hostDAO.findByName(hostName));
- entity.setRepositoryVersion(repoVersionDAO.findByStackAndVersion(HDP_220_STACK, HDP_2_2_0_1));
- entity.setState(RepositoryVersionState.INSTALLED);
- hostVersionDAO.create(entity);
+ c.addDesiredConfig("user", Collections.singleton(config));
// verify that our configs are there
String tickTime = m_configHelper.getPropertyValueFromStackDefinitions(c, "zoo.cfg", "tickTime");
@@ -1769,4 +1762,96 @@ public class ConfigureActionTest {
return service;
}
+
+ private ServiceComponent addServiceComponent(Cluster cluster, Service service,
+ String componentName) throws AmbariException {
+ ServiceComponent serviceComponent = null;
+ try {
+ serviceComponent = service.getServiceComponent(componentName);
+ } catch (ServiceComponentNotFoundException e) {
+ serviceComponent = serviceComponentFactory.createNew(service, componentName);
+ service.addServiceComponent(serviceComponent);
+ serviceComponent.setDesiredState(State.INSTALLED);
+ }
+
+ return serviceComponent;
+ }
+
+ private ServiceComponentHost createNewServiceComponentHost(Cluster cluster, String serviceName,
+ String svcComponent, String hostName) throws AmbariException {
+ Assert.assertNotNull(cluster.getConfigGroups());
+ Service s = cluster.getService(serviceName);
+ ServiceComponent sc = addServiceComponent(cluster, s, svcComponent);
+
+ ServiceComponentHost sch = serviceComponentHostFactory.createNew(sc, hostName);
+
+ sc.addServiceComponentHost(sch);
+ sch.setDesiredState(State.INSTALLED);
+ sch.setState(State.INSTALLED);
+ return sch;
+ }
+
+ /**
+ * Creates an upgrade and associates it with the cluster.
+ *
+ * @param cluster
+ * @param sourceRepo
+ * @param targetRepo
+ * @throws Exception
+ */
+ private UpgradeEntity createUpgrade(Cluster cluster, RepositoryVersionEntity repositoryVersion)
+ throws Exception {
+
+ // create some entities for the finalize action to work with for patch
+ // history
+ RequestEntity requestEntity = new RequestEntity();
+ requestEntity.setClusterId(cluster.getClusterId());
+ requestEntity.setRequestId(1L);
+ requestEntity.setStartTime(System.currentTimeMillis());
+ requestEntity.setCreateTime(System.currentTimeMillis());
+ requestDAO.create(requestEntity);
+
+ UpgradeEntity upgradeEntity = new UpgradeEntity();
+ upgradeEntity.setId(1L);
+ upgradeEntity.setClusterId(cluster.getClusterId());
+ upgradeEntity.setRequestEntity(requestEntity);
+ upgradeEntity.setUpgradePackage("");
+ upgradeEntity.setRepositoryVersion(repositoryVersion);
+ upgradeEntity.setUpgradeType(UpgradeType.NON_ROLLING);
+
+ Map<String, Service> services = cluster.getServices();
+ for (String serviceName : services.keySet()) {
+ Service service = services.get(serviceName);
+ Map<String, ServiceComponent> components = service.getServiceComponents();
+ for (String componentName : components.keySet()) {
+ UpgradeHistoryEntity history = new UpgradeHistoryEntity();
+ history.setUpgrade(upgradeEntity);
+ history.setServiceName(serviceName);
+ history.setComponentName(componentName);
+ history.setFromRepositoryVersion(service.getDesiredRepositoryVersion());
+ history.setTargetRepositoryVersion(repositoryVersion);
+ upgradeEntity.addHistory(history);
+ }
+ }
+
+ upgradeDAO.create(upgradeEntity);
+ cluster.setUpgradeEntity(upgradeEntity);
+ return upgradeEntity;
+ }
+
+ private ExecutionCommand getExecutionCommand(Map<String, String> commandParams) {
+ ExecutionCommand executionCommand = new ExecutionCommand();
+ executionCommand.setClusterName("c1");
+ executionCommand.setCommandParams(commandParams);
+ executionCommand.setRoleParams(new HashMap<String, String>());
+ executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
+
+ return executionCommand;
+ }
+
+ private Config createConfig(Cluster cluster, RepositoryVersionEntity repoVersion, String type,
+ String tag, Map<String, String> properties) {
+ return configFactory.createNew(repoVersion.getStackId(), cluster, type, tag, properties,
+ NO_ATTRIBUTES);
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index 625b2ea..35fffda 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -564,7 +564,7 @@ public class UpgradeActionTest {
}
/**
- * Creates an upgrade an associates it with the cluster.
+ * Creates an upgrade and associates it with the cluster.
*
* @param cluster
* @param sourceRepo
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
index e1eca14..857da61 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
@@ -815,7 +815,8 @@ public class ConfigHelperTest {
updates.put("new-property", "new-value");
updates.put("fs.trash.interval", "updated-value");
Collection<String> removals = Collections.singletonList("ipc.client.connect.max.retries");
- configHelper.updateConfigType(cluster, managementController, "core-site", updates, removals, "admin", "Test note");
+ configHelper.updateConfigType(cluster, cluster.getCurrentStackVersion(), managementController,
+ "core-site", updates, removals, "admin", "Test note");
Config updatedConfig = cluster.getDesiredConfigByType("core-site");
@@ -853,8 +854,8 @@ public class ConfigHelperTest {
updates.put("oozie.authentication.type", "kerberos");
updates.put("oozie.service.HadoopAccessorService.kerberos.enabled", "true");
- configHelper.updateConfigType(cluster, managementController, "oozie-site", updates, null, "admin", "Test " +
- "note");
+ configHelper.updateConfigType(cluster, cluster.getCurrentStackVersion(), managementController,
+ "oozie-site", updates, null, "admin", "Test " + "note");
Config updatedConfig = cluster.getDesiredConfigByType("oozie-site");
// Config tag updated
@@ -881,7 +882,8 @@ public class ConfigHelperTest {
List<String> removals = new ArrayList<>();
removals.add("timeline.service.operating.mode");
- configHelper.updateConfigType(cluster, managementController, "ams-site", null, removals, "admin", "Test note");
+ configHelper.updateConfigType(cluster, cluster.getCurrentStackVersion(), managementController,
+ "ams-site", null, removals, "admin", "Test note");
Config updatedConfig = cluster.getDesiredConfigByType("ams-site");
// Config tag updated
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index 277ef8b..921322b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@ -333,7 +333,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
assertEquals("Save Cluster State", postGroup.items.get(1).getText());
assertEquals(StageWrapper.Type.SERVER_SIDE_ACTION, postGroup.items.get(1).getType());
- assertEquals(3, groups.get(0).items.size());
+ assertEquals(2, groups.get(0).items.size());
assertEquals(7, groups.get(1).items.size());
assertEquals(2, groups.get(2).items.size());
@@ -389,7 +389,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
assertEquals("Save Cluster State", postGroup.items.get(1).getText());
assertEquals(StageWrapper.Type.SERVER_SIDE_ACTION, postGroup.items.get(1).getType());
- assertEquals(3, groups.get(0).items.size());
+ assertEquals(2, groups.get(0).items.size());
assertEquals(6, groups.get(1).items.size());
assertEquals(1, groups.get(2).items.size());
@@ -2361,7 +2361,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
Capture<Map<String, Map<String, String>>> expectedConfigurationsCapture = EasyMock.newCapture();
configHelper.createConfigTypes(EasyMock.anyObject(Cluster.class),
- EasyMock.anyObject(AmbariManagementController.class), EasyMock.anyObject(StackId.class),
+ EasyMock.anyObject(StackId.class), EasyMock.anyObject(AmbariManagementController.class),
EasyMock.capture(expectedConfigurationsCapture), EasyMock.anyObject(String.class),
EasyMock.anyObject(String.class));
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
index e993f96..e82097b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
@@ -516,6 +516,7 @@ public class UpgradeCatalog200Test {
final Cluster mockClusterExpected = easyMockSupport.createStrictMock(Cluster.class);
final Cluster mockClusterMissingSmokeUser = easyMockSupport.createStrictMock(Cluster.class);
final Cluster mockClusterMissingConfig = easyMockSupport.createStrictMock(Cluster.class);
+ final StackId mockStackId = easyMockSupport.createNiceMock(StackId.class);
final Config mockClusterEnvExpected = easyMockSupport.createStrictMock(Config.class);
final Config mockClusterEnvMissingSmokeUser = easyMockSupport.createStrictMock(Config.class);
@@ -562,14 +563,16 @@ public class UpgradeCatalog200Test {
// Expected operation
expect(mockClusterExpected.getDesiredConfigByType("cluster-env")).andReturn(mockClusterEnvExpected).once();
+ expect(mockClusterExpected.getDesiredStackVersion()).andReturn(mockStackId).atLeastOnce();
expect(mockClusterEnvExpected.getProperties()).andReturn(propertiesExpectedT0).once();
- mockConfigHelper.createConfigType(mockClusterExpected, mockAmbariManagementController,
+ mockConfigHelper.createConfigType(mockClusterExpected, mockStackId, mockAmbariManagementController,
"cluster-env", propertiesExpectedT1, UpgradeCatalog200.AUTHENTICATED_USER_NAME, "Upgrading to Ambari 2.0");
expectLastCall().once();
// Missing smokeuser
expect(mockClusterMissingSmokeUser.getDesiredConfigByType("cluster-env")).andReturn(mockClusterEnvMissingSmokeUser).once();
+ expect(mockClusterMissingSmokeUser.getDesiredStackVersion()).andReturn(mockStackId).atLeastOnce();
expect(mockClusterEnvMissingSmokeUser.getProperties()).andReturn(propertiesMissingSmokeUserT0).once();
expect(mockConfigHelper.getStackProperties(mockClusterMissingSmokeUser)).andReturn(Collections.singleton(mockSmokeUserPropertyInfo)).once();
@@ -577,7 +580,7 @@ public class UpgradeCatalog200Test {
expect(mockSmokeUserPropertyInfo.getFilename()).andReturn("cluster-env.xml").once();
expect(mockSmokeUserPropertyInfo.getValue()).andReturn("ambari-qa").once();
- mockConfigHelper.createConfigType(mockClusterMissingSmokeUser, mockAmbariManagementController,
+ mockConfigHelper.createConfigType(mockClusterMissingSmokeUser, mockStackId, mockAmbariManagementController,
"cluster-env", propertiesMissingSmokeUserT1, UpgradeCatalog200.AUTHENTICATED_USER_NAME, "Upgrading to Ambari 2.0");
expectLastCall().once();
http://git-wip-us.apache.org/repos/asf/ambari/blob/2892aee5/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
index 46ce2d5..f106658 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
@@ -2488,6 +2488,7 @@ public class UpgradeCatalog240Test {
final Cluster mockClusterExpected = easyMockSupport.createNiceMock(Cluster.class);
final ConfigHelper configHelper = easyMockSupport.createNiceMock(ConfigHelper.class);
final Service serviceSlider = easyMockSupport.createNiceMock(Service.class);
+ StackId mockStackId = easyMockSupport.createNiceMock(StackId.class);
Map<String, Service> servicesMap = new HashMap<>();
servicesMap.put("SLIDER", serviceSlider);
@@ -2513,10 +2514,13 @@ public class UpgradeCatalog240Test {
expect(mockAmbariManagementController.getConfigHelper()).andReturn(configHelper).once();
expect(mockClusterExpected.getServices()).andReturn(servicesMap).once();
expect(mockClusterExpected.getDesiredConfigByType("slider-client")).andReturn(null).once();
+ expect(mockClusterExpected.getDesiredStackVersion()).andReturn(mockStackId).atLeastOnce();
- configHelper.createConfigType(mockClusterExpected, mockAmbariManagementController, "slider-client",
+ configHelper.createConfigType(mockClusterExpected, mockStackId,
+ mockAmbariManagementController, "slider-client",
new HashMap<String, String>(), "ambari-upgrade", "");
+
expectLastCall().once();
easyMockSupport.replayAll();
[37/50] [abbrv] ambari git commit: AMBARI-21078 - Merging
Configurations On Service/Patch Upgrades Should Create New Configurations
Only For Included Services (jonathanhurley)
Posted by jo...@apache.org.
AMBARI-21078 - Merging Configurations On Service/Patch Upgrades Should Create New Configurations Only For Included Services (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c4148d80
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c4148d80
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c4148d80
Branch: refs/heads/trunk
Commit: c4148d805c4145d545712bbce6127e7518a7b7ce
Parents: a45f542
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Fri May 19 15:14:15 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue May 23 17:35:11 2017 -0400
----------------------------------------------------------------------
.../controller/AmbariManagementController.java | 2 +-
.../AmbariManagementControllerImpl.java | 4 +-
.../internal/ConfigGroupResourceProvider.java | 4 +-
.../internal/UpgradeResourceProvider.java | 287 +------------------
.../ambari/server/orm/dao/ServiceConfigDAO.java | 18 +-
.../apache/ambari/server/orm/dao/StackDAO.java | 14 +
.../orm/entities/ServiceConfigEntity.java | 24 +-
.../upgrades/ComponentVersionCheckAction.java | 5 +-
.../upgrades/FinalizeUpgradeAction.java | 18 +-
.../upgrades/UpdateDesiredStackAction.java | 7 +-
.../ambari/server/stack/MasterHostResolver.java | 16 +-
.../org/apache/ambari/server/state/Cluster.java | 16 +-
.../ambari/server/state/ConfigFactory.java | 1 +
.../ambari/server/state/ConfigHelper.java | 56 ++--
.../apache/ambari/server/state/ConfigImpl.java | 13 +-
.../ambari/server/state/UpgradeContext.java | 68 ++++-
.../ambari/server/state/UpgradeHelper.java | 286 ++++++++++++++++--
.../server/state/cluster/ClusterImpl.java | 108 ++++---
.../server/state/configgroup/ConfigGroup.java | 2 +-
.../state/configgroup/ConfigGroupFactory.java | 5 +-
.../state/configgroup/ConfigGroupImpl.java | 35 ++-
.../state/stack/upgrade/UpgradeScope.java | 9 -
.../RequiredConfigPropertiesValidator.java | 3 +-
.../server/upgrade/AbstractUpgradeCatalog.java | 3 +-
.../TestActionSchedulerThreading.java | 35 ++-
.../ambari/server/agent/AgentResourceTest.java | 2 +
.../AmbariManagementControllerTest.java | 16 +-
.../ConfigGroupResourceProviderTest.java | 5 +-
.../StackUpgradeConfigurationMergeTest.java | 12 +-
.../internal/UpgradeResourceProviderTest.java | 115 ++++++--
.../server/orm/dao/ServiceConfigDAOTest.java | 11 +-
.../ComponentVersionCheckActionTest.java | 107 ++++---
.../upgrades/UpgradeActionTest.java | 230 +++------------
.../ambari/server/state/ConfigGroupTest.java | 2 +-
.../ambari/server/state/ConfigHelperTest.java | 2 +-
.../ambari/server/state/UpgradeHelperTest.java | 107 +++----
.../server/state/cluster/ClusterTest.java | 142 ++++++---
.../svccomphost/ServiceComponentHostTest.java | 6 +-
.../upgrade/AbstractUpgradeCatalogTest.java | 6 +-
.../server/upgrade/UpgradeCatalog210Test.java | 4 +-
.../server/upgrade/UpgradeCatalog211Test.java | 2 +-
.../server/upgrade/UpgradeCatalog220Test.java | 4 +-
.../server/upgrade/UpgradeCatalog221Test.java | 4 +-
.../server/upgrade/UpgradeCatalog222Test.java | 4 +-
.../server/upgrade/UpgradeCatalog240Test.java | 36 +--
.../server/upgrade/UpgradeCatalog250Test.java | 34 +--
.../server/upgrade/UpgradeCatalog300Test.java | 6 +-
47 files changed, 1030 insertions(+), 866 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
index fe01a0d..807bded 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
@@ -115,7 +115,7 @@ public interface AmbariManagementController {
* TODO move this method to Cluster? doesn't seem to be on its place
* @return config created
*/
- Config createConfig(StackId stackId, Cluster cluster, String type, Map<String, String> properties,
+ Config createConfig(Cluster cluster, StackId stackId, String type, Map<String, String> properties,
String versionTag, Map<String, Map<String, String>> propertiesAttributes);
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/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 faa9c54..3a5a4e6 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
@@ -930,7 +930,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
stackId = cluster.getDesiredStackVersion();
}
- Config config = createConfig(stackId, cluster, request.getType(), requestProperties,
+ Config config = createConfig(cluster, stackId, request.getType(), requestProperties,
request.getVersionTag(), propertiesAttributes);
LOG.info(MessageFormat.format("Creating configuration with tag ''{0}'' to cluster ''{1}'' for configuration type {2}",
@@ -942,7 +942,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
@Override
- public Config createConfig(StackId stackId, Cluster cluster, String type, Map<String, String> properties,
+ public Config createConfig(Cluster cluster, StackId stackId, String type, Map<String, String> properties,
String versionTag, Map<String, Map<String, String>> propertiesAttributes) {
Config config = configFactory.createNew(stackId, cluster, type, versionTag, properties,
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
index cf6b717..71f2be4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
@@ -579,13 +579,11 @@ public class ConfigGroupResourceProvider extends
verifyConfigs(request.getConfigs(), cluster.getClusterName());
- ConfigGroup configGroup = configGroupFactory.createNew(cluster,
+ ConfigGroup configGroup = configGroupFactory.createNew(cluster, serviceName,
request.getGroupName(),
request.getTag(), request.getDescription(),
request.getConfigs(), hosts);
- configGroup.setServiceName(serviceName);
-
cluster.addConfigGroup(configGroup);
if (serviceName != null) {
cluster.createServiceConfigVersion(serviceName, getManagementController().getAuthName(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index 115a043..de2386a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -27,7 +27,6 @@ import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -65,13 +64,11 @@ import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.HostRoleCommandStatusSummaryDTO;
-import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.RequestDAO;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.RequestEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity;
@@ -82,9 +79,7 @@ import org.apache.ambari.server.security.authorization.ResourceType;
import org.apache.ambari.server.security.authorization.RoleAuthorization;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
-import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceInfo;
@@ -98,7 +93,6 @@ import org.apache.ambari.server.state.stack.ConfigUpgradePack;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.ConfigureTask;
import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.state.stack.upgrade.Grouping;
import org.apache.ambari.server.state.stack.upgrade.ManualTask;
import org.apache.ambari.server.state.stack.upgrade.ServerSideActionTask;
import org.apache.ambari.server.state.stack.upgrade.StageWrapper;
@@ -208,9 +202,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
private static Provider<AmbariMetaInfo> s_metaProvider = null;
@Inject
- private static RepositoryVersionDAO s_repoVersionDAO = null;
-
- @Inject
private static Provider<RequestFactory> s_requestFactory;
@Inject
@@ -275,9 +266,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
PROPERTY_IDS.add(REQUEST_STATUS_PROPERTY_ID);
PROPERTY_IDS.add(REQUEST_TYPE_ID);
- PROPERTY_IDS.add("Upgrade/from_version");
- PROPERTY_IDS.add("Upgrade/to_version");
-
// keys
KEY_PROPERTY_IDS.put(Resource.Type.Upgrade, UPGRADE_REQUEST_ID);
KEY_PROPERTY_IDS.put(Resource.Type.Cluster, UPGRADE_CLUSTER_NAME);
@@ -688,16 +676,11 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
at the appropriate moment during the orchestration.
**/
if (pack.getType() == UpgradeType.ROLLING) {
- // Desired configs must be set before creating stages because the config tag
- // names are read and set on the command for filling in later
- applyStackAndProcessConfigurations(upgradeContext);
-
- // move component desired version and upgrade state
- s_upgradeHelper.putComponentsToUpgradingState(upgradeContext);
+ s_upgradeHelper.updateDesiredRepositoriesAndConfigs(upgradeContext);
}
@Experimental(feature = ExperimentalFeature.PATCH_UPGRADES, comment = "This is wrong")
- StackId configurationPackSourceStackId = upgradeContext.getRepositoryVersion().getStackId();
+ StackId configurationPackSourceStackId = upgradeContext.getSourceVersions().values().iterator().next().getStackId();
// resolve or build a proper config upgrade pack - always start out with the config pack
// for the current stack and merge into that
@@ -801,272 +784,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
return upgradeEntity;
}
- /**
- * Handles the creation or resetting of configurations based on whether an
- * upgrade or downgrade is occurring. This method will not do anything when
- * the target stack version is the same as the cluster's current stack version
- * since, by definition, no new configurations are automatically created when
- * upgrading with the same stack (ie HDP 2.2.0.0 -> HDP 2.2.1.0).
- * <p/>
- * When upgrading or downgrade between stacks (HDP 2.2.0.0 -> HDP 2.3.0.0)
- * then this will perform the following:
- * <ul>
- * <li>Upgrade: Create new configurations that are a merge between the current
- * stack and the desired stack. If a value has changed between stacks, then
- * the target stack value should be taken unless the cluster's value differs
- * from the old stack. This can occur if a property has been customized after
- * installation.</li>
- * <li>Downgrade: Reset the latest configurations from the cluster's original
- * stack. The new configurations that were created on upgrade must be left
- * intact until all components have been reverted, otherwise heartbeats will
- * fail due to missing configurations.</li>
- * </ul>
- *
- * @param upgradeContext the upgrade context (not {@code null}).
- * @throws AmbariException
- */
- public void applyStackAndProcessConfigurations(UpgradeContext upgradeContext)
- throws AmbariException {
-
- Cluster cluster = upgradeContext.getCluster();
- Direction direction = upgradeContext.getDirection();
- UpgradePack upgradePack = upgradeContext.getUpgradePack();
- String stackName = upgradeContext.getRepositoryVersion().getStackId().getStackName();
- String version = upgradeContext.getRepositoryVersion().getStackId().getStackVersion();
- String userName = getManagementController().getAuthName();
-
- RepositoryVersionEntity targetRve = s_repoVersionDAO.findByStackNameAndVersion(stackName, version);
- if (null == targetRve) {
- LOG.info("Could not find version entity for {}; not setting new configs", version);
- return;
- }
-
- if (null == userName) {
- userName = getManagementController().getAuthName();
- }
-
- // if the current and target stacks are the same (ie HDP 2.2.0.0 -> 2.2.1.0)
- // then we should never do anything with configs on either upgrade or
- // downgrade; however if we are going across stacks, we have to do the stack
- // checks differently depending on whether this is an upgrade or downgrade
- StackEntity targetStack = targetRve.getStack();
- StackId currentStackId = cluster.getCurrentStackVersion();
- StackId desiredStackId = cluster.getDesiredStackVersion();
- StackId targetStackId = new StackId(targetStack);
- // Only change configs if moving to a different stack.
- switch (direction) {
- case UPGRADE:
- if (currentStackId.equals(targetStackId)) {
- return;
- }
- break;
- case DOWNGRADE:
- if (desiredStackId.equals(targetStackId)) {
- return;
- }
- break;
- }
-
- Map<String, Map<String, String>> newConfigurationsByType = null;
- ConfigHelper configHelper = getManagementController().getConfigHelper();
-
- if (direction == Direction.UPGRADE) {
- // populate a map of default configurations for the old stack (this is
- // used when determining if a property has been customized and should be
- // overriden with the new stack value)
- Map<String, Map<String, String>> oldStackDefaultConfigurationsByType = configHelper.getDefaultProperties(
- currentStackId, cluster, true);
-
- // populate a map with default configurations from the new stack
- newConfigurationsByType = configHelper.getDefaultProperties(targetStackId, cluster, true);
-
- // We want to skip updating config-types of services that are not in the upgrade pack.
- // Care should be taken as some config-types could be in services that are in and out
- // of the upgrade pack. We should never ignore config-types of services in upgrade pack.
- Set<String> skipConfigTypes = new HashSet<>();
- Set<String> upgradePackServices = new HashSet<>();
- Set<String> upgradePackConfigTypes = new HashSet<>();
- AmbariMetaInfo ambariMetaInfo = s_metaProvider.get();
-
- // ensure that we get the service info from the target stack
- // (since it could include new configuration types for a service)
- Map<String, ServiceInfo> stackServicesMap = ambariMetaInfo.getServices(
- targetStack.getStackName(), targetStack.getStackVersion());
-
- for (Grouping group : upgradePack.getGroups(direction)) {
- for (UpgradePack.OrderService service : group.services) {
- if (service.serviceName == null || upgradePackServices.contains(service.serviceName)) {
- // No need to re-process service that has already been looked at
- continue;
- }
-
- upgradePackServices.add(service.serviceName);
- ServiceInfo serviceInfo = stackServicesMap.get(service.serviceName);
- if (serviceInfo == null) {
- continue;
- }
-
- // add every configuration type for all services defined in the
- // upgrade pack
- Set<String> serviceConfigTypes = serviceInfo.getConfigTypeAttributes().keySet();
- for (String serviceConfigType : serviceConfigTypes) {
- if (!upgradePackConfigTypes.contains(serviceConfigType)) {
- upgradePackConfigTypes.add(serviceConfigType);
- }
- }
- }
- }
-
- // build a set of configurations that should not be merged since their
- // services are not installed
- Set<String> servicesNotInUpgradePack = new HashSet<>(stackServicesMap.keySet());
- servicesNotInUpgradePack.removeAll(upgradePackServices);
- for (String serviceNotInUpgradePack : servicesNotInUpgradePack) {
- ServiceInfo serviceInfo = stackServicesMap.get(serviceNotInUpgradePack);
- Set<String> configTypesOfServiceNotInUpgradePack = serviceInfo.getConfigTypeAttributes().keySet();
- for (String configType : configTypesOfServiceNotInUpgradePack) {
- if (!upgradePackConfigTypes.contains(configType) && !skipConfigTypes.contains(configType)) {
- skipConfigTypes.add(configType);
- }
- }
- }
-
- // remove any configurations from the target stack that are not used
- // because the services are not installed
- Iterator<String> iterator = newConfigurationsByType.keySet().iterator();
- while (iterator.hasNext()) {
- String configType = iterator.next();
- if (skipConfigTypes.contains(configType)) {
- LOG.info("Stack Upgrade: Removing configs for config-type {}", configType);
- iterator.remove();
- }
- }
-
- // now that the map has been populated with the default configurations
- // from the stack/service, overlay the existing configurations on top
- Map<String, DesiredConfig> existingDesiredConfigurationsByType = cluster.getDesiredConfigs();
- for (Map.Entry<String, DesiredConfig> existingEntry : existingDesiredConfigurationsByType.entrySet()) {
- String configurationType = existingEntry.getKey();
- if(skipConfigTypes.contains(configurationType)) {
- LOG.info("Stack Upgrade: Skipping config-type {} as upgrade-pack contains no updates to its service", configurationType);
- continue;
- }
-
- // NPE sanity, although shouldn't even happen since we are iterating
- // over the desired configs to start with
- Config currentClusterConfig = cluster.getDesiredConfigByType(configurationType);
- if (null == currentClusterConfig) {
- continue;
- }
-
- // get current stack default configurations on install
- Map<String, String> configurationTypeDefaultConfigurations = oldStackDefaultConfigurationsByType.get(
- configurationType);
-
- // NPE sanity for current stack defaults
- if (null == configurationTypeDefaultConfigurations) {
- configurationTypeDefaultConfigurations = Collections.emptyMap();
- }
-
- // get the existing configurations
- Map<String, String> existingConfigurations = currentClusterConfig.getProperties();
-
- // if the new stack configurations don't have the type, then simply add
- // all of the existing in
- Map<String, String> newDefaultConfigurations = newConfigurationsByType.get(
- configurationType);
-
- if (null == newDefaultConfigurations) {
- newConfigurationsByType.put(configurationType, existingConfigurations);
- continue;
- } else {
- // TODO, should we remove existing configs whose value is NULL even though they don't have a value in the new stack?
-
- // Remove any configs in the new stack whose value is NULL, unless they currently exist and the value is not NULL.
- Iterator<Map.Entry<String, String>> iter = newDefaultConfigurations.entrySet().iterator();
- while (iter.hasNext()) {
- Map.Entry<String, String> entry = iter.next();
- if (entry.getValue() == null) {
- iter.remove();
- }
- }
- }
-
- // for every existing configuration, see if an entry exists; if it does
- // not exist, then put it in the map, otherwise we'll have to compare
- // the existing value to the original stack value to see if its been
- // customized
- for (Map.Entry<String, String> existingConfigurationEntry : existingConfigurations.entrySet()) {
- String existingConfigurationKey = existingConfigurationEntry.getKey();
- String existingConfigurationValue = existingConfigurationEntry.getValue();
-
- // if there is already an entry, we now have to try to determine if
- // the value was customized after stack installation
- if (newDefaultConfigurations.containsKey(existingConfigurationKey)) {
- String newDefaultConfigurationValue = newDefaultConfigurations.get(
- existingConfigurationKey);
-
- if (!StringUtils.equals(existingConfigurationValue, newDefaultConfigurationValue)) {
- // the new default is different from the existing cluster value;
- // only override the default value if the existing value differs
- // from the original stack
- String oldDefaultValue = configurationTypeDefaultConfigurations.get(
- existingConfigurationKey);
-
- if (!StringUtils.equals(existingConfigurationValue, oldDefaultValue)) {
- // at this point, we've determined that there is a difference
- // between default values between stacks, but the value was
- // also customized, so keep the customized value
- newDefaultConfigurations.put(existingConfigurationKey, existingConfigurationValue);
- }
- }
- } else {
- // there is no entry in the map, so add the existing key/value pair
- newDefaultConfigurations.put(existingConfigurationKey, existingConfigurationValue);
- }
- }
-
- /*
- for every new configuration which does not exist in the existing
- configurations, see if it was present in the current stack
-
- stack 2.x has foo-site/property (on-ambari-upgrade is false)
- stack 2.y has foo-site/property
- the current cluster (on 2.x) does not have it
-
- In this case, we should NOT add it back as clearly stack advisor has removed it
- */
- Iterator<Map.Entry<String, String>> newDefaultConfigurationsIterator = newDefaultConfigurations.entrySet().iterator();
- while( newDefaultConfigurationsIterator.hasNext() ){
- Map.Entry<String, String> newConfigurationEntry = newDefaultConfigurationsIterator.next();
- String newConfigurationPropertyName = newConfigurationEntry.getKey();
- if (configurationTypeDefaultConfigurations.containsKey(newConfigurationPropertyName)
- && !existingConfigurations.containsKey(newConfigurationPropertyName)) {
- LOG.info(
- "The property {}/{} exists in both {} and {} but is not part of the current set of configurations and will therefore not be included in the configuration merge",
- configurationType, newConfigurationPropertyName, currentStackId, targetStackId);
-
- // remove the property so it doesn't get merged in
- newDefaultConfigurationsIterator.remove();
- }
- }
- }
- } else {
- // downgrade
- cluster.applyLatestConfigurations(cluster.getCurrentStackVersion());
- }
-
- // !!! update the stack
- cluster.setDesiredStackVersion(
- new StackId(targetStack.getStackName(), targetStack.getStackVersion()));
-
- // !!! configs must be created after setting the stack version
- if (null != newConfigurationsByType) {
- configHelper.createConfigTypes(cluster, getManagementController(), newConfigurationsByType,
- userName, "Configuration created for Upgrade");
- }
- }
-
private RequestStageContainer createRequest(UpgradeContext upgradeContext) {
ActionManager actionManager = getManagementController().getActionManager();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java
index 49ad682..72666e5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java
@@ -65,7 +65,7 @@ public class ServiceConfigDAO {
"WHERE scv.serviceName=?1 AND scv.version=?2", ServiceConfigEntity.class);
return daoUtils.selectOne(query, serviceName, version);
}
-
+
@RequiresSession
public List<ServiceConfigEntity> findByService(Long clusterId, String serviceName) {
TypedQuery<ServiceConfigEntity> query = entityManagerProvider.get().
@@ -145,29 +145,31 @@ public class ServiceConfigDAO {
}
/**
- * Get all service configurations for the specified cluster and stack. This
- * will return different versions of the same configuration (HDFS v1 and v2)
- * if they exist.
+ * Get service configurations for the specified cluster and stack. This will
+ * return different versions of the same configuration (HDFS v1 and v2) if
+ * they exist.
*
* @param clusterId
* the cluster (not {@code null}).
* @param stackId
* the stack (not {@code null}).
+ * @param service
* @return all service configurations for the cluster and stack.
*/
@RequiresSession
- public List<ServiceConfigEntity> getAllServiceConfigsForClusterAndStack(Long clusterId,
- StackId stackId) {
+ public List<ServiceConfigEntity> getServiceConfigsForServiceAndStack(Long clusterId,
+ StackId stackId, String serviceName) {
StackEntity stackEntity = stackDAO.find(stackId.getStackName(),
stackId.getStackVersion());
TypedQuery<ServiceConfigEntity> query = entityManagerProvider.get().createNamedQuery(
- "ServiceConfigEntity.findAllServiceConfigsByStack",
+ "ServiceConfigEntity.findServiceConfigsByStack",
ServiceConfigEntity.class);
query.setParameter("clusterId", clusterId);
query.setParameter("stack", stackEntity);
+ query.setParameter("serviceName", serviceName);
return daoUtils.selectList(query);
}
@@ -266,7 +268,7 @@ public class ServiceConfigDAO {
@Transactional
public void removeHostFromServiceConfigs(final Long hostId) {
- List<ServiceConfigEntity> allServiceConfigs = this.findAll();
+ List<ServiceConfigEntity> allServiceConfigs = findAll();
for (ServiceConfigEntity serviceConfigEntity : allServiceConfigs) {
List<Long> hostIds = serviceConfigEntity.getHostIds();
if (hostIds != null && hostIds.contains(hostId)) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java
index 1385990..c0c7792 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java
@@ -25,6 +25,7 @@ import javax.persistence.TypedQuery;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.orm.RequiresSession;
import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.state.StackId;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -94,6 +95,19 @@ public class StackDAO {
}
/**
+ * Gets the stack that matches the specified stack ID by name and version.
+ *
+ * @param stackId
+ * the stack ID to find (not {@code null}).
+ * @return the stack matching the specified name and version or {@code null}
+ * if none.
+ */
+ @RequiresSession
+ public StackEntity find(StackId stackId) {
+ return find(stackId.getStackName(), stackId.getStackVersion());
+ }
+
+ /**
* Persists a new stack instance.
*
* @param stack
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java
index a7ee0f6..b1409ed 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java
@@ -46,12 +46,24 @@ import javax.persistence.TableGenerator;
, initialValue = 1
)
@NamedQueries({
- @NamedQuery(name = "ServiceConfigEntity.findAll", query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId=:clusterId ORDER BY serviceConfig.version DESC"),
- @NamedQuery(name = "ServiceConfigEntity.findNextServiceConfigVersion", query = "SELECT COALESCE(MAX(serviceConfig.version), 0) + 1 AS nextVersion FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.serviceName=:serviceName AND serviceConfig.clusterId=:clusterId"),
- @NamedQuery(name = "ServiceConfigEntity.findAllServiceConfigsByStack", query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId=:clusterId AND serviceConfig.stack=:stack"),
- @NamedQuery(name = "ServiceConfigEntity.findLatestServiceConfigsByStack", query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId = :clusterId AND (serviceConfig.groupId = null OR serviceConfig.groupId IN (SELECT cg.groupId from ConfigGroupEntity cg)) AND serviceConfig.version = (SELECT MAX(serviceConfig2.version) FROM ServiceConfigEntity serviceConfig2 WHERE serviceConfig2.clusterId= :clusterId AND serviceConfig2.stack = :stack AND serviceConfig2.serviceName = serviceConfig.serviceName)"),
- @NamedQuery(name = "ServiceConfigEntity.findLatestServiceConfigsByService", query = "SELECT scv FROM ServiceConfigEntity scv WHERE scv.clusterId = :clusterId AND scv.serviceName = :serviceName AND (scv.groupId = null OR scv.groupId IN (SELECT cg.groupId from ConfigGroupEntity cg)) AND scv.version = (SELECT MAX(scv2.version) FROM ServiceConfigEntity scv2 WHERE (scv2.serviceName = :serviceName AND scv2.clusterId = :clusterId) AND (scv2.groupId = scv.groupId OR (scv2.groupId IS NULL AND scv.groupId IS NULL)))"),
- @NamedQuery(name = "ServiceConfigEntity.findLatestServiceConfigsByCluster", query = "SELECT scv FROM ServiceConfigEntity scv WHERE scv.clusterId = :clusterId AND scv.serviceConfigId IN (SELECT MAX(scv1.serviceConfigId) FROM ServiceConfigEntity scv1 WHERE (scv1.clusterId = :clusterId) AND (scv1.groupId IS NULL) GROUP BY scv1.serviceName)")})
+ @NamedQuery(
+ name = "ServiceConfigEntity.findAll",
+ query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId=:clusterId ORDER BY serviceConfig.version DESC"),
+ @NamedQuery(
+ name = "ServiceConfigEntity.findNextServiceConfigVersion",
+ query = "SELECT COALESCE(MAX(serviceConfig.version), 0) + 1 AS nextVersion FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.serviceName=:serviceName AND serviceConfig.clusterId=:clusterId"),
+ @NamedQuery(
+ name = "ServiceConfigEntity.findServiceConfigsByStack",
+ query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId=:clusterId AND serviceConfig.stack=:stack AND serviceConfig.serviceName=:serviceName"),
+ @NamedQuery(
+ name = "ServiceConfigEntity.findLatestServiceConfigsByStack",
+ query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId = :clusterId AND (serviceConfig.groupId = null OR serviceConfig.groupId IN (SELECT cg.groupId from ConfigGroupEntity cg)) AND serviceConfig.version = (SELECT MAX(serviceConfig2.version) FROM ServiceConfigEntity serviceConfig2 WHERE serviceConfig2.clusterId= :clusterId AND serviceConfig2.stack = :stack AND serviceConfig2.serviceName = serviceConfig.serviceName)"),
+ @NamedQuery(
+ name = "ServiceConfigEntity.findLatestServiceConfigsByService",
+ query = "SELECT scv FROM ServiceConfigEntity scv WHERE scv.clusterId = :clusterId AND scv.serviceName = :serviceName AND (scv.groupId = null OR scv.groupId IN (SELECT cg.groupId from ConfigGroupEntity cg)) AND scv.version = (SELECT MAX(scv2.version) FROM ServiceConfigEntity scv2 WHERE (scv2.serviceName = :serviceName AND scv2.clusterId = :clusterId) AND (scv2.groupId = scv.groupId OR (scv2.groupId IS NULL AND scv.groupId IS NULL)))"),
+ @NamedQuery(
+ name = "ServiceConfigEntity.findLatestServiceConfigsByCluster",
+ query = "SELECT scv FROM ServiceConfigEntity scv WHERE scv.clusterId = :clusterId AND scv.serviceConfigId IN (SELECT MAX(scv1.serviceConfigId) FROM ServiceConfigEntity scv1 WHERE (scv1.clusterId = :clusterId) AND (scv1.groupId IS NULL) GROUP BY scv1.serviceName)") })
public class ServiceConfigEntity {
@Id
@Column(name = "service_config_id")
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java
index dc7bc10..1d0cc76 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckAction.java
@@ -46,8 +46,6 @@ public class ComponentVersionCheckAction extends FinalizeUpgradeAction {
public CommandReport execute(ConcurrentMap<String, Object> requestSharedDataContext)
throws AmbariException, InterruptedException {
- Map<String, String> commandParams = getExecutionCommand().getCommandParams();
-
String clusterName = getExecutionCommand().getClusterName();
Cluster cluster = m_clusters.getCluster(clusterName);
@@ -59,8 +57,7 @@ public class ComponentVersionCheckAction extends FinalizeUpgradeAction {
StringBuilder errSB = new StringBuilder();
if (errors.isEmpty()) {
- outSB.append("No version mismatches found for components");
- errSB.append("No errors found for components");
+ outSB.append("All service components are reporting the correct version.");
return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", outSB.toString(), errSB.toString());
} else {
String structuredOut = getErrors(outSB, errSB, errors);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
index 55ec84b..6e79e84 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
@@ -226,6 +226,7 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
Cluster cluster = upgradeContext.getCluster();
RepositoryVersionEntity downgradeFromRepositoryVersion = upgradeContext.getRepositoryVersion();
String downgradeFromVersion = downgradeFromRepositoryVersion.getVersion();
+ Set<String> servicesInUpgrade = upgradeContext.getSupportedServices();
String message;
@@ -234,7 +235,6 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
"Finalizing the downgrade from {0} for all cluster services.",
downgradeFromVersion);
} else {
- Set<String> servicesInUpgrade = upgradeContext.getSupportedServices();
message = MessageFormat.format(
"Finalizing the downgrade from {0} for the following services: {1}",
downgradeFromVersion, StringUtils.join(servicesInUpgrade, ','));
@@ -291,6 +291,22 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
}
}
+ // remove any configurations for services which crossed a stack boundary
+ for( String serviceName : servicesInUpgrade ){
+ RepositoryVersionEntity sourceRepositoryVersion = upgradeContext.getSourceRepositoryVersion(serviceName);
+ RepositoryVersionEntity targetRepositoryVersion = upgradeContext.getTargetRepositoryVersion(serviceName);
+ StackId sourceStackId = sourceRepositoryVersion.getStackId();
+ StackId targetStackId = targetRepositoryVersion.getStackId();
+ // only work with configurations when crossing stacks
+ if (!sourceStackId.equals(targetStackId)) {
+ outSB.append(
+ String.format("Removing %s configurations for %s", sourceStackId,
+ serviceName)).append(System.lineSeparator());
+
+ cluster.removeConfigurations(sourceStackId, serviceName);
+ }
+ }
+
// ensure that when downgrading, we set the desired back to the
// original value
versionEventPublisher.publish(new StackUpgradeFinishEvent(cluster));
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
index 2eec581..84ca326 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
@@ -29,8 +29,6 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.agent.CommandReport;
import org.apache.ambari.server.configuration.Configuration;
-import org.apache.ambari.server.controller.AmbariServer;
-import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@ -159,9 +157,8 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
}
}
- UpgradeResourceProvider upgradeResourceProvider = new UpgradeResourceProvider(AmbariServer.getController());
- upgradeResourceProvider.applyStackAndProcessConfigurations(upgradeContext);
- m_upgradeHelper.putComponentsToUpgradingState(upgradeContext);
+ // move repositories to the right version and create/revert configs
+ m_upgradeHelper.updateDesiredRepositoriesAndConfigs(upgradeContext);
// a downgrade must force host versions back to INSTALLED for the
// repository which failed to be upgraded.
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java
index 3f1d859..466b695 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/MasterHostResolver.java
@@ -38,6 +38,7 @@ import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.UpgradeContext;
+import org.apache.ambari.server.state.UpgradeState;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.utils.HTTPUtils;
import org.apache.ambari.server.utils.HostAndPort;
@@ -80,10 +81,10 @@ public class MasterHostResolver {
* @param upgradeContext
* the upgrade context
*/
- public MasterHostResolver(ConfigHelper configHelper, UpgradeContext upgradeContext) {
+ public MasterHostResolver(Cluster cluster, ConfigHelper configHelper, UpgradeContext upgradeContext) {
m_configHelper = configHelper;
m_upgradeContext = upgradeContext;
- m_cluster = upgradeContext.getCluster();
+ m_cluster = cluster;
}
/**
@@ -209,11 +210,20 @@ public class MasterHostResolver {
continue;
}
- if(m_upgradeContext.getDirection() == Direction.UPGRADE){
+ if (sch.getUpgradeState() == UpgradeState.FAILED) {
upgradeHosts.add(hostName);
continue;
}
+ if(m_upgradeContext.getDirection() == Direction.UPGRADE){
+ RepositoryVersionEntity targetRepositoryVersion = m_upgradeContext.getRepositoryVersion();
+ if (!StringUtils.equals(targetRepositoryVersion.getVersion(), sch.getVersion())) {
+ upgradeHosts.add(hostName);
+ }
+
+ continue;
+ }
+
// it's a downgrade ...
RepositoryVersionEntity downgradeToRepositoryVersion = m_upgradeContext.getTargetRepositoryVersion(service);
String downgradeToVersion = downgradeToRepositoryVersion.getVersion();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/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 4d943f4..f72ab4f 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
@@ -544,9 +544,8 @@ public interface Cluster {
Map<String, Object> getSessionAttributes();
/**
- * Makes the most recent configurations in the specified stack the current set
- * of configurations. This method will first ensure that the cluster's current
- * stack matches that of the configuration stack specified.
+ * Makes the most recent configurations for the specified stack current. This
+ * will only modify configurations for the given service.
* <p/>
* When completed, all other configurations for any other stack will remain,
* but will not be marked as selected.
@@ -554,18 +553,21 @@ public interface Cluster {
* @param stackId
* the stack to use when finding the latest configurations (not
* {@code null}).
+ * @param serviceName
+ * the service to modify configurations for (not {@code null}).
*/
- void applyLatestConfigurations(StackId stackId);
+ void applyLatestConfigurations(StackId stackId, String serviceName);
/**
- * Removes all cluster configurations and service configurations that belong
- * to the specified stack.
+ * Removes all configurations for the specified service and stack.
*
* @param stackId
* the stack to use when finding the configurations to remove (not
* {@code null}).
+ * @param serviceName
+ * the service to rmeove configurations for (not {@code null}).
*/
- void removeConfigurations(StackId stackId);
+ void removeConfigurations(StackId stackId, String serviceName);
/**
* Returns whether this cluster was provisioned by a Blueprint or not.
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java
index 78f10cd..475c274 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java
@@ -34,6 +34,7 @@ public interface ConfigFactory {
* Creates a new {@link Config} object using provided values.
*
* @param cluster
+ * @param stackId
* @param type
* @param tag
* @param map
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
index 96c2dd0..66c9e21 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
@@ -1029,7 +1029,8 @@ public class ConfigHelper {
String serviceVersionNote) throws AmbariException {
// create the configuration history entry
- Config baseConfig = createConfig(cluster, controller, configType, FIRST_VERSION_TAG, properties,
+ Config baseConfig = createConfig(cluster, controller, cluster.getDesiredStackVersion(),
+ configType, FIRST_VERSION_TAG, properties,
propertyAttributes);
if (baseConfig != null) {
@@ -1070,13 +1071,14 @@ public class ConfigHelper {
* Create configurations and assign them for services.
* @param cluster the cluster
* @param controller the controller
+ * @param stackId the stack to create the new properties for
* @param batchProperties the type->config map batch of properties
* @param authenticatedUserName the user that initiated the change
* @param serviceVersionNote the service version note
* @throws AmbariException
*/
public void createConfigTypes(Cluster cluster,
- AmbariManagementController controller,
+ AmbariManagementController controller, StackId stackId,
Map<String, Map<String, String>> batchProperties, String authenticatedUserName,
String serviceVersionNote) throws AmbariException {
@@ -1086,8 +1088,8 @@ public class ConfigHelper {
String type = entry.getKey();
Map<String, String> properties = entry.getValue();
- Config baseConfig = createConfig(cluster, controller, type, FIRST_VERSION_TAG, properties,
- Collections.<String, Map<String,String>>emptyMap());
+ Config baseConfig = createConfig(cluster, controller, stackId, type, FIRST_VERSION_TAG,
+ properties, Collections.<String, Map<String, String>> emptyMap());
if (null != baseConfig) {
try {
@@ -1122,6 +1124,8 @@ public class ConfigHelper {
* @param controller
* the controller which actually creates the configuration (not
* {@code null}).
+ * @param stackId
+ * the stack to create the new properties for
* @param type
* the new configuration type (not {@code null}).
* @param tag
@@ -1134,8 +1138,8 @@ public class ConfigHelper {
* @return
* @throws AmbariException
*/
- Config createConfig(Cluster cluster, AmbariManagementController controller, String type,
- String tag, Map<String, String> properties,
+ Config createConfig(Cluster cluster, AmbariManagementController controller, StackId stackId,
+ String type, String tag, Map<String, String> properties,
Map<String, Map<String, String>> propertyAttributes) throws AmbariException {
// if the configuration is not new, then create a timestamp tag
@@ -1158,24 +1162,22 @@ public class ConfigHelper {
}
}
- return controller.createConfig(cluster.getDesiredStackVersion(), cluster, type, properties, tag, propertyAttributes);
+ return controller.createConfig(cluster, stackId, type, properties, tag, propertyAttributes);
}
/**
- * Gets the default properties from the specified stack and services when a
- * cluster is first installed.
+ * Gets the default properties for the specified service. These properties
+ * represent those which would be used when a service is first installed.
*
* @param stack
* the stack to pull stack-values from (not {@code null})
- * @param cluster
- * the cluster to use when determining which services default
- * configurations to include (not {@code null}).
- * @param onStackUpgradeFilter if true skip {@code <on-stack-upgrade merge="false"/>} properties
+ * @param serviceName
+ * the service name {@code null}).
* @return a mapping of configuration type to map of key/value pairs for the
* default configurations.
* @throws AmbariException
*/
- public Map<String, Map<String, String>> getDefaultProperties(StackId stack, Cluster cluster, boolean onStackUpgradeFilter)
+ public Map<String, Map<String, String>> getDefaultProperties(StackId stack, String serviceName)
throws AmbariException {
Map<String, Map<String, String>> defaultPropertiesByType = new HashMap<>();
@@ -1189,28 +1191,26 @@ public class ConfigHelper {
if (!defaultPropertiesByType.containsKey(type)) {
defaultPropertiesByType.put(type, new HashMap<String, String>());
}
- if (!onStackUpgradeFilter || stackDefaultProperty.getPropertyStackUpgradeBehavior().isMerge()) {
+ if (stackDefaultProperty.getPropertyStackUpgradeBehavior().isMerge()) {
defaultPropertiesByType.get(type).put(stackDefaultProperty.getName(),
stackDefaultProperty.getValue());
}
}
// for every installed service, populate the default service properties
- for (String serviceName : cluster.getServices().keySet()) {
- Set<org.apache.ambari.server.state.PropertyInfo> serviceConfigurationProperties = ambariMetaInfo.getServiceProperties(
- stack.getStackName(), stack.getStackVersion(), serviceName);
+ Set<org.apache.ambari.server.state.PropertyInfo> serviceConfigurationProperties = ambariMetaInfo.getServiceProperties(
+ stack.getStackName(), stack.getStackVersion(), serviceName);
- // !!! use new stack as the basis
- for (PropertyInfo serviceDefaultProperty : serviceConfigurationProperties) {
- String type = ConfigHelper.fileNameToConfigType(serviceDefaultProperty.getFilename());
+ // !!! use new stack as the basis
+ for (PropertyInfo serviceDefaultProperty : serviceConfigurationProperties) {
+ String type = ConfigHelper.fileNameToConfigType(serviceDefaultProperty.getFilename());
- if (!defaultPropertiesByType.containsKey(type)) {
- defaultPropertiesByType.put(type, new HashMap<String, String>());
- }
- if (!onStackUpgradeFilter || serviceDefaultProperty.getPropertyStackUpgradeBehavior().isMerge()) {
- defaultPropertiesByType.get(type).put(serviceDefaultProperty.getName(),
- serviceDefaultProperty.getValue());
- }
+ if (!defaultPropertiesByType.containsKey(type)) {
+ defaultPropertiesByType.put(type, new HashMap<String, String>());
+ }
+ if (serviceDefaultProperty.getPropertyStackUpgradeBehavior().isMerge()) {
+ defaultPropertiesByType.get(type).put(serviceDefaultProperty.getName(),
+ serviceDefaultProperty.getValue());
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
index 0adf1bd..2ee1b26 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
@@ -32,8 +32,10 @@ import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.logging.LockFactory;
import org.apache.ambari.server.orm.dao.ClusterDAO;
import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
+import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
import org.apache.ambari.server.orm.entities.ClusterEntity;
+import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -99,10 +101,11 @@ public class ConfigImpl implements Config {
ConfigImpl(@Assisted Cluster cluster, @Assisted("type") String type,
@Assisted("tag") @Nullable String tag,
@Assisted Map<String, String> properties,
- @Assisted @Nullable Map<String, Map<String, String>> propertiesAttributes, ClusterDAO clusterDAO,
+ @Assisted @Nullable Map<String, Map<String, String>> propertiesAttributes,
+ ClusterDAO clusterDAO, StackDAO stackDAO,
Gson gson, AmbariEventPublisher eventPublisher, LockFactory lockFactory) {
this(cluster.getDesiredStackVersion(), cluster, type, tag, properties, propertiesAttributes,
- clusterDAO, gson, eventPublisher, lockFactory);
+ clusterDAO, stackDAO, gson, eventPublisher, lockFactory);
}
@@ -110,7 +113,8 @@ public class ConfigImpl implements Config {
ConfigImpl(@Assisted @Nullable StackId stackId, @Assisted Cluster cluster, @Assisted("type") String type,
@Assisted("tag") @Nullable String tag,
@Assisted Map<String, String> properties,
- @Assisted @Nullable Map<String, Map<String, String>> propertiesAttributes, ClusterDAO clusterDAO,
+ @Assisted @Nullable Map<String, Map<String, String>> propertiesAttributes,
+ ClusterDAO clusterDAO, StackDAO stackDAO,
Gson gson, AmbariEventPublisher eventPublisher, LockFactory lockFactory) {
propertyLock = lockFactory.newReadWriteLock(PROPERTY_LOCK_LABEL);
@@ -133,6 +137,7 @@ public class ConfigImpl implements Config {
this.tag = tag;
ClusterEntity clusterEntity = clusterDAO.findById(cluster.getClusterId());
+ StackEntity stackEntity = stackDAO.find(stackId.getStackName(), stackId.getStackVersion());
ClusterConfigEntity entity = new ClusterConfigEntity();
entity.setClusterEntity(clusterEntity);
@@ -141,7 +146,7 @@ public class ConfigImpl implements Config {
entity.setVersion(version);
entity.setTag(this.tag);
entity.setTimestamp(System.currentTimeMillis());
- entity.setStack(clusterEntity.getDesiredStack());
+ entity.setStack(stackEntity);
entity.setData(gson.toJson(properties));
if (null != propertiesAttributes) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
index 5c29fb5..f07bd37 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
@@ -186,6 +186,14 @@ public class UpgradeContext {
private final Map<String, RepositoryVersionEntity> m_targetRepositoryMap = new HashMap<>();
/**
+ * A mapping of service to source (from) repository. On an upgrade, this will
+ * be the current desired repository of every service. When downgrading, this
+ * will be the same for all components and will represent the value returned
+ * from {@link #getRepositoryVersion()}.
+ */
+ private final Map<String, RepositoryVersionEntity> m_sourceRepositoryMap = new HashMap<>();
+
+ /**
* Used by some {@link Grouping}s to generate commands. It is exposed here
* mainly for injection purposes since the XML is not created by Guice.
*/
@@ -303,8 +311,10 @@ public class UpgradeContext {
}
// populate the target repository map for all services in the upgrade
- for (String service : m_services) {
- m_targetRepositoryMap.put(service, m_repositoryVersion);
+ for (String serviceName : m_services) {
+ Service service = cluster.getService(serviceName);
+ m_sourceRepositoryMap.put(serviceName, service.getDesiredRepositoryVersion());
+ m_targetRepositoryMap.put(serviceName, m_repositoryVersion);
}
break;
@@ -315,9 +325,10 @@ public class UpgradeContext {
m_repositoryVersion = upgrade.getRepositoryVersion();
- // populate the target repository map for all services in the upgrade
+ // populate the repository maps for all services in the upgrade
for (UpgradeHistoryEntity history : upgrade.getHistory()) {
m_services.add(history.getServiceName());
+ m_sourceRepositoryMap.put(history.getServiceName(), m_repositoryVersion);
m_targetRepositoryMap.put(history.getServiceName(), history.getFromReposistoryVersion());
}
@@ -376,7 +387,7 @@ public class UpgradeContext {
m_autoSkipServiceCheckFailures = skipServiceCheckFailures;
m_autoSkipManualVerification = skipManualVerification;
- m_resolver = new MasterHostResolver(configHelper, this);
+ m_resolver = new MasterHostResolver(m_cluster, configHelper, this);
}
/**
@@ -405,7 +416,9 @@ public class UpgradeContext {
List<UpgradeHistoryEntity> allHistory = upgradeEntity.getHistory();
for (UpgradeHistoryEntity history : allHistory) {
String serviceName = history.getServiceName();
+ RepositoryVersionEntity sourceRepositoryVersion = history.getFromReposistoryVersion();
RepositoryVersionEntity targetRepositoryVersion = history.getTargetRepositoryVersion();
+ m_sourceRepositoryMap.put(serviceName, sourceRepositoryVersion);
m_targetRepositoryMap.put(serviceName, targetRepositoryVersion);
m_services.add(serviceName);
}
@@ -416,7 +429,7 @@ public class UpgradeContext {
Map<String, UpgradePack> packs = m_metaInfo.getUpgradePacks(stackId.getStackName(), stackId.getStackVersion());
m_upgradePack = packs.get(upgradePackage);
- m_resolver = new MasterHostResolver(configHelper, this);
+ m_resolver = new MasterHostResolver(m_cluster, configHelper, this);
}
/**
@@ -448,6 +461,50 @@ public class UpgradeContext {
}
/**
+ * Gets the version that components are being considered to be "coming from".
+ * <p/>
+ * With a {@link Direction#UPGRADE}, this value represent the services'
+ * desired repository. However, {@link Direction#DOWNGRADE} will use the same
+ * value for all services which is the version that the downgrade is coming
+ * from.
+ *
+ * @return the source version for the upgrade
+ */
+ public Map<String, RepositoryVersionEntity> getSourceVersions() {
+ return new HashMap<>(m_sourceRepositoryMap);
+ }
+
+ /**
+ * Gets the version that service is being considered to be "coming from".
+ * <p/>
+ * With a {@link Direction#UPGRADE}, this value represent the services'
+ * desired repository. However, {@link Direction#DOWNGRADE} will use the same
+ * value for all services which is the version that the downgrade is coming
+ * from.
+ *
+ * @return the source repository for the upgrade
+ */
+ public RepositoryVersionEntity getSourceRepositoryVersion(String serviceName) {
+ return m_sourceRepositoryMap.get(serviceName);
+ }
+
+ /**
+ * Gets the version that service is being considered to be "coming from".
+ * <p/>
+ * With a {@link Direction#UPGRADE}, this value represent the services'
+ * desired repository. However, {@link Direction#DOWNGRADE} will use the same
+ * value for all services which is the version that the downgrade is coming
+ * from.
+ *
+ * @return the source repository for the upgrade
+ * @see #getSourceRepositoryVersion(String)
+ */
+ public String getSourceVersion(String serviceName) {
+ RepositoryVersionEntity serviceSourceVersion = m_sourceRepositoryMap.get(serviceName);
+ return serviceSourceVersion.getVersion();
+ }
+
+ /**
* Gets the version being upgraded to or downgraded to for all services
* participating. This is the version that the service will be on if the
* upgrade or downgrade succeeds.
@@ -487,6 +544,7 @@ public class UpgradeContext {
* the original repository that the service was on.
*
* @return the target version for the upgrade
+ * @see #getTargetRepositoryVersion(String)
*/
public String getTargetVersion(String serviceName) {
RepositoryVersionEntity serviceTargetVersion = m_targetRepositoryMap.get(serviceName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index 0f39e60..b228988 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -33,6 +34,7 @@ import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.internal.TaskResourceProvider;
import org.apache.ambari.server.controller.predicate.AndPredicate;
import org.apache.ambari.server.controller.spi.ClusterController;
@@ -49,7 +51,10 @@ import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.events.listeners.upgrade.StackVersionListener;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
+import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
import org.apache.ambari.server.stack.HostsType;
import org.apache.ambari.server.stack.MasterHostResolver;
import org.apache.ambari.server.state.stack.UpgradePack;
@@ -177,25 +182,46 @@ public class UpgradeHelper {
* {@link StageWrapperBuilder} has finished building out all of the stages.
*/
@Inject
- private Provider<ConfigHelper> m_configHelper;
+ private Provider<ConfigHelper> m_configHelperProvider;
@Inject
- private Provider<AmbariMetaInfo> m_ambariMetaInfo;
+ private Provider<AmbariMetaInfo> m_ambariMetaInfoProvider;
@Inject
- private Provider<Clusters> clusters;
+ private Provider<Clusters> m_clusters;
@Inject
- private Provider<RepositoryVersionDAO> s_repoVersionDAO;
+ private Provider<RepositoryVersionDAO> m_repoVersionProvider;
/**
- * Get right Upgrade Pack, depends on stack, direction and upgrade type information
- * @param clusterName The name of the cluster
- * @param upgradeFromVersion Current stack version
- * @param upgradeToVersion Target stack version
- * @param direction {@code Direction} of the upgrade
- * @param upgradeType The {@code UpgradeType}
- * @param preferredUpgradePackName For unit test, need to prefer an upgrade pack since multiple matches can be found.
+ * Used to update the configuration properties.
+ */
+ @Inject
+ private Provider<AmbariManagementController> m_controllerProvider;
+
+ /**
+ * Used to get configurations by service name.
+ */
+ @Inject
+ private ServiceConfigDAO m_serviceConfigDAO;
+
+ /**
+ * Get right Upgrade Pack, depends on stack, direction and upgrade type
+ * information
+ *
+ * @param clusterName
+ * The name of the cluster
+ * @param upgradeFromVersion
+ * Current stack version
+ * @param upgradeToVersion
+ * Target stack version
+ * @param direction
+ * {@code Direction} of the upgrade
+ * @param upgradeType
+ * The {@code UpgradeType}
+ * @param preferredUpgradePackName
+ * For unit test, need to prefer an upgrade pack since multiple
+ * matches can be found.
* @return {@code UpgradeType} object
* @throws AmbariException
*/
@@ -203,7 +229,7 @@ public class UpgradeHelper {
Direction direction, UpgradeType upgradeType, String preferredUpgradePackName) throws AmbariException {
// Find upgrade packs based on current stack. This is where to upgrade from
- Cluster cluster = clusters.get().getCluster(clusterName);
+ Cluster cluster = m_clusters.get().getCluster(clusterName);
StackId stack = cluster.getCurrentStackVersion();
String repoVersion = upgradeToVersion;
@@ -213,13 +239,14 @@ public class UpgradeHelper {
repoVersion = upgradeFromVersion;
}
- RepositoryVersionEntity versionEntity = s_repoVersionDAO.get().findByStackNameAndVersion(stack.getStackName(), repoVersion);
+ RepositoryVersionEntity versionEntity = m_repoVersionProvider.get().findByStackNameAndVersion(
+ stack.getStackName(), repoVersion);
if (versionEntity == null) {
throw new AmbariException(String.format("Repository version %s was not found", repoVersion));
}
- Map<String, UpgradePack> packs = m_ambariMetaInfo.get().getUpgradePacks(stack.getStackName(), stack.getStackVersion());
+ Map<String, UpgradePack> packs = m_ambariMetaInfoProvider.get().getUpgradePacks(stack.getStackName(), stack.getStackVersion());
UpgradePack pack = null;
if (StringUtils.isNotEmpty(preferredUpgradePackName) && packs.containsKey(preferredUpgradePackName)) {
@@ -595,7 +622,7 @@ public class UpgradeHelper {
value = ctx.getDirection().getText(p == Placeholder.DIRECTION_TEXT_PROPER);
break;
default:
- value = m_configHelper.get().getPlaceholderValueFromDesiredConfigurations(
+ value = m_configHelperProvider.get().getPlaceholderValueFromDesiredConfigurations(
cluster, token);
break;
}
@@ -701,7 +728,7 @@ public class UpgradeHelper {
private void setDisplayNames(UpgradeContext context, String service, String component) {
StackId stackId = context.getCluster().getDesiredStackVersion();
try {
- ServiceInfo serviceInfo = m_ambariMetaInfo.get().getService(stackId.getStackName(),
+ ServiceInfo serviceInfo = m_ambariMetaInfoProvider.get().getService(stackId.getStackName(),
stackId.getStackVersion(), service);
context.setServiceDisplay(service, serviceInfo.getDisplayName());
@@ -714,6 +741,32 @@ public class UpgradeHelper {
}
/**
+ * Updates the various repositories and configurations for services
+ * participating in the upgrade or downgrade. The following actions are
+ * performed in order:
+ * <ul>
+ * <li>The desired repository for every service and component is changed<
+ * <li>The {@link UpgradeState} of every component host is moved to either
+ * {@link UpgradeState#IN_PROGRESS} or {@link UpgradeState#NONE}.
+ * <li>In the case of an upgrade, new configurations and service
+ * configurations are created if necessary. In the case of a downgrade, any
+ * configurations created by the upgrade are reverted.
+ * </ul>
+ *
+ * @param upgradeContext
+ * the upgrade context holding all relevent upgrade information (not
+ * {@code null}).
+ * @throws AmbariException
+ */
+ @Transactional
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
+ public void updateDesiredRepositoriesAndConfigs(UpgradeContext upgradeContext)
+ throws AmbariException {
+ setDesiredRepositories(upgradeContext);
+ processConfigurationsIfRequired(upgradeContext);
+ }
+
+ /**
* Transitions all affected components to {@link UpgradeState#IN_PROGRESS}.
* Transition is performed only for components that advertise their version.
* Additionally sets the service component desired version to the specified
@@ -726,10 +779,8 @@ public class UpgradeHelper {
* @param upgradeContext
* the upgrade context (not {@code null}).
*/
- @Transactional
@Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
- public void putComponentsToUpgradingState(UpgradeContext upgradeContext) throws AmbariException {
-
+ private void setDesiredRepositories(UpgradeContext upgradeContext) throws AmbariException {
Cluster cluster = upgradeContext.getCluster();
Set<String> services = upgradeContext.getSupportedServices();
@@ -743,7 +794,7 @@ public class UpgradeHelper {
for (ServiceComponent serviceComponent : components) {
boolean versionAdvertised = false;
try {
- ComponentInfo ci = m_ambariMetaInfo.get().getComponent(targetStack.getStackName(),
+ ComponentInfo ci = m_ambariMetaInfoProvider.get().getComponent(targetStack.getStackName(),
targetStack.getStackVersion(), serviceComponent.getServiceName(),
serviceComponent.getName());
@@ -777,4 +828,199 @@ public class UpgradeHelper {
}
}
}
+
+ /**
+ * Handles the creation or resetting of configurations based on whether an
+ * upgrade or downgrade is occurring. This method will not do anything when
+ * the service is not crossing major stack versions, since, by definition, no
+ * new configurations are automatically created when upgrading with the same
+ * stack (ie HDP 2.2.0.0 -> HDP 2.2.1.0).
+ * <p/>
+ * When upgrading or downgrade between stacks (HDP 2.2.0.0 -> HDP 2.3.0.0)
+ * then this will perform the following:
+ * <ul>
+ * <li>Upgrade: Create new configurations that are a merge between the source
+ * stack and the target stack. If a value has changed between stacks, then the
+ * target stack value should be taken unless the cluster's value differs from
+ * the old stack. This can occur if a property has been customized after
+ * installation.</li>
+ * <li>Downgrade: Reset the latest configurations from the service's original
+ * stack. The new configurations that were created on upgrade must be left
+ * intact until all components have been reverted, otherwise heartbeats will
+ * fail due to missing configurations.</li>
+ * </ul>
+ *
+ * @param upgradeContext
+ * the upgrade context (not {@code null}).
+ * @throws AmbariException
+ */
+ private void processConfigurationsIfRequired(UpgradeContext upgradeContext)
+ throws AmbariException {
+
+ AmbariManagementController controller = m_controllerProvider.get();
+
+ Cluster cluster = upgradeContext.getCluster();
+ Direction direction = upgradeContext.getDirection();
+ String userName = controller.getAuthName();
+ Set<String> servicesInUpgrade = upgradeContext.getSupportedServices();
+
+ // merge or revert configurations for any service that needs it
+ for( String serviceName : servicesInUpgrade ){
+ RepositoryVersionEntity sourceRepositoryVersion = upgradeContext.getSourceRepositoryVersion(serviceName);
+ RepositoryVersionEntity targetRepositoryVersion = upgradeContext.getTargetRepositoryVersion(serviceName);
+ StackId sourceStackId = sourceRepositoryVersion.getStackId();
+ StackId targetStackId = targetRepositoryVersion.getStackId();
+
+ // only work with configurations when crossing stacks
+ if (sourceStackId.equals(targetStackId)) {
+ RepositoryVersionEntity associatedRepositoryVersion = upgradeContext.getRepositoryVersion();
+ LOG.info(
+ "The {} {} {} will not change stack configurations for {} since the source and target are both {}",
+ direction.getText(false), direction.getPreposition(),
+ associatedRepositoryVersion.getVersion(), serviceName, targetStackId);
+
+ continue;
+ }
+
+ ConfigHelper configHelper = m_configHelperProvider.get();
+
+ // downgrade is easy - just remove the new and make the old current
+ if (direction == Direction.DOWNGRADE) {
+ cluster.applyLatestConfigurations(targetStackId, serviceName);
+ return;
+ }
+
+ // upgrade is a bit harder - we have to merge new stack configurations in
+
+ // populate a map of default configurations for the service on the old
+ // stack (this is used when determining if a property has been
+ // customized and should be overriden with the new stack value)
+ Map<String, Map<String, String>> oldServiceDefaultConfigsByType = configHelper.getDefaultProperties(
+ sourceStackId, serviceName);
+
+ // populate a map with default configurations from the new stack
+ Map<String, Map<String, String>> newServiceDefaultConfigsByType = configHelper.getDefaultProperties(
+ targetStackId, serviceName);
+
+ // find the current, existing configurations for the service
+ List<Config> existingServiceConfigs = new ArrayList<>();
+ List<ServiceConfigEntity> latestServiceConfigs = m_serviceConfigDAO.getLastServiceConfigsForService(
+ cluster.getClusterId(), serviceName);
+
+ for (ServiceConfigEntity serviceConfig : latestServiceConfigs) {
+ List<ClusterConfigEntity> existingConfigurations = serviceConfig.getClusterConfigEntities();
+ for (ClusterConfigEntity currentServiceConfig : existingConfigurations) {
+ String configurationType = currentServiceConfig.getType();
+ Config currentClusterConfigForService = cluster.getDesiredConfigByType(configurationType);
+ existingServiceConfigs.add(currentClusterConfigForService);
+ }
+ }
+
+ // now that we have found, old, new, and existing confgs, overlay the
+ // existing on top of the new
+ for (Config existingServiceConfig : existingServiceConfigs) {
+ String configurationType = existingServiceConfig.getType();
+
+ // get current stack default configurations on install
+ Map<String, String> oldServiceDefaultConfigs = oldServiceDefaultConfigsByType.get(
+ configurationType);
+
+ // NPE sanity for current stack defaults
+ if (null == oldServiceDefaultConfigs) {
+ oldServiceDefaultConfigs = Collections.emptyMap();
+ }
+
+ // get the existing configurations
+ Map<String, String> existingConfigurations = existingServiceConfig.getProperties();
+
+ // get the new configurations
+ Map<String, String> newDefaultConfigurations = newServiceDefaultConfigsByType.get(
+ configurationType);
+
+ // if the new stack configurations don't have the type, then simply add
+ // all of the existing in
+ if (null == newDefaultConfigurations) {
+ newServiceDefaultConfigsByType.put(configurationType, existingConfigurations);
+ continue;
+ } else {
+ // Remove any configs in the new stack whose value is NULL, unless
+ // they currently exist and the value is not NULL.
+ Iterator<Map.Entry<String, String>> iter = newDefaultConfigurations.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry<String, String> entry = iter.next();
+ if (entry.getValue() == null) {
+ iter.remove();
+ }
+ }
+ }
+
+ // process every existing configuration property for this configuration
+ // type
+ for (Map.Entry<String, String> existingConfigurationEntry : existingConfigurations.entrySet()) {
+ String existingConfigurationKey = existingConfigurationEntry.getKey();
+ String existingConfigurationValue = existingConfigurationEntry.getValue();
+
+ // if there is already an entry, we now have to try to determine if
+ // the value was customized after stack installation
+ if (newDefaultConfigurations.containsKey(existingConfigurationKey)) {
+ String newDefaultConfigurationValue = newDefaultConfigurations.get(
+ existingConfigurationKey);
+
+ if (!StringUtils.equals(existingConfigurationValue, newDefaultConfigurationValue)) {
+ // the new default is different from the existing cluster value;
+ // only override the default value if the existing value differs
+ // from the original stack
+ String oldDefaultValue = oldServiceDefaultConfigs.get(existingConfigurationKey);
+
+ if (!StringUtils.equals(existingConfigurationValue, oldDefaultValue)) {
+ // at this point, we've determined that there is a
+ // difference
+ // between default values between stacks, but the value was
+ // also customized, so keep the customized value
+ newDefaultConfigurations.put(existingConfigurationKey, existingConfigurationValue);
+ }
+ }
+ } else {
+ // there is no entry in the map, so add the existing key/value
+ // pair
+ newDefaultConfigurations.put(existingConfigurationKey, existingConfigurationValue);
+ }
+ }
+
+ /*
+ for every new configuration which does not exist in the existing
+ configurations, see if it was present in the current stack
+
+ stack 2.x has foo-site/property (on-ambari-upgrade is false)
+ stack 2.y has foo-site/property
+ the current cluster (on 2.x) does not have it
+
+ In this case, we should NOT add it back as clearly stack advisor has removed it
+ */
+ Iterator<Map.Entry<String, String>> newDefaultConfigurationsIterator = newDefaultConfigurations.entrySet().iterator();
+ while (newDefaultConfigurationsIterator.hasNext()) {
+ Map.Entry<String, String> newConfigurationEntry = newDefaultConfigurationsIterator.next();
+ String newConfigurationPropertyName = newConfigurationEntry.getKey();
+ if (oldServiceDefaultConfigs.containsKey(newConfigurationPropertyName)
+ && !existingConfigurations.containsKey(newConfigurationPropertyName)) {
+ LOG.info(
+ "The property {}/{} exists in both {} and {} but is not part of the current set of configurations and will therefore not be included in the configuration merge",
+ configurationType, newConfigurationPropertyName, sourceStackId, targetStackId);
+
+ // remove the property so it doesn't get merged in
+ newDefaultConfigurationsIterator.remove();
+ }
+ }
+ }
+
+ if (null != newServiceDefaultConfigsByType) {
+ Set<String> configTypes = newServiceDefaultConfigsByType.keySet();
+ LOG.info("The upgrade will create the following configurations for stack {}: {}",
+ targetStackId, StringUtils.join(configTypes, ','));
+
+ configHelper.createConfigTypes(cluster, controller, targetStackId,
+ newServiceDefaultConfigsByType, userName, "Configuration created for Upgrade");
+ }
+ }
+ }
}
[20/50] [abbrv] ambari git commit: AMBARI-21022 - Upgrades Should Be
Associated With Repositories Instead of String Versions (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
index a68a2e1..db58d27 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
@@ -17,31 +17,65 @@
*/
package org.apache.ambari.server.state;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.VERSION;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_CLUSTER_NAME;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_DIRECTION;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_FAIL_ON_CHECK_WARNINGS;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_HOST_ORDERED_HOSTS;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_PACK;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_SKIP_FAILURES;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_SKIP_MANUAL_VERIFICATION;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_SKIP_SC_FAILURES;
+import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_TYPE;
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.Set;
import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.controller.internal.AbstractControllerResourceProvider;
+import org.apache.ambari.server.controller.internal.PreUpgradeCheckResourceProvider;
+import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
+import org.apache.ambari.server.controller.spi.NoSuchResourceException;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.SystemException;
+import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity;
import org.apache.ambari.server.stack.MasterHostResolver;
import org.apache.ambari.server.stageplanner.RoleGraphFactory;
+import org.apache.ambari.server.state.repository.VersionDefinitionXml;
+import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.Grouping;
+import org.apache.ambari.server.state.stack.upgrade.HostOrderGrouping;
+import org.apache.ambari.server.state.stack.upgrade.HostOrderItem;
+import org.apache.ambari.server.state.stack.upgrade.HostOrderItem.HostOrderActionType;
import org.apache.ambari.server.state.stack.upgrade.UpgradeScope;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
import com.google.common.base.Objects;
import com.google.gson.Gson;
@@ -51,11 +85,12 @@ import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
/**
- * Used to hold various helper objects required to process an upgrade pack.
+ * The {@link UpgradeContext} is used to hold all information pertaining to an
+ * upgrade. It is initialized directly from an existing {@link UpgradeEntity} or
+ * from a request to create an upgrade/downgrade.
*/
public class UpgradeContext {
- public static final String COMMAND_PARAM_VERSION = VERSION;
public static final String COMMAND_PARAM_CLUSTER_NAME = "clusterName";
public static final String COMMAND_PARAM_DIRECTION = "upgrade_direction";
public static final String COMMAND_PARAM_UPGRADE_PACK = "upgrade_pack";
@@ -64,21 +99,6 @@ public class UpgradeContext {
public static final String COMMAND_PARAM_UPGRADE_TYPE = "upgrade_type";
public static final String COMMAND_PARAM_TASKS = "tasks";
public static final String COMMAND_PARAM_STRUCT_OUT = "structured_out";
- public static final String COMMAND_DOWNGRADE_FROM_VERSION = "downgrade_from_version";
-
- /**
- * The original "current" stack of the cluster before the upgrade started.
- * This is the same regardless of whether the current direction is
- * {@link Direction#UPGRADE} or {@link Direction#DOWNGRADE}.
- */
- public static final String COMMAND_PARAM_ORIGINAL_STACK = "original_stack";
-
- /**
- * The target upgrade stack before the upgrade started. This is the same
- * regardless of whether the current direction is {@link Direction#UPGRADE} or
- * {@link Direction#DOWNGRADE}.
- */
- public static final String COMMAND_PARAM_TARGET_STACK = "target_stack";
/**
* The cluster that the upgrade is for.
@@ -106,50 +126,37 @@ public class UpgradeContext {
private UpgradePack m_upgradePack;
/**
- * The version being upgrade to or downgraded to.
- */
- private final String m_version;
-
- /**
- * The original "current" stack of the cluster before the upgrade started.
- * This is the same regardless of whether the current direction is
- * {@link Direction#UPGRADE} or {@link Direction#DOWNGRADE}.
+ * Upgrades will always have a single version being upgraded to and downgrades
+ * will have a single version being downgraded from. This repository
+ * represents that version.
+ * <p/>
+ * When the direction is {@link Direction#UPGRADE}, this represents the target
+ * repository. <br/>
+ * When the direction is {@link Direction#DOWNGRADE}, this represents the
+ * repository being downgraded from.
*/
- private StackId m_originalStackId;
+ private final RepositoryVersionEntity m_repositoryVersion;
/**
- * The stack currently used to start/restart services during an upgrade.This is the same
- * During a {@link UpgradeType#ROLLING} upgrade, this is always the {@link this.m_targetStackId},
- * During a {@link UpgradeType#NON_ROLLING} upgrade, this is initially the {@link this.m_sourceStackId} while
- * stopping services, and then changes to the {@link this.m_targetStackId} when starting services.
+ * Resolves master components on hosts.
*/
- private StackId m_effectiveStackId;
+ private final MasterHostResolver m_resolver;
/**
- * The target upgrade stack before the upgrade started. This is the same
- * regardless of whether the current direction is {@link Direction#UPGRADE} or
- * {@link Direction#DOWNGRADE}.
+ * A collection of hosts in the cluster which are unhealthy and will not
+ * participate in the upgrade.
*/
- private StackId m_targetStackId;
+ private final List<ServiceComponentHost> m_unhealthy = new ArrayList<>();
/**
- * The target repository before the upgrade started. This is the same
- * regardless of whether the current direction is {@link Direction#UPGRADE} or
- * {@link Direction#DOWNGRADE}.
+ * Mapping of service name to display name.
*/
- private RepositoryVersionEntity m_targetRepositoryVersion;
+ private final Map<String, String> m_serviceNames = new HashMap<>();
/**
- * Optionally set if {@link #setDowngradeFromVersion(String)} is called.
+ * Mapping of component name to display name.
*/
- private RepositoryVersionEntity m_downgradeFromRepositoryVersion;
-
- private MasterHostResolver m_resolver;
- private AmbariMetaInfo m_metaInfo;
- private List<ServiceComponentHost> m_unhealthy = new ArrayList<>();
- private Map<String, String> m_serviceNames = new HashMap<>();
- private Map<String, String> m_componentNames = new HashMap<>();
- private String m_downgradeFromVersion = null;
+ private final Map<String, String> m_componentNames = new HashMap<>();
/**
* {@code true} if slave/client component failures should be automatically
@@ -170,9 +177,19 @@ public class UpgradeContext {
*/
private boolean m_autoSkipManualVerification = false;
- private Set<String> m_supported = new HashSet<>();
+ /**
+ * A set of services which are included in this upgrade. If this is empty,
+ * then all cluster services are included.
+ */
+ private Set<String> m_services = new HashSet<>();
- private UpgradeScope m_scope = UpgradeScope.ANY;
+ /**
+ * A mapping of service to target repository. On an upgrade, this will be the
+ * same for all services. On a downgrade, this may be different for each
+ * service depending on which repository the service was on before the failed
+ * upgrade.
+ */
+ private final Map<String, RepositoryVersionEntity> m_targetRepositoryMap = new HashMap<>();
/**
* Used by some {@link Grouping}s to generate commands. It is exposed here
@@ -189,45 +206,183 @@ public class UpgradeContext {
private RoleGraphFactory m_roleGraphFactory;
/**
- * Used to lookup the reposotory version given a stack name and version.
+ * Used for serializing the upgrade type.
*/
- final private RepositoryVersionDAO m_repoVersionDAO;
+ @Inject
+ private Gson m_gson;
/**
- * Used for serializing the upgrade type.
+ * Used for looking up information about components and services.
*/
@Inject
- private Gson m_gson;
+ private AmbariMetaInfo m_metaInfo;
/**
- * Constructor.
- *
- * @param cluster
- * the cluster that the upgrade is for
- * @param type
- * the type of upgrade, either rolling or non_rolling
- * @param direction
- * the direction for the upgrade
- * @param upgradeRequestMap
- * the original map of paramters used to create the upgrade
- *
- * @param repoVersionDAO
- * the repository version DAO.
+ * Used to suggest upgrade packs during creation of an upgrade context.
+ */
+ @Inject
+ private UpgradeHelper m_upgradeHelper;
+
+ /**
+ * Used to lookup the repository version from an ID.
+ */
+ @Inject
+ private RepositoryVersionDAO m_repoVersionDAO;
+
+ /**
+ * Used to lookup a prior upgrade by ID.
*/
+ @Inject
+ private UpgradeDAO m_upgradeDAO;
+
@AssistedInject
- public UpgradeContext(@Assisted Cluster cluster, @Assisted UpgradeType type,
- @Assisted Direction direction, @Assisted String version,
- @Assisted Map<String, Object> upgradeRequestMap,
- RepositoryVersionDAO repoVersionDAO) {
+ public UpgradeContext(@Assisted Cluster cluster,
+ @Assisted Map<String, Object> upgradeRequestMap, Gson gson, UpgradeHelper upgradeHelper,
+ UpgradeDAO upgradeDAO, RepositoryVersionDAO repoVersionDAO, ConfigHelper configHelper)
+ throws AmbariException {
+ // injected constructor dependencies
+ m_gson = gson;
+ m_upgradeHelper = upgradeHelper;
+ m_upgradeDAO = upgradeDAO;
m_repoVersionDAO = repoVersionDAO;
+
m_cluster = cluster;
- m_type = type;
- m_direction = direction;
- m_version = version;
m_upgradeRequestMap = upgradeRequestMap;
- // sets the original/target stacks - requires direction and cluster
- setSourceAndTargetVersions();
+ // determine direction
+ String directionProperty = (String) m_upgradeRequestMap.get(UPGRADE_DIRECTION);
+ if (StringUtils.isEmpty(directionProperty)) {
+ throw new AmbariException(String.format("%s is required", UPGRADE_DIRECTION));
+ }
+
+ m_direction = Direction.valueOf(directionProperty);
+
+ // determine upgrade type (default is ROLLING)
+ String upgradeTypeProperty = (String) m_upgradeRequestMap.get(UPGRADE_TYPE);
+ if (StringUtils.isNotBlank(upgradeTypeProperty)) {
+ try {
+ m_type = UpgradeType.valueOf(m_upgradeRequestMap.get(UPGRADE_TYPE).toString());
+ } catch (Exception e) {
+ throw new AmbariException(String.format("Property %s has an incorrect value of %s.",
+ UPGRADE_TYPE, upgradeTypeProperty));
+ }
+ } else {
+ // default type
+ m_type= UpgradeType.ROLLING;
+ }
+
+ // depending on the direction, we must either have a target repository or an upgrade we are downgrading from
+ switch(m_direction){
+ case UPGRADE:{
+ String repositoryVersionId = (String) m_upgradeRequestMap.get(UPGRADE_REPO_VERSION_ID);
+ if (null == repositoryVersionId) {
+ throw new AmbariException(
+ String.format("The property %s is required when the upgrade direction is %s",
+ UPGRADE_REPO_VERSION_ID, m_direction));
+ }
+
+ // depending on the repository, add services
+ m_repositoryVersion = m_repoVersionDAO.findByPK(Long.valueOf(repositoryVersionId));
+ if (m_repositoryVersion.getType() == RepositoryType.STANDARD) {
+ m_services.addAll(cluster.getServices().keySet());
+ } else {
+ try {
+ VersionDefinitionXml vdf = m_repositoryVersion.getRepositoryXml();
+ m_services.addAll(vdf.getAvailableServiceNames());
+
+ // if this is every true, then just stop the upgrade attempt and
+ // throw an exception
+ if (m_services.isEmpty()) {
+ String message = String.format(
+ "When using a VDF of type %s, the available services must be defined in the VDF",
+ m_repositoryVersion.getType());
+
+ throw new AmbariException(message);
+ }
+
+ } catch (Exception e) {
+ String msg = String.format(
+ "Could not parse version definition for %s. Upgrade will not proceed.",
+ m_repositoryVersion.getVersion());
+
+ throw new AmbariException(msg);
+ }
+ }
+
+ // populate the target repository map for all services in the upgrade
+ for (String service : m_services) {
+ m_targetRepositoryMap.put(service, m_repositoryVersion);
+ }
+
+ break;
+ }
+ case DOWNGRADE:{
+ UpgradeEntity upgrade = m_upgradeDAO.findLastUpgradeForCluster(
+ cluster.getClusterId(), Direction.UPGRADE);
+
+ m_repositoryVersion = upgrade.getRepositoryVersion();
+
+ // populate the target repository map for all services in the upgrade
+ for (UpgradeHistoryEntity history : upgrade.getHistory()) {
+ m_services.add(history.getServiceName());
+ m_targetRepositoryMap.put(history.getServiceName(), history.getFromReposistoryVersion());
+ }
+
+ break;
+ }
+ default:
+ m_repositoryVersion = null;
+ break;
+ }
+
+
+ /**
+ * For the unit tests tests, there are multiple upgrade packs for the same
+ * type, so allow picking one of them. In prod, this is empty.
+ */
+ String preferredUpgradePackName = (String) m_upgradeRequestMap.get(UPGRADE_PACK);
+
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES, comment="This is wrong")
+ String upgradePackFromVersion = cluster.getService(
+ m_services.iterator().next()).getDesiredRepositoryVersion().getVersion();
+
+ m_upgradePack = m_upgradeHelper.suggestUpgradePack(m_cluster.getClusterName(),
+ upgradePackFromVersion, m_repositoryVersion.getVersion(), m_direction, m_type,
+ preferredUpgradePackName);
+
+ // the validator will throw an exception if the upgrade request is not valid
+ UpgradeRequestValidator upgradeRequestValidator = buildValidator(m_type);
+ upgradeRequestValidator.validate(this);
+
+ // optionally skip failures - this can be supplied on either the request or
+ // in the upgrade pack explicitely, however the request will always override
+ // the upgrade pack if explicitely specified
+ boolean skipComponentFailures = m_upgradePack.isComponentFailureAutoSkipped();
+ boolean skipServiceCheckFailures = m_upgradePack.isServiceCheckFailureAutoSkipped();
+
+ // only override the upgrade pack if set on the request
+ if (m_upgradeRequestMap.containsKey(UPGRADE_SKIP_FAILURES)) {
+ skipComponentFailures = Boolean.parseBoolean(
+ (String) m_upgradeRequestMap.get(UPGRADE_SKIP_FAILURES));
+ }
+
+ // only override the upgrade pack if set on the request
+ if (m_upgradeRequestMap.containsKey(UPGRADE_SKIP_SC_FAILURES)) {
+ skipServiceCheckFailures = Boolean.parseBoolean(
+ (String) m_upgradeRequestMap.get(UPGRADE_SKIP_SC_FAILURES));
+ }
+
+ boolean skipManualVerification = false;
+ if (m_upgradeRequestMap.containsKey(UPGRADE_SKIP_MANUAL_VERIFICATION)) {
+ skipManualVerification = Boolean.parseBoolean(
+ (String) m_upgradeRequestMap.get(UPGRADE_SKIP_MANUAL_VERIFICATION));
+ }
+
+ m_autoSkipComponentFailures = skipComponentFailures;
+ m_autoSkipServiceCheckFailures = skipServiceCheckFailures;
+ m_autoSkipManualVerification = skipManualVerification;
+
+ m_resolver = new MasterHostResolver(configHelper, this);
}
/**
@@ -242,82 +397,39 @@ public class UpgradeContext {
*/
@AssistedInject
public UpgradeContext(@Assisted Cluster cluster, @Assisted UpgradeEntity upgradeEntity,
- RepositoryVersionDAO repoVersionDAO) {
- m_repoVersionDAO = repoVersionDAO;
+ AmbariMetaInfo ambariMetaInfo, ConfigHelper configHelper) {
+ m_metaInfo = ambariMetaInfo;
m_cluster = cluster;
m_type = upgradeEntity.getUpgradeType();
m_direction = upgradeEntity.getDirection();
-
- m_version = upgradeEntity.getToVersion();
-
- // sets the original/target stacks - requires direction and cluster
- setSourceAndTargetVersions();
-
- if (m_direction == Direction.DOWNGRADE) {
- setDowngradeFromVersion(upgradeEntity.getFromVersion());
- }
-
- // since this constructor is initialized from an entity, then this map is
- // not present
- m_upgradeRequestMap = Collections.emptyMap();
+ m_repositoryVersion = upgradeEntity.getRepositoryVersion();
m_autoSkipComponentFailures = upgradeEntity.isComponentFailureAutoSkipped();
m_autoSkipServiceCheckFailures = upgradeEntity.isServiceCheckFailureAutoSkipped();
- }
- /**
- * Sets the source and target versions. This will also set the effective stack
- * ID based on the already-set {@link UpgradeType} and {@link Direction}.
- *
- * @see #getEffectiveStackId()
- */
- private void setSourceAndTargetVersions() {
- StackId sourceStackId = null;
-
- // taret stack will not always be what it is today - tagging as experimental
- @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
- StackId targetStackId = null;
-
- switch (m_direction) {
- case UPGRADE:
- sourceStackId = m_cluster.getCurrentStackVersion();
-
- m_targetRepositoryVersion = m_repoVersionDAO.findByStackNameAndVersion(
- sourceStackId.getStackName(), m_version);
-
- // !!! TODO check the repo_version for patch-ness and restrict the
- // context to those services that require it. Consult the version
- // definition and add the service names to supportedServices
- targetStackId = m_targetRepositoryVersion.getStackId();
- break;
- case DOWNGRADE:
- sourceStackId = m_cluster.getCurrentStackVersion();
- targetStackId = m_cluster.getDesiredStackVersion();
-
- m_targetRepositoryVersion = m_repoVersionDAO.findByStackNameAndVersion(
- targetStackId.getStackName(), m_version);
- break;
+ List<UpgradeHistoryEntity> allHistory = upgradeEntity.getHistory();
+ for (UpgradeHistoryEntity history : allHistory) {
+ String serviceName = history.getServiceName();
+ RepositoryVersionEntity targetRepositoryVersion = history.getTargetRepositoryVersion();
+ m_targetRepositoryMap.put(serviceName, targetRepositoryVersion);
+ m_services.add(serviceName);
}
- m_originalStackId = sourceStackId;
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES, comment = "This is wrong")
+ String upgradePackage = upgradeEntity.getUpgradePackage();
+ StackId stackId = m_repositoryVersion.getStackId();
+ Map<String, UpgradePack> packs = m_metaInfo.getUpgradePacks(stackId.getStackName(), stackId.getStackVersion());
+ m_upgradePack = packs.get(upgradePackage);
- switch (m_type) {
- case ROLLING:
- case HOST_ORDERED:
- m_effectiveStackId = targetStackId;
- break;
- case NON_ROLLING:
- m_effectiveStackId = (m_direction.isUpgrade()) ? sourceStackId : targetStackId;
- break;
- default:
- m_effectiveStackId = targetStackId;
- break;
- }
+ m_resolver = new MasterHostResolver(configHelper, this);
- m_targetStackId = m_targetRepositoryVersion.getStackId();
+ // since this constructor is initialized from an entity, then this map is
+ // not present
+ m_upgradeRequestMap = Collections.emptyMap();
}
+
/**
* Gets the original mapping of key/value pairs from the request which created
* the upgrade.
@@ -358,10 +470,49 @@ public class UpgradeContext {
}
/**
+ * Gets the version being upgraded to or downgraded to for all services
+ * participating. This is the version that the service will be on if the
+ * upgrade or downgrade succeeds.
+ * <p/>
+ * With a {@link Direction#UPGRADE}, all services should be targetting the
+ * same repository version. However, {@link Direction#DOWNGRADE} will target
+ * the original repository that the service was on.
+ *
+ * @return the target version for the upgrade
+ */
+ public Map<String, RepositoryVersionEntity> getTargetVersions() {
+ return new HashMap<>(m_targetRepositoryMap);
+ }
+
+ /**
+ * Gets the repository being upgraded to or downgraded to for the given
+ * service. This is the version that the service will be on if the upgrade or
+ * downgrade succeeds.
+ * <p/>
+ * With a {@link Direction#UPGRADE}, all services should be targetting the
+ * same repository version. However, {@link Direction#DOWNGRADE} will target
+ * the original repository that the service was on.
+ *
+ * @return the target repository for the upgrade
+ */
+ public RepositoryVersionEntity getTargetRepositoryVersion(String serviceName) {
+ return m_targetRepositoryMap.get(serviceName);
+ }
+
+ /**
+ * Gets the version being upgraded to or downgraded to for the given service.
+ * This is the version that the service will be on if the upgrade or downgrade
+ * succeeds.
+ * <p/>
+ * With a {@link Direction#UPGRADE}, all services should be targetting the
+ * same repository version. However, {@link Direction#DOWNGRADE} will target
+ * the original repository that the service was on.
+ *
* @return the target version for the upgrade
*/
- public String getVersion() {
- return m_version;
+ public String getTargetVersion(String serviceName) {
+ RepositoryVersionEntity serviceTargetVersion = m_targetRepositoryMap.get(serviceName);
+ return serviceTargetVersion.getVersion();
}
/**
@@ -379,16 +530,6 @@ public class UpgradeContext {
}
/**
- * Sets the host resolver.
- *
- * @param resolver
- * the resolver that also references the required cluster
- */
- public void setResolver(MasterHostResolver resolver) {
- m_resolver = resolver;
- }
-
- /**
* @return the resolver
*/
public MasterHostResolver getResolver() {
@@ -403,13 +544,6 @@ public class UpgradeContext {
}
/**
- * @param metaInfo the metainfo for access to service definitions
- */
- public void setAmbariMetaInfo(AmbariMetaInfo metaInfo) {
- m_metaInfo = metaInfo;
- }
-
- /**
* @param unhealthy a list of unhealthy host components
*/
public void addUnhealthy(List<ServiceComponentHost> unhealthy) {
@@ -417,50 +551,20 @@ public class UpgradeContext {
}
/**
- * @return the originalStackId
- */
- public StackId getOriginalStackId() {
- return m_originalStackId;
- }
-
- /**
- * @param originalStackId
- * the originalStackId to set
- */
- public void setOriginalStackId(StackId originalStackId) {
- m_originalStackId = originalStackId;
- }
-
- /**
- * @return the effectiveStackId that is currently in use.
- */
- public StackId getEffectiveStackId() {
- return m_effectiveStackId;
- }
-
- /**
- * @param effectiveStackId the effectiveStackId to set
- */
- public void setEffectiveStackId(StackId effectiveStackId) {
- m_effectiveStackId = effectiveStackId;
- }
-
-
- /**
- * @return the targetStackId
- */
- public StackId getTargetStackId() {
- return m_targetStackId;
- }
-
- /**
- * Gets the target repository version for this upgrade.
+ * Gets the single repository version for the upgrade depending on the
+ * direction.
+ * <p/>
+ * If the direction is {@link Direction#UPGRADE} then this will return the
+ * target repository which every service will be on if the upgrade is
+ * finalized. <br/>
+ * If the direction is {@link Direction#DOWNGRADE} then this will return the
+ * repository from which the downgrade is coming from.
*
* @return the target repository version for this upgrade (never
* {@code null}).
*/
- public RepositoryVersionEntity getTargetRepositoryVersion() {
- return m_targetRepositoryVersion;
+ public RepositoryVersionEntity getRepositoryVersion() {
+ return m_repositoryVersion;
}
/**
@@ -505,38 +609,6 @@ public class UpgradeContext {
}
/**
- * Optionally set if doing a downgrade. Represents the non-finalized version
- * being downgraded from.
- *
- * @return version cluster is downgrading from
- */
- public String getDowngradeFromVersion() {
- return m_downgradeFromVersion;
- }
-
- /**
- * Optionally set if doing a downgrade. Represents the non-finalized version
- * being downgraded from.
- *
- * @return
- */
- public RepositoryVersionEntity getDowngradeFromRepositoryVersion() {
- return m_downgradeFromRepositoryVersion;
- }
-
- /**
- * Set the HDP stack version we are downgrading from.
- *
- * @param downgradeFromVersion
- */
- public void setDowngradeFromVersion(String downgradeFromVersion) {
- m_downgradeFromVersion = downgradeFromVersion;
-
- m_downgradeFromRepositoryVersion = m_repoVersionDAO.findByStackAndVersion(m_targetStackId,
- downgradeFromVersion);
- }
-
- /**
* Gets whether skippable components that failed are automatically skipped.
*
* @return the skipComponentFailures
@@ -546,17 +618,6 @@ public class UpgradeContext {
}
/**
- * Sets whether skippable components that failed are automatically skipped.
- *
- * @param autoSkipComponentFailures
- * {@code true} to automatically skip component failures which are
- * marked as skippable.
- */
- public void setAutoSkipComponentFailures(boolean autoSkipComponentFailures) {
- m_autoSkipComponentFailures = autoSkipComponentFailures;
- }
-
- /**
* Gets whether skippable service checks that failed are automatically
* skipped.
*
@@ -567,18 +628,6 @@ public class UpgradeContext {
}
/**
- * Sets whether skippable service checks that failed are automatically
- * skipped.
- *
- * @param autoSkipServiceCheckFailures
- * {@code true} to automatically skip service check failures which
- * are marked as being skippable.
- */
- public void setAutoSkipServiceCheckFailures(boolean autoSkipServiceCheckFailures) {
- m_autoSkipServiceCheckFailures = autoSkipServiceCheckFailures;
- }
-
- /**
* Gets whether manual verification tasks can be automatically skipped.
*
* @return the skipManualVerification
@@ -588,58 +637,43 @@ public class UpgradeContext {
}
/**
- * Sets whether manual verification checks are automatically skipped.
- *
- * @param autoSkipManualVerification
- * {@code true} to automatically skip manual verification tasks.
- */
- public void setAutoSkipManualVerification(boolean autoSkipManualVerification) {
- m_autoSkipManualVerification = autoSkipManualVerification;
- }
-
- /**
- * Sets the service names that are supported by an upgrade. This is used for
- * {@link RepositoryType#PATCH} and {@link RepositoryType#SERVICE}.
+ * Gets the services participating in the upgrade.
*
- * @param services the set of specific services
- */
- @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
- public void setSupportedServices(Set<String> services) {
- m_supported = services;
- }
-
- /**
- * @return the set of supported services, or an empty set if ALL services
- * are supported
+ * @return the set of supported services. This collection should never be
+ * empty.
*/
@Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
public Set<String> getSupportedServices() {
- return Collections.unmodifiableSet(m_supported);
+ return Collections.unmodifiableSet(m_services);
}
/**
- * Gets if a service is supported. If there are no services marked for the context,
- * then ALL services are supported
- * @param serviceName the service name to check.
+ * Gets if a service is supported.
+ *
+ * @param serviceName
+ * the service name to check.
* @return {@code true} when the service is supported
*/
@Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
public boolean isServiceSupported(String serviceName) {
- if (m_supported.isEmpty() || m_supported.contains(serviceName)) {
+ return m_services.contains(serviceName);
+ }
+
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
+ public boolean isScoped(UpgradeScope scope) {
+ if (scope == UpgradeScope.ANY) {
return true;
}
- return false;
- }
-
- @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
- public void setScope(UpgradeScope scope) {
- m_scope = scope;
- }
+ switch (m_repositoryVersion.getType()) {
+ case PATCH:
+ case SERVICE:
+ return scope == UpgradeScope.PARTIAL;
+ case STANDARD:
+ return scope == UpgradeScope.COMPLETE;
+ }
- @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
- public boolean isScoped(UpgradeScope scope) {
- return m_scope.isScoped(scope);
+ return false;
}
/**
@@ -661,15 +695,21 @@ public class UpgradeContext {
}
/**
+ * Gets the repository type to determine if this upgrade is a complete upgrade
+ * or a service/patch.
+ *
+ * @return the repository type.
+ */
+ public RepositoryType getRepositoryType() {
+ return m_repositoryVersion.getType();
+ }
+
+ /**
* Gets a map initialized with parameters required for upgrades to work. The
* following properties are already set:
* <ul>
* <li>{@link #COMMAND_PARAM_CLUSTER_NAME}
- * <li>{@link #COMMAND_PARAM_VERSION}
* <li>{@link #COMMAND_PARAM_DIRECTION}
- * <li>{@link #COMMAND_PARAM_ORIGINAL_STACK}
- * <li>{@link #COMMAND_PARAM_TARGET_STACK}
- * <li>{@link #COMMAND_DOWNGRADE_FROM_VERSION}
* <li>{@link #COMMAND_PARAM_UPGRADE_TYPE}
* <li>{@link KeyNames#REFRESH_CONFIG_TAGS_BEFORE_EXECUTION} - necessary in
* order to have the commands contain the correct configurations. Otherwise,
@@ -685,11 +725,7 @@ public class UpgradeContext {
Map<String, String> parameters = new HashMap<>();
parameters.put(COMMAND_PARAM_CLUSTER_NAME, m_cluster.getClusterName());
- parameters.put(COMMAND_PARAM_VERSION, getVersion());
parameters.put(COMMAND_PARAM_DIRECTION, getDirection().name().toLowerCase());
- parameters.put(COMMAND_PARAM_ORIGINAL_STACK, getOriginalStackId().getStackId());
- parameters.put(COMMAND_PARAM_TARGET_STACK, getTargetStackId().getStackId());
- parameters.put(COMMAND_DOWNGRADE_FROM_VERSION, getDowngradeFromVersion());
if (null != getType()) {
// use the serialized attributes of the enum to convert it to a string,
@@ -712,6 +748,328 @@ public class UpgradeContext {
return Objects.toStringHelper(this)
.add("direction", m_direction)
.add("type", m_type)
- .add("target",m_targetRepositoryVersion).toString();
+ .add("target", m_repositoryVersion).toString();
+ }
+
+ /**
+ * Builds a chain of {@link UpgradeRequestValidator}s to ensure that the
+ * incoming request to create a new upgrade is valid.
+ *
+ * @param upgradeType
+ * the type of upgrade to build the validator for.
+ * @return the validator which can check to ensure that the properties are
+ * valid.
+ */
+ private UpgradeRequestValidator buildValidator(UpgradeType upgradeType){
+ UpgradeRequestValidator validator = new BasicUpgradePropertiesValidator();
+ UpgradeRequestValidator preReqValidator = new PreReqCheckValidator();
+ validator.setNextValidator(preReqValidator);
+
+ final UpgradeRequestValidator upgradeTypeValidator;
+ switch( upgradeType ){
+ case HOST_ORDERED:
+ upgradeTypeValidator = new HostOrderedUpgradeValidator();
+ break;
+ case NON_ROLLING:
+ case ROLLING:
+ default:
+ upgradeTypeValidator = null;
+ break;
+ }
+
+ preReqValidator.setNextValidator(upgradeTypeValidator);
+ return validator;
+ }
+
+ /**
+ * The {@link UpgradeRequestValidator} contains the logic to check for correct
+ * upgrade request properties and then pass the responsibility onto the next
+ * validator in the chain.
+ */
+ private abstract class UpgradeRequestValidator {
+ /**
+ * The next validator.
+ */
+ UpgradeRequestValidator m_nextValidator;
+
+ /**
+ * Sets the next validator in the chain.
+ *
+ * @param nextValidator
+ * the next validator to run, or {@code null} for none.
+ */
+ void setNextValidator(UpgradeRequestValidator nextValidator) {
+ m_nextValidator = nextValidator;
+ }
+
+ /**
+ * Validates the upgrade request from this point in the chain.
+ *
+ * @param upgradeContext
+ * @param upgradePack
+ * @throws AmbariException
+ */
+ final void validate(UpgradeContext upgradeContext)
+ throws AmbariException {
+
+ // run this instance's check
+ check(upgradeContext, upgradeContext.getUpgradePack());
+
+ // pass along to the next
+ if( null != m_nextValidator ) {
+ m_nextValidator.validate(upgradeContext);
+ }
+ }
+
+ /**
+ * Checks to ensure that upgrade request is valid given the specific
+ * arguments.
+ *
+ * @param upgradeContext
+ * @param upgradePack
+ *
+ * @throws AmbariException
+ */
+ abstract void check(UpgradeContext upgradeContext, UpgradePack upgradePack)
+ throws AmbariException;
+ }
+
+ /**
+ * The {@link BasicUpgradePropertiesValidator} ensures that the basic required
+ * properties are present on the upgrade request.
+ */
+ private final class BasicUpgradePropertiesValidator extends UpgradeRequestValidator {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void check(UpgradeContext upgradeContext, UpgradePack upgradePack)
+ throws AmbariException {
+ Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
+
+ String clusterName = (String) requestMap.get(UPGRADE_CLUSTER_NAME);
+ String direction = (String) requestMap.get(UPGRADE_DIRECTION);
+
+ if (StringUtils.isBlank(clusterName)) {
+ throw new AmbariException(String.format("%s is required", UPGRADE_CLUSTER_NAME));
+ }
+
+ if (StringUtils.isBlank(direction)) {
+ throw new AmbariException(String.format("%s is required", UPGRADE_DIRECTION));
+ }
+
+ if (Direction.valueOf(direction) == Direction.UPGRADE) {
+ String repositoryVersionId = (String) requestMap.get(UPGRADE_REPO_VERSION_ID);
+ if (StringUtils.isBlank(repositoryVersionId)) {
+ throw new AmbariException(
+ String.format("%s is required for upgrades", UPGRADE_REPO_VERSION_ID));
+ }
+ }
+ }
+ }
+
+ /**
+ * The {@link PreReqCheckValidator} ensures that the upgrade pre-requisite
+ * checks have passed.
+ */
+ private final class PreReqCheckValidator extends UpgradeRequestValidator {
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void check(UpgradeContext upgradeContext, UpgradePack upgradePack) throws AmbariException {
+ Cluster cluster = upgradeContext.getCluster();
+ Direction direction = upgradeContext.getDirection();
+ Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
+ UpgradeType upgradeType = upgradeContext.getType();
+
+ String repositoryVersionId = (String) requestMap.get(UPGRADE_REPO_VERSION_ID);
+ boolean skipPrereqChecks = Boolean.parseBoolean((String) requestMap.get(UPGRADE_SKIP_PREREQUISITE_CHECKS));
+ boolean failOnCheckWarnings = Boolean.parseBoolean((String) requestMap.get(UPGRADE_FAIL_ON_CHECK_WARNINGS));
+ String preferredUpgradePack = requestMap.containsKey(UPGRADE_PACK) ? (String) requestMap.get(UPGRADE_PACK) : null;
+
+ // verify that there is not an upgrade or downgrade that is in progress or suspended
+ UpgradeEntity existingUpgrade = cluster.getUpgradeInProgress();
+ if( null != existingUpgrade ){
+ throw new AmbariException(
+ String.format("Unable to perform %s as another %s (request ID %s) is in progress.",
+ direction.getText(false), existingUpgrade.getDirection().getText(false),
+ existingUpgrade.getRequestId()));
+ }
+
+ // skip this check if it's a downgrade or we are instructed to skip it
+ if( direction.isDowngrade() || skipPrereqChecks ){
+ return;
+ }
+
+ RepositoryVersionEntity repositoryVersion = m_repoVersionDAO.findByPK(
+ Long.valueOf(repositoryVersionId));
+
+ // Validate pre-req checks pass
+ PreUpgradeCheckResourceProvider provider = (PreUpgradeCheckResourceProvider) AbstractControllerResourceProvider.getResourceProvider(
+ Resource.Type.PreUpgradeCheck);
+
+ Predicate preUpgradeCheckPredicate = new PredicateBuilder().property(
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID).equals(cluster.getClusterName()).and().property(
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID).equals(repositoryVersion.getVersion()).and().property(
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID).equals(upgradeType).and().property(
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_PACK_PROPERTY_ID).equals(preferredUpgradePack).toPredicate();
+
+ Request preUpgradeCheckRequest = PropertyHelper.getReadRequest();
+
+ Set<Resource> preUpgradeCheckResources;
+ try {
+ preUpgradeCheckResources = provider.getResources(
+ preUpgradeCheckRequest, preUpgradeCheckPredicate);
+ } catch (NoSuchResourceException|SystemException|UnsupportedPropertyException|NoSuchParentResourceException e) {
+ throw new AmbariException(
+ String.format("Unable to perform %s. Prerequisite checks could not be run",
+ direction.getText(false), e));
+ }
+
+ List<Resource> failedResources = new LinkedList<>();
+ if (preUpgradeCheckResources != null) {
+ for (Resource res : preUpgradeCheckResources) {
+ PrereqCheckStatus prereqCheckStatus = (PrereqCheckStatus) res.getPropertyValue(
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_STATUS_PROPERTY_ID);
+
+ if (prereqCheckStatus == PrereqCheckStatus.FAIL
+ || (failOnCheckWarnings && prereqCheckStatus == PrereqCheckStatus.WARNING)) {
+ failedResources.add(res);
+ }
+ }
+ }
+
+ if (!failedResources.isEmpty()) {
+ throw new AmbariException(
+ String.format("Unable to perform %s. Prerequisite checks failed %s",
+ direction.getText(false), m_gson.toJson(failedResources)));
+ }
+ }
+ }
+
+ /**
+ * Ensures that for {@link UpgradeType#HOST_ORDERED}, the properties supplied
+ * are valid.
+ */
+ @SuppressWarnings("unchecked")
+ private final class HostOrderedUpgradeValidator extends UpgradeRequestValidator {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ void check(UpgradeContext upgradeContext, UpgradePack upgradePack) throws AmbariException {
+ Cluster cluster = upgradeContext.getCluster();
+ Direction direction = upgradeContext.getDirection();
+ Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
+
+ String skipFailuresRequestProperty = (String) requestMap.get(UPGRADE_SKIP_FAILURES);
+ if (Boolean.parseBoolean(skipFailuresRequestProperty)) {
+ throw new AmbariException(
+ String.format("The %s property is not valid when creating a %s upgrade.",
+ UPGRADE_SKIP_FAILURES, UpgradeType.HOST_ORDERED));
+ }
+
+ String skipManualVerification = (String) requestMap.get(UPGRADE_SKIP_MANUAL_VERIFICATION);
+ if (Boolean.parseBoolean(skipManualVerification)) {
+ throw new AmbariException(
+ String.format("The %s property is not valid when creating a %s upgrade.",
+ UPGRADE_SKIP_MANUAL_VERIFICATION, UpgradeType.HOST_ORDERED));
+ }
+
+ if (!requestMap.containsKey(UPGRADE_HOST_ORDERED_HOSTS)) {
+ throw new AmbariException(
+ String.format("The %s property is required when creating a %s upgrade.",
+ UPGRADE_HOST_ORDERED_HOSTS, UpgradeType.HOST_ORDERED));
+ }
+
+ List<HostOrderItem> hostOrderItems = extractHostOrderItemsFromRequest(requestMap);
+ List<String> hostsFromRequest = new ArrayList<>(hostOrderItems.size());
+ for (HostOrderItem hostOrderItem : hostOrderItems) {
+ if (hostOrderItem.getType() == HostOrderActionType.HOST_UPGRADE) {
+ hostsFromRequest.addAll(hostOrderItem.getActionItems());
+ }
+ }
+
+ // ensure that all hosts for this cluster are accounted for
+ Collection<Host> hosts = cluster.getHosts();
+ Set<String> clusterHostNames = new HashSet<>(hosts.size());
+ for (Host host : hosts) {
+ clusterHostNames.add(host.getHostName());
+ }
+
+ Collection<String> disjunction = CollectionUtils.disjunction(hostsFromRequest,
+ clusterHostNames);
+
+ if (CollectionUtils.isNotEmpty(disjunction)) {
+ throw new AmbariException(String.format(
+ "The supplied list of hosts must match the cluster hosts in an upgrade of type %s. The following hosts are either missing or invalid: %s",
+ UpgradeType.HOST_ORDERED, StringUtils.join(disjunction, ", ")));
+ }
+
+ // verify that the upgradepack has the required grouping and set the
+ // action items on it
+ HostOrderGrouping hostOrderGrouping = null;
+ List<Grouping> groupings = upgradePack.getGroups(direction);
+ for (Grouping grouping : groupings) {
+ if (grouping instanceof HostOrderGrouping) {
+ hostOrderGrouping = (HostOrderGrouping) grouping;
+ hostOrderGrouping.setHostOrderItems(hostOrderItems);
+ }
+ }
+ }
+ }
+
+ /**
+ * Builds the list of {@link HostOrderItem}s from the upgrade request. If the
+ * upgrade request does not contain the hosts
+ *
+ * @param requestMap
+ * the map of properties from the request (not {@code null}).
+ * @return the ordered list of actions to orchestrate for the
+ * {@link UpgradeType#HOST_ORDERED} upgrade.
+ * @throws AmbariException
+ * if the request properties are not valid.
+ */
+ @SuppressWarnings("unchecked")
+ private List<HostOrderItem> extractHostOrderItemsFromRequest(Map<String, Object> requestMap)
+ throws AmbariException {
+ // ewwww
+ Set<Map<String, List<String>>> hostsOrder = (Set<Map<String, List<String>>>) requestMap.get(
+ UPGRADE_HOST_ORDERED_HOSTS);
+
+ if (CollectionUtils.isEmpty(hostsOrder)) {
+ throw new AmbariException(
+ String.format("The %s property must be specified when using a %s upgrade type.",
+ UPGRADE_HOST_ORDERED_HOSTS, UpgradeType.HOST_ORDERED));
+ }
+
+ List<HostOrderItem> hostOrderItems = new ArrayList<>();
+
+ // extract all of the hosts so that we can ensure they are all accounted for
+ Iterator<Map<String, List<String>>> iterator = hostsOrder.iterator();
+ while (iterator.hasNext()) {
+ Map<String, List<String>> grouping = iterator.next();
+ List<String> hosts = grouping.get("hosts");
+ List<String> serviceChecks = grouping.get("service_checks");
+
+ if (CollectionUtils.isEmpty(hosts) && CollectionUtils.isEmpty(serviceChecks)) {
+ throw new AmbariException(String.format(
+ "The %s property must contain at least one object with either a %s or %s key",
+ UPGRADE_HOST_ORDERED_HOSTS, "hosts", "service_checks"));
+ }
+
+ if (CollectionUtils.isNotEmpty(hosts)) {
+ hostOrderItems.add(new HostOrderItem(HostOrderActionType.HOST_UPGRADE, hosts));
+ }
+
+ if (CollectionUtils.isNotEmpty(serviceChecks)) {
+ hostOrderItems.add(new HostOrderItem(HostOrderActionType.SERVICE_CHECK, serviceChecks));
+ }
+ }
+
+ return hostOrderItems;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContextFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContextFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContextFactory.java
index 4f15ee2..eaccd53 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContextFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContextFactory.java
@@ -19,9 +19,8 @@ package org.apache.ambari.server.state;
import java.util.Map;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
/**
* The {@link UpgradeContextFactory} is used to create dependency-injected
@@ -34,22 +33,14 @@ public interface UpgradeContextFactory {
*
* @param cluster
* the cluster that the upgrade is for (not {@code null}).
- * @param type
- * the type of upgrade, either rolling or non_rolling (not
- * {@code null}).
- * @param direction
- * the direction for the upgrade
- * @param version
- * the version being upgrade-to or downgraded-from (not
- * {@code null}).
* @param upgradeRequestMap
* the original map of parameters used to create the upgrade (not
* {@code null}).
*
* @return an initialized {@link UpgradeContext}.
*/
- UpgradeContext create(Cluster cluster, UpgradeType type, Direction direction,
- String version, Map<String, Object> upgradeRequestMap);
+ UpgradeContext create(Cluster cluster, Map<String, Object> upgradeRequestMap)
+ throws AmbariException;
/**
* Creates an {@link UpgradeContext} which is injected with dependencies.
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index 3ec907f..0f39e60 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -19,9 +19,9 @@ package org.apache.ambari.server.state;
import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -263,7 +263,6 @@ public class UpgradeHelper {
public List<UpgradeGroupHolder> createSequence(UpgradePack upgradePack,
UpgradeContext context) throws AmbariException {
- context.setAmbariMetaInfo(m_ambariMetaInfo.get());
Cluster cluster = context.getCluster();
MasterHostResolver mhr = context.getResolver();
@@ -541,7 +540,6 @@ public class UpgradeHelper {
private String tokenReplace(UpgradeContext ctx, String source, String service, String component) {
Cluster cluster = ctx.getCluster();
MasterHostResolver mhr = ctx.getResolver();
- String version = ctx.getVersion();
String result = source;
@@ -578,7 +576,7 @@ public class UpgradeHelper {
break;
}
case VERSION:
- value = version;
+ value = ctx.getRepositoryVersion().getVersion();
break;
case DIRECTION_VERB:
case DIRECTION_VERB_PROPER:
@@ -732,29 +730,17 @@ public class UpgradeHelper {
@Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
public void putComponentsToUpgradingState(UpgradeContext upgradeContext) throws AmbariException {
- // determine which services/components will participate in the upgrade
Cluster cluster = upgradeContext.getCluster();
- Set<Service> services = new HashSet<>(cluster.getServices().values());
- Map<Service, Set<ServiceComponent>> targetServices = new HashMap<>();
- for (Service service : services) {
- if (upgradeContext.isServiceSupported(service.getName())) {
- Set<ServiceComponent> serviceComponents = new HashSet<>(
- service.getServiceComponents().values());
-
- targetServices.put(service, serviceComponents);
- }
- }
+ Set<String> services = upgradeContext.getSupportedServices();
- RepositoryVersionEntity targetRepositoryVersion = upgradeContext.getTargetRepositoryVersion();
- StackId targetStack = targetRepositoryVersion.getStackId();
-
- for (Map.Entry<Service, Set<ServiceComponent>> entry: targetServices.entrySet()) {
- // set service desired repo
- Service service = entry.getKey();
+ for (String serviceName : services) {
+ Service service = cluster.getService(serviceName);
+ RepositoryVersionEntity targetRepositoryVersion = upgradeContext.getTargetRepositoryVersion(serviceName);
+ StackId targetStack = targetRepositoryVersion.getStackId();
service.setDesiredRepositoryVersion(targetRepositoryVersion);
- for (ServiceComponent serviceComponent: entry.getValue()) {
-
+ Collection<ServiceComponent> components = service.getServiceComponents().values();
+ for (ServiceComponent serviceComponent : components) {
boolean versionAdvertised = false;
try {
ComponentInfo ci = m_ambariMetaInfo.get().getComponent(targetStack.getStackName(),
@@ -773,12 +759,13 @@ public class UpgradeHelper {
upgradeStateToSet = UpgradeState.NONE;
}
- for (ServiceComponentHost serviceComponentHost: serviceComponent.getServiceComponentHosts().values()) {
+ for (ServiceComponentHost serviceComponentHost : serviceComponent.getServiceComponentHosts().values()) {
if (serviceComponentHost.getUpgradeState() != upgradeStateToSet) {
serviceComponentHost.setUpgradeState(upgradeStateToSet);
}
- // !!! if we aren't version advertised, but there IS a version, set it.
+ // !!! if we aren't version advertised, but there IS a version, set
+ // it.
if (!versionAdvertised && !StringUtils.equals(StackVersionListener.UNKNOWN_VERSION,
serviceComponentHost.getVersion())) {
serviceComponentHost.setVersion(StackVersionListener.UNKNOWN_VERSION);
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java b/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java
index c43d3ba..cc9c168 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/services/RetryUpgradeActionService.java
@@ -31,9 +31,11 @@ import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -168,12 +170,17 @@ public class RetryUpgradeActionService extends AbstractScheduledService {
// May be null, and either upgrade or downgrade
UpgradeEntity currentUpgrade = cluster.getUpgradeInProgress();
if (currentUpgrade == null) {
- LOG.debug("There is no active stack upgrade in progress. Skip retrying failed tasks.");
+ LOG.debug("There is no active upgrade in progress. Skip retrying failed tasks.");
return null;
}
- LOG.debug("Found an active stack upgrade with id: {}, direction: {}, type: {}, from version: {}, to version: {}",
- currentUpgrade.getId(), currentUpgrade.getDirection(), currentUpgrade.getUpgradeType(),
- currentUpgrade.getFromVersion(), currentUpgrade.getToVersion());
+
+ Direction direction = currentUpgrade.getDirection();
+ RepositoryVersionEntity repositoryVersion = currentUpgrade.getRepositoryVersion();
+
+ LOG.debug(
+ "Found an active upgrade with id: {}, direction: {}, {} {}", currentUpgrade.getId(),
+ direction, currentUpgrade.getUpgradeType(), direction.getPreposition(),
+ repositoryVersion.getVersion());
return currentUpgrade.getRequestId();
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Direction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Direction.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Direction.java
index cb4f501..9bdfe5d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Direction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Direction.java
@@ -79,4 +79,13 @@ public enum Direction {
}
+ /**
+ * Gets the preposition based on the direction. Since the repository is
+ * singular, it will either be "to repo" or "from repo".
+ *
+ * @return "to" or "from"
+ */
+ public String getPreposition() {
+ return (this == UPGRADE) ? "to" : "from";
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java
index d19406e..5fb4c76 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java
@@ -33,6 +33,7 @@ import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.metadata.RoleCommandOrder;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.stack.HostsType;
import org.apache.ambari.server.stageplanner.RoleGraph;
import org.apache.ambari.server.stageplanner.RoleGraphFactory;
@@ -173,9 +174,14 @@ public class HostOrderGrouping extends Grouping {
// either doesn't exist or the downgrade is to the current target version.
// hostsType better not be null either, but check anyway
if (null != hostsType && !hostsType.hosts.contains(hostName)) {
+ RepositoryVersionEntity targetRepositoryVersion = upgradeContext.getTargetRepositoryVersion(
+ sch.getServiceName());
+
LOG.warn("Host {} could not be orchestrated. Either there are no components for {}/{} " +
"or the target version {} is already current.",
- hostName, sch.getServiceName(), sch.getServiceComponentName(), upgradeContext.getVersion());
+ hostName, sch.getServiceName(), sch.getServiceComponentName(),
+ targetRepositoryVersion.getVersion());
+
continue;
}
@@ -225,7 +231,7 @@ public class HostOrderGrouping extends Grouping {
// create task wrappers
List<TaskWrapper> taskWrappers = new ArrayList<>();
for (HostRoleCommand command : stageCommandsForHost) {
- StackId stackId = upgradeContext.getEffectiveStackId();
+ StackId stackId = upgradeContext.getRepositoryVersion().getStackId();
String componentName = command.getRole().name();
String serviceName = null;
@@ -328,7 +334,10 @@ public class HostOrderGrouping extends Grouping {
* @return {@code true} if the host component advertises its version
*/
private boolean isVersionAdvertised(UpgradeContext upgradeContext, ServiceComponentHost sch) {
- StackId targetStack = upgradeContext.getTargetStackId();
+ RepositoryVersionEntity targetRepositoryVersion = upgradeContext.getTargetRepositoryVersion(
+ sch.getServiceName());
+
+ StackId targetStack = targetRepositoryVersion.getStackId();
try {
ComponentInfo component = upgradeContext.getAmbariMetaInfo().getComponent(
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
index a11fd96..9cf7bbd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
@@ -312,9 +312,7 @@ public class UpgradeCatalog220 extends AbstractUpgradeCatalog {
// apply changes
upgradeDAO.merge(upgrade);
- LOG.info(String.format("Updated upgrade id %s, upgrade pack %s from version %s to %s",
- upgrade.getId(), upgrade.getUpgradePackage(), upgrade.getFromVersion(),
- upgrade.getToVersion()));
+ LOG.info(String.format("Updated upgrade id %s", upgrade.getId()));
}
// make the columns nullable now that they have defaults
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
index a2a1ea9..36a46cf 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -812,18 +812,18 @@ CREATE TABLE upgrade (
upgrade_id BIGINT NOT NULL,
cluster_id BIGINT NOT NULL,
request_id BIGINT NOT NULL,
- from_version VARCHAR(255) DEFAULT '' NOT NULL,
- to_version VARCHAR(255) DEFAULT '' NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
upgrade_package VARCHAR(255) NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
+ repo_version_id BIGINT NOT NULL,
skip_failures SMALLINT DEFAULT 0 NOT NULL,
skip_sc_failures SMALLINT DEFAULT 0 NOT NULL,
downgrade_allowed SMALLINT DEFAULT 1 NOT NULL,
suspended SMALLINT DEFAULT 0 NOT NULL,
CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
- FOREIGN KEY (request_id) REFERENCES request(request_id)
+ FOREIGN KEY (request_id) REFERENCES request(request_id),
+ FOREIGN KEY (repo_version_id) REFERENCES repo_version(repo_version_id)
);
CREATE TABLE upgrade_group (
@@ -847,17 +847,18 @@ CREATE TABLE upgrade_item (
FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
);
-CREATE TABLE servicecomponent_history(
+CREATE TABLE upgrade_history(
id BIGINT NOT NULL,
- component_id BIGINT NOT NULL,
upgrade_id BIGINT NOT NULL,
- from_stack_id BIGINT NOT NULL,
- to_stack_id BIGINT NOT NULL,
- CONSTRAINT PK_sc_history PRIMARY KEY (id),
- CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id),
- CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
- CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id),
- CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id)
+ service_name VARCHAR(255) NOT NULL,
+ component_name VARCHAR(255) NOT NULL,
+ from_repo_version_id BIGINT NOT NULL,
+ target_repo_version_id BIGINT NOT NULL,
+ CONSTRAINT PK_upgrade_hist PRIMARY KEY (id),
+ CONSTRAINT FK_upgrade_hist_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
+ CONSTRAINT FK_upgrade_hist_from_repo FOREIGN KEY (from_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT FK_upgrade_hist_target_repo FOREIGN KEY (target_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT UQ_upgrade_hist UNIQUE (upgrade_id, component_name, service_name)
);
CREATE TABLE servicecomponent_version(
@@ -1131,7 +1132,7 @@ INSERT INTO ambari_sequences (sequence_name, sequence_value)
union all
select 'servicecomponentdesiredstate_id_seq', 0 FROM SYSIBM.SYSDUMMY1
union all
- select 'servicecomponent_history_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+ select 'upgrade_history_id_seq', 0 FROM SYSIBM.SYSDUMMY1
union all
select 'blueprint_setting_id_seq', 0 FROM SYSIBM.SYSDUMMY1
union all
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 6dcbf3d..21200bf 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -830,18 +830,18 @@ CREATE TABLE upgrade (
upgrade_id BIGINT NOT NULL,
cluster_id BIGINT NOT NULL,
request_id BIGINT NOT NULL,
- from_version VARCHAR(255) DEFAULT '' NOT NULL,
- to_version VARCHAR(255) DEFAULT '' NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
upgrade_package VARCHAR(255) NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
+ repo_version_id BIGINT NOT NULL,
skip_failures TINYINT(1) NOT NULL DEFAULT 0,
skip_sc_failures TINYINT(1) NOT NULL DEFAULT 0,
downgrade_allowed TINYINT(1) NOT NULL DEFAULT 1,
suspended TINYINT(1) DEFAULT 0 NOT NULL,
CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
- FOREIGN KEY (request_id) REFERENCES request(request_id)
+ FOREIGN KEY (request_id) REFERENCES request(request_id),
+ FOREIGN KEY (repo_version_id) REFERENCES repo_version(repo_version_id)
);
CREATE TABLE upgrade_group (
@@ -865,17 +865,18 @@ CREATE TABLE upgrade_item (
FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
);
-CREATE TABLE servicecomponent_history(
+CREATE TABLE upgrade_history(
id BIGINT NOT NULL,
- component_id BIGINT NOT NULL,
upgrade_id BIGINT NOT NULL,
- from_stack_id BIGINT NOT NULL,
- to_stack_id BIGINT NOT NULL,
- CONSTRAINT PK_sc_history PRIMARY KEY (id),
- CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id),
- CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
- CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id),
- CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id)
+ service_name VARCHAR(255) NOT NULL,
+ component_name VARCHAR(255) NOT NULL,
+ from_repo_version_id BIGINT NOT NULL,
+ target_repo_version_id BIGINT NOT NULL,
+ CONSTRAINT PK_upgrade_hist PRIMARY KEY (id),
+ CONSTRAINT FK_upgrade_hist_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
+ CONSTRAINT FK_upgrade_hist_from_repo FOREIGN KEY (from_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT FK_upgrade_hist_target_repo FOREIGN KEY (target_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT UQ_upgrade_hist UNIQUE (upgrade_id, component_name, service_name)
);
CREATE TABLE servicecomponent_version(
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index 15de29c..d148781 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -809,18 +809,18 @@ CREATE TABLE upgrade (
upgrade_id NUMBER(19) NOT NULL,
cluster_id NUMBER(19) NOT NULL,
request_id NUMBER(19) NOT NULL,
- from_version VARCHAR2(255) DEFAULT '' NOT NULL,
- to_version VARCHAR2(255) DEFAULT '' NOT NULL,
direction VARCHAR2(255) DEFAULT 'UPGRADE' NOT NULL,
upgrade_package VARCHAR2(255) NOT NULL,
upgrade_type VARCHAR2(32) NOT NULL,
+ repo_version_id NUMBER(19) NOT NULL,
skip_failures NUMBER(1) DEFAULT 0 NOT NULL,
skip_sc_failures NUMBER(1) DEFAULT 0 NOT NULL,
downgrade_allowed NUMBER(1) DEFAULT 1 NOT NULL,
suspended NUMBER(1) DEFAULT 0 NOT NULL,
CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
- FOREIGN KEY (request_id) REFERENCES request(request_id)
+ FOREIGN KEY (request_id) REFERENCES request(request_id),
+ FOREIGN KEY (repo_version_id) REFERENCES repo_version(repo_version_id)
);
CREATE TABLE upgrade_group (
@@ -844,17 +844,18 @@ CREATE TABLE upgrade_item (
FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
);
-CREATE TABLE servicecomponent_history(
- id NUMBER(19) NOT NULL,
- component_id NUMBER(19) NOT NULL,
- upgrade_id NUMBER(19) NOT NULL,
- from_stack_id NUMBER(19) NOT NULL,
- to_stack_id NUMBER(19) NOT NULL,
- CONSTRAINT PK_sc_history PRIMARY KEY (id),
- CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id),
- CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
- CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id),
- CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id)
+CREATE TABLE upgrade_history(
+ id BIGINT NOT NULL,
+ upgrade_id BIGINT NOT NULL,
+ service_name VARCHAR2(255) NOT NULL,
+ component_name VARCHAR2(255) NOT NULL,
+ from_repo_version_id BIGINT NOT NULL,
+ target_repo_version_id BIGINT NOT NULL,
+ CONSTRAINT PK_upgrade_hist PRIMARY KEY (id),
+ CONSTRAINT FK_upgrade_hist_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
+ CONSTRAINT FK_upgrade_hist_from_repo FOREIGN KEY (from_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT FK_upgrade_hist_target_repo FOREIGN KEY (target_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT UQ_upgrade_hist UNIQUE (upgrade_id, component_name, service_name)
);
CREATE TABLE servicecomponent_version(
@@ -1081,7 +1082,7 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('topology_ho
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('setting_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('hostcomponentstate_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('servicecomponentdesiredstate_id_seq', 0);
-INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('servicecomponent_history_id_seq', 0);
+INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_history_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('blueprint_setting_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('ambari_operation_history_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('remote_cluster_id_seq', 0);
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index 9e2f2a7..fc40d44 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -811,18 +811,18 @@ CREATE TABLE upgrade (
upgrade_id BIGINT NOT NULL,
cluster_id BIGINT NOT NULL,
request_id BIGINT NOT NULL,
- from_version VARCHAR(255) DEFAULT '' NOT NULL,
- to_version VARCHAR(255) DEFAULT '' NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
upgrade_package VARCHAR(255) NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
+ repo_version_id BIGINT NOT NULL,
skip_failures SMALLINT DEFAULT 0 NOT NULL,
skip_sc_failures SMALLINT DEFAULT 0 NOT NULL,
downgrade_allowed SMALLINT DEFAULT 1 NOT NULL,
suspended SMALLINT DEFAULT 0 NOT NULL,
CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
- FOREIGN KEY (request_id) REFERENCES request(request_id)
+ FOREIGN KEY (request_id) REFERENCES request(request_id),
+ FOREIGN KEY (repo_version_id) REFERENCES repo_version(repo_version_id)
);
CREATE TABLE upgrade_group (
@@ -846,17 +846,18 @@ CREATE TABLE upgrade_item (
FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
);
-CREATE TABLE servicecomponent_history(
+CREATE TABLE upgrade_history(
id BIGINT NOT NULL,
- component_id BIGINT NOT NULL,
upgrade_id BIGINT NOT NULL,
- from_stack_id BIGINT NOT NULL,
- to_stack_id BIGINT NOT NULL,
- CONSTRAINT PK_sc_history PRIMARY KEY (id),
- CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id),
- CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
- CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id),
- CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id)
+ service_name VARCHAR(255) NOT NULL,
+ component_name VARCHAR(255) NOT NULL,
+ from_repo_version_id BIGINT NOT NULL,
+ target_repo_version_id BIGINT NOT NULL,
+ CONSTRAINT PK_upgrade_hist PRIMARY KEY (id),
+ CONSTRAINT FK_upgrade_hist_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
+ CONSTRAINT FK_upgrade_hist_from_repo FOREIGN KEY (from_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT FK_upgrade_hist_target_repo FOREIGN KEY (target_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT UQ_upgrade_hist UNIQUE (upgrade_id, component_name, service_name)
);
CREATE TABLE servicecomponent_version(
@@ -1082,7 +1083,7 @@ INSERT INTO ambari_sequences (sequence_name, sequence_value) VALUES
('setting_id_seq', 0),
('hostcomponentstate_id_seq', 0),
('servicecomponentdesiredstate_id_seq', 0),
- ('servicecomponent_history_id_seq', 0),
+ ('upgrade_history_id_seq', 0),
('blueprint_setting_id_seq', 0),
('ambari_operation_history_id_seq', 0),
('remote_cluster_id_seq', 0),
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
index 473e8ca..d654016 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -807,10 +807,9 @@ CREATE TABLE upgrade (
upgrade_id NUMERIC(19) NOT NULL,
cluster_id NUMERIC(19) NOT NULL,
request_id NUMERIC(19) NOT NULL,
- from_version VARCHAR(255) DEFAULT '' NOT NULL,
- to_version VARCHAR(255) DEFAULT '' NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
+ repo_version_id NUMERIC(19) NOT NULL,
upgrade_package VARCHAR(255) NOT NULL,
skip_failures BIT NOT NULL DEFAULT 0,
skip_sc_failures BIT NOT NULL DEFAULT 0,
@@ -818,7 +817,8 @@ CREATE TABLE upgrade (
suspended BIT DEFAULT 0 NOT NULL,
CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
- FOREIGN KEY (request_id) REFERENCES request(request_id)
+ FOREIGN KEY (request_id) REFERENCES request(request_id),
+ FOREIGN KEY (repo_version_id) REFERENCES repo_version(repo_version_id)
);
CREATE TABLE upgrade_group (
@@ -842,17 +842,18 @@ CREATE TABLE upgrade_item (
FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
);
-CREATE TABLE servicecomponent_history(
- id NUMERIC(19) NOT NULL,
- component_id NUMERIC(19) NOT NULL,
- upgrade_id NUMERIC(19) NOT NULL,
- from_stack_id NUMERIC(19) NOT NULL,
- to_stack_id NUMERIC(19) NOT NULL,
- CONSTRAINT PK_sc_history PRIMARY KEY (id),
- CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id),
- CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
- CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id),
- CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id)
+CREATE TABLE upgrade_history(
+ id BIGINT NOT NULL,
+ upgrade_id BIGINT NOT NULL,
+ service_name VARCHAR(255) NOT NULL,
+ component_name VARCHAR(255) NOT NULL,
+ from_repo_version_id BIGINT NOT NULL,
+ target_repo_version_id BIGINT NOT NULL,
+ CONSTRAINT PK_upgrade_hist PRIMARY KEY (id),
+ CONSTRAINT FK_upgrade_hist_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
+ CONSTRAINT FK_upgrade_hist_from_repo FOREIGN KEY (from_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT FK_upgrade_hist_target_repo FOREIGN KEY (target_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT UQ_upgrade_hist UNIQUE (upgrade_id, component_name, service_name)
);
CREATE TABLE servicecomponent_version(
@@ -1079,7 +1080,7 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('topology_ho
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('setting_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('hostcomponentstate_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('servicecomponentdesiredstate_id_seq', 0);
-INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('servicecomponent_history_id_seq', 0);
+INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_history_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('blueprint_setting_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('ambari_operation_history_id_seq', 0);
INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('remote_cluster_id_seq', 0);
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
index 72189aa..f89e720 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -829,18 +829,18 @@ CREATE TABLE upgrade (
upgrade_id BIGINT NOT NULL,
cluster_id BIGINT NOT NULL,
request_id BIGINT NOT NULL,
- from_version VARCHAR(255) DEFAULT '' NOT NULL,
- to_version VARCHAR(255) DEFAULT '' NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
upgrade_package VARCHAR(255) NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
+ repo_version_id BIGINT NOT NULL,
skip_failures BIT NOT NULL DEFAULT 0,
skip_sc_failures BIT NOT NULL DEFAULT 0,
downgrade_allowed BIT NOT NULL DEFAULT 1,
suspended BIT DEFAULT 0 NOT NULL,
CONSTRAINT PK_upgrade PRIMARY KEY CLUSTERED (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
- FOREIGN KEY (request_id) REFERENCES request(request_id)
+ FOREIGN KEY (request_id) REFERENCES request(request_id),
+ FOREIGN KEY (repo_version_id) REFERENCES repo_version(repo_version_id)
);
CREATE TABLE upgrade_group (
@@ -864,17 +864,18 @@ CREATE TABLE upgrade_item (
FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
);
-CREATE TABLE servicecomponent_history(
+CREATE TABLE upgrade_history(
id BIGINT NOT NULL,
- component_id BIGINT NOT NULL,
upgrade_id BIGINT NOT NULL,
- from_stack_id BIGINT NOT NULL,
- to_stack_id BIGINT NOT NULL,
- CONSTRAINT PK_sc_history PRIMARY KEY (id),
- CONSTRAINT FK_sc_history_component_id FOREIGN KEY (component_id) REFERENCES servicecomponentdesiredstate (id),
- CONSTRAINT FK_sc_history_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
- CONSTRAINT FK_sc_history_from_stack_id FOREIGN KEY (from_stack_id) REFERENCES stack (stack_id),
- CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id)
+ service_name VARCHAR(255) NOT NULL,
+ component_name VARCHAR(255) NOT NULL,
+ from_repo_version_id BIGINT NOT NULL,
+ target_repo_version_id BIGINT NOT NULL,
+ CONSTRAINT PK_upgrade_hist PRIMARY KEY (id),
+ CONSTRAINT FK_upgrade_hist_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id),
+ CONSTRAINT FK_upgrade_hist_from_repo FOREIGN KEY (from_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT FK_upgrade_hist_target_repo FOREIGN KEY (target_repo_version_id) REFERENCES repo_version (repo_version_id),
+ CONSTRAINT UQ_upgrade_hist UNIQUE (upgrade_id, component_name, service_name)
);
CREATE TABLE servicecomponent_version(
@@ -1106,7 +1107,7 @@ BEGIN TRANSACTION
('setting_id_seq', 0),
('hostcomponentstate_id_seq', 0),
('servicecomponentdesiredstate_id_seq', 0),
- ('servicecomponent_history_id_seq', 0),
+ ('upgrade_history_id_seq', 0),
('blueprint_setting_id_seq', 0),
('ambari_operation_history_id_seq', 0),
('remote_cluster_id_seq', 0),
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/META-INF/persistence.xml b/ambari-server/src/main/resources/META-INF/persistence.xml
index 8fd539a..e4045ef 100644
--- a/ambari-server/src/main/resources/META-INF/persistence.xml
+++ b/ambari-server/src/main/resources/META-INF/persistence.xml
@@ -64,7 +64,6 @@
<class>org.apache.ambari.server.orm.entities.ResourceTypeEntity</class>
<class>org.apache.ambari.server.orm.entities.RoleSuccessCriteriaEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity</class>
- <class>org.apache.ambari.server.orm.entities.ServiceComponentHistoryEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceComponentVersionEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceConfigEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity</class>
@@ -73,6 +72,7 @@
<class>org.apache.ambari.server.orm.entities.UpgradeEntity</class>
<class>org.apache.ambari.server.orm.entities.UpgradeGroupEntity</class>
<class>org.apache.ambari.server.orm.entities.UpgradeItemEntity</class>
+ <class>org.apache.ambari.server.orm.entities.UpgradeHistoryEntity</class>
<class>org.apache.ambari.server.orm.entities.UserEntity</class>
<class>org.apache.ambari.server.orm.entities.WidgetEntity</class>
<class>org.apache.ambari.server.orm.entities.ViewEntity</class>
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java b/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java
index b361418..4542bb3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java
@@ -52,6 +52,7 @@ import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.OsFamily;
+import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.easymock.EasyMock;
import org.easymock.EasyMockSupport;
import org.junit.After;
@@ -225,7 +226,7 @@ public class ComponentVersionAlertRunnableTest extends EasyMockSupport {
@Test
public void testUpgradeInProgress() throws Exception {
UpgradeEntity upgrade = createNiceMock(UpgradeEntity.class);
- expect(upgrade.getToVersion()).andReturn("VERSION").once();
+ expect(upgrade.getDirection()).andReturn(Direction.UPGRADE).atLeastOnce();
expect(m_cluster.getUpgradeInProgress()).andReturn(upgrade).once();
replayAll();
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UpgradeEventCreatorTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UpgradeEventCreatorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UpgradeEventCreatorTest.java
index db76d4e..a8e21f6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UpgradeEventCreatorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UpgradeEventCreatorTest.java
@@ -40,7 +40,7 @@ public class UpgradeEventCreatorTest extends AuditEventCreatorTestBase{
UpgradeEventCreator creator = new UpgradeEventCreator();
Map<String,Object> properties = new HashMap<>();
- properties.put(UpgradeResourceProvider.UPGRADE_VERSION, "1.9");
+ properties.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, "1234");
properties.put(UpgradeResourceProvider.UPGRADE_TYPE, "ROLLING");
properties.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "mycluster");
@@ -50,7 +50,7 @@ public class UpgradeEventCreatorTest extends AuditEventCreatorTestBase{
AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, result);
String actual = event.getAuditMessage();
- String expected = "User(" + userName + "), RemoteIp(1.2.3.4), Operation(Upgrade addition), RequestType(POST), url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), Repository version(1.9), Upgrade type(ROLLING), Cluster name(mycluster)";
+ String expected = "User(" + userName + "), RemoteIp(1.2.3.4), Operation(Upgrade addition), RequestType(POST), url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), Repository version ID(1234), Upgrade type(ROLLING), Cluster name(mycluster)";
Assert.assertTrue("Class mismatch", event instanceof AddUpgradeRequestAuditEvent);
Assert.assertEquals(expected, actual);
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/checks/PreviousUpgradeCompletedTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/PreviousUpgradeCompletedTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/PreviousUpgradeCompletedTest.java
index 4bfa8d4..3233e55 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/PreviousUpgradeCompletedTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/PreviousUpgradeCompletedTest.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.checks;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.state.Cluster;
@@ -49,6 +50,8 @@ public class PreviousUpgradeCompletedTest {
private PrereqCheckRequest checkRequest = new PrereqCheckRequest(clusterName);
private PreviousUpgradeCompleted puc = new PreviousUpgradeCompleted();
+ private RepositoryVersionEntity toRepsitoryVersion;
+
/**
*
*/
@@ -75,6 +78,8 @@ public class PreviousUpgradeCompletedTest {
}
};
+ toRepsitoryVersion = Mockito.mock(RepositoryVersionEntity.class);
+ Mockito.when(toRepsitoryVersion.getVersion()).thenReturn(destRepositoryVersion);
}
@Test
@@ -89,8 +94,7 @@ public class PreviousUpgradeCompletedTest {
UpgradeEntity upgradeInProgress = Mockito.mock(UpgradeEntity.class);
Mockito.when(upgradeInProgress.getDirection()).thenReturn(Direction.UPGRADE);
Mockito.when(upgradeInProgress.getClusterId()).thenReturn(1L);
- Mockito.when(upgradeInProgress.getFromVersion()).thenReturn(sourceRepositoryVersion);
- Mockito.when(upgradeInProgress.getToVersion()).thenReturn(destRepositoryVersion);
+ Mockito.when(upgradeInProgress.getRepositoryVersion()).thenReturn(toRepsitoryVersion);
Mockito.when(cluster.getUpgradeInProgress()).thenReturn(upgradeInProgress);
check = new PrerequisiteCheck(null, null);
[29/50] [abbrv] ambari git commit: AMBARI-21059. Reduce Dependency on
Cluster Desired Stack ID (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
index eda232b..8342158 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
@@ -104,6 +104,7 @@ import org.easymock.IAnswer;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -255,7 +256,8 @@ public class ViewRegistryTest {
testReadViewArchives(true, false, false);
}
- @Test
+
+ @Ignore("this will get refactored when divorced from the stack")
public void testReadViewArchives_viewAutoInstanceCreation() throws Exception {
testReadViewArchives(false, false, true);
}
@@ -1888,26 +1890,27 @@ public class ViewRegistryTest {
ViewInstanceEntity viewInstanceEntity = createNiceMock(ViewInstanceEntity.class);
Cluster cluster = createNiceMock(Cluster.class);
Service service = createNiceMock(Service.class);
+ StackId stackId = new StackId("HDP-2.0");
- Map<String, Service> serviceMap = new HashMap<>();
+ Map<String, Service> serviceMap = new HashMap<>();
for (String serviceName : serviceNames) {
serviceMap.put(serviceName, service);
+ expect(cluster.getService(serviceName)).andReturn(service);
}
- StackId stackId = new StackId("HDP-2.0");
-
expect(clusters.getClusterById(99L)).andReturn(cluster);
expect(cluster.getClusterName()).andReturn("c1").anyTimes();
expect(cluster.getCurrentStackVersion()).andReturn(stackId).anyTimes();
expect(cluster.getServices()).andReturn(serviceMap).anyTimes();
+ expect(service.getDesiredStackId()).andReturn(stackId).anyTimes();
Capture<ViewInstanceEntity> viewInstanceCapture = EasyMock.newCapture();
expect(viewInstanceDAO.merge(capture(viewInstanceCapture))).andReturn(viewInstanceEntity).anyTimes();
expect(viewInstanceDAO.findByName("MY_VIEW{1.0.0}", "AUTO-INSTANCE")).andReturn(viewInstanceEntity).anyTimes();
- replay(securityHelper, configuration, viewInstanceDAO, clusters, cluster, viewInstanceEntity);
+ replay(securityHelper, configuration, viewInstanceDAO, clusters, cluster, service, viewInstanceEntity);
ServiceInstalledEvent event = new ServiceInstalledEvent(99L, "HDP", "2.0", "HIVE");
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-web/app/controllers/wizard/step8_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js
index 7e318e0..4155269 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -1011,8 +1011,19 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
* @method createSelectedServicesData
*/
createSelectedServicesData: function () {
+
+ var isInstaller = this.get('isInstaller')
+ var selectedStack;
+ if (this.get('isInstaller')) {
+ selectedStack = App.Stack.find().findProperty('isSelected', true);
+ }
+
return this.get('selectedServices').map(function (_service) {
- return {"ServiceInfo": { "service_name": _service.get('serviceName') }};
+ if (selectedStack) {
+ return {"ServiceInfo": { "service_name": _service.get('serviceName'), "desired_repository_version": selectedStack.get('repositoryVersion') }};
+ } else {
+ return {"ServiceInfo": { "service_name": _service.get('serviceName') }};
+ }
});
},
[22/50] [abbrv] ambari git commit: AMBARI-21022 - Upgrades Should Be
Associated With Repositories Instead of String Versions (jonathanhurley)
Posted by jo...@apache.org.
AMBARI-21022 - Upgrades Should Be Associated With Repositories Instead of String Versions (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/522039eb
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/522039eb
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/522039eb
Branch: refs/heads/trunk
Commit: 522039ebd3f259c2a54db5102108209b94d5d004
Parents: 87e8bdf
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon May 15 13:32:05 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue May 16 12:45:14 2017 -0400
----------------------------------------------------------------------
.../actionmanager/ExecutionCommandWrapper.java | 32 +
.../ambari/server/agent/ExecutionCommand.java | 21 +-
.../alerts/ComponentVersionAlertRunnable.java | 6 +-
.../request/AddUpgradeRequestAuditEvent.java | 10 +-
.../eventcreator/UpgradeEventCreator.java | 2 +-
.../server/checks/PreviousUpgradeCompleted.java | 7 +-
.../AmbariCustomCommandExecutionHelper.java | 49 +-
.../AmbariManagementControllerImpl.java | 15 +-
.../AbstractControllerResourceProvider.java | 2 +-
.../internal/UpgradeResourceProvider.java | 708 +++-----------
.../dao/ServiceComponentDesiredStateDAO.java | 52 -
.../ServiceComponentDesiredStateEntity.java | 36 -
.../entities/ServiceComponentHistoryEntity.java | 181 ----
.../server/orm/entities/UpgradeEntity.java | 165 ++--
.../orm/entities/UpgradeHistoryEntity.java | 232 +++++
.../upgrades/AbstractUpgradeServerAction.java | 41 -
.../upgrades/ComponentVersionCheckAction.java | 14 +-
.../upgrades/FinalizeUpgradeAction.java | 292 +++---
.../upgrades/UpdateDesiredStackAction.java | 91 +-
.../ambari/server/stack/MasterHostResolver.java | 56 +-
.../ambari/server/state/UpgradeContext.java | 956 +++++++++++++------
.../server/state/UpgradeContextFactory.java | 15 +-
.../ambari/server/state/UpgradeHelper.java | 37 +-
.../services/RetryUpgradeActionService.java | 15 +-
.../server/state/stack/upgrade/Direction.java | 9 +
.../state/stack/upgrade/HostOrderGrouping.java | 15 +-
.../server/upgrade/UpgradeCatalog220.java | 4 +-
.../main/resources/Ambari-DDL-Derby-CREATE.sql | 27 +-
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 25 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 31 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 27 +-
.../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 31 +-
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 27 +-
.../src/main/resources/META-INF/persistence.xml | 2 +-
.../ComponentVersionAlertRunnableTest.java | 3 +-
.../creator/UpgradeEventCreatorTest.java | 4 +-
.../checks/PreviousUpgradeCompletedTest.java | 8 +-
.../StackUpgradeConfigurationMergeTest.java | 13 +-
.../internal/UpgradeResourceProviderTest.java | 73 +-
.../UpgradeSummaryResourceProviderTest.java | 14 +-
.../ambari/server/orm/dao/UpgradeDAOTest.java | 26 +-
.../ComponentVersionCheckActionTest.java | 21 +-
.../upgrades/UpgradeActionTest.java | 123 +--
.../server/state/ServiceComponentTest.java | 175 ----
.../ambari/server/state/UpgradeHelperTest.java | 446 ++++++---
.../services/RetryUpgradeActionServiceTest.java | 3 +-
.../stack/upgrade/StageWrapperBuilderTest.java | 30 +-
47 files changed, 2012 insertions(+), 2160 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
index fe6707e..f680c09 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
@@ -25,11 +25,16 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ClusterNotFoundException;
import org.apache.ambari.server.agent.AgentCommand.AgentCommandType;
import org.apache.ambari.server.agent.ExecutionCommand;
+import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -176,6 +181,33 @@ public class ExecutionCommandWrapper {
executionCommand.getConfigurationAttributes().get(type));
}
}
+
+ // set the repository version for the component this command is for -
+ // always use the current desired version
+ RepositoryVersionEntity repositoryVersion = null;
+ String serviceName = executionCommand.getServiceName();
+ if (!StringUtils.isEmpty(serviceName)) {
+ Service service = cluster.getService(serviceName);
+ if (null != service) {
+ repositoryVersion = service.getDesiredRepositoryVersion();
+ }
+
+ String componentName = executionCommand.getComponentName();
+ if (!StringUtils.isEmpty(componentName)) {
+ ServiceComponent serviceComponent = service.getServiceComponent(
+ executionCommand.getComponentName());
+
+ if (null != serviceComponent) {
+ repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
+ }
+ }
+ }
+
+ if (null != repositoryVersion) {
+ executionCommand.getCommandParams().put(KeyNames.VERSION, repositoryVersion.getVersion());
+ executionCommand.getHostLevelParams().put(KeyNames.CURRENT_VERSION, repositoryVersion.getVersion());
+ }
+
}
} catch (ClusterNotFoundException cnfe) {
// it's possible that there are commands without clusters; in such cases,
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
index 4ab50ea..d8a4b1e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
@@ -158,7 +158,7 @@ public class ExecutionCommand extends AgentCommand {
}
public Map<String, Map<String, String>> getConfigurationCredentials() {
- return this.configurationCredentials;
+ return configurationCredentials;
}
public String getCommandId() {
@@ -462,7 +462,6 @@ public class ExecutionCommand extends AgentCommand {
String GROUP_LIST = "group_list";
String USER_GROUPS = "user_groups";
String NOT_MANAGED_HDFS_PATH_LIST = "not_managed_hdfs_path_list";
- String VERSION = "version";
String REFRESH_TOPOLOGY = "refresh_topology";
String HOST_SYS_PREPPED = "host_sys_prepped";
String MAX_DURATION_OF_RETRIES = "max_duration_for_retries";
@@ -504,8 +503,24 @@ public class ExecutionCommand extends AgentCommand {
String REPO_VERSION_ID = "repository_version_id";
/**
- * Put on hostLevelParams to indicate the version that the component should be.
+ * The version of the component to send down with the command. Normally,
+ * this is simply the repository version of the component. However, during
+ * ugprades, this value may change depending on the progress of the upgrade
+ * and the type/direction.
+ */
+ @Experimental(
+ feature = ExperimentalFeature.PATCH_UPGRADES,
+ comment = "Change this to reflect the component version")
+ String VERSION = "version";
+
+ /**
+ * Put on hostLevelParams to indicate the version that the component should
+ * be.
*/
+ @Deprecated
+ @Experimental(
+ feature = ExperimentalFeature.PATCH_UPGRADES,
+ comment = "This should be replaced by a map of all service component versions")
String CURRENT_VERSION = "current_version";
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java b/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java
index ec5c85e..6bdcf0c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java
@@ -39,6 +39,7 @@ import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.commons.lang.StringUtils;
import com.google.inject.Inject;
@@ -63,7 +64,7 @@ public class ComponentVersionAlertRunnable extends AlertRunnable {
/**
* The message for the alert when there is an upgrade in progress.
*/
- private static final String UPGRADE_IN_PROGRESS_MSG = "This alert will be suspended while the upgrade to {0} is in progress.";
+ private static final String UPGRADE_IN_PROGRESS_MSG = "This alert will be suspended while the {0} is in progress.";
/**
* The unknown component error message.
@@ -95,7 +96,8 @@ public class ComponentVersionAlertRunnable extends AlertRunnable {
// if there is an upgrade in progress, then skip running this alert
UpgradeEntity upgrade = cluster.getUpgradeInProgress();
if (null != upgrade) {
- String message = MessageFormat.format(UPGRADE_IN_PROGRESS_MSG, upgrade.getToVersion());
+ Direction direction = upgrade.getDirection();
+ String message = MessageFormat.format(UPGRADE_IN_PROGRESS_MSG, direction.getText(false));
return Collections.singletonList(
buildAlert(cluster, myDefinition, AlertState.SKIPPED, message));
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/AddUpgradeRequestAuditEvent.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/AddUpgradeRequestAuditEvent.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/AddUpgradeRequestAuditEvent.java
index 2c6df7b..215c232 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/AddUpgradeRequestAuditEvent.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/AddUpgradeRequestAuditEvent.java
@@ -33,7 +33,7 @@ public class AddUpgradeRequestAuditEvent extends RequestAuditEvent {
/**
* Repository version
*/
- private String repositoryVersion;
+ private String repositoryVersionId;
/**
* Upgrade type (rolling, non-rolling)
@@ -65,8 +65,8 @@ public class AddUpgradeRequestAuditEvent extends RequestAuditEvent {
protected void buildAuditMessage(StringBuilder builder) {
super.buildAuditMessage(builder);
- builder.append(", Repository version(")
- .append(repositoryVersion)
+ builder.append(", Repository version ID(")
+ .append(repositoryVersionId)
.append("), Upgrade type(")
.append(upgradeType)
.append("), Cluster name(")
@@ -74,8 +74,8 @@ public class AddUpgradeRequestAuditEvent extends RequestAuditEvent {
.append(")");
}
- public AddUpgradeRequestAuditEventBuilder withRepositoryVersion(String repositoryVersion) {
- this.repositoryVersion = repositoryVersion;
+ public AddUpgradeRequestAuditEventBuilder withRepositoryVersionId(String repositoryVersionId) {
+ this.repositoryVersionId = repositoryVersionId;
return this;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeEventCreator.java
index 456aa00..db4549f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeEventCreator.java
@@ -83,7 +83,7 @@ public class UpgradeEventCreator implements RequestAuditEventCreator {
.withResultStatus(result.getStatus())
.withUrl(request.getURI())
.withRemoteIp(request.getRemoteAddress())
- .withRepositoryVersion(RequestAuditEventCreatorHelper.getProperty(request, UpgradeResourceProvider.UPGRADE_VERSION))
+ .withRepositoryVersionId(RequestAuditEventCreatorHelper.getProperty(request, UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID))
.withUpgradeType(RequestAuditEventCreatorHelper.getProperty(request, UpgradeResourceProvider.UPGRADE_TYPE))
.withClusterName(RequestAuditEventCreatorHelper.getProperty(request, UpgradeResourceProvider.UPGRADE_CLUSTER_NAME))
.build();
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
index ef165a5..0292b72 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
@@ -46,7 +46,7 @@ public class PreviousUpgradeCompleted extends AbstractCheckDescriptor {
/**
* The message displayed as part of this pre-upgrade check.
*/
- public static final String ERROR_MESSAGE = "There is an existing {0} from {1} to {2} which has not completed. This {3} must be completed before a new upgrade or downgrade can begin.";
+ public static final String ERROR_MESSAGE = "There is an existing {0} {1} {2} which has not completed. This {3} must be completed before a new upgrade or downgrade can begin.";
/**
* Constructor.
@@ -65,9 +65,10 @@ public class PreviousUpgradeCompleted extends AbstractCheckDescriptor {
if (null != upgradeInProgress) {
Direction direction = upgradeInProgress.getDirection();
String directionText = direction.getText(false);
+ String prepositionText = direction.getPreposition();
- errorMessage = MessageFormat.format(ERROR_MESSAGE, directionText,
- upgradeInProgress.getFromVersion(), upgradeInProgress.getToVersion(), directionText);
+ errorMessage = MessageFormat.format(ERROR_MESSAGE, directionText, prepositionText,
+ upgradeInProgress.getRepositoryVersion().getVersion(), directionText);
}
if (null != errorMessage) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/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 617d7c0..397c1c2 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
@@ -480,19 +480,6 @@ public class AmbariCustomCommandExecutionHelper {
commandParams.put(SERVICE_PACKAGE_FOLDER, serviceInfo.getServicePackageFolder());
commandParams.put(HOOKS_FOLDER, stackInfo.getStackHooksFolder());
- RepositoryVersionEntity repoVersion = null;
- if (null != component) {
- repoVersion = component.getDesiredRepositoryVersion();
- }
-
- if (null == repoVersion && null != clusterService) {
- repoVersion = clusterService.getDesiredRepositoryVersion();
- }
-
- if (repoVersion != null) {
- commandParams.put(KeyNames.VERSION, repoVersion.getVersion());
- }
-
Map<String, String> roleParams = execCmd.getRoleParams();
if (roleParams == null) {
roleParams = new TreeMap<>();
@@ -1396,18 +1383,23 @@ public class AmbariCustomCommandExecutionHelper {
* @return a wrapper of the imporant JSON structures to add to a stage
*/
public ExecuteCommandJson getCommandJson(ActionExecutionContext actionExecContext,
- Cluster cluster, StackId stackId) throws AmbariException {
+ Cluster cluster, RepositoryVersionEntity repositoryVersion) throws AmbariException {
Map<String, String> commandParamsStage = StageUtils.getCommandParamsStage(actionExecContext);
Map<String, String> hostParamsStage = new HashMap<>();
Map<String, Set<String>> clusterHostInfo;
String clusterHostInfoJson = "{}";
+ StackId stackId = null;
+ if (null != repositoryVersion) {
+ stackId = repositoryVersion.getStackId();
+ }
+
if (null != cluster) {
clusterHostInfo = StageUtils.getClusterHostInfo(cluster);
// Important, because this runs during Stack Uprade, it needs to use the effective Stack Id.
- hostParamsStage = createDefaultHostParams(cluster, null);
+ hostParamsStage = createDefaultHostParams(cluster, repositoryVersion);
String componentName = null;
String serviceName = null;
@@ -1416,7 +1408,7 @@ public class AmbariCustomCommandExecutionHelper {
serviceName = actionExecContext.getOperationLevel().getServiceName();
}
- if (serviceName != null && componentName != null) {
+ if (serviceName != null && componentName != null && null != stackId) {
ComponentInfo componentInfo = ambariMetaInfo.getComponent(
stackId.getStackName(), stackId.getStackVersion(),
serviceName, componentName);
@@ -1428,17 +1420,22 @@ public class AmbariCustomCommandExecutionHelper {
String clientsToUpdateConfigs = gson.toJson(clientsToUpdateConfigsList);
hostParamsStage.put(CLIENTS_TO_UPDATE_CONFIGS, clientsToUpdateConfigs);
}
+
clusterHostInfoJson = StageUtils.getGson().toJson(clusterHostInfo);
//Propogate HCFS service type info to command params
- Map<String, ServiceInfo> serviceInfos = ambariMetaInfo.getServices(stackId.getStackName(), stackId.getStackVersion());
- for (ServiceInfo serviceInfoInstance : serviceInfos.values()) {
- if (serviceInfoInstance.getServiceType() != null) {
- LOG.debug("Adding {} to command parameters for {}", serviceInfoInstance.getServiceType(),
- serviceInfoInstance.getName());
-
- commandParamsStage.put("dfs_type", serviceInfoInstance.getServiceType());
- break;
+ if (null != stackId) {
+ Map<String, ServiceInfo> serviceInfos = ambariMetaInfo.getServices(stackId.getStackName(),
+ stackId.getStackVersion());
+
+ for (ServiceInfo serviceInfoInstance : serviceInfos.values()) {
+ if (serviceInfoInstance.getServiceType() != null) {
+ LOG.debug("Adding {} to command parameters for {}",
+ serviceInfoInstance.getServiceType(), serviceInfoInstance.getName());
+
+ commandParamsStage.put("dfs_type", serviceInfoInstance.getServiceType());
+ break;
+ }
}
}
}
@@ -1482,10 +1479,6 @@ public class AmbariCustomCommandExecutionHelper {
String notManagedHdfsPathList = gson.toJson(notManagedHdfsPathSet);
hostLevelParams.put(NOT_MANAGED_HDFS_PATH_LIST, notManagedHdfsPathList);
- if (null != repositoryVersion) {
- hostLevelParams.put(KeyNames.CURRENT_VERSION, repositoryVersion.getVersion());
- }
-
for (Map.Entry<String, String> dbConnectorName : configs.getDatabaseConnectorNames().entrySet()) {
hostLevelParams.put(dbConnectorName.getKey(), dbConnectorName.getValue());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/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 882f583..a4f59a5 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
@@ -3988,12 +3988,19 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
actionManager,
actionRequest);
- StackId stackId = null;
- if (null != cluster) {
- stackId = cluster.getDesiredStackVersion();
+ RepositoryVersionEntity desiredRepositoryVersion = null;
+
+ RequestOperationLevel operationLevel = actionExecContext.getOperationLevel();
+ if (null != operationLevel) {
+ Service service = cluster.getService(operationLevel.getServiceName());
+ if (null != service) {
+ desiredRepositoryVersion = service.getDesiredRepositoryVersion();
+ }
}
- ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext, cluster, stackId);
+ ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext,
+ cluster, desiredRepositoryVersion);
+
String commandParamsForStage = jsons.getCommandParamsForStage();
Map<String, String> commandParamsStage = gson.fromJson(commandParamsForStage, new TypeToken<Map<String, String>>()
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
index a762e2b..77e6250 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
@@ -266,7 +266,7 @@ public abstract class AbstractControllerResourceProvider extends AbstractAuthori
*
* @return resource provider for the specified type
*/
- ResourceProvider getResourceProvider(Resource.Type type) {
+ public static ResourceProvider getResourceProvider(Resource.Type type) {
return ((ClusterControllerImpl) ClusterControllerHelper.getClusterController()).
ensureResourceProvider(type);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index 7ca6164..c3691bf 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -23,13 +23,11 @@ import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SERVICE_P
import java.text.MessageFormat;
import java.util.ArrayList;
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.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -65,8 +63,6 @@ import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
-import org.apache.ambari.server.controller.utilities.PredicateBuilder;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.HostRoleCommandStatusSummaryDTO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
@@ -78,20 +74,20 @@ import org.apache.ambari.server.orm.entities.RequestEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
+import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity;
import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
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.serveraction.upgrades.UpdateDesiredStackAction;
-import org.apache.ambari.server.stack.MasterHostResolver;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
-import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.RepositoryType;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
@@ -99,33 +95,26 @@ import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.UpgradeContextFactory;
import org.apache.ambari.server.state.UpgradeHelper;
import org.apache.ambari.server.state.UpgradeHelper.UpgradeGroupHolder;
-import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.ConfigUpgradePack;
-import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.ConfigureTask;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.Grouping;
-import org.apache.ambari.server.state.stack.upgrade.HostOrderGrouping;
-import org.apache.ambari.server.state.stack.upgrade.HostOrderItem;
-import org.apache.ambari.server.state.stack.upgrade.HostOrderItem.HostOrderActionType;
import org.apache.ambari.server.state.stack.upgrade.ManualTask;
import org.apache.ambari.server.state.stack.upgrade.ServerSideActionTask;
import org.apache.ambari.server.state.stack.upgrade.StageWrapper;
import org.apache.ambari.server.state.stack.upgrade.Task;
import org.apache.ambari.server.state.stack.upgrade.TaskWrapper;
-import org.apache.ambari.server.state.stack.upgrade.UpdateStackGrouping;
-import org.apache.ambari.server.state.stack.upgrade.UpgradeScope;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostServerActionEvent;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
+import org.codehaus.jackson.annotate.JsonProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.inject.Inject;
@@ -140,12 +129,12 @@ import com.google.inject.persist.Transactional;
public class UpgradeResourceProvider extends AbstractControllerResourceProvider {
public static final String UPGRADE_CLUSTER_NAME = "Upgrade/cluster_name";
- public static final String UPGRADE_VERSION = "Upgrade/repository_version";
+ public static final String UPGRADE_REPO_VERSION_ID = "Upgrade/repository_version_id";
public static final String UPGRADE_TYPE = "Upgrade/upgrade_type";
public static final String UPGRADE_PACK = "Upgrade/pack";
public static final String UPGRADE_REQUEST_ID = "Upgrade/request_id";
- public static final String UPGRADE_FROM_VERSION = "Upgrade/from_version";
- public static final String UPGRADE_TO_VERSION = "Upgrade/to_version";
+ public static final String UPGRADE_ASSOCIATED_VERSION = "Upgrade/associated_version";
+ public static final String UPGRADE_VERSIONS = "Upgrade/versions";
public static final String UPGRADE_DIRECTION = "Upgrade/direction";
public static final String UPGRADE_DOWNGRADE_ALLOWED = "Upgrade/downgrade_allowed";
public static final String UPGRADE_REQUEST_STATUS = "Upgrade/request_status";
@@ -154,7 +143,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
public static final String UPGRADE_SKIP_PREREQUISITE_CHECKS = "Upgrade/skip_prerequisite_checks";
public static final String UPGRADE_FAIL_ON_CHECK_WARNINGS = "Upgrade/fail_on_check_warnings";
-
/**
* Names that appear in the Upgrade Packs that are used by
* {@link org.apache.ambari.server.state.cluster.ClusterImpl#isNonRollingUpgradePastUpgradingStack}
@@ -169,17 +157,17 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
/**
* Skip slave/client component failures if the tasks are skippable.
*/
- protected static final String UPGRADE_SKIP_FAILURES = "Upgrade/skip_failures";
+ public static final String UPGRADE_SKIP_FAILURES = "Upgrade/skip_failures";
/**
* Skip service check failures if the tasks are skippable.
*/
- protected static final String UPGRADE_SKIP_SC_FAILURES = "Upgrade/skip_service_check_failures";
+ public static final String UPGRADE_SKIP_SC_FAILURES = "Upgrade/skip_service_check_failures";
/**
* Skip manual verification tasks for hands-free upgrade/downgrade experience.
*/
- protected static final String UPGRADE_SKIP_MANUAL_VERIFICATION = "Upgrade/skip_manual_verification";
+ public static final String UPGRADE_SKIP_MANUAL_VERIFICATION = "Upgrade/skip_manual_verification";
/**
* When creating an upgrade of type {@link UpgradeType#HOST_ORDERED}, this
@@ -200,7 +188,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
* </pre>
*
*/
- protected static final String UPGRADE_HOST_ORDERED_HOSTS = "Upgrade/host_order";
+ public static final String UPGRADE_HOST_ORDERED_HOSTS = "Upgrade/host_order";
/*
* Lifted from RequestResourceProvider
@@ -217,6 +205,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
private static final Set<String> PK_PROPERTY_IDS = new HashSet<>(
Arrays.asList(UPGRADE_REQUEST_ID, UPGRADE_CLUSTER_NAME));
+
private static final Set<String> PROPERTY_IDS = new HashSet<>();
/**
@@ -267,9 +256,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
@Inject
private static Configuration s_configuration;
- @Inject
- private static Gson s_gson;
-
/**
* Used to create instances of {@link UpgradeContext} with injected
* dependencies.
@@ -280,12 +266,12 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
static {
// properties
PROPERTY_IDS.add(UPGRADE_CLUSTER_NAME);
- PROPERTY_IDS.add(UPGRADE_VERSION);
+ PROPERTY_IDS.add(UPGRADE_REPO_VERSION_ID);
PROPERTY_IDS.add(UPGRADE_TYPE);
PROPERTY_IDS.add(UPGRADE_PACK);
PROPERTY_IDS.add(UPGRADE_REQUEST_ID);
- PROPERTY_IDS.add(UPGRADE_FROM_VERSION);
- PROPERTY_IDS.add(UPGRADE_TO_VERSION);
+ PROPERTY_IDS.add(UPGRADE_ASSOCIATED_VERSION);
+ PROPERTY_IDS.add(UPGRADE_VERSIONS);
PROPERTY_IDS.add(UPGRADE_DIRECTION);
PROPERTY_IDS.add(UPGRADE_DOWNGRADE_ALLOWED);
PROPERTY_IDS.add(UPGRADE_SUSPENDED);
@@ -305,6 +291,9 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
PROPERTY_IDS.add(REQUEST_STATUS_PROPERTY_ID);
PROPERTY_IDS.add(REQUEST_TYPE_ID);
+ PROPERTY_IDS.add("Upgrade/from_version");
+ PROPERTY_IDS.add("Upgrade/to_version");
+
// keys
KEY_PROPERTY_IDS.put(Resource.Type.Upgrade, UPGRADE_REQUEST_ID);
KEY_PROPERTY_IDS.put(Resource.Type.Cluster, UPGRADE_CLUSTER_NAME);
@@ -355,32 +344,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
@Override
public UpgradeEntity invoke() throws AmbariException, AuthorizationException {
- final String directionProperty = (String) requestMap.get(UPGRADE_DIRECTION);
- if (StringUtils.isEmpty(directionProperty)) {
- throw new AmbariException(String.format("%s is required", UPGRADE_DIRECTION));
- }
-
- final Direction direction = Direction.valueOf(directionProperty);
-
- // Default to ROLLING upgrade, but attempt to read from properties.
- UpgradeType upgradeType = UpgradeType.ROLLING;
- if (requestMap.containsKey(UPGRADE_TYPE)) {
- try {
- upgradeType = UpgradeType.valueOf(requestMap.get(UPGRADE_TYPE).toString());
- } catch (Exception e) {
- throw new AmbariException(String.format("Property %s has an incorrect value of %s.",
- UPGRADE_TYPE, requestMap.get(UPGRADE_TYPE)));
- }
- }
-
- // the version being upgraded or downgraded to (ie 2.2.1.0-1234)
- final String version = (String) requestMap.get(UPGRADE_VERSION);
-
- final UpgradeContext upgradeContext = s_upgradeContextFactory.create(cluster, upgradeType,
- direction, version, requestMap);
-
- UpgradePack upgradePack = validateRequest(upgradeContext);
- upgradeContext.setUpgradePack(upgradePack);
+ // create the context, validating the properties in the process
+ final UpgradeContext upgradeContext = s_upgradeContextFactory.create(cluster, requestMap);
try {
return createUpgrade(upgradeContext);
@@ -598,47 +563,33 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
setResourceProperty(resource, UPGRADE_TYPE, entity.getUpgradeType(), requestedIds);
setResourceProperty(resource, UPGRADE_PACK, entity.getUpgradePackage(), requestedIds);
setResourceProperty(resource, UPGRADE_REQUEST_ID, entity.getRequestId(), requestedIds);
- setResourceProperty(resource, UPGRADE_FROM_VERSION, entity.getFromVersion(), requestedIds);
- setResourceProperty(resource, UPGRADE_TO_VERSION, entity.getToVersion(), requestedIds);
setResourceProperty(resource, UPGRADE_DIRECTION, entity.getDirection(), requestedIds);
setResourceProperty(resource, UPGRADE_SUSPENDED, entity.isSuspended(), requestedIds);
setResourceProperty(resource, UPGRADE_DOWNGRADE_ALLOWED, entity.isDowngradeAllowed(), requestedIds);
setResourceProperty(resource, UPGRADE_SKIP_FAILURES, entity.isComponentFailureAutoSkipped(), requestedIds);
setResourceProperty(resource, UPGRADE_SKIP_SC_FAILURES, entity.isServiceCheckFailureAutoSkipped(), requestedIds);
- return resource;
- }
-
- /**
- * Validates a singular API request.
- *
- * @param upgradeContext the map of properties
- * @return the validated upgrade pack
- * @throws AmbariException
- */
- private UpgradePack validateRequest(UpgradeContext upgradeContext) throws AmbariException {
- Cluster cluster = upgradeContext.getCluster();
- Direction direction = upgradeContext.getDirection();
- Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
- UpgradeType upgradeType = upgradeContext.getType();
+ // set the assocaited to/from version (to/from is dictated by direction)
+ RepositoryVersionEntity repositoryVersion = entity.getRepositoryVersion();
+ setResourceProperty(resource, UPGRADE_ASSOCIATED_VERSION, repositoryVersion.getVersion(), requestedIds);
- /**
- * For the unit tests tests, there are multiple upgrade packs for the same type, so
- * allow picking one of them. In prod, this is empty.
- */
- String preferredUpgradePackName = (String) requestMap.get(UPGRADE_PACK);
+ // now set the target verison for all services in the upgrade
+ Map<String, RepositoryVersions> repositoryVersions = new HashMap<>();
+ for( UpgradeHistoryEntity history : entity.getHistory() ){
+ RepositoryVersions serviceVersions = repositoryVersions.get(history.getServiceName());
+ if (null != serviceVersions) {
+ continue;
+ }
- String version = (String) requestMap.get(UPGRADE_VERSION);
- String versionForUpgradePack = (String) requestMap.get(UPGRADE_FROM_VERSION);
+ serviceVersions = new RepositoryVersions(history.getFromReposistoryVersion(),
+ history.getTargetRepositoryVersion());
- UpgradePack pack = s_upgradeHelper.suggestUpgradePack(cluster.getClusterName(),
- versionForUpgradePack, version, direction, upgradeType, preferredUpgradePackName);
+ repositoryVersions.put(history.getServiceName(), serviceVersions);
+ }
- // the validator will throw an exception if the upgrade request is not valid
- UpgradeRequestValidator upgradeRequestValidator = buildValidator(upgradeType);
- upgradeRequestValidator.validate(upgradeContext, pack);
+ setResourceProperty(resource, UPGRADE_VERSIONS, repositoryVersions, requestedIds);
- return pack;
+ return resource;
}
/**
@@ -698,112 +649,9 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
UpgradePack pack = upgradeContext.getUpgradePack();
Cluster cluster = upgradeContext.getCluster();
Direction direction = upgradeContext.getDirection();
- Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
- UpgradeType upgradeType = upgradeContext.getType();
ConfigHelper configHelper = getManagementController().getConfigHelper();
- // the upgrade context calculated these for us based on direction
- StackId sourceStackId = upgradeContext.getOriginalStackId();
-
- // the version being upgraded or downgraded to (ie 2.2.1.0-1234)
- final String version = upgradeContext.getVersion();
-
- MasterHostResolver resolver = null;
- if (direction.isUpgrade()) {
- resolver = new MasterHostResolver(configHelper, cluster);
- } else {
- resolver = new MasterHostResolver(configHelper, cluster, version);
- }
-
- Set<String> supportedServices = new HashSet<>();
- UpgradeScope scope = UpgradeScope.COMPLETE;
-
- switch (direction) {
- case UPGRADE:
- RepositoryVersionEntity targetRepositoryVersion = upgradeContext.getTargetRepositoryVersion();
- RepositoryType repositoryType = targetRepositoryVersion.getType();
-
- // !!! Consult the version definition and add the service names to supportedServices
- if (repositoryType != RepositoryType.STANDARD) {
- scope = UpgradeScope.PARTIAL;
-
- try {
- VersionDefinitionXml vdf = targetRepositoryVersion.getRepositoryXml();
- supportedServices.addAll(vdf.getAvailableServiceNames());
-
- // if this is every true, then just stop the upgrade attempt and
- // throw an exception
- if (supportedServices.isEmpty()) {
- String message = String.format(
- "When using a VDF of type %s, the available services must be defined in the VDF",
- targetRepositoryVersion.getType());
- throw new AmbariException(message);
- }
-
- } catch (Exception e) {
- String msg = String.format("Could not parse version definition for %s. Upgrade will not proceed.", version);
- LOG.error(msg, e);
- throw new AmbariException(msg);
- }
- }
-
- break;
- case DOWNGRADE:
- break;
- }
-
- upgradeContext.setResolver(resolver);
- upgradeContext.setSupportedServices(supportedServices);
- upgradeContext.setScope(scope);
-
- @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES,
- comment = "Check for any other way downgrade to get set, if required")
- String downgradeFromVersion = null;
-
- if (direction.isDowngrade()) {
- if (requestMap.containsKey(UPGRADE_FROM_VERSION)) {
- downgradeFromVersion = (String) requestMap.get(UPGRADE_FROM_VERSION);
- } else {
- UpgradeEntity lastUpgradeItemForCluster = s_upgradeDAO.findLastUpgradeForCluster(
- cluster.getClusterId(), Direction.UPGRADE);
-
- downgradeFromVersion = lastUpgradeItemForCluster.getToVersion();
- }
-
- if (null == downgradeFromVersion) {
- throw new AmbariException("When downgrading, the downgrade version must be specified");
- }
-
- upgradeContext.setDowngradeFromVersion(downgradeFromVersion);
- }
-
- // optionally skip failures - this can be supplied on either the request or
- // in the upgrade pack explicitely, however the request will always override
- // the upgrade pack if explicitely specified
- boolean skipComponentFailures = pack.isComponentFailureAutoSkipped();
- boolean skipServiceCheckFailures = pack.isServiceCheckFailureAutoSkipped();
-
- // only override the upgrade pack if set on the request
- if (requestMap.containsKey(UPGRADE_SKIP_FAILURES)) {
- skipComponentFailures = Boolean.parseBoolean((String) requestMap.get(UPGRADE_SKIP_FAILURES));
- }
-
- // only override the upgrade pack if set on the request
- if (requestMap.containsKey(UPGRADE_SKIP_SC_FAILURES)) {
- skipServiceCheckFailures = Boolean.parseBoolean(
- (String) requestMap.get(UPGRADE_SKIP_SC_FAILURES));
- }
-
- boolean skipManualVerification = false;
- if(requestMap.containsKey(UPGRADE_SKIP_MANUAL_VERIFICATION)) {
- skipManualVerification = Boolean.parseBoolean((String) requestMap.get(UPGRADE_SKIP_MANUAL_VERIFICATION));
- }
-
- upgradeContext.setAutoSkipComponentFailures(skipComponentFailures);
- upgradeContext.setAutoSkipServiceCheckFailures(skipServiceCheckFailures);
- upgradeContext.setAutoSkipManualVerification(skipManualVerification);
-
List<UpgradeGroupHolder> groups = s_upgradeHelper.createSequence(pack, upgradeContext);
if (groups.isEmpty()) {
@@ -828,7 +676,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
}
List<UpgradeGroupEntity> groupEntities = new ArrayList<>();
- RequestStageContainer req = createRequest(direction, version);
+ RequestStageContainer req = createRequest(upgradeContext);
/**
During a Rolling Upgrade, change the desired Stack Id if jumping across
@@ -849,21 +697,24 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
s_upgradeHelper.putComponentsToUpgradingState(upgradeContext);
}
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES, comment = "This is wrong")
+ StackId configurationPackSourceStackId = upgradeContext.getRepositoryVersion().getStackId();
+
// resolve or build a proper config upgrade pack - always start out with the config pack
// for the current stack and merge into that
//
// HDP 2.2 to 2.3 should start with the config-upgrade.xml from HDP 2.2
// HDP 2.2 to 2.4 should start with HDP 2.2 and merge in HDP 2.3's config-upgrade.xml
- ConfigUpgradePack configUpgradePack = ConfigurationPackBuilder.build(pack, sourceStackId);
+ ConfigUpgradePack configUpgradePack = ConfigurationPackBuilder.build(pack,
+ configurationPackSourceStackId);
// create the upgrade and request
for (UpgradeGroupHolder group : groups) {
- boolean skippable = group.skippable;
- boolean supportsAutoSkipOnFailure = group.supportsAutoSkipOnFailure;
- boolean allowRetry = group.allowRetry;
-
List<UpgradeItemEntity> itemEntities = new ArrayList<>();
+
for (StageWrapper wrapper : group.items) {
+ RepositoryVersionEntity effectiveRepositoryVersion = upgradeContext.getRepositoryVersion();
+
if (wrapper.getType() == StageWrapper.Type.SERVER_SIDE_ACTION) {
// !!! each stage is guaranteed to be of one type. but because there
// is a bug that prevents one stage with multiple tasks assigned for
@@ -882,20 +733,9 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
itemEntity.setHosts(wrapper.getHostsJson());
itemEntities.add(itemEntity);
- // At this point, need to change the effective Stack Id so that subsequent tasks run on the newer value.
- if (upgradeType == UpgradeType.NON_ROLLING && UpdateStackGrouping.class.equals(group.groupClass)) {
- if (direction.isUpgrade()) {
- upgradeContext.setEffectiveStackId(upgradeContext.getTargetStackId());
- } else {
- upgradeContext.setEffectiveStackId(upgradeContext.getOriginalStackId());
- }
- } else if (UpdateStackGrouping.class.equals(group.groupClass)) {
- upgradeContext.setEffectiveStackId(upgradeContext.getTargetStackId());
- }
-
injectVariables(configHelper, cluster, itemEntity);
- makeServerSideStage(upgradeContext, req, itemEntity, (ServerSideActionTask) task,
- skippable, supportsAutoSkipOnFailure, allowRetry, pack, configUpgradePack);
+ makeServerSideStage(group, upgradeContext, effectiveRepositoryVersion, req,
+ itemEntity, (ServerSideActionTask) task, configUpgradePack);
}
}
} else {
@@ -908,8 +748,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
injectVariables(configHelper, cluster, itemEntity);
// upgrade items match a stage
- createStage(upgradeContext, req, itemEntity, wrapper, skippable,
- supportsAutoSkipOnFailure, allowRetry);
+ createStage(group, upgradeContext, effectiveRepositoryVersion, req, itemEntity, wrapper);
}
}
@@ -923,21 +762,14 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
}
UpgradeEntity entity = new UpgradeEntity();
-
- if (null != downgradeFromVersion) {
- entity.setFromVersion(downgradeFromVersion);
- } else {
- entity.setFromVersion("");
- }
-
- entity.setToVersion(version);
+ entity.setRepositoryVersion(upgradeContext.getRepositoryVersion());
entity.setUpgradeGroups(groupEntities);
entity.setClusterId(cluster.getClusterId());
entity.setDirection(direction);
entity.setUpgradePackage(pack.getName());
entity.setUpgradeType(pack.getType());
- entity.setAutoSkipComponentFailures(skipComponentFailures);
- entity.setAutoSkipServiceCheckFailures(skipServiceCheckFailures);
+ entity.setAutoSkipComponentFailures(upgradeContext.isComponentFailureAutoSkipped());
+ entity.setAutoSkipServiceCheckFailures(upgradeContext.isServiceCheckFailureAutoSkipped());
if (upgradeContext.getDirection().isDowngrade()) {
// !!! You can't downgrade a Downgrade, no matter what the upgrade pack says.
@@ -946,6 +778,37 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
entity.setDowngradeAllowed(pack.isDowngradeAllowed());
}
+ // set upgrade history for every component in the upgrade
+ Set<String> services = upgradeContext.getSupportedServices();
+ for (String serviceName : services) {
+ Service service = cluster.getService(serviceName);
+ Map<String, ServiceComponent> componentMap = service.getServiceComponents();
+ for (ServiceComponent component : componentMap.values()) {
+ UpgradeHistoryEntity history = new UpgradeHistoryEntity();
+ history.setUpgrade(entity);
+ history.setServiceName(serviceName);
+ history.setComponentName(component.getName());
+
+ // depending on whether this is an upgrade or a downgrade, the history
+ // will be different
+ if (upgradeContext.getDirection() == Direction.UPGRADE) {
+ history.setFromRepositoryVersion(component.getDesiredRepositoryVersion());
+ history.setTargetRepositoryVersion(upgradeContext.getRepositoryVersion());
+ } else {
+ // the target version on a downgrade is the original version that the
+ // service was on in the failed upgrade
+ RepositoryVersionEntity targetRepositoryVersion =
+ upgradeContext.getTargetRepositoryVersion(serviceName);
+
+ history.setFromRepositoryVersion(upgradeContext.getRepositoryVersion());
+ history.setTargetRepositoryVersion(targetRepositoryVersion);
+ }
+
+ // add the history
+ entity.addHistory(history);
+ }
+ }
+
req.getRequestStatusResponse();
return createUpgradeInsideTransaction(cluster, req, entity);
}
@@ -1014,8 +877,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
Cluster cluster = upgradeContext.getCluster();
Direction direction = upgradeContext.getDirection();
UpgradePack upgradePack = upgradeContext.getUpgradePack();
- String stackName = upgradeContext.getTargetStackId().getStackName();
- String version = upgradeContext.getVersion();
+ String stackName = upgradeContext.getRepositoryVersion().getStackId().getStackName();
+ String version = upgradeContext.getRepositoryVersion().getStackId().getStackVersion();
String userName = getManagementController().getAuthName();
RepositoryVersionEntity targetRve = s_repoVersionDAO.findByStackNameAndVersion(stackName, version);
@@ -1250,36 +1113,45 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
}
}
- private RequestStageContainer createRequest(Direction direction, String version) {
+ private RequestStageContainer createRequest(UpgradeContext upgradeContext) {
ActionManager actionManager = getManagementController().getActionManager();
RequestStageContainer requestStages = new RequestStageContainer(
actionManager.getNextRequestId(), null, s_requestFactory.get(), actionManager);
- requestStages.setRequestContext(String.format("%s to %s", direction.getVerb(true), version));
+
+ Direction direction = upgradeContext.getDirection();
+ RepositoryVersionEntity repositoryVersion = upgradeContext.getRepositoryVersion();
+
+ requestStages.setRequestContext(String.format("%s %s %s", direction.getVerb(true),
+ direction.getPreposition(), repositoryVersion.getVersion()));
return requestStages;
}
- private void createStage(UpgradeContext context, RequestStageContainer request,
- UpgradeItemEntity entity, StageWrapper wrapper, boolean skippable,
- boolean supportsAutoSkipOnFailure, boolean allowRetry)
+ private void createStage(UpgradeGroupHolder group, UpgradeContext context,
+ RepositoryVersionEntity effectiveRepositoryVersion,
+ RequestStageContainer request, UpgradeItemEntity entity, StageWrapper wrapper)
throws AmbariException {
+ boolean skippable = group.skippable;
+ boolean supportsAutoSkipOnFailure = group.supportsAutoSkipOnFailure;
+ boolean allowRetry = group.allowRetry;
+
switch (wrapper.getType()) {
case CONFIGURE:
case START:
case STOP:
case RESTART:
- makeCommandStage(context, request, entity, wrapper, skippable, supportsAutoSkipOnFailure,
- allowRetry);
+ makeCommandStage(context, request, effectiveRepositoryVersion, entity, wrapper, skippable,
+ supportsAutoSkipOnFailure, allowRetry);
break;
case RU_TASKS:
- makeActionStage(context, request, entity, wrapper, skippable, supportsAutoSkipOnFailure,
- allowRetry);
+ makeActionStage(context, request, effectiveRepositoryVersion, entity, wrapper, skippable,
+ supportsAutoSkipOnFailure, allowRetry);
break;
case SERVICE_CHECK:
- makeServiceCheckStage(context, request, entity, wrapper, skippable,
- supportsAutoSkipOnFailure, allowRetry);
+ makeServiceCheckStage(context, request, effectiveRepositoryVersion, entity, wrapper,
+ skippable, supportsAutoSkipOnFailure, allowRetry);
break;
default:
break;
@@ -1302,9 +1174,9 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
}
private void makeActionStage(UpgradeContext context, RequestStageContainer request,
- UpgradeItemEntity entity, StageWrapper wrapper, boolean skippable,
- boolean supportsAutoSkipOnFailure, boolean allowRetry)
- throws AmbariException {
+ RepositoryVersionEntity effectiveRepositoryVersion, UpgradeItemEntity entity,
+ StageWrapper wrapper, boolean skippable, boolean supportsAutoSkipOnFailure,
+ boolean allowRetry) throws AmbariException {
if (0 == wrapper.getHosts().size()) {
throw new AmbariException(
@@ -1328,7 +1200,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
// service, it is necessary to set the
// service_package_folder and hooks_folder params.
AmbariMetaInfo ambariMetaInfo = s_metaProvider.get();
- StackId stackId = context.getEffectiveStackId();
+ StackId stackId = effectiveRepositoryVersion.getStackId();
StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(),
stackId.getStackVersion());
@@ -1354,7 +1226,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
actionContext.setAutoSkipFailures(context.isComponentFailureAutoSkipped());
ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext,
- cluster, context.getEffectiveStackId());
+ cluster, effectiveRepositoryVersion);
Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari",
cluster.getClusterName(), cluster.getClusterId(), entity.getText(),
@@ -1395,9 +1267,9 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
* @throws AmbariException
*/
private void makeCommandStage(UpgradeContext context, RequestStageContainer request,
- UpgradeItemEntity entity, StageWrapper wrapper, boolean skippable,
- boolean supportsAutoSkipOnFailure, boolean allowRetry)
- throws AmbariException {
+ RepositoryVersionEntity effectiveRepositoryVersion, UpgradeItemEntity entity,
+ StageWrapper wrapper, boolean skippable, boolean supportsAutoSkipOnFailure,
+ boolean allowRetry) throws AmbariException {
Cluster cluster = context.getCluster();
@@ -1437,7 +1309,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
actionContext.setMaintenanceModeHostExcluded(true);
ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext,
- cluster, context.getEffectiveStackId());
+ cluster, effectiveRepositoryVersion);
Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari",
cluster.getClusterName(), cluster.getClusterId(), entity.getText(),
@@ -1470,9 +1342,9 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
}
private void makeServiceCheckStage(UpgradeContext context, RequestStageContainer request,
- UpgradeItemEntity entity, StageWrapper wrapper, boolean skippable,
- boolean supportsAutoSkipOnFailure, boolean allowRetry)
- throws AmbariException {
+ RepositoryVersionEntity effectiveRepositoryVersion, UpgradeItemEntity entity,
+ StageWrapper wrapper, boolean skippable, boolean supportsAutoSkipOnFailure,
+ boolean allowRetry) throws AmbariException {
List<RequestResourceFilter> filters = new ArrayList<>();
@@ -1499,7 +1371,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
actionContext.setMaintenanceModeHostExcluded(true);
ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext,
- cluster, context.getEffectiveStackId());
+ cluster, effectiveRepositoryVersion);
Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari",
cluster.getClusterName(), cluster.getClusterId(), entity.getText(),
@@ -1536,13 +1408,13 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
* upgrade
* @throws AmbariException
*/
- private void makeServerSideStage(UpgradeContext context, RequestStageContainer request,
- UpgradeItemEntity entity, ServerSideActionTask task, boolean skippable,
- boolean supportsAutoSkipOnFailure, boolean allowRetry,
- UpgradePack upgradePack, ConfigUpgradePack configUpgradePack)
- throws AmbariException {
+ private void makeServerSideStage(UpgradeGroupHolder group, UpgradeContext context,
+ RepositoryVersionEntity effectiveRepositoryVersion, RequestStageContainer request,
+ UpgradeItemEntity entity, ServerSideActionTask task, ConfigUpgradePack configUpgradePack)
+ throws AmbariException {
Cluster cluster = context.getCluster();
+ UpgradePack upgradePack = context.getUpgradePack();
Map<String, String> commandParams = getNewParameterMap(request, context);
commandParams.put(UpgradeContext.COMMAND_PARAM_UPGRADE_PACK, upgradePack.getName());
@@ -1624,21 +1496,21 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
commandParams);
actionContext.setTimeout(Short.valueOf((short) -1));
- actionContext.setRetryAllowed(allowRetry);
+ actionContext.setRetryAllowed(group.allowRetry);
actionContext.setAutoSkipFailures(context.isComponentFailureAutoSkipped());
// hosts in maintenance mode are excluded from the upgrade
actionContext.setMaintenanceModeHostExcluded(true);
ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext,
- cluster, context.getEffectiveStackId());
+ cluster, null);
Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari",
cluster.getClusterName(), cluster.getClusterId(), stageText, jsons.getClusterHostInfo(),
jsons.getCommandParamsForStage(), jsons.getHostParamsForStage());
- stage.setSkippable(skippable);
- stage.setAutoSkipFailureSupported(supportsAutoSkipOnFailure);
+ stage.setSkippable(group.skippable);
+ stage.setAutoSkipFailureSupported(group.supportsAutoSkipOnFailure);
long stageId = request.getLastStageId() + 1;
if (0L == stageId) {
@@ -1652,7 +1524,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
getManagementController().getAuthName(), Role.AMBARI_SERVER_ACTION, RoleCommand.EXECUTE,
cluster.getClusterName(),
new ServiceComponentHostServerActionEvent(null, System.currentTimeMillis()), commandParams,
- itemDetail, null, s_configuration.getDefaultServerTaskTimeout(), allowRetry,
+ itemDetail, null, s_configuration.getDefaultServerTaskTimeout(), group.allowRetry,
context.isComponentFailureAutoSkipped());
request.addStages(Collections.singletonList(stage));
@@ -1663,11 +1535,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
* following properties are already set:
* <ul>
* <li>{@link UpgradeContext#COMMAND_PARAM_CLUSTER_NAME}
- * <li>{@link UpgradeContext#COMMAND_PARAM_VERSION}
* <li>{@link UpgradeContext#COMMAND_PARAM_DIRECTION}
- * <li>{@link UpgradeContext#COMMAND_PARAM_ORIGINAL_STACK}
- * <li>{@link UpgradeContext#COMMAND_PARAM_TARGET_STACK}
- * <li>{@link UpgradeContext#COMMAND_DOWNGRADE_FROM_VERSION}
* <li>{@link UpgradeContext#COMMAND_PARAM_UPGRADE_TYPE}
* <li>{@link KeyNames#REFRESH_CONFIG_TAGS_BEFORE_EXECUTION} - necessary in
* order to have the commands contain the correct configurations. Otherwise,
@@ -1778,57 +1646,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
}
/**
- * Builds the list of {@link HostOrderItem}s from the upgrade request. If the
- * upgrade request does not contain the hosts
- *
- * @param requestMap
- * the map of properties from the request (not {@code null}).
- * @return the ordered list of actions to orchestrate for the
- * {@link UpgradeType#HOST_ORDERED} upgrade.
- * @throws AmbariException
- * if the request properties are not valid.
- */
- @SuppressWarnings("unchecked")
- private List<HostOrderItem> extractHostOrderItemsFromRequest(Map<String, Object> requestMap)
- throws AmbariException {
- // ewwww
- Set<Map<String, List<String>>> hostsOrder = (Set<Map<String, List<String>>>) requestMap.get(
- UPGRADE_HOST_ORDERED_HOSTS);
-
- if (CollectionUtils.isEmpty(hostsOrder)) {
- throw new AmbariException(
- String.format("The %s property must be specified when using a %s upgrade type.",
- UPGRADE_HOST_ORDERED_HOSTS, UpgradeType.HOST_ORDERED));
- }
-
- List<HostOrderItem> hostOrderItems = new ArrayList<>();
-
- // extract all of the hosts so that we can ensure they are all accounted for
- Iterator<Map<String, List<String>>> iterator = hostsOrder.iterator();
- while (iterator.hasNext()) {
- Map<String, List<String>> grouping = iterator.next();
- List<String> hosts = grouping.get("hosts");
- List<String> serviceChecks = grouping.get("service_checks");
-
- if (CollectionUtils.isEmpty(hosts) && CollectionUtils.isEmpty(serviceChecks)) {
- throw new AmbariException(String.format(
- "The %s property must contain at least one object with either a %s or %s key",
- UPGRADE_HOST_ORDERED_HOSTS, "hosts", "service_checks"));
- }
-
- if (CollectionUtils.isNotEmpty(hosts)) {
- hostOrderItems.add(new HostOrderItem(HostOrderActionType.HOST_UPGRADE, hosts));
- }
-
- if (CollectionUtils.isNotEmpty(serviceChecks)) {
- hostOrderItems.add(new HostOrderItem(HostOrderActionType.SERVICE_CHECK, serviceChecks));
- }
- }
-
- return hostOrderItems;
- }
-
- /**
* Builds the correct {@link ConfigUpgradePack} based on the upgrade and
* source stack.
* <ul>
@@ -1887,267 +1704,34 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
}
/**
- * Builds a chain of {@link UpgradeRequestValidator}s to ensure that the
- * incoming request to create a new upgrade is valid.
- *
- * @param upgradeType
- * the type of upgrade to build the validator for.
- * @return the validator which can check to ensure that the properties are
- * valid.
- */
- private UpgradeRequestValidator buildValidator(UpgradeType upgradeType){
- UpgradeRequestValidator validator = new BasicUpgradePropertiesValidator();
- UpgradeRequestValidator preReqValidator = new PreReqCheckValidator();
- validator.setNextValidator(preReqValidator);
-
- final UpgradeRequestValidator upgradeTypeValidator;
- switch( upgradeType ){
- case HOST_ORDERED:
- upgradeTypeValidator = new HostOrderedUpgradeValidator();
- break;
- case NON_ROLLING:
- case ROLLING:
- default:
- upgradeTypeValidator = null;
- break;
- }
-
- preReqValidator.setNextValidator(upgradeTypeValidator);
- return validator;
- }
-
- /**
- * The {@link UpgradeRequestValidator} contains the logic to check for correct
- * upgrade request properties and then pass the responsibility onto the next
- * validator in the chain.
+ * The {@link RepositoryVersions} class is used to represent to/from versions
+ * of a service during an upgrade or downgrade.
*/
- private abstract class UpgradeRequestValidator {
- /**
- * The next validator.
- */
- UpgradeRequestValidator m_nextValidator;
+ final static class RepositoryVersions {
+ @JsonProperty("from_repository_id")
+ final long fromRepositoryId;
- /**
- * Sets the next validator in the chain.
- *
- * @param nextValidator
- * the next validator to run, or {@code null} for none.
- */
- void setNextValidator(UpgradeRequestValidator nextValidator) {
- m_nextValidator = nextValidator;
- }
+ @JsonProperty("from_repository_version")
+ final String fromRepositoryVersion;
- /**
- * Validates the upgrade request from this point in the chain.
- *
- * @param upgradeContext
- * @param upgradePack
- * @throws AmbariException
- */
- final void validate(UpgradeContext upgradeContext, UpgradePack upgradePack)
- throws AmbariException {
+ @JsonProperty("to_repository_id")
+ final long toRepositoryId;
- // run this instance's check
- check(upgradeContext, upgradePack);
-
- // pass along to the next
- if( null != m_nextValidator ) {
- m_nextValidator.validate(upgradeContext, upgradePack);
- }
- }
+ @JsonProperty("to_repository_version")
+ final String toRepositoryVersion;
/**
- * Checks to ensure that upgrade request is valid given the specific
- * arguments.
+ * Constructor.
*
- * @param upgradeContext
- * @param upgradePack
- *
- * @throws AmbariException
- */
- abstract void check(UpgradeContext upgradeContext, UpgradePack upgradePack)
- throws AmbariException;
- }
-
- /**
- * The {@link BasicUpgradePropertiesValidator} ensures that the basic required
- * properties are present on the upgrade request.
- */
- private final class BasicUpgradePropertiesValidator extends UpgradeRequestValidator {
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void check(UpgradeContext upgradeContext, UpgradePack upgradePack)
- throws AmbariException {
- Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
-
- String clusterName = (String) requestMap.get(UPGRADE_CLUSTER_NAME);
- String version = (String) requestMap.get(UPGRADE_VERSION);
- String direction = (String) requestMap.get(UPGRADE_DIRECTION);
-
- if (StringUtils.isBlank(clusterName)) {
- throw new AmbariException(String.format("%s is required", UPGRADE_CLUSTER_NAME));
- }
-
- if (StringUtils.isBlank(version)) {
- throw new AmbariException(String.format("%s is required", UPGRADE_VERSION));
- }
-
- if (StringUtils.isBlank(direction)) {
- throw new AmbariException(String.format("%s is required", UPGRADE_DIRECTION));
- }
- }
- }
-
- /**
- * The {@link PreReqCheckValidator} ensures that the upgrade pre-requisite
- * checks have passed.
- */
- private final class PreReqCheckValidator extends UpgradeRequestValidator {
- /**
- * {@inheritDoc}
- */
- @Override
- void check(UpgradeContext upgradeContext, UpgradePack upgradePack) throws AmbariException {
- Cluster cluster = upgradeContext.getCluster();
- Direction direction = upgradeContext.getDirection();
- Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
- UpgradeType upgradeType = upgradeContext.getType();
-
- String version = (String) requestMap.get(UPGRADE_VERSION);
- boolean skipPrereqChecks = Boolean.parseBoolean((String) requestMap.get(UPGRADE_SKIP_PREREQUISITE_CHECKS));
- boolean failOnCheckWarnings = Boolean.parseBoolean((String) requestMap.get(UPGRADE_FAIL_ON_CHECK_WARNINGS));
- String preferredUpgradePack = requestMap.containsKey(UPGRADE_PACK) ? (String) requestMap.get(UPGRADE_PACK) : null;
-
- // verify that there is not an upgrade or downgrade that is in progress or suspended
- UpgradeEntity existingUpgrade = cluster.getUpgradeInProgress();
- if( null != existingUpgrade ){
- throw new AmbariException(
- String.format("Unable to perform %s as another %s (request ID %s) is in progress.",
- direction.getText(false), existingUpgrade.getDirection().getText(false),
- existingUpgrade.getRequestId()));
- }
-
- // skip this check if it's a downgrade or we are instructed to skip it
- if( direction.isDowngrade() || skipPrereqChecks ){
- return;
- }
-
- // Validate pre-req checks pass
- PreUpgradeCheckResourceProvider preUpgradeCheckResourceProvider = (PreUpgradeCheckResourceProvider)
- getResourceProvider(Resource.Type.PreUpgradeCheck);
-
- Predicate preUpgradeCheckPredicate = new PredicateBuilder().property(
- PreUpgradeCheckResourceProvider.UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID).equals(cluster.getClusterName()).and().property(
- PreUpgradeCheckResourceProvider.UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID).equals(version).and().property(
- PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID).equals(upgradeType).and().property(
- PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_PACK_PROPERTY_ID).equals(preferredUpgradePack).toPredicate();
-
- Request preUpgradeCheckRequest = PropertyHelper.getReadRequest();
-
- Set<Resource> preUpgradeCheckResources;
- try {
- preUpgradeCheckResources = preUpgradeCheckResourceProvider.getResources(
- preUpgradeCheckRequest, preUpgradeCheckPredicate);
- } catch (NoSuchResourceException|SystemException|UnsupportedPropertyException|NoSuchParentResourceException e) {
- throw new AmbariException(
- String.format("Unable to perform %s. Prerequisite checks could not be run",
- direction.getText(false), e));
- }
-
- List<Resource> failedResources = new LinkedList<>();
- if (preUpgradeCheckResources != null) {
- for (Resource res : preUpgradeCheckResources) {
- PrereqCheckStatus prereqCheckStatus = (PrereqCheckStatus) res.getPropertyValue(
- PreUpgradeCheckResourceProvider.UPGRADE_CHECK_STATUS_PROPERTY_ID);
-
- if (prereqCheckStatus == PrereqCheckStatus.FAIL
- || (failOnCheckWarnings && prereqCheckStatus == PrereqCheckStatus.WARNING)) {
- failedResources.add(res);
- }
- }
- }
-
- if (!failedResources.isEmpty()) {
- throw new AmbariException(
- String.format("Unable to perform %s. Prerequisite checks failed %s",
- direction.getText(false), s_gson.toJson(failedResources)));
- }
- }
- }
-
- /**
- * Ensures that for {@link UpgradeType#HOST_ORDERED}, the properties supplied
- * are valid.
- */
- @SuppressWarnings("unchecked")
- private final class HostOrderedUpgradeValidator extends UpgradeRequestValidator {
-
- /**
- * {@inheritDoc}
+ * @param from
+ * @param target
*/
- @Override
- void check(UpgradeContext upgradeContext, UpgradePack upgradePack) throws AmbariException {
- Cluster cluster = upgradeContext.getCluster();
- Direction direction = upgradeContext.getDirection();
- Map<String, Object> requestMap = upgradeContext.getUpgradeRequest();
-
- String skipFailuresRequestProperty = (String) requestMap.get(UPGRADE_SKIP_FAILURES);
- if (Boolean.parseBoolean(skipFailuresRequestProperty)) {
- throw new AmbariException(
- String.format("The %s property is not valid when creating a %s upgrade.",
- UPGRADE_SKIP_FAILURES, UpgradeType.HOST_ORDERED));
- }
-
- String skipManualVerification = (String) requestMap.get(UPGRADE_SKIP_MANUAL_VERIFICATION);
- if (Boolean.parseBoolean(skipManualVerification)) {
- throw new AmbariException(
- String.format("The %s property is not valid when creating a %s upgrade.",
- UPGRADE_SKIP_MANUAL_VERIFICATION, UpgradeType.HOST_ORDERED));
- }
+ public RepositoryVersions(RepositoryVersionEntity from, RepositoryVersionEntity to) {
+ fromRepositoryId = from.getId();
+ fromRepositoryVersion = from.getVersion();
- if (!requestMap.containsKey(UPGRADE_HOST_ORDERED_HOSTS)) {
- throw new AmbariException(
- String.format("The %s property is required when creating a %s upgrade.",
- UPGRADE_HOST_ORDERED_HOSTS, UpgradeType.HOST_ORDERED));
- }
-
- List<HostOrderItem> hostOrderItems = extractHostOrderItemsFromRequest(requestMap);
- List<String> hostsFromRequest = new ArrayList<>(hostOrderItems.size());
- for (HostOrderItem hostOrderItem : hostOrderItems) {
- if (hostOrderItem.getType() == HostOrderActionType.HOST_UPGRADE) {
- hostsFromRequest.addAll(hostOrderItem.getActionItems());
- }
- }
-
- // ensure that all hosts for this cluster are accounted for
- Collection<Host> hosts = cluster.getHosts();
- Set<String> clusterHostNames = new HashSet<>(hosts.size());
- for (Host host : hosts) {
- clusterHostNames.add(host.getHostName());
- }
-
- Collection<String> disjunction = CollectionUtils.disjunction(hostsFromRequest,
- clusterHostNames);
-
- if (CollectionUtils.isNotEmpty(disjunction)) {
- throw new AmbariException(String.format(
- "The supplied list of hosts must match the cluster hosts in an upgrade of type %s. The following hosts are either missing or invalid: %s",
- UpgradeType.HOST_ORDERED, StringUtils.join(disjunction, ", ")));
- }
-
- // verify that the upgradepack has the required grouping and set the
- // action items on it
- HostOrderGrouping hostOrderGrouping = null;
- List<Grouping> groupings = upgradePack.getGroups(direction);
- for (Grouping grouping : groupings) {
- if (grouping instanceof HostOrderGrouping) {
- hostOrderGrouping = (HostOrderGrouping) grouping;
- hostOrderGrouping.setHostOrderItems(hostOrderItems);
- }
- }
+ toRepositoryId = to.getId();
+ toRepositoryVersion = to.getVersion();
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java
index 92f1d09..a65a94a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceComponentDesiredStateDAO.java
@@ -20,14 +20,12 @@ package org.apache.ambari.server.orm.dao;
import java.util.List;
-import javax.persistence.CascadeType;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;
import org.apache.ambari.server.orm.RequiresSession;
import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
-import org.apache.ambari.server.orm.entities.ServiceComponentHistoryEntity;
import org.apache.ambari.server.orm.entities.ServiceComponentVersionEntity;
import com.google.inject.Inject;
@@ -130,56 +128,6 @@ public class ServiceComponentDesiredStateDAO {
}
/**
- * Creates a service component upgrade/downgrade historical event.
- *
- * @param serviceComponentHistoryEntity
- */
- @Transactional
- public void create(ServiceComponentHistoryEntity serviceComponentHistoryEntity) {
- entityManagerProvider.get().persist(serviceComponentHistoryEntity);
- }
-
- /**
- * Merges a service component upgrade/downgrade historical event, creating it
- * in the process if it does not already exist. The associated
- * {@link ServiceComponentDesiredStateEntity} is automatically merged via its
- * {@link CascadeType}.
- *
- * @param serviceComponentHistoryEntity
- * @return
- */
- @Transactional
- public ServiceComponentHistoryEntity merge(
- ServiceComponentHistoryEntity serviceComponentHistoryEntity) {
- return entityManagerProvider.get().merge(serviceComponentHistoryEntity);
- }
-
- /**
- * Gets the history for a component.
- *
- * @param clusterId
- * the component's cluster.
- * @param serviceName
- * the component's service (not {@code null}).
- * @param componentName
- * the component's name (not {@code null}).
- * @return
- */
- @RequiresSession
- public List<ServiceComponentHistoryEntity> findHistory(long clusterId, String serviceName,
- String componentName) {
- EntityManager entityManager = entityManagerProvider.get();
- TypedQuery<ServiceComponentHistoryEntity> query = entityManager.createNamedQuery(
- "ServiceComponentHistoryEntity.findByComponent", ServiceComponentHistoryEntity.class);
-
- query.setParameter("clusterId", clusterId);
- query.setParameter("serviceName", serviceName);
- query.setParameter("componentName", componentName);
-
- return daoUtils.selectList(query);
- }
-
- /**
* @param clusterId the cluster id
* @param serviceName the service name
* @param componentName the component name
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
index 7576e00..baba85e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
@@ -113,15 +113,6 @@ public class ServiceComponentDesiredStateEntity {
@OneToMany(mappedBy = "serviceComponentDesiredStateEntity")
private Collection<HostComponentDesiredStateEntity> hostComponentDesiredStateEntities;
- /**
- * All of the upgrades and downgrades which have occurred for this component.
- * Can be {@code null} for none.
- */
- @OneToMany(
- mappedBy = "m_serviceComponentDesiredStateEntity",
- cascade = { CascadeType.ALL })
- private Collection<ServiceComponentHistoryEntity> serviceComponentHistory;
-
@OneToMany(mappedBy = "m_serviceComponentDesiredStateEntity", cascade = { CascadeType.ALL })
private Collection<ServiceComponentVersionEntity> serviceComponentVersions;
@@ -178,33 +169,6 @@ public class ServiceComponentDesiredStateEntity {
}
/**
- * Adds a historical entry for the version of this service component. New
- * entries are automatically created when this entity is merged via a
- * {@link CascadeType#MERGE}.
- *
- * @param historicalEntry
- * the entry to add.
- */
- public void addHistory(ServiceComponentHistoryEntity historicalEntry) {
- if (null == serviceComponentHistory) {
- serviceComponentHistory = new ArrayList<>();
- }
-
- serviceComponentHistory.add(historicalEntry);
- historicalEntry.setServiceComponentDesiredState(this);
- }
-
- /**
- * Gets the history of this component's upgrades and downgrades.
- *
- * @return the component history, or {@code null} if none.
- */
- public Collection<ServiceComponentHistoryEntity> getHistory() {
- return serviceComponentHistory;
- }
-
-
- /**
* @param versionEntity the version to add
*/
public void addVersion(ServiceComponentVersionEntity versionEntity) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentHistoryEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentHistoryEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentHistoryEntity.java
deleted file mode 100644
index 1521468..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentHistoryEntity.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.server.orm.entities;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-
-import org.apache.commons.lang.builder.HashCodeBuilder;
-
-import com.google.common.base.Objects;
-
-/**
- * The {@link ServiceComponentHistoryEntity} class is used to represent an
- * upgrade or downgrade which was performed on an individual service component.
- */
-@Entity
-@Table(name = "servicecomponent_history")
-@TableGenerator(
- name = "servicecomponent_history_id_generator",
- table = "ambari_sequences",
- pkColumnName = "sequence_name",
- valueColumnName = "sequence_value",
- pkColumnValue = "servicecomponent_history_id_seq",
- initialValue = 0)
-@NamedQueries({ @NamedQuery(
- name = "ServiceComponentHistoryEntity.findByComponent",
- query = "SELECT history FROM ServiceComponentHistoryEntity history WHERE history.m_serviceComponentDesiredStateEntity.clusterId = :clusterId AND history.m_serviceComponentDesiredStateEntity.serviceName = :serviceName AND history.m_serviceComponentDesiredStateEntity.componentName = :componentName") })
-public class ServiceComponentHistoryEntity {
-
- @Id
- @GeneratedValue(
- strategy = GenerationType.TABLE,
- generator = "servicecomponent_history_id_generator")
- @Column(name = "id", nullable = false, updatable = false)
- private long m_id;
-
- @ManyToOne(optional = false, cascade = { CascadeType.MERGE })
- @JoinColumn(name = "component_id", referencedColumnName = "id", nullable = false)
- private ServiceComponentDesiredStateEntity m_serviceComponentDesiredStateEntity;
-
- @ManyToOne(optional = false)
- @JoinColumn(name = "from_stack_id", referencedColumnName = "stack_id", nullable = false)
- private StackEntity m_fromStack;
-
- @ManyToOne(optional = false)
- @JoinColumn(name = "to_stack_id", referencedColumnName = "stack_id", nullable = false)
- private StackEntity m_toStack;
-
- @ManyToOne(optional = false)
- @JoinColumn(name = "upgrade_id", referencedColumnName = "upgrade_id", nullable = false)
- private UpgradeEntity m_upgradeEntity;
-
- public ServiceComponentDesiredStateEntity getServiceComponentDesiredState() {
- return m_serviceComponentDesiredStateEntity;
- }
-
- /**
- * Sets the component associated with this historical entry.
- *
- * @param serviceComponentDesiredStateEntity
- * the component to associate with this historical entry (not
- * {@code null}).
- */
- public void setServiceComponentDesiredState(ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity) {
- m_serviceComponentDesiredStateEntity = serviceComponentDesiredStateEntity;
- }
-
- /**
- * @return the id
- */
- public long getId() {
- return m_id;
- }
-
- /**
- * @return the fromStack
- */
- public StackEntity getFromStack() {
- return m_fromStack;
- }
-
- /**
- * @param fromStack
- * the fromStack to set
- */
- public void setFromStack(StackEntity fromStack) {
- m_fromStack = fromStack;
- }
-
- /**
- * @return the toStack
- */
- public StackEntity getToStack() {
- return m_toStack;
- }
-
- /**
- * @param toStack
- * the toStack to set
- */
- public void setToStack(StackEntity toStack) {
- m_toStack = toStack;
- }
-
- /**
- * @return the upgradeEntity
- */
- public UpgradeEntity getUpgrade() {
- return m_upgradeEntity;
- }
-
- /**
- * @param upgradeEntity
- * the upgradeEntity to set
- */
- public void setUpgrade(UpgradeEntity upgradeEntity) {
- m_upgradeEntity = upgradeEntity;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int hashCode() {
- HashCodeBuilder hashCodeBuilder = new HashCodeBuilder();
- hashCodeBuilder.append(m_fromStack);
- hashCodeBuilder.append(m_toStack);
- hashCodeBuilder.append(m_upgradeEntity);
- hashCodeBuilder.append(m_serviceComponentDesiredStateEntity);
- return hashCodeBuilder.toHashCode();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (obj == null) {
- return false;
- }
-
- if (getClass() != obj.getClass()) {
- return false;
- }
-
- final ServiceComponentHistoryEntity other = (ServiceComponentHistoryEntity) obj;
- return Objects.equal(m_fromStack, other.m_fromStack)
- && Objects.equal(m_toStack, other.m_toStack)
- && Objects.equal(m_upgradeEntity, other.m_upgradeEntity)
- && Objects.equal(m_serviceComponentDesiredStateEntity, other.m_serviceComponentDesiredStateEntity);
- }
-}
[47/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/245afc1b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/245afc1b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/245afc1b
Branch: refs/heads/trunk
Commit: 245afc1b4fa87b6d5ce30f403c15858f90d2ce86
Parents: 7a7f489 14acc0a
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Thu May 25 12:57:50 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Thu May 25 12:57:50 2017 -0400
----------------------------------------------------------------------
.../main/resources/ui/admin-web/app/index.html | 2 +-
.../resources/ui/admin-web/app/styles/main.css | 7 +-
.../admin-web/app/views/ambariViews/edit.html | 2 +-
.../main/python/ambari_commons/inet_utils.py | 12 ++
.../persist/jpa/AmbariJpaPersistModule.java | 2 +-
.../persist/jpa/AmbariJpaPersistService.java | 2 +-
.../apache/ambari/annotations/Experimental.java | 2 +-
.../ambari/annotations/ExperimentalFeature.java | 2 +-
.../org/apache/ambari/annotations/Markdown.java | 2 +-
.../ambari/annotations/TransactionalLock.java | 2 +-
.../apache/ambari/server/AmbariException.java | 2 +-
.../org/apache/ambari/server/AmbariService.java | 2 +-
.../ambari/server/ClusterNotFoundException.java | 2 +-
.../server/ConfigGroupNotFoundException.java | 2 +-
.../ambari/server/DBConnectionVerification.java | 2 +-
.../server/DuplicateResourceException.java | 2 +-
.../apache/ambari/server/EagerSingleton.java | 2 +-
.../ambari/server/HostNotFoundException.java | 2 +-
.../server/KdcServerConnectionVerification.java | 2 +-
.../ambari/server/ObjectNotFoundException.java | 2 +-
.../server/ParentObjectNotFoundException.java | 2 +-
.../java/org/apache/ambari/server/Role.java | 2 +-
.../org/apache/ambari/server/RoleCommand.java | 2 +-
.../ServiceComponentHostNotFoundException.java | 2 +-
.../ServiceComponentNotFoundException.java | 2 +-
.../ambari/server/ServiceNotFoundException.java | 2 +-
.../ambari/server/StackAccessException.java | 2 +-
.../ambari/server/StateRecoveryManager.java | 2 +-
.../apache/ambari/server/StaticallyInject.java | 2 +-
.../server/actionmanager/ActionDBAccessor.java | 2 +-
.../actionmanager/ActionDBAccessorImpl.java | 2 +-
.../server/actionmanager/ActionManager.java | 2 +-
.../server/actionmanager/ActionScheduler.java | 2 +-
.../ambari/server/actionmanager/ActionType.java | 2 +-
.../ExecutionCommandWrapperFactory.java | 2 +-
.../server/actionmanager/HostRoleCommand.java | 2 +-
.../server/actionmanager/HostRoleStatus.java | 2 +-
.../ambari/server/actionmanager/Request.java | 8 +-
.../server/actionmanager/RequestStatus.java | 2 +-
.../ServiceComponentHostEventWrapper.java | 6 +-
.../ambari/server/actionmanager/Stage.java | 2 +-
.../server/actionmanager/TargetHostType.java | 2 +-
.../apache/ambari/server/agent/ActionQueue.java | 2 +-
.../ambari/server/agent/AgentCommand.java | 2 +-
.../apache/ambari/server/agent/AgentEnv.java | 2 +-
.../ambari/server/agent/AgentRequests.java | 2 +-
.../server/agent/AlertDefinitionCommand.java | 2 +-
.../server/agent/AlertExecutionCommand.java | 2 +-
.../ambari/server/agent/CancelCommand.java | 2 +-
.../ambari/server/agent/CommandReport.java | 2 +-
.../server/agent/ComponentRecoveryReport.java | 2 +-
.../ambari/server/agent/ComponentStatus.java | 2 +-
.../ambari/server/agent/ComponentsResponse.java | 2 +-
.../apache/ambari/server/agent/DiskInfo.java | 2 +-
.../ambari/server/agent/ExecutionCommand.java | 2 +-
.../apache/ambari/server/agent/HeartBeat.java | 2 +-
.../ambari/server/agent/HeartBeatHandler.java | 7 +-
.../ambari/server/agent/HeartBeatResponse.java | 2 +-
.../ambari/server/agent/HeartbeatMonitor.java | 2 +-
.../ambari/server/agent/HeartbeatProcessor.java | 2 +-
.../apache/ambari/server/agent/HostInfo.java | 2 +-
.../apache/ambari/server/agent/HostStatus.java | 2 +-
.../ambari/server/agent/RecoveryConfig.java | 2 +-
.../server/agent/RecoveryConfigHelper.java | 4 +-
.../ambari/server/agent/RecoveryReport.java | 2 +-
.../apache/ambari/server/agent/Register.java | 2 +-
.../server/agent/RegistrationCommand.java | 2 +-
.../server/agent/RegistrationResponse.java | 2 +-
.../ambari/server/agent/RegistrationStatus.java | 2 +-
.../ambari/server/agent/StatusCommand.java | 2 +-
.../ambari/server/agent/rest/AgentResource.java | 2 +-
.../alerts/AgentHeartbeatAlertRunnable.java | 2 +-
.../ambari/server/alerts/AlertRunnable.java | 2 +-
.../alerts/AmbariPerformanceRunnable.java | 2 +-
.../alerts/ComponentVersionAlertRunnable.java | 4 +-
.../server/alerts/StaleAlertRunnable.java | 2 +-
.../ambari/server/api/GsonJsonProvider.java | 2 +-
.../server/api/UserNameOverrideFilter.java | 2 +-
.../api/handlers/BaseManagementHandler.java | 2 +-
.../server/api/handlers/CreateHandler.java | 2 +-
.../server/api/handlers/DeleteHandler.java | 2 +-
.../server/api/handlers/QueryCreateHandler.java | 2 +-
.../ambari/server/api/handlers/ReadHandler.java | 2 +-
.../server/api/handlers/RequestHandler.java | 2 +-
.../server/api/handlers/UpdateHandler.java | 6 +-
.../api/predicate/InvalidQueryException.java | 2 +-
.../server/api/predicate/PredicateCompiler.java | 2 +-
.../ambari/server/api/predicate/QueryLexer.java | 6 +-
.../server/api/predicate/QueryParser.java | 2 +-
.../ambari/server/api/predicate/Token.java | 2 +-
.../expressions/AbstractExpression.java | 2 +-
.../api/predicate/expressions/Expression.java | 2 +-
.../expressions/LogicalExpression.java | 2 +-
.../expressions/LogicalExpressionFactory.java | 2 +-
.../expressions/NotLogicalExpression.java | 2 +-
.../expressions/RelationalExpression.java | 2 +-
.../predicate/operators/AbstractOperator.java | 2 +-
.../api/predicate/operators/AndOperator.java | 2 +-
.../api/predicate/operators/EqualsOperator.java | 2 +-
.../api/predicate/operators/FilterOperator.java | 2 +-
.../operators/GreaterEqualsOperator.java | 2 +-
.../predicate/operators/GreaterOperator.java | 2 +-
.../api/predicate/operators/InOperator.java | 2 +-
.../predicate/operators/IsEmptyOperator.java | 2 +-
.../predicate/operators/LessEqualsOperator.java | 2 +-
.../api/predicate/operators/LessOperator.java | 2 +-
.../predicate/operators/LogicalOperator.java | 2 +-
.../operators/LogicalOperatorFactory.java | 2 +-
.../predicate/operators/NotEqualsOperator.java | 2 +-
.../api/predicate/operators/NotOperator.java | 2 +-
.../api/predicate/operators/Operator.java | 2 +-
.../api/predicate/operators/OrOperator.java | 2 +-
.../predicate/operators/RelationalOperator.java | 2 +-
.../operators/RelationalOperatorFactory.java | 2 +-
.../query/ExtendedResourcePredicateVisitor.java | 2 +-
.../server/api/query/JpaPredicateVisitor.java | 4 +-
.../ambari/server/api/query/JpaSortBuilder.java | 2 +-
.../api/query/ProcessingPredicateVisitor.java | 2 +-
.../apache/ambari/server/api/query/Query.java | 2 +-
.../ambari/server/api/query/QueryImpl.java | 2 +-
.../ambari/server/api/query/QueryInfo.java | 2 +-
.../api/query/SubResourcePredicateVisitor.java | 2 +-
.../api/query/render/AlertStateSummary.java | 4 +-
.../api/query/render/AlertStateValues.java | 4 +-
.../render/AlertSummaryGroupedRenderer.java | 2 +-
.../api/query/render/AlertSummaryRenderer.java | 2 +-
.../server/api/query/render/BaseRenderer.java | 2 +-
.../query/render/ClusterBlueprintRenderer.java | 7 +-
.../api/query/render/DefaultRenderer.java | 2 +-
.../query/render/MetricsPaddingRenderer.java | 2 +-
.../api/query/render/MinimalRenderer.java | 2 +-
.../server/api/query/render/Renderer.java | 2 +-
.../api/resources/ActionResourceDefinition.java | 2 +-
.../ActiveWidgetLayoutResourceDefinition.java | 2 +-
.../resources/AlertDefResourceDefinition.java | 2 +-
.../resources/AlertGroupResourceDefinition.java | 2 +-
.../AlertHistoryResourceDefinition.java | 2 +-
.../AlertNoticeResourceDefinition.java | 2 +-
.../api/resources/AlertResourceDefinition.java | 2 +-
.../AlertTargetResourceDefinition.java | 2 +-
.../api/resources/BaseResourceDefinition.java | 2 +-
.../resources/BlueprintResourceDefinition.java | 2 +-
.../ClientConfigResourceDefinition.java | 2 +-
.../resources/ClusterResourceDefinition.java | 2 +-
.../resources/ComponentResourceDefinition.java | 2 +-
...ComponentStackVersionResourceDefinition.java | 2 +-
.../ConfigGroupResourceDefinition.java | 2 +-
.../ConfigurationResourceDefinition.java | 2 +-
.../DetachedHostResourceDefinition.java | 2 +-
.../ExtensionLinkResourceDefinition.java | 2 +-
.../resources/ExtensionResourceDefinition.java | 2 +-
.../ExtensionVersionResourceDefinition.java | 2 +-
.../api/resources/FeedResourceDefinition.java | 2 +-
.../api/resources/GroupResourceDefinition.java | 2 +-
.../HostComponentProcessResourceDefinition.java | 2 +-
.../HostComponentResourceDefinition.java | 2 +-
.../api/resources/HostResourceDefinition.java | 2 +-
.../resources/InstanceResourceDefinition.java | 2 +-
.../api/resources/JobResourceDefinition.java | 2 +-
.../LdapSyncEventResourceDefinition.java | 2 +-
.../resources/LoggingResourceDefinition.java | 2 +-
.../api/resources/MemberResourceDefinition.java | 2 +-
.../OperatingSystemResourceDefinition.java | 2 +-
.../resources/PermissionResourceDefinition.java | 2 +-
.../resources/PrivilegeResourceDefinition.java | 2 +-
.../RecommendationResourceDefinition.java | 2 +-
.../RemoteClusterResourceDefinition.java | 2 +-
.../resources/RepositoryResourceDefinition.java | 2 +-
.../RepositoryVersionResourceDefinition.java | 2 +-
.../resources/RequestResourceDefinition.java | 2 +-
.../RequestScheduleResourceDefinition.java | 2 +-
.../api/resources/ResourceDefinition.java | 2 +-
.../server/api/resources/ResourceInstance.java | 2 +-
.../api/resources/ResourceInstanceFactory.java | 2 +-
.../resources/ResourceInstanceFactoryImpl.java | 6 +-
.../RootServiceComponentResourceDefinition.java | 2 +-
...tServiceHostComponentResourceDefinition.java | 2 +-
.../RootServiceResourceDefinition.java | 2 +-
.../resources/ServiceResourceDefinition.java | 2 +-
.../api/resources/SimpleResourceDefinition.java | 4 +-
...nfigurationDependencyResourceDefinition.java | 2 +-
.../StackConfigurationResourceDefinition.java | 2 +-
.../StackDependencyResourceDefinition.java | 2 +-
...ackLevelConfigurationResourceDefinition.java | 2 +-
.../api/resources/StackResourceDefinition.java | 4 +-
...StackServiceComponentResourceDefinition.java | 2 +-
.../StackServiceResourceDefinition.java | 2 +-
.../StackVersionResourceDefinition.java | 2 +-
.../api/resources/SubResourceDefinition.java | 2 +-
.../TargetClusterResourceDefinition.java | 2 +-
.../TaskAttemptResourceDefinition.java | 2 +-
.../api/resources/TaskResourceDefinition.java | 4 +-
.../resources/UpgradeResourceDefinition.java | 2 +-
.../api/resources/UserResourceDefinition.java | 2 +-
.../resources/ValidationResourceDefinition.java | 2 +-
.../VersionDefinitionResourceDefinition.java | 2 +-
.../ViewExternalSubResourceDefinition.java | 2 +-
.../ViewInstanceResourceDefinition.java | 2 +-
.../ViewPermissionResourceDefinition.java | 2 +-
.../api/resources/ViewResourceDefinition.java | 2 +-
.../resources/ViewUrlResourceDefinition.java | 2 +-
.../ViewVersionResourceDefinition.java | 2 +-
.../WidgetLayoutResourceDefinition.java | 2 +-
.../api/resources/WidgetResourceDefinition.java | 3 +-
.../resources/WorkflowResourceDefinition.java | 2 +-
.../server/api/rest/BootStrapResource.java | 2 +-
.../ambari/server/api/rest/HealthCheck.java | 2 +-
.../api/rest/KdcServerReachabilityCheck.java | 2 +-
.../server/api/services/ActionService.java | 2 +-
.../api/services/AlertDefinitionService.java | 2 +-
.../server/api/services/AlertGroupService.java | 2 +-
.../api/services/AlertHistoryService.java | 2 +-
.../server/api/services/AlertNoticeService.java | 2 +-
.../server/api/services/AlertService.java | 2 +-
.../server/api/services/AlertTargetService.java | 4 +-
.../server/api/services/AmbariMetaInfo.java | 2 +-
.../api/services/AmbariPrivilegeService.java | 2 +-
.../ambari/server/api/services/BaseRequest.java | 2 +-
.../ambari/server/api/services/BaseService.java | 2 +-
.../server/api/services/BlueprintService.java | 2 +-
.../api/services/ClusterPrivilegeService.java | 2 +-
.../services/ClusterStackVersionService.java | 2 +-
.../CompatibleRepositoryVersionService.java | 2 +-
.../server/api/services/ComponentService.java | 2 +-
.../server/api/services/ConfigGroupService.java | 2 +-
.../api/services/ConfigurationService.java | 2 +-
.../server/api/services/DeleteRequest.java | 2 +-
.../api/services/DeleteResultMetadata.java | 2 +-
.../api/services/ExtensionLinksService.java | 2 +-
.../server/api/services/ExtensionsService.java | 2 +-
.../ambari/server/api/services/FeedService.java | 2 +-
.../ambari/server/api/services/GetRequest.java | 2 +-
.../api/services/HostComponentService.java | 2 +-
.../ambari/server/api/services/HostService.java | 2 +-
.../api/services/HostStackVersionService.java | 2 +-
.../server/api/services/InstanceService.java | 2 +-
.../ambari/server/api/services/JobService.java | 2 +-
.../api/services/LdapSyncEventService.java | 2 +-
.../server/api/services/LocalUriInfo.java | 2 +-
.../server/api/services/LoggingService.java | 2 +-
.../server/api/services/NamedPropertySet.java | 2 +-
.../api/services/OperatingSystemService.java | 19 +--
.../server/api/services/PermissionService.java | 2 +-
.../api/services/PersistKeyValueImpl.java | 2 +-
.../api/services/PersistKeyValueService.java | 2 +-
.../ambari/server/api/services/PostRequest.java | 2 +-
.../api/services/PreUpgradeCheckService.java | 2 +-
.../server/api/services/PrivilegeService.java | 2 +-
.../ambari/server/api/services/PutRequest.java | 2 +-
.../server/api/services/QueryPostRequest.java | 2 +-
.../api/services/RecommendationService.java | 2 +-
.../api/services/RemoteClustersService.java | 2 +-
.../server/api/services/RepositoryService.java | 19 +--
.../api/services/RepositoryVersionService.java | 2 +-
.../ambari/server/api/services/Request.java | 2 +-
.../ambari/server/api/services/RequestBody.java | 2 +-
.../server/api/services/RequestFactory.java | 2 +-
.../api/services/RequestScheduleService.java | 2 +-
.../server/api/services/RequestService.java | 2 +-
.../ambari/server/api/services/Result.java | 2 +-
.../ambari/server/api/services/ResultImpl.java | 2 +-
.../server/api/services/ResultMetadata.java | 2 +-
.../api/services/ResultPostProcessor.java | 2 +-
.../api/services/ResultPostProcessorImpl.java | 2 +-
.../server/api/services/ResultStatus.java | 2 +-
.../server/api/services/StacksService.java | 2 +-
.../server/api/services/StageService.java | 2 +-
.../api/services/TargetClusterService.java | 2 +-
.../server/api/services/TaskAttemptService.java | 2 +-
.../ambari/server/api/services/TaskService.java | 2 +-
.../api/services/UpgradeGroupService.java | 2 +-
.../server/api/services/UpgradeItemService.java | 2 +-
.../server/api/services/UpgradeService.java | 2 +-
.../api/services/UpgradeSummaryService.java | 4 +-
.../server/api/services/ValidationService.java | 2 +-
.../api/services/VersionDefinitionService.java | 2 +-
.../server/api/services/ViewUrlsService.java | 2 +-
.../api/services/WidgetLayoutService.java | 2 +-
.../server/api/services/WidgetService.java | 2 +-
.../server/api/services/WorkflowService.java | 2 +-
.../api/services/groups/GroupService.java | 2 +-
.../api/services/groups/MemberService.java | 2 +-
.../services/parsers/BodyParseException.java | 2 +-
.../services/parsers/JsonRequestBodyParser.java | 2 +-
.../api/services/parsers/RequestBodyParser.java | 2 +-
.../persistence/PersistenceManager.java | 2 +-
.../persistence/PersistenceManagerImpl.java | 2 +-
.../services/serializers/JsonSerializer.java | 2 +-
.../services/serializers/ResultSerializer.java | 2 +-
.../stackadvisor/StackAdvisorException.java | 2 +-
.../stackadvisor/StackAdvisorHelper.java | 2 +-
.../stackadvisor/StackAdvisorRequest.java | 2 +-
.../StackAdvisorRequestException.java | 2 +-
.../stackadvisor/StackAdvisorResponse.java | 2 +-
.../stackadvisor/StackAdvisorRunner.java | 2 +-
.../ComponentLayoutRecommendationCommand.java | 2 +-
.../ComponentLayoutValidationCommand.java | 2 +-
...rationDependenciesRecommendationCommand.java | 2 +-
.../ConfigurationRecommendationCommand.java | 2 +-
.../ConfigurationValidationCommand.java | 2 +-
.../commands/StackAdvisorCommand.java | 2 +-
.../commands/StackAdvisorCommandType.java | 2 +-
.../recommendations/RecommendationResponse.java | 2 +-
.../validations/ValidationResponse.java | 2 +-
.../users/ActiveWidgetLayoutService.java | 2 +-
.../services/users/UserPrivilegeService.java | 4 +-
.../server/api/services/users/UserService.java | 2 +-
.../views/ViewDataMigrationService.java | 2 +-
.../views/ViewExternalSubResourceService.java | 2 +-
.../services/views/ViewPermissionService.java | 2 +-
.../services/views/ViewPrivilegeService.java | 2 +-
.../server/api/services/views/ViewService.java | 2 +-
.../services/views/ViewSubResourceService.java | 2 +-
.../api/services/views/ViewVersionService.java | 2 +-
.../apache/ambari/server/api/util/TreeNode.java | 2 +-
.../ambari/server/api/util/TreeNodeImpl.java | 2 +-
.../ambari/server/audit/AsyncAuditLogger.java | 2 +-
.../apache/ambari/server/audit/AuditLogger.java | 2 +-
.../server/audit/AuditLoggerDefaultImpl.java | 2 +-
.../ambari/server/audit/AuditLoggerModule.java | 2 +-
.../eventcreator/DefaultEventCreator.java | 2 +-
.../ambari/server/bootstrap/BSHostStatus.java | 2 +-
.../server/bootstrap/BSHostStatusCollector.java | 2 +-
.../ambari/server/bootstrap/BSResponse.java | 2 +-
.../ambari/server/bootstrap/BSRunner.java | 2 +-
.../ambari/server/bootstrap/BootStrapImpl.java | 2 +-
.../server/bootstrap/BootStrapPostStatus.java | 2 +-
.../server/bootstrap/BootStrapStatus.java | 2 +-
.../DistributeRepositoriesStructuredOutput.java | 2 +-
.../server/bootstrap/FifoLinkedHashMap.java | 2 +-
.../ambari/server/bootstrap/SshHostInfo.java | 2 +-
.../server/checks/AtlasPresenceCheck.java | 2 +-
.../ambari/server/checks/CheckDescription.java | 2 +-
.../server/checks/ConfigurationMergeCheck.java | 2 +-
.../checks/DatabaseConsistencyCheckHelper.java | 4 +-
.../HardcodedStackVersionPropertiesCheck.java | 2 +-
.../server/checks/RangerAuditDbCheck.java | 2 +-
.../server/checks/RangerSSLConfigCheck.java | 2 +-
.../server/checks/ServicePresenceCheck.java | 2 +-
.../ambari/server/checks/UpgradeCheck.java | 2 +-
.../ambari/server/checks/UpgradeCheckGroup.java | 2 +-
.../server/checks/UpgradeCheckRegistry.java | 2 +-
.../server/checks/VersionMismatchCheck.java | 2 +-
.../server/cleanup/ClasspathScannerUtils.java | 2 +-
.../server/cleanup/TimeBasedCleanupPolicy.java | 5 +-
.../ComponentSSLConfiguration.java | 2 +-
.../AbstractRootServiceResponseFactory.java | 2 +-
.../controller/ActionExecutionContext.java | 2 +-
.../ambari/server/controller/ActionRequest.java | 2 +-
.../server/controller/ActionRequestSwagger.java | 2 +-
.../server/controller/ActionResponse.java | 2 +-
.../controller/ActiveWidgetLayoutRequest.java | 2 +-
.../controller/ActiveWidgetLayoutResponse.java | 2 +-
.../server/controller/AlertCurrentRequest.java | 2 +-
.../controller/AlertDefinitionResponse.java | 2 +-
.../server/controller/AlertHistoryRequest.java | 2 +-
.../server/controller/AlertNoticeRequest.java | 2 +-
.../controller/AmbariActionExecutionHelper.java | 2 +-
.../AmbariCustomCommandExecutionHelper.java | 21 +--
.../server/controller/AmbariHandlerList.java | 2 +-
.../AmbariManagementControllerImpl.java | 24 +--
.../server/controller/AmbariSessionManager.java | 2 +-
.../ambari/server/controller/ApiModel.java | 2 +-
.../server/controller/BlueprintSwagger.java | 2 +-
.../server/controller/ClusterRequest.java | 2 +-
.../controller/ComponentDependencyResponse.java | 2 +-
.../server/controller/ConfigGroupRequest.java | 2 +-
.../server/controller/ConfigGroupResponse.java | 2 +-
.../server/controller/ConfigurationRequest.java | 2 +-
.../controller/ConfigurationResponse.java | 2 +-
.../server/controller/ControllerRequest.java | 2 +-
.../server/controller/ControllerResponse.java | 2 +-
.../server/controller/ExecuteActionRequest.java | 2 +-
.../server/controller/ExecuteCommandJson.java | 6 +-
.../server/controller/ExtensionLinkRequest.java | 2 +-
.../controller/ExtensionLinkResponse.java | 2 +-
.../server/controller/ExtensionRequest.java | 2 +-
.../server/controller/ExtensionResponse.java | 2 +-
.../controller/ExtensionVersionRequest.java | 2 +-
.../controller/ExtensionVersionResponse.java | 2 +-
.../controller/GroupPrivilegeResponse.java | 2 +-
.../ambari/server/controller/GroupRequest.java | 2 +-
.../ambari/server/controller/GroupResponse.java | 2 +-
.../HostComponentProcessResponse.java | 2 +-
.../ambari/server/controller/HostRequest.java | 2 +-
.../ambari/server/controller/HostResponse.java | 2 +-
.../ambari/server/controller/HostsMap.java | 2 +-
.../server/controller/KerberosHelperImpl.java | 8 +-
.../server/controller/LdapSyncRequest.java | 2 +-
.../controller/MaintenanceStateHelper.java | 2 +-
.../ambari/server/controller/MemberRequest.java | 2 +-
.../server/controller/MemberResponse.java | 2 +-
.../controller/OperatingSystemRequest.java | 2 +-
.../controller/OperatingSystemResponse.java | 2 +-
.../server/controller/PrivilegeResponse.java | 2 +-
.../server/controller/QuickLinksResponse.java | 2 +-
.../server/controller/RepositoryRequest.java | 2 +-
.../server/controller/RepositoryResponse.java | 2 +-
.../server/controller/RequestPostRequest.java | 2 +-
.../server/controller/RequestPostResponse.java | 2 +-
.../server/controller/RequestPutRequest.java | 2 +-
.../server/controller/RequestRequest.java | 2 +-
.../server/controller/RequestResponse.java | 2 +-
.../controller/RequestScheduleRequest.java | 2 +-
.../controller/RequestScheduleResponse.java | 2 +-
.../controller/RequestStatusResponse.java | 2 +-
.../controller/ResourceProviderFactory.java | 2 +-
.../controller/RootServiceComponentRequest.java | 2 +-
.../RootServiceComponentResponse.java | 2 +-
.../RootServiceHostComponentRequest.java | 2 +-
.../server/controller/RootServiceRequest.java | 2 +-
.../controller/RootServiceResponseFactory.java | 2 +-
.../controller/ServiceComponentHostRequest.java | 2 +-
.../ServiceComponentHostResponse.java | 2 +-
.../controller/ServiceComponentRequest.java | 2 +-
.../controller/ServiceComponentResponse.java | 2 +-
.../server/controller/ServiceRequest.java | 2 +-
.../controller/ServiceRequestSwagger.java | 2 +-
.../server/controller/ServiceResponse.java | 2 +-
.../controller/StackArtifactResponse.java | 2 +-
.../StackConfigurationDependencyRequest.java | 2 +-
.../StackConfigurationDependencyResponse.java | 2 +-
.../controller/StackConfigurationRequest.java | 2 +-
.../controller/StackConfigurationResponse.java | 2 +-
.../StackLevelConfigurationRequest.java | 2 +-
.../StackLevelConfigurationResponse.java | 2 +-
.../ambari/server/controller/StackRequest.java | 2 +-
.../ambari/server/controller/StackResponse.java | 2 +-
.../StackServiceArtifactResponse.java | 2 +-
.../StackServiceComponentRequest.java | 2 +-
.../StackServiceComponentResponse.java | 2 +-
.../server/controller/StackServiceRequest.java | 2 +-
.../server/controller/StackServiceResponse.java | 2 +-
.../server/controller/StackVersionRequest.java | 2 +-
.../server/controller/StackVersionResponse.java | 2 +-
.../ambari/server/controller/ThemeResponse.java | 2 +-
.../controller/UserAuthorizationResponse.java | 2 +-
.../controller/UserPrivilegeResponse.java | 2 +-
.../ambari/server/controller/UserRequest.java | 2 +-
.../ambari/server/controller/UserResponse.java | 2 +-
.../server/controller/ViewInstanceRequest.java | 2 +-
.../server/controller/ViewInstanceResponse.java | 2 +-
.../controller/ViewPermissionResponse.java | 2 +-
.../server/controller/ViewPrivilegeRequest.java | 2 +-
.../controller/ViewPrivilegeResponse.java | 2 +-
.../ambari/server/controller/ViewResponse.java | 2 +-
.../server/controller/ViewVersionResponse.java | 2 +-
.../server/controller/WidgetResponse.java | 2 +-
.../AbstractControllerResourceProvider.java | 2 +-
.../internal/AbstractDRResourceProvider.java | 2 +-
.../internal/AbstractPropertyProvider.java | 2 +-
.../internal/AbstractProviderModule.java | 2 +-
.../internal/AbstractResourceProvider.java | 2 +-
.../internal/ActionResourceProvider.java | 2 +-
.../ActiveWidgetLayoutResourceProvider.java | 2 +-
.../internal/AlertHistoryResourceProvider.java | 2 +-
.../internal/AlertNoticeResourceProvider.java | 2 +-
.../internal/AlertResourceProvider.java | 2 +-
.../internal/AlertSummaryPropertyProvider.java | 2 +-
.../controller/internal/AppCookieManager.java | 2 +-
.../AtlasServerHttpPropertyRequest.java | 4 +-
.../controller/internal/BaseClusterRequest.java | 2 +-
.../controller/internal/BaseProvider.java | 2 +-
.../BlueprintConfigurationProcessor.java | 6 +-
.../internal/BlueprintResourceProvider.java | 2 +-
.../controller/internal/CalculatedStatus.java | 2 +-
.../internal/ClientConfigResourceProvider.java | 4 +-
.../internal/ClusterControllerImpl.java | 2 +-
.../ClusterStackVersionResourceProvider.java | 2 +-
.../internal/CompatibleRepositoryVersion.java | 2 +-
...atibleRepositoryVersionResourceProvider.java | 2 +-
.../internal/ComponentResourceProvider.java | 4 +-
.../internal/ConfigGroupResourceProvider.java | 2 +-
.../ConfigurationTopologyException.java | 2 +-
.../internal/DefaultProviderModule.java | 2 +-
.../DefaultResourcePredicateEvaluator.java | 2 +-
.../internal/DefaultTrimmingStrategy.java | 2 +-
.../DeleteSpacesAtTheEndTrimmingStrategy.java | 2 +-
.../internal/DeleteStatusMetaData.java | 2 +-
.../internal/DirectoriesTrimmingStrategy.java | 2 +-
.../internal/ExportBlueprintRequest.java | 2 +-
.../server/controller/internal/Extension.java | 2 +-
.../internal/ExtensionLinkResourceProvider.java | 2 +-
.../internal/ExtensionResourceProvider.java | 2 +-
.../ExtensionVersionResourceProvider.java | 2 +-
.../internal/FeedResourceProvider.java | 2 +-
.../internal/GroupResourceProvider.java | 2 +-
.../HostComponentProcessResourceProvider.java | 2 +-
.../internal/HostComponentResourceProvider.java | 2 +-
.../HostStackVersionResourceProvider.java | 2 +-
.../internal/HttpPropertyProvider.java | 2 +-
.../internal/InstanceResourceProvider.java | 2 +-
.../internal/JobResourceProvider.java | 2 +-
.../internal/JsonHttpPropertyRequest.java | 4 +-
.../internal/LdapSyncEventResourceProvider.java | 2 +-
.../internal/LoggingResourceProvider.java | 2 +-
.../internal/MemberResourceProvider.java | 2 +-
.../internal/ObservableResourceProvider.java | 2 +-
.../OperatingSystemResourceProvider.java | 2 +-
.../controller/internal/PageRequestImpl.java | 2 +-
.../controller/internal/PageResponseImpl.java | 2 +-
.../internal/PasswordTrimmingStrategy.java | 2 +-
.../internal/PermissionResourceProvider.java | 2 +-
.../PreUpgradeCheckResourceProvider.java | 2 +-
.../controller/internal/PropertyInfo.java | 4 +-
.../internal/PropertyPredicateVisitor.java | 2 +-
.../PropertyValueTrimmingStrategyDefiner.java | 2 +-
.../controller/internal/ProvisionAction.java | 2 +-
.../internal/ProvisionClusterRequest.java | 2 +-
.../internal/ReadOnlyResourceProvider.java | 2 +-
.../RecommendationResourceProvider.java | 2 +-
.../internal/RemoteClusterResourceProvider.java | 2 +-
.../internal/RepositoryResourceProvider.java | 2 +-
.../RepositoryVersionResourceProvider.java | 2 +-
.../server/controller/internal/RequestImpl.java | 2 +-
.../internal/RequestResourceFilter.java | 2 +-
.../RequestScheduleResourceProvider.java | 2 +-
.../internal/RequestStageContainer.java | 2 +-
.../controller/internal/RequestStatusImpl.java | 2 +-
.../controller/internal/ResourceImpl.java | 2 +-
.../ResourceManagerHttpPropertyRequest.java | 2 +-
.../internal/ResourceProviderEvent.java | 2 +-
.../internal/ResourceProviderObserver.java | 2 +-
.../RootServiceComponentResourceProvider.java | 2 +-
...ootServiceHostComponentResourceProvider.java | 2 +-
.../internal/RootServiceResourceProvider.java | 2 +-
.../internal/ScaleClusterRequest.java | 2 +-
.../server/controller/internal/SchemaImpl.java | 2 +-
.../internal/ServiceResourceProvider.java | 12 +-
.../internal/SimplifyingPredicateVisitor.java | 2 +-
.../controller/internal/SortRequestImpl.java | 2 +-
.../server/controller/internal/Stack.java | 2 +-
.../internal/StackAdvisorResourceProvider.java | 2 +-
.../internal/StackArtifactResourceProvider.java | 6 +-
...ConfigurationDependencyResourceProvider.java | 2 +-
.../StackConfigurationResourceProvider.java | 2 +-
.../internal/StackDefinedPropertyProvider.java | 2 +-
.../StackDependencyResourceProvider.java | 8 +-
...StackLevelConfigurationResourceProvider.java | 2 +-
.../internal/StackResourceProvider.java | 2 +-
.../StackServiceComponentResourceProvider.java | 2 +-
.../internal/StackServiceResourceProvider.java | 2 +-
.../internal/StackVersionResourceProvider.java | 2 +-
.../internal/StageResourceProvider.java | 2 +-
.../internal/TargetClusterResourceProvider.java | 2 +-
.../internal/TaskAttemptResourceProvider.java | 2 +-
.../internal/TaskResourceProvider.java | 2 +-
.../controller/internal/TemporalInfoImpl.java | 2 +-
.../controller/internal/TrimmingStrategy.java | 2 +-
.../controller/internal/URLStreamProvider.java | 2 +-
.../internal/UpgradeGroupResourceProvider.java | 2 +-
.../internal/UpgradeItemResourceProvider.java | 2 +-
.../internal/UpgradeResourceProvider.java | 10 +-
.../controller/internal/UpgradeSummary.java | 4 +-
.../UpgradeSummaryResourceProvider.java | 4 +-
.../internal/UserResourceProvider.java | 2 +-
.../internal/ValidationResourceProvider.java | 4 +-
.../internal/ViewInstanceResourceProvider.java | 2 +-
.../ViewPermissionResourceProvider.java | 2 +-
.../internal/ViewResourceProvider.java | 2 +-
.../internal/ViewURLResourceProvider.java | 2 +-
.../internal/ViewVersionResourceProvider.java | 2 +-
.../internal/WidgetLayoutResourceProvider.java | 2 +-
.../internal/WidgetResourceProvider.java | 2 +-
.../internal/WorkflowResourceProvider.java | 2 +-
.../ambari/server/controller/ivory/Cluster.java | 2 +-
.../ambari/server/controller/ivory/Feed.java | 2 +-
.../server/controller/ivory/Instance.java | 2 +-
.../server/controller/ivory/IvoryService.java | 2 +-
.../controller/jdbc/ConnectionFactory.java | 2 +-
.../controller/jdbc/JDBCResourceProvider.java | 2 +-
.../JobHistoryPostgresConnectionFactory.java | 2 +-
.../controller/jdbc/SQLPredicateVisitor.java | 2 +-
.../server/controller/jmx/JMXHostProvider.java | 2 +-
.../server/controller/jmx/JMXMetricHolder.java | 2 +-
.../controller/jmx/JMXPropertyProvider.java | 2 +-
.../logging/HostComponentLoggingInfo.java | 2 +-
.../logging/LogFileDefinitionInfo.java | 2 +-
.../server/controller/logging/LogFileType.java | 2 +-
.../logging/LogLevelQueryResponse.java | 2 +-
.../controller/logging/LogLineResult.java | 2 +-
.../controller/logging/LogQueryResponse.java | 2 +-
.../logging/LogSearchDataRetrievalService.java | 2 +-
.../LoggingRequestHelperFactoryImpl.java | 2 +-
.../logging/LoggingRequestHelperImpl.java | 2 +-
.../logging/LoggingSearchPropertyProvider.java | 2 +-
.../controller/logging/NameValuePair.java | 2 +-
.../ambari/server/controller/logging/Utils.java | 2 +-
.../controller/metrics/MetricHostProvider.java | 2 +-
.../metrics/MetricPropertyProviderFactory.java | 2 +-
.../metrics/MetricReportingAdapter.java | 2 +-
.../metrics/MetricsDataTransferMethod.java | 2 +-
.../MetricsDataTransferMethodFactory.java | 2 +-
.../metrics/MetricsDownsamplingMethod.java | 2 +-
.../MetricsDownsamplingMethodFactory.java | 2 +-
.../metrics/MetricsPaddingMethod.java | 2 +-
.../metrics/MetricsPropertyProvider.java | 2 +-
.../metrics/MetricsPropertyProviderProxy.java | 2 +-
.../metrics/MetricsReportPropertyProvider.java | 2 +-
.../MetricsReportPropertyProviderProxy.java | 2 +-
.../metrics/MetricsServiceProvider.java | 2 +-
.../metrics/RestMetricsPropertyProvider.java | 2 +-
.../ThreadPoolEnabledPropertyProvider.java | 2 +-
.../GangliaComponentPropertyProvider.java | 2 +-
.../GangliaHostComponentPropertyProvider.java | 2 +-
.../ganglia/GangliaHostPropertyProvider.java | 2 +-
.../metrics/ganglia/GangliaMetric.java | 5 +-
.../ganglia/GangliaPropertyProvider.java | 2 +-
.../ganglia/GangliaReportPropertyProvider.java | 2 +-
.../timeline/AMSComponentPropertyProvider.java | 2 +-
.../AMSHostComponentPropertyProvider.java | 2 +-
.../timeline/AMSHostPropertyProvider.java | 2 +-
.../metrics/timeline/AMSPropertyProvider.java | 2 +-
.../timeline/AMSReportPropertyProvider.java | 2 +-
.../metrics/timeline/MetricsRequestHelper.java | 2 +-
.../cache/TimelineAppMetricCacheKey.java | 2 +-
.../timeline/cache/TimelineMetricCache.java | 2 +-
.../cache/TimelineMetricCacheEntryFactory.java | 2 +-
.../cache/TimelineMetricCacheProvider.java | 2 +-
.../cache/TimelineMetricsCacheSizeOfEngine.java | 2 +-
.../cache/TimelineMetricsCacheValue.java | 2 +-
.../controller/predicate/AlwaysPredicate.java | 5 +-
.../controller/predicate/AndPredicate.java | 2 +-
.../controller/predicate/ArrayPredicate.java | 2 +-
.../controller/predicate/BasePredicate.java | 2 +-
.../predicate/CategoryIsEmptyPredicate.java | 2 +-
.../controller/predicate/CategoryPredicate.java | 2 +-
.../predicate/ComparisonPredicate.java | 2 +-
.../controller/predicate/EqualsPredicate.java | 2 +-
.../controller/predicate/FilterPredicate.java | 2 +-
.../predicate/GreaterEqualsPredicate.java | 2 +-
.../controller/predicate/GreaterPredicate.java | 2 +-
.../predicate/LessEqualsPredicate.java | 2 +-
.../controller/predicate/LessPredicate.java | 2 +-
.../controller/predicate/NotPredicate.java | 2 +-
.../controller/predicate/OrPredicate.java | 2 +-
.../controller/predicate/PredicateVisitor.java | 2 +-
.../predicate/PredicateVisitorAcceptor.java | 2 +-
.../controller/predicate/PropertyPredicate.java | 2 +-
.../controller/predicate/UnaryPredicate.java | 2 +-
.../controller/spi/ClusterController.java | 2 +-
.../spi/NoSuchParentResourceException.java | 2 +-
.../controller/spi/NoSuchResourceException.java | 2 +-
.../server/controller/spi/PageRequest.java | 2 +-
.../server/controller/spi/PageResponse.java | 2 +-
.../ambari/server/controller/spi/Predicate.java | 2 +-
.../server/controller/spi/PropertyProvider.java | 2 +-
.../server/controller/spi/ProviderModule.java | 2 +-
.../ambari/server/controller/spi/Request.java | 2 +-
.../server/controller/spi/RequestStatus.java | 2 +-
.../controller/spi/RequestStatusMetaData.java | 2 +-
.../ambari/server/controller/spi/Resource.java | 2 +-
.../spi/ResourceAlreadyExistsException.java | 2 +-
.../spi/ResourcePredicateEvaluator.java | 2 +-
.../server/controller/spi/ResourceProvider.java | 2 +-
.../ambari/server/controller/spi/Schema.java | 2 +-
.../server/controller/spi/SchemaFactory.java | 2 +-
.../server/controller/spi/SortRequest.java | 2 +-
.../controller/spi/SortRequestProperty.java | 2 +-
.../server/controller/spi/SystemException.java | 2 +-
.../server/controller/spi/TemporalInfo.java | 2 +-
.../spi/UnsupportedPropertyException.java | 2 +-
...eredThreadPoolExecutorCompletionService.java | 2 +-
.../utilities/ClusterControllerHelper.java | 2 +-
.../controller/utilities/DatabaseChecker.java | 2 +-
.../controller/utilities/PredicateBuilder.java | 2 +-
.../controller/utilities/PredicateHelper.java | 2 +-
.../controller/utilities/PropertyHelper.java | 2 +-
.../utilities/ScalingThreadPoolExecutor.java | 2 +-
.../ServiceCalculatedStateFactory.java | 2 +-
.../controller/utilities/StreamProvider.java | 2 +-
.../state/DefaultServiceCalculatedState.java | 2 +-
.../state/FlumeServiceCalculatedState.java | 4 +-
.../state/HBaseServiceCalculatedState.java | 2 +-
.../state/HDFSServiceCalculatedState.java | 2 +-
.../state/HiveServiceCalculatedState.java | 4 +-
.../state/OozieServiceCalculatedState.java | 2 +-
.../utilities/state/ServiceCalculatedState.java | 2 +-
.../state/YARNServiceCalculatedState.java | 2 +-
.../server/customactions/ActionDefinition.java | 2 +-
.../customactions/ActionDefinitionManager.java | 2 +-
.../customactions/ActionDefinitionSpec.java | 2 +-
.../customactions/ActionDefinitionXml.java | 2 +-
.../events/ActionFinalReportReceivedEvent.java | 2 +-
.../events/AggregateAlertRecalculateEvent.java | 2 +-
.../events/AlertDefinitionChangedEvent.java | 2 +-
.../events/AlertDefinitionDeleteEvent.java | 2 +-
.../events/AlertDefinitionDisabledEvent.java | 2 +-
.../AlertDefinitionRegistrationEvent.java | 2 +-
.../apache/ambari/server/events/AlertEvent.java | 2 +-
.../events/AlertHashInvalidationEvent.java | 2 +-
.../server/events/AlertReceivedEvent.java | 2 +-
.../server/events/AlertStateChangeEvent.java | 2 +-
.../ambari/server/events/AmbariEvent.java | 2 +-
.../events/ClusterConfigChangedEvent.java | 2 +-
.../events/ClusterConfigFinishedEvent.java | 2 +-
.../ambari/server/events/ClusterEvent.java | 2 +-
.../HostComponentVersionAdvertisedEvent.java | 2 +-
.../apache/ambari/server/events/HostEvent.java | 2 +-
.../server/events/HostRegisteredEvent.java | 2 +-
.../ambari/server/events/HostsAddedEvent.java | 2 +-
.../ambari/server/events/HostsRemovedEvent.java | 2 +-
.../ambari/server/events/InitialAlertEvent.java | 2 +-
.../server/events/MaintenanceModeEvent.java | 2 +-
.../events/ServiceComponentInstalledEvent.java | 2 +-
.../ServiceComponentRecoveryChangedEvent.java | 2 +-
.../ServiceComponentUninstalledEvent.java | 2 +-
.../ambari/server/events/ServiceEvent.java | 2 +-
.../server/events/ServiceInstalledEvent.java | 2 +-
.../server/events/ServiceRemovedEvent.java | 2 +-
.../server/events/StackUpgradeFinishEvent.java | 4 +-
.../ambari/server/events/TaskCreateEvent.java | 4 +-
.../apache/ambari/server/events/TaskEvent.java | 4 +-
.../ambari/server/events/TaskUpdateEvent.java | 4 +-
.../EntityManagerCacheInvalidationEvent.java | 2 +-
.../ambari/server/events/jpa/JPAEvent.java | 2 +-
.../alerts/AlertAggregateListener.java | 2 +-
.../alerts/AlertDefinitionDisabledListener.java | 2 +-
.../alerts/AlertHashInvalidationListener.java | 2 +-
.../listeners/alerts/AlertHostListener.java | 2 +-
.../alerts/AlertLifecycleListener.java | 2 +-
.../alerts/AlertMaintenanceModeListener.java | 2 +-
.../listeners/alerts/AlertReceivedListener.java | 2 +-
.../AlertServiceComponentHostListener.java | 2 +-
.../alerts/AlertServiceStateListener.java | 2 +-
.../alerts/AlertStateChangedListener.java | 2 +-
.../listeners/tasks/TaskStatusListener.java | 3 +-
.../DistributeRepositoriesActionListener.java | 2 +-
.../upgrade/HostVersionOutOfSyncListener.java | 2 +-
.../upgrade/StackUpgradeFinishListener.java | 2 +-
.../listeners/upgrade/StackVersionListener.java | 2 +-
.../events/publishers/AlertEventPublisher.java | 2 +-
.../events/publishers/AmbariEventPublisher.java | 2 +-
.../events/publishers/JPAEventPublisher.java | 2 +-
.../events/publishers/TaskEventPublisher.java | 2 +-
.../publishers/VersionEventPublisher.java | 2 +-
.../ambari/server/hooks/AmbariEventFactory.java | 2 +-
.../apache/ambari/server/hooks/HookContext.java | 2 +-
.../ambari/server/hooks/HookContextFactory.java | 2 +-
.../apache/ambari/server/hooks/HookService.java | 2 +-
.../users/PostUserCreationHookContext.java | 2 +-
.../server/hooks/users/UserCreatedEvent.java | 2 +-
.../server/hooks/users/UserHookParams.java | 2 +-
.../server/hooks/users/UserHookService.java | 2 +-
.../server/logging/EclipseLinkLogger.java | 2 +-
.../metadata/AmbariServiceAlertDefinitions.java | 2 +-
.../CachedRoleCommandOrderProvider.java | 2 +-
.../server/metadata/RoleCommandOrder.java | 2 +-
.../metadata/RoleCommandOrderProvider.java | 2 +-
.../ambari/server/metadata/RoleCommandPair.java | 2 +-
.../server/metrics/system/MetricsService.java | 2 +-
.../server/metrics/system/MetricsSink.java | 2 +-
.../server/metrics/system/MetricsSource.java | 4 +-
.../server/metrics/system/SingleMetric.java | 2 +-
.../system/impl/AbstractMetricsSource.java | 4 +-
.../system/impl/AmbariMetricSinkImpl.java | 2 +-
.../system/impl/AmbariPerformanceMonitor.java | 2 +-
.../system/impl/DatabaseMetricsSource.java | 4 +-
.../metrics/system/impl/JvmMetricsSource.java | 2 +-
.../system/impl/MetricsConfiguration.java | 2 +-
.../metrics/system/impl/MetricsServiceImpl.java | 2 +-
.../server/notifications/DispatchCallback.java | 2 +-
.../notifications/DispatchCredentials.java | 2 +-
.../server/notifications/DispatchFactory.java | 2 +-
.../server/notifications/DispatchRunnable.java | 4 +-
.../server/notifications/Notification.java | 2 +-
.../notifications/NotificationDispatcher.java | 2 +-
.../ambari/server/notifications/Recipient.java | 2 +-
.../TargetConfigurationResult.java | 4 +-
.../dispatchers/AlertScriptDispatcher.java | 2 +-
.../dispatchers/AmbariSNMPDispatcher.java | 2 +-
.../dispatchers/EmailDispatcher.java | 2 +-
.../dispatchers/SNMPDispatcher.java | 2 +-
.../orm/AmbariLocalSessionInterceptor.java | 2 +-
.../ambari/server/orm/DBAccessorImpl.java | 2 +-
.../orm/EclipseLinkSessionCustomizer.java | 2 +-
.../ambari/server/orm/GuiceJpaInitializer.java | 2 +-
.../ambari/server/orm/PersistenceType.java | 2 +-
.../ambari/server/orm/TransactionalLocks.java | 4 +-
.../orm/cache/ConfigGroupHostMapping.java | 2 +-
.../orm/cache/ConfigGroupHostMappingImpl.java | 2 +-
.../server/orm/cache/HostConfigMapping.java | 2 +-
.../server/orm/cache/HostConfigMappingImpl.java | 2 +-
.../server/orm/dao/AlertDefinitionDAO.java | 2 +-
.../ambari/server/orm/dao/AlertDispatchDAO.java | 2 +-
.../server/orm/dao/AlertHostSummaryDTO.java | 2 +-
.../ambari/server/orm/dao/AlertSummaryDTO.java | 2 +-
.../apache/ambari/server/orm/dao/AlertsDAO.java | 2 +-
.../ambari/server/orm/dao/ArtifactDAO.java | 2 +-
.../ambari/server/orm/dao/BlueprintDAO.java | 2 +-
.../ambari/server/orm/dao/ClusterDAO.java | 2 +-
.../server/orm/dao/ClusterServiceDAO.java | 2 +-
.../ambari/server/orm/dao/ClusterStateDAO.java | 2 +-
.../orm/dao/ConfigGroupConfigMappingDAO.java | 2 +-
.../ambari/server/orm/dao/ConfigGroupDAO.java | 2 +-
.../orm/dao/ConfigGroupHostMappingDAO.java | 2 +-
.../apache/ambari/server/orm/dao/CrudDAO.java | 2 +-
.../ambari/server/orm/dao/ExtensionDAO.java | 2 +-
.../ambari/server/orm/dao/ExtensionLinkDAO.java | 2 +-
.../apache/ambari/server/orm/dao/GroupDAO.java | 2 +-
.../server/orm/dao/HostAlertSummaryDTO.java | 2 +-
.../orm/dao/HostComponentDesiredStateDAO.java | 2 +-
.../server/orm/dao/HostComponentStateDAO.java | 2 +-
.../server/orm/dao/HostConfigMappingDAO.java | 2 +-
.../apache/ambari/server/orm/dao/HostDAO.java | 2 +-
.../dao/HostRoleCommandStatusSummaryDTO.java | 2 +-
.../ambari/server/orm/dao/HostStateDAO.java | 2 +-
.../ambari/server/orm/dao/HostVersionDAO.java | 2 +-
.../server/orm/dao/KerberosDescriptorDAO.java | 34 ++--
.../apache/ambari/server/orm/dao/MemberDAO.java | 2 +-
.../ambari/server/orm/dao/PrivilegeDAO.java | 2 +-
.../server/orm/dao/RemoteAmbariClusterDAO.java | 2 +-
.../server/orm/dao/RepositoryVersionDAO.java | 2 +-
.../orm/dao/RequestOperationLevelDAO.java | 2 +-
.../orm/dao/RequestScheduleBatchRequestDAO.java | 2 +-
.../server/orm/dao/RequestScheduleDAO.java | 2 +-
.../ambari/server/orm/dao/ResourceDAO.java | 2 +-
.../ambari/server/orm/dao/ResourceTypeDAO.java | 2 +-
.../dao/ServiceComponentDesiredStateDAO.java | 2 +-
.../server/orm/dao/ServiceDesiredStateDAO.java | 2 +-
.../ambari/server/orm/dao/SettingDAO.java | 2 +-
.../apache/ambari/server/orm/dao/StackDAO.java | 2 +-
.../server/orm/dao/TopologyHostGroupDAO.java | 2 +-
.../server/orm/dao/TopologyHostRequestDAO.java | 2 +-
.../server/orm/dao/TopologyHostTaskDAO.java | 2 +-
.../orm/dao/TopologyLogicalRequestDAO.java | 2 +-
.../server/orm/dao/TopologyLogicalTaskDAO.java | 2 +-
.../server/orm/dao/TopologyRequestDAO.java | 2 +-
.../ambari/server/orm/dao/UpgradeDAO.java | 2 +-
.../apache/ambari/server/orm/dao/UserDAO.java | 2 +-
.../apache/ambari/server/orm/dao/ViewDAO.java | 2 +-
.../ambari/server/orm/dao/ViewInstanceDAO.java | 2 +-
.../ambari/server/orm/dao/ViewURLDAO.java | 2 +-
.../apache/ambari/server/orm/dao/WidgetDAO.java | 2 +-
.../ambari/server/orm/dao/WidgetLayoutDAO.java | 2 +-
.../server/orm/entities/AlertCurrentEntity.java | 2 +-
.../orm/entities/AlertDefinitionEntity.java | 2 +-
.../server/orm/entities/AlertGroupEntity.java | 4 +-
.../server/orm/entities/AlertHistoryEntity.java | 4 +-
.../server/orm/entities/AlertNoticeEntity.java | 2 +-
.../server/orm/entities/AlertTargetEntity.java | 4 +-
.../server/orm/entities/ArtifactEntity.java | 2 +-
.../server/orm/entities/ArtifactEntityPK.java | 2 +-
.../orm/entities/BlueprintConfigEntity.java | 2 +-
.../orm/entities/BlueprintConfigEntityPK.java | 2 +-
.../server/orm/entities/BlueprintEntity.java | 2 +-
.../orm/entities/BlueprintSettingEntity.java | 2 +-
.../orm/entities/ClusterConfigEntity.java | 2 +-
.../server/orm/entities/ClusterEntity.java | 8 +-
.../orm/entities/ClusterServiceEntity.java | 2 +-
.../orm/entities/ClusterServiceEntityPK.java | 2 +-
.../server/orm/entities/ClusterStateEntity.java | 2 +-
.../ConfigGroupConfigMappingEntity.java | 2 +-
.../ConfigGroupConfigMappingEntityPK.java | 2 +-
.../server/orm/entities/ConfigGroupEntity.java | 2 +-
.../entities/ConfigGroupHostMappingEntity.java | 2 +-
.../ConfigGroupHostMappingEntityPK.java | 2 +-
.../server/orm/entities/ExtensionEntity.java | 2 +-
.../orm/entities/ExtensionLinkEntity.java | 2 +-
.../ambari/server/orm/entities/GroupEntity.java | 2 +-
.../HostComponentDesiredStateEntity.java | 2 +-
.../orm/entities/HostComponentStateEntity.java | 2 +-
.../ambari/server/orm/entities/HostEntity.java | 2 +-
.../ambari/server/orm/entities/HostEntity_.java | 4 +-
.../orm/entities/HostGroupComponentEntity.java | 2 +-
.../entities/HostGroupComponentEntityPK.java | 2 +-
.../orm/entities/HostGroupConfigEntity.java | 2 +-
.../orm/entities/HostGroupConfigEntityPK.java | 2 +-
.../server/orm/entities/HostGroupEntity.java | 2 +-
.../server/orm/entities/HostGroupEntityPK.java | 2 +-
.../server/orm/entities/HostStateEntity.java | 2 +-
.../server/orm/entities/HostVersionEntity.java | 2 +-
.../orm/entities/LdapSyncEventEntity.java | 2 +-
.../server/orm/entities/LdapSyncSpecEntity.java | 2 +-
.../server/orm/entities/MemberEntity.java | 2 +-
.../orm/entities/OperatingSystemEntity.java | 2 +-
.../server/orm/entities/PrincipalEntity.java | 2 +-
.../orm/entities/RemoteAmbariClusterEntity.java | 2 +-
.../RemoteAmbariClusterServiceEntity.java | 2 +-
.../server/orm/entities/RepositoryEntity.java | 2 +-
.../orm/entities/RepositoryVersionEntity.java | 2 +-
.../RequestScheduleBatchRequestEntity.java | 2 +-
.../RequestScheduleBatchRequestEntityPK.java | 2 +-
.../orm/entities/RequestScheduleEntity.java | 2 +-
.../server/orm/entities/ResourceEntity.java | 2 +-
.../server/orm/entities/ResourceTypeEntity.java | 2 +-
.../ServiceComponentDesiredStateEntity.java | 2 +-
.../entities/ServiceComponentVersionEntity.java | 2 +-
.../orm/entities/ServiceDesiredStateEntity.java | 2 +-
.../entities/ServiceDesiredStateEntityPK.java | 2 +-
.../server/orm/entities/SettingEntity.java | 2 +-
.../orm/entities/TopologyHostGroupEntity.java | 2 +-
.../orm/entities/TopologyHostInfoEntity.java | 2 +-
.../orm/entities/TopologyHostRequestEntity.java | 2 +-
.../orm/entities/TopologyHostTaskEntity.java | 2 +-
.../entities/TopologyLogicalRequestEntity.java | 2 +-
.../orm/entities/TopologyLogicalTaskEntity.java | 2 +-
.../orm/entities/TopologyRequestEntity.java | 2 +-
.../server/orm/entities/UpgradeEntity.java | 2 +-
.../server/orm/entities/UpgradeGroupEntity.java | 2 +-
.../server/orm/entities/UpgradeItemEntity.java | 2 +-
.../ambari/server/orm/entities/UserEntity.java | 2 +-
.../ambari/server/orm/entities/ViewEntity.java | 2 +-
.../server/orm/entities/ViewEntityEntity.java | 2 +-
.../orm/entities/ViewInstanceDataEntity.java | 2 +-
.../orm/entities/ViewInstanceDataEntityPK.java | 2 +-
.../server/orm/entities/ViewInstanceEntity.java | 2 +-
.../entities/ViewInstancePropertyEntity.java | 2 +-
.../entities/ViewInstancePropertyEntityPK.java | 2 +-
.../orm/entities/ViewParameterEntity.java | 2 +-
.../orm/entities/ViewParameterEntityPK.java | 2 +-
.../server/orm/entities/ViewResourceEntity.java | 2 +-
.../orm/entities/ViewResourceEntityPK.java | 2 +-
.../server/orm/entities/ViewURLEntity.java | 2 +-
.../server/orm/entities/WidgetEntity.java | 2 +-
.../server/orm/entities/WidgetLayoutEntity.java | 4 +-
.../entities/WidgetLayoutUserWidgetEntity.java | 4 +-
.../WidgetLayoutUserWidgetEntityPK.java | 4 +-
.../ambari/server/orm/helpers/ScriptRunner.java | 10 +-
.../server/orm/helpers/dbms/H2Helper.java | 2 +-
.../server/orm/models/HostComponentSummary.java | 2 +-
.../ambari/server/proxy/ProxyService.java | 2 +-
.../server/resources/ResourceManager.java | 2 +-
.../server/resources/api/rest/GetResource.java | 2 +-
.../scheduler/AbstractLinearExecutionJob.java | 2 +-
.../ambari/server/scheduler/ExecutionJob.java | 2 +-
.../scheduler/ExecutionScheduleManager.java | 6 +-
.../server/scheduler/ExecutionScheduler.java | 2 +-
.../scheduler/ExecutionSchedulerImpl.java | 2 +-
.../server/security/CertificateManager.java | 2 +-
.../server/security/ClientSecurityType.java | 2 +-
.../ambari/server/security/SecurityFilter.java | 2 +-
.../ambari/server/security/SecurityHelper.java | 2 +-
.../server/security/SecurityHelperImpl.java | 2 +-
.../server/security/SignCertResponse.java | 2 +-
.../ambari/server/security/SignMessage.java | 2 +-
.../authorization/AmbariAuthentication.java | 2 +-
.../authorization/AmbariGrantedAuthority.java | 2 +-
.../AmbariLdapAuthoritiesPopulator.java | 2 +-
.../authorization/AmbariLocalUserProvider.java | 2 +-
.../AmbariPamAuthenticationProvider.java | 2 +-
.../authorization/AmbariUserAuthentication.java | 2 +-
.../AmbariUserAuthorizationFilter.java | 2 +-
...ateLdapUserFoundAuthenticationException.java | 2 +-
.../security/authorization/GroupType.java | 2 +-
.../authorization/LdapServerProperties.java | 2 +-
.../PamAuthenticationException.java | 2 +-
.../authorization/UserIdAuthentication.java | 2 +-
.../server/security/authorization/UserType.java | 2 +-
.../InternalAuthenticationInterceptor.java | 2 +-
.../internal/InternalTokenStorage.java | 2 +-
.../RunWithInternalSecurityContext.java | 2 +-
.../security/encryption/AESEncryptor.java | 26 +--
.../encryption/AbstractCredentialStore.java | 4 +-
.../security/encryption/CredentialProvider.java | 2 +-
.../security/encryption/EncryptionResult.java | 2 +-
.../security/encryption/MasterKeyService.java | 2 +-
.../encryption/MasterKeyServiceImpl.java | 10 +-
.../server/security/ldap/LdapBatchDto.java | 2 +-
.../server/security/ldap/LdapGroupDto.java | 2 +-
.../server/security/ldap/LdapSyncDto.java | 2 +-
.../server/security/ldap/LdapUserDto.java | 2 +-
.../security/ldap/LdapUserGroupMemberDto.java | 2 +-
.../unsecured/rest/CertificateDownload.java | 2 +-
.../unsecured/rest/CertificateSign.java | 2 +-
.../security/unsecured/rest/ConnectionInfo.java | 2 +-
.../server/serveraction/ServerAction.java | 2 +-
.../kerberos/ADKerberosOperationHandler.java | 5 +-
.../kerberos/IPAKerberosOperationHandler.java | 8 +-
.../kerberos/KerberosOperationHandler.java | 6 -
.../upgrades/AbstractUpgradeServerAction.java | 2 +-
.../upgrades/AutoSkipFailedSummaryAction.java | 2 +-
.../upgrades/ComponentVersionCheckAction.java | 2 +-
.../serveraction/upgrades/ConfigureAction.java | 2 +-
.../upgrades/FinalizeUpgradeAction.java | 2 +-
.../FixCapacitySchedulerOrderingPolicy.java | 2 +-
.../upgrades/FixYarnWebServiceUrl.java | 2 +-
.../upgrades/HiveZKQuorumConfigAction.java | 2 +-
.../upgrades/KerberosKeytabsAction.java | 2 +-
.../upgrades/ManualStageAction.java | 2 +-
.../upgrades/RangerConfigCalculation.java | 2 +-
.../RangerKerberosConfigCalculation.java | 4 +-
.../upgrades/RangerKmsProxyConfig.java | 2 +-
.../upgrades/RangerWebAlertConfigAction.java | 2 +-
.../upgrades/UpdateDesiredStackAction.java | 2 +-
.../upgrades/ZooKeeperQuorumCalculator.java | 2 +-
.../users/CollectionPersisterService.java | 2 +-
.../CollectionPersisterServiceFactory.java | 2 +-
.../users/CsvFilePersisterService.java | 2 +-
.../users/PostUserCreationHookServerAction.java | 2 +-
.../users/ShellCommandCallableFactory.java | 2 +-
.../users/ShellCommandUtilityCallable.java | 2 +-
.../users/ShellCommandUtilityWrapper.java | 2 +-
.../apache/ambari/server/stack/BaseModule.java | 2 +-
.../server/stack/CommonServiceDirectory.java | 10 +-
.../ambari/server/stack/ComponentModule.java | 2 +-
.../server/stack/ConfigurationDirectory.java | 2 +-
.../ambari/server/stack/ConfigurationInfo.java | 2 +-
.../server/stack/ConfigurationModule.java | 2 +-
.../ambari/server/stack/ExtensionDirectory.java | 2 +-
.../ambari/server/stack/ExtensionHelper.java | 2 +-
.../ambari/server/stack/ExtensionModule.java | 2 +-
.../apache/ambari/server/stack/HostsType.java | 2 +-
.../ambari/server/stack/MasterHostResolver.java | 2 +-
.../server/stack/ModuleFileUnmarshaller.java | 6 +-
.../apache/ambari/server/stack/ModuleState.java | 2 +-
.../server/stack/NoSuchStackException.java | 2 +-
.../stack/QuickLinksConfigurationModule.java | 2 +-
.../apache/ambari/server/stack/RepoUtil.java | 2 +-
.../ambari/server/stack/ServiceDirectory.java | 2 +-
.../ambari/server/stack/ServiceModule.java | 4 +-
.../ambari/server/stack/StackContext.java | 2 +-
.../server/stack/StackDefinitionDirectory.java | 2 +-
.../server/stack/StackDefinitionModule.java | 2 +-
.../ambari/server/stack/StackDirectory.java | 2 +-
.../ambari/server/stack/StackManager.java | 2 +-
.../server/stack/StackManagerFactory.java | 2 +-
.../apache/ambari/server/stack/StackModule.java | 2 +-
.../server/stack/StackServiceDirectory.java | 11 +-
.../apache/ambari/server/stack/ThemeModule.java | 2 +-
.../stack/UpdateActiveRepoVersionOnStartup.java | 2 +-
.../apache/ambari/server/stack/Validable.java | 2 +-
.../ambari/server/stageplanner/RoleGraph.java | 2 +-
.../server/stageplanner/RoleGraphFactory.java | 2 +-
.../server/stageplanner/RoleGraphNode.java | 2 +-
.../ambari/server/state/AgentVersion.java | 2 +-
.../org/apache/ambari/server/state/Alert.java | 2 +-
.../ambari/server/state/AlertFirmness.java | 2 +-
.../apache/ambari/server/state/AlertState.java | 2 +-
.../ambari/server/state/AutoDeployInfo.java | 2 +-
.../server/state/BulkCommandDefinition.java | 2 +-
.../ambari/server/state/ChangedConfigInfo.java | 2 +-
.../state/ClientConfigFileDefinition.java | 2 +-
.../org/apache/ambari/server/state/Cluster.java | 2 +-
.../server/state/ClusterHealthReport.java | 2 +-
.../apache/ambari/server/state/Clusters.java | 2 +-
.../server/state/CommandScriptDefinition.java | 2 +-
.../org/apache/ambari/server/state/Config.java | 2 +-
.../ambari/server/state/ConfigFactory.java | 2 +-
.../ambari/server/state/ConfigHelper.java | 2 +-
.../apache/ambari/server/state/ConfigImpl.java | 2 +-
.../ambari/server/state/ConfigMergeHelper.java | 2 +-
.../server/state/CredentialStoreInfo.java | 2 +-
.../server/state/CustomCommandDefinition.java | 2 +-
.../server/state/DependencyConditionInfo.java | 2 +-
.../ambari/server/state/DependencyInfo.java | 2 +-
.../apache/ambari/server/state/ExtensionId.java | 2 +-
.../ambari/server/state/ExtensionInfo.java | 2 +-
.../org/apache/ambari/server/state/Host.java | 2 +-
.../server/state/HostComponentAdminState.java | 2 +-
.../apache/ambari/server/state/HostEvent.java | 2 +-
.../ambari/server/state/HostEventType.java | 2 +-
.../ambari/server/state/HostHealthStatus.java | 2 +-
.../apache/ambari/server/state/HostState.java | 2 +-
.../ambari/server/state/LogDefinition.java | 2 +-
.../ambari/server/state/MaintenanceState.java | 2 +-
.../ambari/server/state/NotificationState.java | 2 +-
.../server/state/OperatingSystemInfo.java | 2 +-
.../server/state/PropertyDependencyInfo.java | 2 +-
.../ambari/server/state/PropertyInfo.java | 2 +-
.../state/PropertyStackUpgradeBehavior.java | 2 +-
.../server/state/PropertyUpgradeBehavior.java | 2 +-
.../state/QuickLinksConfigurationInfo.java | 2 +-
.../ambari/server/state/RepositoryInfo.java | 2 +-
.../ambari/server/state/RepositoryType.java | 2 +-
.../server/state/RepositoryVersionState.java | 2 +-
.../org/apache/ambari/server/state/Service.java | 2 +-
.../ambari/server/state/ServiceComponent.java | 2 +-
.../server/state/ServiceComponentFactory.java | 5 +-
.../server/state/ServiceComponentHost.java | 2 +-
.../server/state/ServiceComponentHostEvent.java | 2 +-
.../state/ServiceComponentHostEventType.java | 2 +-
.../state/ServiceComponentHostFactory.java | 2 +-
.../server/state/ServiceComponentImpl.java | 2 +-
.../ambari/server/state/ServiceFactory.java | 2 +-
.../apache/ambari/server/state/ServiceImpl.java | 2 +-
.../apache/ambari/server/state/ServiceInfo.java | 2 +-
.../ambari/server/state/ServiceOsSpecific.java | 2 +-
.../server/state/ServicePropertyInfo.java | 2 +-
.../org/apache/ambari/server/state/StackId.java | 2 +-
.../apache/ambari/server/state/StackInfo.java | 2 +-
.../org/apache/ambari/server/state/State.java | 2 +-
.../apache/ambari/server/state/ThemeInfo.java | 2 +-
.../ambari/server/state/UpgradeContext.java | 2 +-
.../server/state/UpgradeContextFactory.java | 2 +-
.../ambari/server/state/UpgradeHelper.java | 2 +-
.../ambari/server/state/UpgradeState.java | 2 +-
.../server/state/ValueAttributesInfo.java | 2 +-
.../ambari/server/state/action/Action.java | 2 +-
.../state/action/ActionCompletedEvent.java | 2 +-
.../ambari/server/state/action/ActionEvent.java | 2 +-
.../server/state/action/ActionEventType.java | 2 +-
.../server/state/action/ActionFailedEvent.java | 2 +-
.../ambari/server/state/action/ActionId.java | 2 +-
.../ambari/server/state/action/ActionImpl.java | 2 +-
.../server/state/action/ActionInitEvent.java | 2 +-
.../state/action/ActionProgressUpdateEvent.java | 2 +-
.../ambari/server/state/action/ActionState.java | 2 +-
.../ambari/server/state/action/ActionType.java | 2 +-
.../state/alert/AggregateDefinitionMapping.java | 2 +-
.../server/state/alert/AggregateSource.java | 2 +-
.../server/state/alert/AlertDefinition.java | 2 +-
.../state/alert/AlertDefinitionFactory.java | 2 +-
.../server/state/alert/AlertDefinitionHash.java | 2 +-
.../ambari/server/state/alert/AlertGroup.java | 2 +-
.../server/state/alert/AlertNotification.java | 2 +-
.../ambari/server/state/alert/AlertTarget.java | 2 +-
.../ambari/server/state/alert/AlertUri.java | 2 +-
.../ambari/server/state/alert/AmsSource.java | 2 +-
.../ambari/server/state/alert/MetricSource.java | 2 +-
.../server/state/alert/ParameterizedSource.java | 2 +-
.../server/state/alert/PercentSource.java | 2 +-
.../ambari/server/state/alert/PortSource.java | 2 +-
.../server/state/alert/RecoverySource.java | 2 +-
.../ambari/server/state/alert/Reporting.java | 2 +-
.../apache/ambari/server/state/alert/Scope.java | 2 +-
.../ambari/server/state/alert/ScriptSource.java | 2 +-
.../ambari/server/state/alert/ServerSource.java | 2 +-
.../ambari/server/state/alert/Source.java | 2 +-
.../ambari/server/state/alert/SourceType.java | 2 +-
.../ambari/server/state/alert/TargetType.java | 2 +-
.../ambari/server/state/alert/WebSource.java | 2 +-
.../server/state/cluster/ClusterFactory.java | 2 +-
.../server/state/cluster/ClusterImpl.java | 4 +-
.../server/state/cluster/ClustersImpl.java | 2 +-
.../server/state/configgroup/ConfigGroup.java | 2 +-
.../state/configgroup/ConfigGroupFactory.java | 2 +-
.../state/configgroup/ConfigGroupImpl.java | 2 +-
.../fsm/InvalidStateTransitionException.java | 2 +-
.../server/state/fsm/MultipleArcTransition.java | 2 +-
.../server/state/fsm/SingleArcTransition.java | 2 +-
.../ambari/server/state/fsm/StateMachine.java | 2 +-
.../server/state/fsm/StateMachineFactory.java | 2 +-
.../server/state/fsm/event/AbstractEvent.java | 2 +-
.../ambari/server/state/fsm/event/Event.java | 2 +-
.../server/state/fsm/event/EventHandler.java | 2 +-
.../ambari/server/state/host/HostFactory.java | 2 +-
.../state/host/HostHealthyHeartbeatEvent.java | 2 +-
.../state/host/HostHeartbeatLostEvent.java | 2 +-
.../ambari/server/state/host/HostImpl.java | 2 +-
.../host/HostRegistrationRequestEvent.java | 2 +-
.../host/HostStatusUpdatesReceivedEvent.java | 2 +-
.../state/host/HostUnhealthyHeartbeatEvent.java | 2 +-
.../kerberos/AbstractKerberosDescriptor.java | 2 +-
.../kerberos/KerberosComponentDescriptor.java | 2 +-
.../kerberos/KerberosIdentityDescriptor.java | 2 +-
.../kerberos/KerberosPrincipalDescriptor.java | 2 +-
.../kerberos/KerberosServiceDescriptor.java | 2 +-
.../server/state/quicklinksprofile/Filter.java | 4 +-
.../state/repository/AvailableService.java | 2 +-
.../repository/AvailableServiceReference.java | 2 +-
.../state/repository/AvailableVersion.java | 2 +-
.../state/repository/ManifestService.java | 2 +-
.../state/repository/ManifestServiceInfo.java | 2 +-
.../ambari/server/state/repository/Release.java | 2 +-
.../state/repository/VersionDefinitionXml.java | 2 +-
.../server/state/repository/package-info.java | 2 +-
.../ambari/server/state/scheduler/Batch.java | 2 +-
.../server/state/scheduler/BatchRequest.java | 2 +-
.../server/state/scheduler/BatchRequestJob.java | 2 +-
.../state/scheduler/BatchRequestResponse.java | 2 +-
.../server/state/scheduler/BatchSettings.java | 2 +-
.../state/scheduler/RequestExecution.java | 2 +-
.../scheduler/RequestExecutionFactory.java | 2 +-
.../state/scheduler/RequestExecutionImpl.java | 2 +-
.../ambari/server/state/scheduler/Schedule.java | 2 +-
.../services/AlertNoticeDispatchService.java | 2 +-
.../services/AmbariServerAlertService.java | 2 +-
.../state/services/CachedAlertFlushService.java | 4 +-
.../state/services/MetricsRetrievalService.java | 2 +-
.../services/RetryUpgradeActionService.java | 2 +-
.../server/state/stack/ConfigUpgradePack.java | 2 +-
.../server/state/stack/ConfigurationXml.java | 2 +-
.../state/stack/ExtensionMetainfoXml.java | 2 +-
.../server/state/stack/JsonOsFamilyEntry.java | 2 +-
.../server/state/stack/JsonOsFamilyRoot.java | 2 +-
.../server/state/stack/LatestRepoCallable.java | 2 +-
.../ambari/server/state/stack/Metric.java | 4 +-
.../server/state/stack/MetricDefinition.java | 2 +-
.../ambari/server/state/stack/OsFamily.java | 4 +-
.../server/state/stack/RepositoryXml.java | 2 +-
.../server/state/stack/ServiceMetainfoXml.java | 2 +-
.../server/state/stack/StackMetainfoXml.java | 2 +-
.../state/stack/StackRoleCommandOrder.java | 2 +-
.../server/state/stack/TrimmingAdapter.java | 4 +-
.../ambari/server/state/stack/UpgradePack.java | 2 +-
.../ambari/server/state/stack/WidgetLayout.java | 2 +-
.../server/state/stack/WidgetLayoutInfo.java | 2 +-
.../ambari/server/state/stack/package-info.java | 4 +-
.../server/state/stack/upgrade/Batch.java | 2 +-
.../state/stack/upgrade/ClusterGrouping.java | 2 +-
.../state/stack/upgrade/ColocatedGrouping.java | 2 +-
.../server/state/stack/upgrade/Condition.java | 2 +-
.../upgrade/ConfigUpgradeChangeDefinition.java | 4 +-
.../stack/upgrade/ConfigurationCondition.java | 2 +-
.../state/stack/upgrade/ConfigureFunction.java | 2 +-
.../state/stack/upgrade/ConfigureTask.java | 4 +-
.../server/state/stack/upgrade/Direction.java | 2 +-
.../state/stack/upgrade/ExecuteHostType.java | 2 +-
.../server/state/stack/upgrade/ExecuteTask.java | 4 +-
.../server/state/stack/upgrade/Grouping.java | 2 +-
.../state/stack/upgrade/HostOrderGrouping.java | 2 +-
.../state/stack/upgrade/HostOrderItem.java | 4 +-
.../server/state/stack/upgrade/ManualTask.java | 2 +-
.../state/stack/upgrade/ParallelScheduler.java | 2 +-
.../state/stack/upgrade/PropertyKeyState.java | 2 +-
.../stack/upgrade/RepositoryVersionHelper.java | 2 +-
.../state/stack/upgrade/RestartGrouping.java | 2 +-
.../server/state/stack/upgrade/RestartTask.java | 4 +-
.../state/stack/upgrade/SecurityCondition.java | 2 +-
.../state/stack/upgrade/ServerActionTask.java | 2 +-
.../stack/upgrade/ServerSideActionTask.java | 2 +-
.../stack/upgrade/ServiceCheckGrouping.java | 2 +-
.../state/stack/upgrade/ServiceCheckTask.java | 4 +-
.../state/stack/upgrade/StageWrapper.java | 2 +-
.../stack/upgrade/StageWrapperBuilder.java | 2 +-
.../state/stack/upgrade/StartGrouping.java | 2 +-
.../server/state/stack/upgrade/StartTask.java | 4 +-
.../state/stack/upgrade/StopGrouping.java | 2 +-
.../server/state/stack/upgrade/StopTask.java | 4 +-
.../ambari/server/state/stack/upgrade/Task.java | 2 +-
.../server/state/stack/upgrade/TaskWrapper.java | 2 +-
.../state/stack/upgrade/TaskWrapperBuilder.java | 2 +-
.../stack/upgrade/TransferCoercionType.java | 2 +-
.../state/stack/upgrade/TransferOperation.java | 2 +-
.../stack/upgrade/UpdateStackGrouping.java | 2 +-
.../state/stack/upgrade/UpgradeFunction.java | 2 +-
.../state/stack/upgrade/UpgradeScope.java | 2 +-
.../server/state/stack/upgrade/UpgradeType.java | 2 +-
.../svccomphost/ServiceComponentHostImpl.java | 2 +-
.../ServiceComponentHostInstallEvent.java | 2 +-
.../ServiceComponentHostOpFailedEvent.java | 2 +-
.../ServiceComponentHostOpInProgressEvent.java | 2 +-
.../ServiceComponentHostOpRestartedEvent.java | 2 +-
.../ServiceComponentHostOpSucceededEvent.java | 2 +-
.../ServiceComponentHostStartEvent.java | 2 +-
.../ServiceComponentHostStartedEvent.java | 2 +-
.../ServiceComponentHostStopEvent.java | 2 +-
.../ServiceComponentHostStoppedEvent.java | 2 +-
.../ServiceComponentHostSummary.java | 2 +-
.../ServiceComponentHostUninstallEvent.java | 2 +-
.../ServiceComponentHostUpgradeEvent.java | 2 +-
.../ServiceComponentHostWipeoutEvent.java | 2 +-
.../server/state/theme/ConfigCondition.java | 2 +-
.../ambari/server/topology/AmbariContext.java | 2 +-
.../ambari/server/topology/Blueprint.java | 2 +-
.../server/topology/BlueprintFactory.java | 2 +-
.../ambari/server/topology/BlueprintImpl.java | 6 +-
.../server/topology/BlueprintValidator.java | 2 +-
.../server/topology/BlueprintValidatorImpl.java | 2 +-
.../ambari/server/topology/Cardinality.java | 2 +-
.../topology/ClusterConfigurationRequest.java | 6 +-
.../ambari/server/topology/ClusterTopology.java | 2 +-
.../server/topology/ClusterTopologyImpl.java | 2 +-
.../ambari/server/topology/Component.java | 2 +-
.../ambari/server/topology/Configuration.java | 2 +-
.../server/topology/ConfigurationFactory.java | 2 +-
.../ambari/server/topology/Credential.java | 2 +-
.../ambari/server/topology/HostGroup.java | 2 +-
.../ambari/server/topology/HostGroupImpl.java | 2 +-
.../ambari/server/topology/HostGroupInfo.java | 2 +-
.../topology/InvalidTopologyException.java | 2 +-
.../InvalidTopologyTemplateException.java | 2 +-
.../topology/KerberosDescriptorFactory.java | 5 +-
.../server/topology/LogicalRequestFactory.java | 2 +-
.../topology/NoSuchBlueprintException.java | 2 +-
.../topology/NoSuchHostGroupException.java | 2 +-
.../ambari/server/topology/PersistedState.java | 2 +-
.../server/topology/PersistedStateImpl.java | 2 +-
.../topology/PersistedTopologyRequest.java | 2 +-
.../server/topology/SecurityConfiguration.java | 2 +-
.../topology/SecurityConfigurationFactory.java | 2 +-
.../apache/ambari/server/topology/Setting.java | 2 +-
.../ambari/server/topology/SettingFactory.java | 2 +-
.../ambari/server/topology/TopologyManager.java | 5 +-
.../ambari/server/topology/TopologyRequest.java | 2 +-
.../server/topology/TopologyRequestFactory.java | 2 +-
.../topology/TopologyRequestFactoryImpl.java | 2 +-
.../server/topology/TopologyValidator.java | 2 +-
.../tasks/ConfigureClusterTaskFactory.java | 2 +-
.../server/topology/tasks/TopologyTask.java | 2 +-
.../RequiredConfigPropertiesValidator.java | 10 +-
.../server/upgrade/FinalUpgradeCatalog.java | 2 +-
.../server/upgrade/UpgradeCatalog210.java | 4 +-
.../server/upgrade/UpgradeCatalog250.java | 2 +-
.../server/upgrade/UpgradeCatalog252.java | 2 +-
.../apache/ambari/server/utils/DateUtils.java | 2 +-
.../server/utils/EventBusSynchronizer.java | 2 +-
.../apache/ambari/server/utils/HTTPUtils.java | 5 +-
.../apache/ambari/server/utils/HostAndPort.java | 4 +-
.../ambari/server/utils/JaxbMapKeyList.java | 2 +-
.../server/utils/JaxbMapKeyListAdapter.java | 2 +-
.../ambari/server/utils/JaxbMapKeyMap.java | 2 +-
.../server/utils/JaxbMapKeyMapAdapter.java | 2 +-
.../ambari/server/utils/JaxbMapKeyVal.java | 2 +-
.../server/utils/JaxbMapKeyValAdapter.java | 2 +-
.../apache/ambari/server/utils/LoopBody.java | 4 +-
.../apache/ambari/server/utils/Parallel.java | 2 +-
.../ambari/server/utils/ParallelLoopResult.java | 2 +-
.../ambari/server/utils/RequestUtils.java | 2 +-
.../ambari/server/utils/SecretReference.java | 2 +-
.../apache/ambari/server/utils/SetUtils.java | 2 +-
.../ambari/server/utils/ShellCommandUtil.java | 25 +--
.../apache/ambari/server/utils/StageUtils.java | 2 +-
.../ambari/server/utils/VersionUtils.java | 2 +-
.../apache/ambari/server/view/ClusterImpl.java | 2 +-
.../ambari/server/view/DefaultMasker.java | 2 +-
.../ambari/server/view/DirectoryWatcher.java | 2 +-
.../server/view/HttpImpersonatorImpl.java | 2 +-
.../server/view/IllegalClusterException.java | 2 +-
.../server/view/ImpersonatorSettingImpl.java | 2 +-
.../ambari/server/view/RemoteAmbariCluster.java | 2 +-
.../view/RemoteAmbariClusterRegistry.java | 2 +-
.../RemoteAmbariConfigurationReadException.java | 2 +-
.../server/view/RemoteAmbariStreamProvider.java | 2 +-
.../server/view/ViewAmbariStreamProvider.java | 2 +-
.../ambari/server/view/ViewArchiveUtility.java | 2 +-
.../ambari/server/view/ViewClassLoader.java | 2 +-
.../ambari/server/view/ViewContextImpl.java | 2 +-
.../view/ViewDataMigrationContextImpl.java | 2 +-
.../server/view/ViewDataMigrationUtility.java | 2 +-
.../server/view/ViewDirectoryWatcher.java | 2 +-
.../view/ViewExternalSubResourceProvider.java | 2 +-
.../ambari/server/view/ViewExtractor.java | 2 +-
.../server/view/ViewInstanceHandlerList.java | 2 +-
.../ambari/server/view/ViewProviderModule.java | 2 +-
.../server/view/ViewSubResourceDefinition.java | 2 +-
.../server/view/ViewSubResourceProvider.java | 2 +-
.../ambari/server/view/ViewThrottleFilter.java | 2 +-
.../server/view/ViewURLStreamProvider.java | 2 +-
.../server/view/configuration/EntityConfig.java | 2 +-
.../view/configuration/InstanceConfig.java | 2 +-
.../view/configuration/ParameterConfig.java | 2 +-
.../view/configuration/PermissionConfig.java | 2 +-
.../view/configuration/PersistenceConfig.java | 2 +-
.../view/configuration/PropertyConfig.java | 2 +-
.../view/configuration/ResourceConfig.java | 2 +-
.../server/view/configuration/ViewConfig.java | 2 +-
.../ambari/server/view/events/EventImpl.java | 2 +-
.../server/view/persistence/DataStoreImpl.java | 2 +-
.../view/persistence/DataStoreModule.java | 4 +-
.../view/persistence/SchemaManagerFactory.java | 2 +-
.../InstanceValidationResultImpl.java | 2 +-
.../view/validation/ValidationException.java | 2 +-
.../view/validation/ValidationResultImpl.java | 2 +-
.../ambari_server/dbConfiguration_linux.py | 27 ++-
.../HDFS/3.0.0.3.0/package/scripts/utils.py | 2 +-
.../YARN/2.1.0.2.0/package/scripts/yarn.py | 1 -
.../YARN/3.0.0.3.0/package/scripts/yarn.py | 1 -
.../ZEPPELIN/0.6.0.3.0/service_advisor.py | 167 +++++++++++++++++++
.../3.0/hooks/after-INSTALL/scripts/params.py | 14 ++
.../scripts/shared_initialization.py | 17 ++
.../apache/ambari/server/H2DatabaseCleaner.java | 2 +-
.../ambari/server/RandomPortJerseyTest.java | 2 +-
.../ambari/server/StateRecoveryManagerTest.java | 2 +-
.../actionmanager/ActionManagerTestHelper.java | 2 +-
.../actionmanager/HostRoleStatusTest.java | 2 +-
.../ambari/server/actionmanager/StageTest.java | 2 +-
.../actionmanager/TestActionDBAccessorImpl.java | 2 +-
.../server/actionmanager/TestActionManager.java | 2 +-
.../actionmanager/TestActionScheduler.java | 2 +-
.../TestActionSchedulerThreading.java | 2 +-
.../ambari/server/actionmanager/TestStage.java | 2 +-
.../ambari/server/agent/AgentHostInfoTest.java | 2 +-
.../ambari/server/agent/AgentResourceTest.java | 2 +-
.../server/agent/HeartbeatProcessorTest.java | 2 +-
.../server/agent/HeartbeatTestHelper.java | 2 +-
.../server/agent/LocalAgentSimulator.java | 7 +-
.../ambari/server/agent/TestActionQueue.java | 2 +-
.../server/agent/TestHeartbeatHandler.java | 4 +-
.../server/agent/TestHeartbeatMonitor.java | 2 +-
.../alerts/AgentHeartbeatAlertRunnableTest.java | 2 +-
.../alerts/AmbariPerformanceRunnableTest.java | 2 +-
.../ComponentVersionAlertRunnableTest.java | 2 +-
.../server/alerts/StaleAlertRunnableTest.java | 2 +-
.../org/apache/ambari/server/api/TestSuite.java | 12 +-
.../server/api/UserNameOverrideFilterTest.java | 2 +-
.../server/api/handlers/CreateHandlerTest.java | 2 +-
.../server/api/handlers/DeleteHandlerTest.java | 5 +-
.../api/handlers/QueryCreateHandlerTest.java | 2 +-
.../server/api/handlers/ReadHandlerTest.java | 2 +-
.../server/api/handlers/UpdateHandlerTest.java | 4 +-
.../server/api/predicate/QueryLexerTest.java | 2 +-
.../server/api/predicate/QueryParserTest.java | 2 +-
.../predicate/operators/AndOperatorTest.java | 4 +-
.../predicate/operators/EqualsOperatorTest.java | 4 +-
.../predicate/operators/FilterOperatorTest.java | 2 +-
.../operators/GreaterEqualsOperatorTest.java | 4 +-
.../operators/GreaterOperatorTest.java | 4 +-
.../api/predicate/operators/InOperatorTest.java | 2 +-
.../operators/IsEmptyOperatorTest.java | 2 +-
.../operators/LessEqualsOperatorTest.java | 4 +-
.../predicate/operators/LessOperatorTest.java | 4 +-
.../operators/NotEqualsOperatorTest.java | 4 +-
.../predicate/operators/NotOperatorTest.java | 4 +-
.../api/predicate/operators/OrOperatorTest.java | 4 +-
.../ExtendedResourcePredicateVisitorTest.java | 2 +-
.../server/api/query/JpaSortBuilderTest.java | 2 +-
.../query/ProcessingPredicateVisitorTest.java | 2 +-
.../ambari/server/api/query/QueryImplTest.java | 2 +-
.../ambari/server/api/query/QueryInfoTest.java | 2 +-
.../query/SubResourcePredicateVisitorTest.java | 2 +-
.../render/ClusterBlueprintRendererTest.java | 2 +-
.../api/query/render/DefaultRendererTest.java | 2 +-
.../render/MetricsPaddingRendererTest.java | 2 +-
.../api/query/render/MinimalRendererTest.java | 2 +-
.../resources/BaseResourceDefinitionTest.java | 2 +-
.../BlueprintResourceDefinitionTest.java | 2 +-
.../ClusterResourceDefinitionTest.java | 2 +-
...onentStackVersionResourceDefinitionTest.java | 2 +-
.../resources/FeedResourceDefinitionTest.java | 2 +-
.../resources/HostResourceDefinitionTest.java | 2 +-
.../InstanceResourceDefinitionTest.java | 2 +-
.../LdapSyncEventResourceDefinitionTest.java | 2 +-
.../PermissionResourceDefinitionTest.java | 2 +-
.../PrivilegeResourceDefinitionTest.java | 2 +-
.../RepositoryResourceDefinitionTest.java | 2 +-
...RepositoryVersionResourceDefinitionTest.java | 2 +-
.../ResourceInstanceFactoryImplTest.java | 2 +-
.../ServiceResourceDefinitionTest.java | 2 +-
.../resources/SimpleResourceDefinitionTest.java | 4 +-
.../StackConfigurationDefinitionTest.java | 2 +-
...ckConfigurationDependencyDefinitionTest.java | 2 +-
.../StackServiceResourceDefinitionTest.java | 2 +-
.../StackVersionResourceDefinitionTest.java | 2 +-
.../TargetClusterResourceDefinitionTest.java | 2 +-
.../UpgradeResourceDefinitionTest.java | 4 +-
.../resources/UserResourceDefinitionTest.java | 2 +-
.../ViewExternalSubResourceDefinitionTest.java | 2 +-
.../ViewInstanceResourceDefinitionTest.java | 2 +-
.../ViewPermissionResourceDefinitionTest.java | 2 +-
.../resources/ViewResourceDefinitionTest.java | 2 +-
.../ViewVersionResourceDefinitionTest.java | 2 +-
.../server/api/services/ActionServiceTest.java | 2 +-
.../server/api/services/AmbariMetaInfoTest.java | 7 +-
.../server/api/services/BaseRequestTest.java | 2 +-
.../server/api/services/BaseServiceTest.java | 2 +-
.../api/services/BlueprintServiceTest.java | 4 +-
.../services/ClusterPrivilegeServiceTest.java | 4 +-
.../ClusterStackVersionServiceTest.java | 4 +-
.../api/services/ComponentServiceTest.java | 2 +-
.../api/services/ConfigGroupServiceTest.java | 2 +-
.../api/services/ConfigurationServiceTest.java | 2 +-
.../server/api/services/DeleteRequestTest.java | 2 +-
.../api/services/DeleteResultMetaDataTest.java | 2 +-
.../api/services/ExtensionsServiceTest.java | 2 +-
.../server/api/services/FeedServiceTest.java | 2 +-
.../server/api/services/GetRequestTest.java | 2 +-
.../server/api/services/GroupServiceTest.java | 4 +-
.../api/services/HostComponentServiceTest.java | 2 +-
.../server/api/services/HostServiceTest.java | 2 +-
.../services/HostStackVersionServiceTest.java | 4 +-
.../api/services/InstanceServiceTest.java | 2 +-
.../api/services/LdapSyncEventServiceTest.java | 2 +-
.../server/api/services/LoggingServiceTest.java | 2 +-
.../api/services/NamedPropertySetTest.java | 2 +-
.../api/services/PermissionServiceTest.java | 2 +-
.../server/api/services/PersistServiceTest.java | 2 +-
.../services/PersistenceManagerImplTest.java | 4 +-
.../server/api/services/PostRequestTest.java | 2 +-
.../services/PreUpgradeCheckServiceTest.java | 4 +-
.../api/services/PrivilegeServiceTest.java | 2 +-
.../server/api/services/PutRequestTest.java | 2 +-
.../api/services/QueryPostRequestTest.java | 2 +-
.../api/services/RecommendationServiceTest.java | 2 +-
.../api/services/RepositoryServiceTest.java | 4 +-
.../server/api/services/RequestBodyTest.java | 2 +-
.../server/api/services/RequestFactoryTest.java | 2 +-
.../api/services/RootServiceServiceTest.java | 2 +-
.../server/api/services/ServiceServiceTest.java | 2 +-
.../server/api/services/SettingServiceTest.java | 2 +-
.../server/api/services/StacksServiceTest.java | 2 +-
.../api/services/TargetClusterServiceTest.java | 2 +-
.../services/UpdatePersistenceManagerTest.java | 2 +-
.../api/services/UpgradeItemServiceTest.java | 4 +-
.../api/services/ValidationServiceTest.java | 2 +-
.../services/ViewSubResourceServiceTest.java | 2 +-
.../parsers/BodyParseExceptionTest.java | 2 +-
.../parsers/JsonRequestBodyParserTest.java | 2 +-
.../serializers/JsonSerializerTest.java | 2 +-
.../stackadvisor/StackAdvisorExceptionTest.java | 2 +-
.../stackadvisor/StackAdvisorHelperTest.java | 2 +-
.../StackAdvisorRequestTypeTest.java | 2 +-
.../stackadvisor/StackAdvisorRunnerTest.java | 2 +-
.../ConfigurationRecommendationCommandTest.java | 4 +-
.../commands/StackAdvisorCommandTest.java | 2 +-
.../views/ViewDataMigrationServiceTest.java | 2 +-
.../ViewExternalSubResourceServiceTest.java | 2 +-
.../audit/AccessUnauthorizedAuditEventTest.java | 2 +-
.../server/audit/LoginAuditEventTest.java | 2 +-
.../server/audit/LogoutAuditEventTest.java | 2 +-
.../audit/OperationStatusAuditEventTest.java | 2 +-
.../StartOperationRequestAuditEventTest.java | 2 +-
.../audit/request/AbstractBaseCreator.java | 2 +-
.../server/audit/request/AllGetCreator.java | 2 +-
.../audit/request/AllPostAndPutCreator.java | 2 +-
.../audit/request/DefaultEventCreatorTest.java | 2 +-
.../audit/request/PutHostComponentCreator.java | 2 +-
.../audit/request/RequestAuditLogModule.java | 2 +-
.../audit/request/RequestAuditLoggerTest.java | 2 +-
.../server/bootstrap/BootStrapResourceTest.java | 2 +-
.../ambari/server/bootstrap/BootStrapTest.java | 2 +-
.../checks/AutoStartDisabledCheckTest.java | 2 +-
...ardcodedStackVersionPropertiesCheckTest.java | 4 +-
.../checks/HiveMultipleMetastoreCheckTest.java | 2 +-
.../server/checks/UpgradeCheckOrderTest.java | 2 +-
.../server/checks/VersionMismatchCheckTest.java | 4 +-
.../server/cleanup/CleanupServiceImplTest.java | 4 +-
.../ComponentSSLConfigurationTest.java | 2 +-
.../configuration/RecoveryConfigHelperTest.java | 2 +-
.../server/controller/ActionRequestTest.java | 2 +-
.../server/controller/ActionResponseTest.java | 5 +-
.../AmbariCustomCommandExecutionHelperTest.java | 8 +-
.../controller/AmbariHandlerListTest.java | 2 +-
.../AmbariManagementControllerImplTest.java | 2 +-
.../AmbariManagementControllerTest.java | 4 +-
.../server/controller/AmbariServerTest.java | 2 +-
.../controller/AmbariSessionManagerTest.java | 4 +-
.../BackgroundCustomCommandExecutionTest.java | 2 +-
.../server/controller/ClusterRequestTest.java | 2 +-
.../server/controller/ClusterResponseTest.java | 5 +-
.../server/controller/LdapSyncRequestTest.java | 2 +-
.../controller/MaintenanceStateHelperTest.java | 2 +-
...hYarnCapacitySchedulerReleaseConfigTest.java | 2 +-
.../RootServiceResponseFactoryTest.java | 2 +-
.../ServiceConfigVersionResponseTest.java | 2 +-
.../controller/StackServiceResponseTest.java | 2 +-
.../AbstractControllerResourceProviderTest.java | 2 +-
.../AbstractDRResourceProviderTest.java | 2 +-
.../internal/AbstractPropertyProviderTest.java | 2 +-
.../internal/AbstractResourceProviderTest.java | 2 +-
.../internal/ActionResourceProviderTest.java | 2 +-
.../AlertDefinitionResourceProviderTest.java | 2 +-
.../AlertGroupResourceProviderTest.java | 2 +-
.../AlertHistoryResourceProviderTest.java | 2 +-
.../AlertNoticeResourceProviderTest.java | 2 +-
.../internal/AlertResourceProviderTest.java | 2 +-
.../AlertTargetResourceProviderTest.java | 2 +-
.../internal/AppCookieManagerTest.java | 2 +-
.../internal/ArtifactResourceProviderTest.java | 2 +-
.../AtlasServerHttpPropertyRequestTest.java | 4 +-
.../controller/internal/BaseProviderTest.java | 2 +-
.../internal/BlueprintResourceProviderTest.java | 2 +-
.../internal/CalculatedStatusTest.java | 2 +-
.../ClientConfigResourceProviderTest.java | 2 +-
.../internal/ClusterControllerImplTest.java | 2 +-
.../internal/ClusterResourceProviderTest.java | 2 +-
...ClusterStackVersionResourceProviderTest.java | 2 +-
...leRepositoryVersionResourceProviderTest.java | 2 +-
.../internal/ComponentResourceProviderTest.java | 2 +-
.../ConfigurationResourceProviderTest.java | 2 +-
.../internal/DeleteStatusMetaDataTest.java | 4 +-
.../internal/ExportBlueprintRequestTest.java | 2 +-
.../internal/ExtensionResourceProviderTest.java | 2 +-
.../internal/FeedResourceProviderTest.java | 2 +-
...ostComponentProcessResourceProviderTest.java | 2 +-
.../HostComponentResourceProviderTest.java | 2 +-
.../HostStackVersionResourceProviderTest.java | 2 +-
.../internal/HttpPropertyProviderTest.java | 2 +-
.../internal/InstanceResourceProviderTest.java | 2 +-
.../internal/JMXHostProviderTest.java | 2 +-
.../LdapSyncEventResourceProviderTest.java | 2 +-
.../internal/MetricsServiceProviderTest.java | 2 +-
.../internal/PageRequestImplTest.java | 2 +-
.../internal/PageResponseImplTest.java | 2 +-
.../PermissionResourceProviderTest.java | 2 +-
.../PreUpgradeCheckResourceProviderTest.java | 2 +-
.../internal/PropertyPredicateVisitorTest.java | 2 +-
.../internal/ProvisionClusterRequestTest.java | 2 +-
.../QuickLinkArtifactResourceProviderTest.java | 2 +-
.../RecommendationResourceProviderTest.java | 4 +-
.../RemoteClusterResourceProviderTest.java | 2 +-
.../RepositoryResourceProviderTest.java | 2 +-
.../RepositoryVersionResourceProviderTest.java | 2 +-
.../controller/internal/RequestImplTest.java | 2 +-
.../internal/RequestOperationLevelTest.java | 2 +-
.../RequestScheduleResourceProviderTest.java | 2 +-
.../internal/RequestStageContainerTest.java | 2 +-
.../internal/RequestStatusImplTest.java | 2 +-
.../controller/internal/ResourceImplTest.java | 2 +-
...erviceHostComponentResourceProviderTest.java | 2 +-
.../RootServiceResourceProviderTest.java | 2 +-
.../internal/ScaleClusterRequestTest.java | 2 +-
.../controller/internal/SchemaImplTest.java | 2 +-
.../internal/ServiceResourceProviderTest.java | 2 +-
.../internal/SettingResourceProviderTest.java | 2 +-
.../SimplifyingPredicateVisitorTest.java | 2 +-
.../StackAdvisorResourceProviderTest.java | 2 +-
.../StackArtifactResourceProviderTest.java | 2 +-
...igurationDependencyResourceProviderTest.java | 2 +-
.../StackConfigurationResourceProviderTest.java | 2 +-
.../StackDefinedPropertyProviderTest.java | 2 +-
.../StackDependencyResourceProviderTest.java | 2 +-
...kLevelConfigurationResourceProviderTest.java | 2 +-
.../internal/StackResourceProviderTest.java | 2 +-
.../StackServiceResourceProviderTest.java | 2 +-
.../server/controller/internal/StackTest.java | 2 +-
.../StackUpgradeConfigurationMergeTest.java | 2 +-
.../internal/StageResourceProviderTest.java | 4 +-
.../TargetClusterResourceProviderTest.java | 2 +-
.../internal/TaskResourceProviderTest.java | 2 +-
.../internal/TestIvoryProviderModule.java | 2 +-
.../controller/internal/TestIvoryService.java | 2 +-
.../internal/URLStreamProviderTest.java | 4 +-
.../internal/UpgradeResourceProviderTest.java | 2 +-
.../UpgradeSummaryResourceProviderTest.java | 2 +-
.../internal/UserResourceProviderDBTest.java | 2 +-
.../ValidationResourceProviderTest.java | 4 +-
.../VersionDefinitionResourceProviderTest.java | 2 +-
.../ViewInstanceResourceProviderTest.java | 2 +-
.../ViewPermissionResourceProviderTest.java | 2 +-
.../internal/ViewURLResourceProviderTest.java | 4 +-
.../WidgetLayoutResourceProviderTest.java | 2 +-
.../internal/WidgetResourceProviderTest.java | 2 +-
.../server/controller/ivory/ClusterTest.java | 2 +-
.../server/controller/ivory/FeedTest.java | 2 +-
.../server/controller/ivory/InstanceTest.java | 2 +-
.../jdbc/TestJDBCResourceProvider.java | 2 +-
.../controller/jmx/TestStreamProvider.java | 2 +-
.../logging/LogLevelQueryResponseTest.java | 2 +-
.../controller/logging/LogLineResultTest.java | 2 +-
.../logging/LogQueryResponseTest.java | 2 +-
.../LogSearchDataRetrievalServiceTest.java | 2 +-
.../LoggingRequestHelperFactoryImplTest.java | 2 +-
.../logging/LoggingRequestHelperImplTest.java | 2 +-
.../server/controller/logging/UtilsTest.java | 2 +-
.../metrics/JMXPropertyProviderTest.java | 2 +-
.../RestMetricsPropertyProviderTest.java | 2 +-
.../ThreadPoolEnabledPropertyProviderTest.java | 2 +-
.../metrics/ganglia/GangliaMetricTest.java | 4 +-
.../ganglia/GangliaPropertyProviderTest.java | 2 +-
.../GangliaReportPropertyProviderTest.java | 2 +-
.../metrics/ganglia/TestHttpUrlConnection.java | 5 +-
.../metrics/ganglia/TestStreamProvider.java | 5 +-
.../timeline/AMSPropertyProviderTest.java | 2 +-
.../timeline/AMSReportPropertyProviderTest.java | 2 +-
.../timeline/MetricsPaddingMethodTest.java | 2 +-
.../timeline/MetricsRequestHelperTest.java | 2 +-
.../cache/TimelineMetricCacheSizingTest.java | 2 +-
.../timeline/cache/TimelineMetricCacheTest.java | 2 +-
.../controller/predicate/AndPredicateTest.java | 2 +-
.../predicate/CategoryIsEmptyPredicateTest.java | 2 +-
.../predicate/CategoryPredicateTest.java | 2 +-
.../predicate/EqualsPredicateTest.java | 2 +-
.../predicate/FilterPredicateTest.java | 2 +-
.../predicate/GreaterEqualsPredicateTest.java | 2 +-
.../predicate/GreaterPredicateTest.java | 2 +-
.../predicate/LessEqualsPredicateTest.java | 2 +-
.../controller/predicate/LessPredicateTest.java | 2 +-
.../controller/predicate/NotPredicateTest.java | 2 +-
.../controller/predicate/OrPredicateTest.java | 2 +-
.../predicate/PredicateVisitorTest.java | 2 +-
.../server/controller/spi/ResourceTest.java | 2 +-
...ThreadPoolExecutorCompletionServiceTest.java | 2 +-
.../utilities/DatabaseCheckerTest.java | 2 +-
.../utilities/PredicateBuilderTest.java | 2 +-
.../utilities/PropertyHelperTest.java | 8 +-
.../DefaultServiceCalculatedStateTest.java | 2 +-
.../state/FlumeServiceCalculatedStateTest.java | 2 +-
.../GeneralServiceCalculatedStateTest.java | 2 +-
.../state/HBaseServiceCalculatedStateTest.java | 2 +-
.../state/HDFSServiceCalculatedStateTest.java | 2 +-
.../state/HiveServiceCalculatedStateTest.java | 2 +-
.../state/OozieServiceCalculatedStateTest.java | 2 +-
.../state/YarnServiceCalculatedStateTest.java | 2 +-
.../utilities/webserver/StartServer.java | 2 +-
.../credentialapi/CredentialUtilTest.java | 4 +-
.../ActionDefinitionManagerTest.java | 2 +-
.../apache/ambari/server/events/EventsTest.java | 2 +-
.../ambari/server/events/MockEventListener.java | 2 +-
.../listeners/tasks/TaskStatusListenerTest.java | 2 +-
.../AlertMaintenanceModeListenerTest.java | 6 +-
.../HostVersionOutOfSyncListenerTest.java | 2 +-
.../upgrade/StackUpgradeFinishListenerTest.java | 4 +-
.../upgrade/StackVersionListenerTest.java | 4 +-
.../publishers/VersionEventPublisherTest.java | 4 +-
.../server/hooks/users/UserHookServiceTest.java | 4 +-
.../metadata/AgentAlertDefinitionsTest.java | 2 +-
.../server/metadata/RoleCommandOrderTest.java | 2 +-
.../ambari/server/metadata/RoleGraphTest.java | 2 +-
.../metric/system/impl/MetricsServiceTest.java | 4 +-
.../metric/system/impl/MetricsSourceTest.java | 4 +-
.../system/impl/TestAmbariMetricsSinkImpl.java | 2 +-
.../metric/system/impl/TestMetricsSource.java | 4 +-
.../notifications/DispatchFactoryTest.java | 2 +-
.../server/notifications/MockDispatcher.java | 2 +-
.../dispatchers/AlertScriptDispatcherTest.java | 2 +-
.../dispatchers/AmbariSNMPDispatcherTest.java | 2 +-
.../dispatchers/EmailDispatcherTest.java | 2 +-
.../dispatchers/SNMPDispatcherTest.java | 2 +-
.../ambari/server/orm/AlertDaoHelper.java | 2 +-
.../server/orm/InMemoryDefaultTestModule.java | 5 +-
.../ambari/server/orm/JdbcPropertyTest.java | 2 +-
.../apache/ambari/server/orm/OrmTestHelper.java | 2 +-
.../apache/ambari/server/orm/TestOrmImpl.java | 2 +-
.../server/orm/dao/AlertDefinitionDAOTest.java | 2 +-
.../server/orm/dao/AlertDispatchDAOTest.java | 2 +-
.../server/orm/dao/AlertsDAOCachedTest.java | 2 +-
.../ambari/server/orm/dao/AlertsDAOTest.java | 2 +-
.../ambari/server/orm/dao/BlueprintDAOTest.java | 2 +-
.../server/orm/dao/ConfigGroupDAOTest.java | 2 +-
.../ambari/server/orm/dao/CrudDAOTest.java | 2 +-
.../ambari/server/orm/dao/GroupDAOTest.java | 2 +-
.../dao/HostComponentDesiredStateDAOTest.java | 4 +-
.../orm/dao/HostComponentStateDAOTest.java | 4 +-
.../orm/dao/HostConfigMappingDAOTest.java | 2 +-
.../server/orm/dao/HostRoleCommandDAOTest.java | 2 +-
.../server/orm/dao/HostVersionDAOTest.java | 2 +-
.../ambari/server/orm/dao/PrincipalDAOTest.java | 2 +-
.../server/orm/dao/PrincipalTypeDAOTest.java | 2 +-
.../orm/dao/RepositoryVersionDAOTest.java | 2 +-
.../ambari/server/orm/dao/RequestDAOTest.java | 2 +-
.../server/orm/dao/RequestScheduleDAOTest.java | 2 +-
.../ambari/server/orm/dao/ResourceDAOTest.java | 2 +-
.../server/orm/dao/ResourceTypeDAOTest.java | 2 +-
.../server/orm/dao/ServiceConfigDAOTest.java | 2 +-
.../ambari/server/orm/dao/SettingDAOTest.java | 2 +-
.../ambari/server/orm/dao/StageDAOTest.java | 2 +-
.../orm/dao/TopologyLogicalRequestDAOTest.java | 2 +-
.../server/orm/dao/TopologyRequestDAOTest.java | 2 +-
.../ambari/server/orm/dao/UpgradeDAOTest.java | 2 +-
.../ambari/server/orm/dao/UserDAOTest.java | 2 +-
.../server/orm/dao/ViewInstanceDAOTest.java | 2 +-
.../ambari/server/orm/dao/WidgetDAOTest.java | 2 +-
.../server/orm/dao/WidgetLayoutDAOTest.java | 2 +-
.../apache/ambari/server/orm/db/DDLTests.java | 2 +-
.../orm/entities/AlertCurrentEntityTest.java | 2 +-
.../orm/entities/AlertDefinitionEntityTest.java | 2 +-
.../orm/entities/AlertHistoryEntityTest.java | 2 +-
.../entities/BlueprintConfigEntityPKTest.java | 2 +-
.../orm/entities/BlueprintConfigEntityTest.java | 2 +-
.../orm/entities/BlueprintEntityTest.java | 2 +-
.../entities/BlueprintSettingEntityTest.java | 2 +-
.../server/orm/entities/HostEntityTest.java | 4 +-
.../entities/HostGroupComponentEntityTest.java | 2 +-
.../entities/HostGroupConfigEntityPKTest.java | 2 +-
.../orm/entities/HostGroupConfigEntityTest.java | 2 +-
.../orm/entities/HostGroupEntityTest.java | 2 +-
.../orm/entities/HostRoleCommandEntityTest.java | 2 +-
.../orm/entities/LdapSyncEventEntityTest.java | 2 +-
.../orm/entities/LdapSyncSpecEntityTest.java | 2 +-
.../orm/entities/PrincipalEntityTest.java | 2 +-
.../orm/entities/PrincipalTypeEntityTest.java | 2 +-
.../server/orm/entities/ResourceEntityTest.java | 2 +-
.../orm/entities/ResourceTypeEntityTest.java | 2 +-
.../orm/entities/ServiceConfigEntityTest.java | 2 +-
.../server/orm/entities/SettingEntityTest.java | 2 +-
.../server/orm/entities/StageEntityTest.java | 2 +-
.../orm/entities/ViewEntityEntityTest.java | 2 +-
.../server/orm/entities/ViewEntityTest.java | 2 +-
.../orm/entities/ViewInstanceEntityTest.java | 2 +-
.../ambari/server/proxy/ProxyServiceTest.java | 2 +-
.../ambari/server/resources/TestResources.java | 2 +-
.../scheduler/ExecutionScheduleManagerTest.java | 2 +-
.../scheduler/ExecutionSchedulerTest.java | 2 +-
.../server/security/CertGenerationTest.java | 2 +-
.../server/security/SecurityFilterTest.java | 2 +-
.../server/security/SecurityHelperImplTest.java | 2 +-
.../server/security/SslExecutionTest.java | 2 +-
.../authorization/AmbariAuthenticationTest.java | 2 +-
...mbariLdapAuthenticationProviderBaseTest.java | 2 +-
...uthenticationProviderForDNWithSpaceTest.java | 2 +-
...henticationProviderForDuplicateUserTest.java | 2 +-
.../AmbariLdapAuthenticationProviderTest.java | 2 +-
.../AmbariLocalUserProviderTest.java | 2 +-
.../AmbariPamAuthenticationProviderTest.java | 2 +-
.../AmbariUserAuthenticationFilterTest.java | 4 +-
.../AuthorizationHelperInitializer.java | 2 +-
.../authorization/AuthorizationHelperTest.java | 2 +-
.../authorization/AuthorizationTestModule.java | 2 +-
...thorizationTestModuleForLdapDNWithSpace.java | 2 +-
.../authorization/LdapServerPropertiesTest.java | 2 +-
.../TestAmbariLdapAuthoritiesPopulator.java | 2 +-
.../security/encryption/AESEncryptorTest.java | 2 +-
.../encryption/CredentialProviderTest.java | 2 +-
.../encryption/CredentialStoreTest.java | 2 +-
.../encryption/MasterKeyServiceTest.java | 2 +-
.../ldap/AmbariLdapDataPopulatorTest.java | 2 +-
.../serveraction/kerberos/KDCTypeTest.java | 4 +-
.../AutoSkipFailedSummaryActionTest.java | 2 +-
.../ComponentVersionCheckActionTest.java | 2 +-
.../upgrades/ConfigureActionTest.java | 2 +-
.../FixCapacitySchedulerOrderingPolicyTest.java | 2 +-
.../upgrades/FixLzoCodecPathTest.java | 2 +-
.../upgrades/FixOozieAdminUsersTest.java | 2 +-
.../upgrades/FixYarnWebServiceUrlTest.java | 2 +-
.../HBaseEnvMaxDirectMemorySizeActionTest.java | 2 +-
.../upgrades/HiveEnvClasspathActionTest.java | 2 +-
.../upgrades/HiveZKQuorumConfigActionTest.java | 2 +-
.../upgrades/KerberosKeytabsActionTest.java | 2 +-
.../upgrades/OozieConfigCalculationTest.java | 2 +-
.../upgrades/RangerConfigCalculationTest.java | 2 +-
.../RangerKerberosConfigCalculationTest.java | 2 +-
.../upgrades/RangerKmsProxyConfigTest.java | 4 +-
.../RangerWebAlertConfigActionTest.java | 4 +-
.../upgrades/UpgradeActionTest.java | 2 +-
.../UpgradeUserKerberosDescriptorTest.java | 2 +-
.../CsvFilePersisterServiceFunctionalTest.java | 4 +-
.../PostUserCreationHookServerActionTest.java | 4 +-
.../server/stack/ComponentModuleTest.java | 2 +-
.../QuickLinksConfigurationModuleTest.java | 2 +-
.../ambari/server/stack/RepoUtilTest.java | 2 +-
.../ambari/server/stack/ServiceModuleTest.java | 2 +-
.../stack/StackManagerCommonServicesTest.java | 2 +-
.../server/stack/StackManagerExtensionTest.java | 2 +-
.../server/stack/StackManagerMiscTest.java | 2 +-
.../ambari/server/stack/StackManagerMock.java | 2 +-
.../ambari/server/stack/StackManagerTest.java | 2 +-
.../ambari/server/stack/StackModuleTest.java | 2 +-
.../ambari/server/stack/ThemeModuleTest.java | 4 +-
.../UpdateActiveRepoVersionOnStartupTest.java | 2 +-
.../server/stageplanner/TestStagePlanner.java | 2 +-
.../apache/ambari/server/state/AlertTest.java | 2 +-
.../ambari/server/state/CheckHelperTest.java | 5 +-
.../ambari/server/state/ConfigGroupTest.java | 2 +-
.../ambari/server/state/ConfigHelperTest.java | 2 +-
.../server/state/ConfigMergeHelperTest.java | 2 +-
.../ambari/server/state/DesiredConfigTest.java | 2 +-
.../ambari/server/state/PropertyInfoTest.java | 4 +-
.../server/state/RequestExecutionTest.java | 2 +-
.../server/state/ServiceComponentTest.java | 2 +-
.../ambari/server/state/ServiceInfoTest.java | 2 +-
.../server/state/ServicePropertiesTest.java | 4 +-
.../server/state/ServicePropertyInfoTest.java | 2 +-
.../apache/ambari/server/state/ServiceTest.java | 2 +-
.../ambari/server/state/UpgradeHelperTest.java | 2 +-
.../ambari/server/state/action/JobTest.java | 2 +-
.../alerts/AggregateAlertListenerTest.java | 2 +-
.../alerts/AlertDefinitionEqualityTest.java | 2 +-
.../state/alerts/AlertDefinitionHashTest.java | 2 +-
.../state/alerts/AlertEventPublisherTest.java | 2 +-
.../state/alerts/AlertReceivedListenerTest.java | 2 +-
.../alerts/AlertStateChangedEventTest.java | 2 +-
.../state/alerts/InitialAlertEventTest.java | 2 +-
.../state/cluster/AlertDataManagerTest.java | 2 +-
.../state/cluster/ClusterDeadlockTest.java | 2 +-
.../server/state/cluster/ClusterImplTest.java | 2 +-
.../server/state/cluster/ClusterTest.java | 7 +-
.../state/cluster/ClustersDeadlockTest.java | 2 +-
.../server/state/cluster/ClustersImplTest.java | 4 +-
.../server/state/cluster/ClustersTest.java | 2 +-
.../ConcurrentServiceConfigVersionTest.java | 2 +-
...omponentHostConcurrentWriteDeadlockTest.java | 2 +-
.../ambari/server/state/host/HostImplTest.java | 4 +-
.../ambari/server/state/host/HostTest.java | 2 +-
.../state/repository/VersionDefinitionTest.java | 2 +-
.../AlertNoticeDispatchServiceTest.java | 2 +-
.../services/CachedAlertFlushServiceTest.java | 2 +-
.../services/MetricsRetrievalServiceTest.java | 2 +-
.../services/RetryUpgradeActionServiceTest.java | 2 +-
.../state/stack/ConfigUpgradePackTest.java | 2 +-
.../state/stack/ConfigUpgradeValidityTest.java | 2 +-
.../ambari/server/state/stack/OSFamilyTest.java | 2 +-
.../state/stack/UpgradePackParsingTest.java | 2 +-
.../server/state/stack/UpgradePackTest.java | 2 +-
.../upgrade/RepositoryVersionHelperTest.java | 2 +-
.../stack/upgrade/StageWrapperBuilderTest.java | 2 +-
.../svccomphost/ServiceComponentHostTest.java | 2 +-
.../server/testing/DBInconsistencyTests.java | 2 +-
.../server/testing/DeadlockWarningThread.java | 2 +-
.../server/testing/DeadlockedThreadsTest.java | 4 +-
.../server/topology/AmbariContextTest.java | 2 +-
.../server/topology/BlueprintFactoryTest.java | 2 +-
.../server/topology/BlueprintImplTest.java | 2 +-
.../topology/BlueprintValidatorImplTest.java | 2 +-
.../ClusterConfigurationRequestTest.java | 2 +-
.../ClusterDeployWithStartOnlyTest.java | 2 +-
...InstallWithoutStartOnComponentLevelTest.java | 2 +-
.../ClusterInstallWithoutStartTest.java | 2 +-
.../topology/ClusterTopologyImplTest.java | 4 +-
.../topology/ConfigurationFactoryTest.java | 2 +-
.../server/topology/ConfigurationTest.java | 2 +-
.../topology/ConfigureClusterTaskTest.java | 4 +-
.../server/topology/HostGroupInfoTest.java | 2 +-
.../server/topology/LogicalRequestTest.java | 2 +-
.../topology/RequiredPasswordValidatorTest.java | 2 +-
.../SecurityConfigurationFactoryTest.java | 2 +-
.../server/topology/SettingFactoryTest.java | 2 +-
.../ambari/server/topology/SettingTest.java | 2 +-
.../server/topology/TopologyManagerTest.java | 2 +-
.../RequiredConfigPropertiesValidatorTest.java | 35 ++--
.../server/upgrade/UpgradeCatalog211Test.java | 2 +-
.../server/upgrade/UpgradeCatalogHelper.java | 2 +-
.../utils/CollectionPresentationUtils.java | 2 +-
.../ambari/server/utils/RequestUtilsTest.java | 2 +-
.../ambari/server/utils/SetUtilsTest.java | 2 +-
.../ambari/server/utils/StageUtilsTest.java | 2 +-
.../utils/SynchronousThreadPoolExecutor.java | 2 +-
.../ambari/server/utils/TestDateUtils.java | 2 +-
.../ambari/server/utils/TestHTTPUtils.java | 2 +-
.../ambari/server/utils/TestJsonUtils.java | 2 +-
.../ambari/server/utils/TestParallel.java | 2 +-
.../server/utils/TestShellCommandUtil.java | 2 +-
.../ambari/server/utils/TestVersionUtils.java | 2 +-
.../ambari/server/view/ClusterImplTest.java | 4 +-
.../ambari/server/view/DefaultMaskerTest.java | 2 +-
.../server/view/HttpImpersonatorImplTest.java | 2 +-
.../server/view/RemoteAmbariClusterTest.java | 2 +-
.../view/ViewAmbariStreamProviderTest.java | 4 +-
.../server/view/ViewArchiveUtilityTest.java | 4 +-
.../ambari/server/view/ViewClassLoaderTest.java | 2 +-
.../ambari/server/view/ViewContextImplTest.java | 2 +-
.../view/ViewDataMigrationContextImplTest.java | 2 +-
.../view/ViewDataMigrationUtilityTest.java | 2 +-
.../server/view/ViewDirectoryWatcherTest.java | 2 +-
.../ambari/server/view/ViewExtractorTest.java | 2 +-
.../view/ViewSubResourceDefinitionTest.java | 2 +-
.../view/ViewSubResourceProviderTest.java | 2 +-
.../server/view/ViewThrottleFilterTest.java | 2 +-
.../server/view/ViewURLStreamProviderTest.java | 2 +-
.../view/configuration/EntityConfigTest.java | 2 +-
.../view/configuration/InstanceConfigTest.java | 2 +-
.../view/configuration/ParameterConfigTest.java | 2 +-
.../configuration/PermissionConfigTest.java | 2 +-
.../configuration/PersistenceConfigTest.java | 2 +-
.../view/configuration/PropertyConfigTest.java | 2 +-
.../view/configuration/ResourceConfigTest.java | 2 +-
.../view/configuration/ViewConfigTest.java | 2 +-
.../server/view/events/EventImplTest.java | 2 +-
.../InstanceValidationResultImplTest.java | 4 +-
.../validation/ValidationResultImplTest.java | 4 +-
.../stacks/2.0.6/YARN/test_historyserver.py | 2 -
.../app/controllers/main/host/add_controller.js | 3 -
.../app/controllers/main/views_controller.js | 4 +-
ambari-web/app/controllers/wizard.js | 9 +-
ambari-web/app/models/view_instance.js | 6 +-
ambari-web/app/routes/add_host_routes.js | 38 +++--
ambari-web/app/styles/alerts.less | 14 ++
ambari-web/app/styles/application.less | 13 +-
ambari-web/app/styles/common.less | 1 +
ambari-web/app/styles/config_history_flow.less | 7 +-
.../app/styles/theme/bootstrap-ambari.css | 2 +-
.../app/templates/main/service/menu_item.hbs | 11 +-
ambari-web/app/views/main/menu.js | 1 +
ambari-web/app/views/main/service/menu.js | 4 -
.../main/host/add_controller_test.js | 19 ---
.../controllers/main/views_controller_test.js | 14 +-
ambari-web/test/controllers/wizard_test.js | 4 -
ambari-web/test/models/view_instance_test.js | 6 +-
ambari-web/test/views/main/service/menu_test.js | 12 --
1940 files changed, 2468 insertions(+), 2450 deletions(-)
----------------------------------------------------------------------
[06/50] [abbrv] ambari git commit: AMBARI-20957. Remove
cluster_version use (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ClusterVersionDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ClusterVersionDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ClusterVersionDAOTest.java
deleted file mode 100644
index 81fa8e1..0000000
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ClusterVersionDAOTest.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.server.orm.dao;
-
-import java.sql.SQLException;
-
-import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.H2DatabaseCleaner;
-import org.apache.ambari.server.orm.GuiceJpaInitializer;
-import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.OrmTestHelper;
-import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
-import org.apache.ambari.server.state.RepositoryVersionState;
-import org.apache.ambari.server.state.StackId;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-/**
- * ClusterVersionDAO unit tests.
- */
-public class ClusterVersionDAOTest {
-
- private static Injector injector;
- private ClusterVersionDAO clusterVersionDAO;
- private ClusterDAO clusterDAO;
- private OrmTestHelper helper;
-
- private long clusterId;
- ClusterEntity cluster;
- private int lastStep = -1;
-
- ClusterVersionEntity cvA;
- long cvAId = 0L;
-
- ClusterVersionEntity cvB;
- long cvBId = 0L;
-
- ClusterVersionEntity cvC;
- long cvCId = 0L;
-
- private final static StackId HDP_22_STACK = new StackId("HDP", "2.2.0");
- private final static StackId BAD_STACK = new StackId("BADSTACK", "1.0");
-
- @Before
- public void before() {
- injector = Guice.createInjector(new InMemoryDefaultTestModule());
- injector.getInstance(GuiceJpaInitializer.class);
-
- clusterVersionDAO = injector.getInstance(ClusterVersionDAO.class);
- clusterDAO = injector.getInstance(ClusterDAO.class);
- helper = injector.getInstance(OrmTestHelper.class);
- }
-
- /**
- * Helper function to transition the cluster through several cluster versions.
- * @param currStep Step to go to is a value from 1 - 7, inclusive.
- */
- private void createRecordsUntilStep(int currStep) throws Exception {
- // Fresh install on A
- if (currStep >= 1 && lastStep <= 0) {
- clusterId = helper.createCluster();
- cluster = clusterDAO.findById(clusterId);
-
- cvA = new ClusterVersionEntity(cluster, helper.getOrCreateRepositoryVersion(HDP_22_STACK, "2.2.0.0-995"), RepositoryVersionState.CURRENT, System.currentTimeMillis(), System.currentTimeMillis(), "admin");
- clusterVersionDAO.create(cvA);
- cvAId = cvA.getId();
- } else {
- cluster = clusterDAO.findById(clusterId);
- cvA = clusterVersionDAO.findByPK(cvAId);
- }
-
- // Install B
- if (currStep >= 2) {
- if (lastStep <= 1) {
- cvB = new ClusterVersionEntity(cluster, helper.getOrCreateRepositoryVersion(HDP_22_STACK, "2.2.0.1-998"), RepositoryVersionState.INSTALLED, System.currentTimeMillis(), System.currentTimeMillis(), "admin");
- clusterVersionDAO.create(cvB);
- cvBId = cvB.getId();
- } else {
- cvB = clusterVersionDAO.findByPK(cvBId);
- }
- }
-
- // Switch from A to B
- if (currStep >= 3 && lastStep <= 2) {
- cvA.setState(RepositoryVersionState.INSTALLED);
- cvB.setState(RepositoryVersionState.CURRENT);
- clusterVersionDAO.merge(cvA);
- clusterVersionDAO.merge(cvB);
- }
-
- // Start upgrading C
- if (currStep >= 4) {
- if (lastStep <= 3) {
- cvC = new ClusterVersionEntity(cluster, helper.getOrCreateRepositoryVersion(HDP_22_STACK, "2.2.0.0-100"), RepositoryVersionState.INSTALLING, System.currentTimeMillis(), "admin");
- clusterVersionDAO.create(cvC);
- cvCId = cvC.getId();
- } else {
- cvC = clusterVersionDAO.findByPK(cvCId);
- }
- }
-
- // Fail upgrade for C
- if (currStep >= 5 && lastStep <= 4) {
- cvC.setState(RepositoryVersionState.INSTALL_FAILED);
- cvC.setEndTime(System.currentTimeMillis());
- clusterVersionDAO.merge(cvC);
- }
-
- // Retry upgrade on C
- if (currStep >= 6 && lastStep <= 5) {
- cvC.setState(RepositoryVersionState.INSTALLING);
- cvC.setEndTime(0L);
- clusterVersionDAO.merge(cvC);
- }
-
- // Finalize upgrade on C to make it the current cluster version
- if (currStep >= 7 && lastStep <= 6) {
- cvC.setState(RepositoryVersionState.CURRENT);
- cvC.setEndTime(System.currentTimeMillis());
- clusterVersionDAO.merge(cvC);
-
- cvA.setState(RepositoryVersionState.INSTALLED);
- cvB.setState(RepositoryVersionState.INSTALLED);
- clusterVersionDAO.merge(cvA);
- clusterVersionDAO.merge(cvB);
- }
-
- lastStep = currStep;
- }
-
- @Test
- public void testFindByStackAndVersion() throws Exception {
- createRecordsUntilStep(1);
- Assert.assertEquals(
- 0,
- clusterVersionDAO.findByStackAndVersion("non existing", "non existing",
- "non existing").size());
-
- Assert.assertEquals(
- 1,
- clusterVersionDAO.findByStackAndVersion(HDP_22_STACK.getStackName(),
- HDP_22_STACK.getStackVersion(), "2.2.0.0-995").size());
- }
-
- @Test
- public void testFindByCluster() throws Exception {
- createRecordsUntilStep(1);
- Assert.assertEquals(0, clusterVersionDAO.findByCluster("non existing").size());
- Assert.assertEquals(1, clusterVersionDAO.findByCluster(cluster.getClusterName()).size());
- }
-
- @Test
- public void testFindByClusterAndStackAndVersion() throws Exception {
- createRecordsUntilStep(1);
- Assert.assertNull(clusterVersionDAO.findByClusterAndStackAndVersion(
- cluster.getClusterName(), BAD_STACK, "non existing"));
-
- Assert.assertNotNull(clusterVersionDAO.findByClusterAndStackAndVersion(
- cluster.getClusterName(), HDP_22_STACK, "2.2.0.0-995"));
- }
-
- /**
- * At all times the cluster should have a cluster version whose state is {@link org.apache.ambari.server.state.RepositoryVersionState#CURRENT}
- */
- @Test
- public void testFindByClusterAndStateCurrent() throws Exception {
- createRecordsUntilStep(1);
- Assert.assertNotNull(clusterVersionDAO.findByClusterAndStateCurrent(cluster.getClusterName()));
-
- createRecordsUntilStep(2);
- Assert.assertNotNull(clusterVersionDAO.findByClusterAndStateCurrent(cluster.getClusterName()));
-
- createRecordsUntilStep(3);
- Assert.assertNotNull(clusterVersionDAO.findByClusterAndStateCurrent(cluster.getClusterName()));
-
- createRecordsUntilStep(4);
- Assert.assertNotNull(clusterVersionDAO.findByClusterAndStateCurrent(cluster.getClusterName()));
-
- createRecordsUntilStep(5);
- Assert.assertNotNull(clusterVersionDAO.findByClusterAndStateCurrent(cluster.getClusterName()));
-
- createRecordsUntilStep(6);
- Assert.assertNotNull(clusterVersionDAO.findByClusterAndStateCurrent(cluster.getClusterName()));
-
- createRecordsUntilStep(7);
- Assert.assertNotNull(clusterVersionDAO.findByClusterAndStateCurrent(cluster.getClusterName()));
- }
-
- /**
- * Test the state of certain cluster versions.
- */
- @Test
- public void testFindByClusterAndState() throws Exception {
- createRecordsUntilStep(1);
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.CURRENT).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLED).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLING).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALL_FAILED).size());
-
- createRecordsUntilStep(2);
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.CURRENT).size());
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLED).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLING).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALL_FAILED).size());
-
- createRecordsUntilStep(3);
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.CURRENT).size());
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLED).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLING).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALL_FAILED).size());
-
- createRecordsUntilStep(4);
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.CURRENT).size());
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLED).size());
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLING).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALL_FAILED).size());
-
- createRecordsUntilStep(5);
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.CURRENT).size());
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLED).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLING).size());
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALL_FAILED).size());
-
- createRecordsUntilStep(6);
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.CURRENT).size());
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLED).size());
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLING).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALL_FAILED).size());
-
- createRecordsUntilStep(7);
- Assert.assertEquals(1, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.CURRENT).size());
- Assert.assertEquals(2, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLED).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLING).size());
- Assert.assertEquals(0, clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALL_FAILED).size());
- }
-
- @After
- public void after() throws AmbariException, SQLException {
- H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
- injector = null;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java
index eb0c49e..e0caf01 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java
@@ -30,7 +30,6 @@ import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@ -58,7 +57,6 @@ public class HostVersionDAOTest {
private ResourceTypeDAO resourceTypeDAO;
private ClusterDAO clusterDAO;
private StackDAO stackDAO;
- private ClusterVersionDAO clusterVersionDAO;
private HostDAO hostDAO;
private HostVersionDAO hostVersionDAO;
private OrmTestHelper helper;
@@ -79,7 +77,6 @@ public class HostVersionDAOTest {
resourceTypeDAO = injector.getInstance(ResourceTypeDAO.class);
clusterDAO = injector.getInstance(ClusterDAO.class);
stackDAO = injector.getInstance(StackDAO.class);
- clusterVersionDAO = injector.getInstance(ClusterVersionDAO.class);
hostDAO = injector.getInstance(HostDAO.class);
hostVersionDAO = injector.getInstance(HostVersionDAO.class);
helper = injector.getInstance(OrmTestHelper.class);
@@ -116,17 +113,6 @@ public class HostVersionDAOTest {
RepositoryVersionEntity repoVersionEntity = helper.getOrCreateRepositoryVersion(HDP_22_STACK, repoVersion_2200);
- // Create the Cluster Version and link it to the cluster
- ClusterVersionEntity clusterVersionEntity = new ClusterVersionEntity(
- clusterEntity, repoVersionEntity, RepositoryVersionState.CURRENT,
- System.currentTimeMillis(), System.currentTimeMillis(), "admin");
- List<ClusterVersionEntity> clusterVersionEntities = new ArrayList<>();
- clusterVersionEntities.add(clusterVersionEntity);
- clusterEntity.setClusterVersionEntities(clusterVersionEntities);
-
- clusterVersionDAO.create(clusterVersionEntity);
- clusterDAO.merge(clusterEntity);
-
// Create the hosts
HostEntity host1 = new HostEntity();
HostEntity host2 = new HostEntity();
@@ -157,9 +143,9 @@ public class HostVersionDAOTest {
clusterDAO.merge(clusterEntity);
// Create the Host Versions
- HostVersionEntity hostVersionEntity1 = new HostVersionEntity(host1, clusterVersionEntity.getRepositoryVersion(), RepositoryVersionState.CURRENT);
- HostVersionEntity hostVersionEntity2 = new HostVersionEntity(host2, clusterVersionEntity.getRepositoryVersion(), RepositoryVersionState.INSTALLED);
- HostVersionEntity hostVersionEntity3 = new HostVersionEntity(host3, clusterVersionEntity.getRepositoryVersion(), RepositoryVersionState.INSTALLED);
+ HostVersionEntity hostVersionEntity1 = new HostVersionEntity(host1, repoVersionEntity, RepositoryVersionState.CURRENT);
+ HostVersionEntity hostVersionEntity2 = new HostVersionEntity(host2, repoVersionEntity, RepositoryVersionState.INSTALLED);
+ HostVersionEntity hostVersionEntity3 = new HostVersionEntity(host3, repoVersionEntity, RepositoryVersionState.INSTALLED);
hostVersionDAO.create(hostVersionEntity1);
hostVersionDAO.create(hostVersionEntity2);
@@ -172,20 +158,8 @@ public class HostVersionDAOTest {
private void addMoreVersions() {
ClusterEntity clusterEntity = clusterDAO.findByName("test_cluster1");
- // Create another Cluster Version and mark the old one as INSTALLED
- if (clusterEntity.getClusterVersionEntities() != null && clusterEntity.getClusterVersionEntities().size() > 0) {
- ClusterVersionEntity installedClusterVersion = clusterVersionDAO.findByClusterAndStateCurrent(clusterEntity.getClusterName());
- installedClusterVersion.setState(RepositoryVersionState.INSTALLED);
- clusterVersionDAO.merge(installedClusterVersion);
- } else {
- Assert.fail("Cluster is expected to have at least one cluster version");
- }
-
RepositoryVersionEntity repositoryVersionEnt_2_2_0_1 = helper.getOrCreateRepositoryVersion(HDP_22_STACK, repoVersion_2201);
- ClusterVersionEntity newClusterVersionEntity = new ClusterVersionEntity(clusterEntity, repositoryVersionEnt_2_2_0_1, RepositoryVersionState.CURRENT, System.currentTimeMillis(), System.currentTimeMillis(), "admin");
- clusterEntity.addClusterVersionEntity(newClusterVersionEntity);
- clusterVersionDAO.create(newClusterVersionEntity);
HostEntity[] hostEntities = clusterEntity.getHostEntities().toArray(new HostEntity[clusterEntity.getHostEntities().size()]);
// Must sort by host name in ascending order to ensure that state is accurately set later on.
@@ -193,7 +167,7 @@ public class HostVersionDAOTest {
// For each of the hosts, add a host version
for (HostEntity host : hostEntities) {
- HostVersionEntity hostVersionEntity = new HostVersionEntity(host, helper.getOrCreateRepositoryVersion(HDP_22_STACK, repoVersion_2201), RepositoryVersionState.INSTALLED);
+ HostVersionEntity hostVersionEntity = new HostVersionEntity(host, repositoryVersionEnt_2_2_0_1, RepositoryVersionState.INSTALLED);
hostVersionDAO.create(hostVersionEntity);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
index c7414bc..016ca90 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
@@ -26,12 +26,8 @@ import org.apache.ambari.server.H2DatabaseCleaner;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.OrmTestHelper;
-import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.StackId;
import org.junit.After;
import org.junit.Assert;
@@ -53,20 +49,14 @@ public class RepositoryVersionDAOTest {
private static final StackId BAD_STACK = new StackId("BADSTACK", "1.0");
private RepositoryVersionDAO repositoryVersionDAO;
- private ClusterVersionDAO clusterVersionDAO;
- private ClusterDAO clusterDAO;
private StackDAO stackDAO;
- private OrmTestHelper helper;
@Before
public void before() {
injector = Guice.createInjector(new InMemoryDefaultTestModule());
repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
- clusterVersionDAO = injector.getInstance(ClusterVersionDAO.class);
- clusterDAO = injector.getInstance(ClusterDAO.class);
stackDAO = injector.getInstance(StackDAO.class);
- helper = injector.getInstance(OrmTestHelper.class);
injector.getInstance(GuiceJpaInitializer.class);
// required to populate stacks into the database
@@ -176,31 +166,6 @@ public class RepositoryVersionDAOTest {
}
@Test
- public void testDeleteCascade() throws Exception {
- long clusterId = helper.createCluster();
- ClusterEntity cluster = clusterDAO.findById(clusterId);
- createSingleRecord();
- final RepositoryVersionEntity entity = repositoryVersionDAO.findByStackAndVersion(
- HDP_206, "version");
-
- ClusterVersionEntity cvA = new ClusterVersionEntity(cluster, entity, RepositoryVersionState.INSTALLED, System.currentTimeMillis(), System.currentTimeMillis(), "admin");
- clusterVersionDAO.create(cvA);
- long cvAId = cvA.getId();
- cvA = clusterVersionDAO.findByPK(cvAId);
- Assert.assertNotNull(cvA.getRepositoryVersion());
- final RepositoryVersionEntity newEntity = repositoryVersionDAO.findByStackAndVersion(
- HDP_206, "version");
- try {
- repositoryVersionDAO.remove(newEntity);
- } catch (Exception e) {
- //Cascade deletion will fail because absent integrity in in-memory DB
- Assert.assertNotNull(clusterVersionDAO.findByPK(cvAId));
- }
- //
-
- }
-
- @Test
public void testRemovePrefixFromVersion() {
StackEntity hdp206StackEntity = stackDAO.find(HDP_206.getStackName(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
index 91d5f04..7301c66 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
@@ -30,7 +30,6 @@ import javax.persistence.EntityManager;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.H2DatabaseCleaner;
import org.apache.ambari.server.ServiceComponentNotFoundException;
-import org.apache.ambari.server.ServiceNotFoundException;
import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
@@ -41,14 +40,12 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.RequestDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.RequestEntity;
@@ -74,8 +71,6 @@ import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.inject.Guice;
import com.google.inject.Inject;
@@ -86,8 +81,6 @@ import com.google.inject.persist.UnitOfWork;
* Tests upgrade-related server side actions
*/
public class ComponentVersionCheckActionTest {
- private static final Logger LOG = LoggerFactory.getLogger(ComponentVersionCheckActionTest.class);
-
private static final String HDP_2_1_1_0 = "2.1.1.0-1";
private static final String HDP_2_1_1_1 = "2.1.1.1-2";
@@ -108,9 +101,6 @@ public class ComponentVersionCheckActionTest {
private RepositoryVersionDAO repoVersionDAO;
@Inject
- private ClusterVersionDAO clusterVersionDAO;
-
- @Inject
private HostVersionDAO hostVersionDAO;
@Inject
@@ -174,8 +164,6 @@ public class ComponentVersionCheckActionTest {
// Create the starting repo version
m_helper.getOrCreateRepositoryVersion(sourceStack, sourceRepo);
- c.createClusterVersion(sourceStack, sourceRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(sourceStack, sourceRepo, RepositoryVersionState.CURRENT);
// Create the new repo version
String urlInfo = "[{'repositories':["
@@ -184,8 +172,6 @@ public class ComponentVersionCheckActionTest {
repoVersionDAO.create(stackEntityTarget, targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
// Start upgrading the newer repo
- c.createClusterVersion(targetStack, targetRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(targetStack, targetRepo, RepositoryVersionState.INSTALLED);
c.setCurrentStackVersion(targetStack);
HostDAO hostDAO = m_injector.getInstance(HostDAO.class);
@@ -249,8 +235,6 @@ public class ComponentVersionCheckActionTest {
// Create the starting repo version
m_helper.getOrCreateRepositoryVersion(sourceStack, sourceRepo);
- c.createClusterVersion(sourceStack, sourceRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(sourceStack, sourceRepo, RepositoryVersionState.CURRENT);
RequestEntity requestEntity = new RequestEntity();
requestEntity.setClusterId(c.getClusterId());
@@ -274,12 +258,10 @@ public class ComponentVersionCheckActionTest {
private void createNewRepoVersion(StackId targetStack, String targetRepo, String clusterName,
String hostName) throws AmbariException {
- Clusters clusters = m_injector.getInstance(Clusters.class);
StackDAO stackDAO = m_injector.getInstance(StackDAO.class);
StackEntity stackEntityTarget = stackDAO.find(targetStack.getStackName(), targetStack.getStackVersion());
- Cluster c = clusters.getCluster(clusterName);
// Create the new repo version
String urlInfo = "[{'repositories':["
+ "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'" + targetRepo + "'}"
@@ -287,9 +269,6 @@ public class ComponentVersionCheckActionTest {
repoVersionDAO.create(stackEntityTarget, targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
// Start upgrading the newer repo
- c.createClusterVersion(targetStack, targetRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(targetStack, targetRepo, RepositoryVersionState.INSTALLED);
-
HostDAO hostDAO = m_injector.getInstance(HostDAO.class);
HostVersionEntity entity = new HostVersionEntity();
@@ -350,7 +329,9 @@ public class ComponentVersionCheckActionTest {
Clusters clusters = m_injector.getInstance(Clusters.class);
Cluster cluster = clusters.getCluster("c1");
- Service service = installService(cluster, "HDFS");
+ RepositoryVersionEntity repositoryVersion = m_helper.getOrCreateRepositoryVersion(HDP_21_STACK, HDP_2_1_1_0);
+
+ Service service = installService(cluster, "HDFS", repositoryVersion);
addServiceComponent(cluster, service, "NAMENODE");
addServiceComponent(cluster, service, "DATANODE");
createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", "h1");
@@ -371,17 +352,10 @@ public class ComponentVersionCheckActionTest {
// inject an unhappy path where the cluster repo version is still UPGRADING
// even though all of the hosts are UPGRADED
- ClusterVersionEntity upgradingClusterVersion = clusterVersionDAO.findByClusterAndStackAndVersion(
- "c1", HDP_22_STACK, targetRepo);
-
- upgradingClusterVersion.setState(RepositoryVersionState.INSTALLING);
- upgradingClusterVersion = clusterVersionDAO.merge(upgradingClusterVersion);
// verify the conditions for the test are met properly
- upgradingClusterVersion = clusterVersionDAO.findByClusterAndStackAndVersion("c1", HDP_22_STACK, targetRepo);
List<HostVersionEntity> hostVersions = hostVersionDAO.findByClusterStackAndVersion("c1", HDP_22_STACK, targetRepo);
- assertEquals(RepositoryVersionState.INSTALLING, upgradingClusterVersion.getState());
assertTrue(hostVersions.size() > 0);
for (HostVersionEntity hostVersion : hostVersions) {
assertEquals(RepositoryVersionState.INSTALLED, hostVersion.getState());
@@ -437,19 +411,17 @@ public class ComponentVersionCheckActionTest {
RepositoryVersionEntity repositoryVersion2111 = m_helper.getOrCreateRepositoryVersion(
HDP_21_STACK, HDP_2_1_1_1);
- Service service = installService(cluster, "HDFS");
- service.setDesiredRepositoryVersion(repositoryVersion2110);
- ServiceComponent sc = addServiceComponent(cluster, service, "NAMENODE");
- sc = addServiceComponent(cluster, service, "DATANODE");
+ Service service = installService(cluster, "HDFS", repositoryVersion2110);
+ addServiceComponent(cluster, service, "NAMENODE");
+ addServiceComponent(cluster, service, "DATANODE");
ServiceComponentHost sch = createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", "h1");
sch.setVersion(HDP_2_1_1_0);
sch = createNewServiceComponentHost(cluster, "HDFS", "DATANODE", "h1");
sch.setVersion(HDP_2_1_1_0);
- service = installService(cluster, "ZOOKEEPER");
- service.setDesiredRepositoryVersion(repositoryVersion2111);
- sc = addServiceComponent(cluster, service, "ZOOKEEPER_SERVER");
+ service = installService(cluster, "ZOOKEEPER", repositoryVersion2111);
+ addServiceComponent(cluster, service, "ZOOKEEPER_SERVER");
sch = createNewServiceComponentHost(cluster, "ZOOKEEPER", "ZOOKEEPER_SERVER", "h1");
sch.setVersion(HDP_2_1_1_1);
@@ -488,7 +460,7 @@ public class ComponentVersionCheckActionTest {
private ServiceComponentHost createNewServiceComponentHost(Cluster cluster, String svc,
String svcComponent, String hostName) throws AmbariException {
Assert.assertNotNull(cluster.getConfigGroups());
- Service s = installService(cluster, svc);
+ Service s = cluster.getService(svc);
ServiceComponent sc = addServiceComponent(cluster, s, svcComponent);
ServiceComponentHost sch = serviceComponentHostFactory.createNew(sc, hostName);
@@ -500,17 +472,9 @@ public class ComponentVersionCheckActionTest {
return sch;
}
- private Service installService(Cluster cluster, String serviceName) throws AmbariException {
- Service service = null;
-
- try {
- service = cluster.getService(serviceName);
- } catch (ServiceNotFoundException e) {
- RepositoryVersionEntity repositoryVersion = cluster.getCurrentClusterVersion().getRepositoryVersion();
- service = serviceFactory.createNew(cluster, serviceName, repositoryVersion);
- cluster.addService(service);
- }
-
+ private Service installService(Cluster cluster, String serviceName, RepositoryVersionEntity repositoryVersion) throws AmbariException {
+ Service service = serviceFactory.createNew(cluster, serviceName, repositoryVersion);
+ cluster.addService(service);
return service;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
index 860369b..57a281a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
@@ -1730,17 +1730,11 @@ public class ConfigureActionTest {
hostAttributes.put("os_release_version", "6");
host.setHostAttributes(hostAttributes);
- c.createClusterVersion(HDP_220_STACK, HDP_2_2_0_0, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(HDP_220_STACK, HDP_2_2_0_0, RepositoryVersionState.CURRENT);
-
String urlInfo = "[{'repositories':["
+ "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'HDP-2.2.0'}"
+ "], 'OperatingSystems/os_type':'redhat6'}]";
repoVersionDAO.create(stackEntity, HDP_2_2_0_1, String.valueOf(System.currentTimeMillis()), urlInfo);
-
- c.createClusterVersion(HDP_220_STACK, HDP_2_2_0_1, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(HDP_220_STACK, HDP_2_2_0_1, RepositoryVersionState.INSTALLED);
c.setCurrentStackVersion(HDP_220_STACK);
HostVersionEntity entity = new HostVersionEntity();
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index 18eef56..0ff0b0a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -47,7 +47,6 @@ import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
@@ -55,7 +54,6 @@ import org.apache.ambari.server.orm.dao.RequestDAO;
import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.RequestEntity;
@@ -121,8 +119,6 @@ public class UpgradeActionTest {
@Inject
private Clusters clusters;
@Inject
- private ClusterVersionDAO clusterVersionDAO;
- @Inject
private HostVersionDAO hostVersionDAO;
@Inject
private HostDAO hostDAO;
@@ -176,8 +172,6 @@ public class UpgradeActionTest {
clusters.addCluster(clusterName, sourceStack);
- Cluster c = clusters.getCluster(clusterName);
-
// add a host component
clusters.addHost(hostName);
@@ -190,13 +184,9 @@ public class UpgradeActionTest {
// Create the starting repo version
m_helper.getOrCreateRepositoryVersion(sourceStack, sourceRepo);
- c.createClusterVersion(sourceStack, sourceRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(sourceStack, sourceRepo, RepositoryVersionState.CURRENT);
// Start upgrading the newer repo
m_helper.getOrCreateRepositoryVersion(targetStack, targetRepo);
- c.createClusterVersion(targetStack, targetRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(targetStack, targetRepo, RepositoryVersionState.INSTALLED);
HostVersionEntity entity = new HostVersionEntity();
entity.setHostEntity(hostDAO.findByName(hostName));
@@ -224,26 +214,16 @@ public class UpgradeActionTest {
// Create the starting repo version
m_helper.getOrCreateRepositoryVersion(sourceStack, sourceRepo);
- c.createClusterVersion(sourceStack, sourceRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(sourceStack, sourceRepo, RepositoryVersionState.CURRENT);
// Start upgrading the mid repo
m_helper.getOrCreateRepositoryVersion(midStack, midRepo);
c.setDesiredStackVersion(midStack);
- c.createClusterVersion(midStack, midRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(midStack, midRepo, RepositoryVersionState.INSTALLED);
- c.transitionClusterVersion(midStack, midRepo, RepositoryVersionState.CURRENT);
-
- // Set original version as INSTALLED
- c.transitionClusterVersion(sourceStack, sourceRepo, RepositoryVersionState.INSTALLED);
// Notice that we have not yet changed the cluster current stack to the mid stack to simulate
// the user skipping this step.
m_helper.getOrCreateRepositoryVersion(targetStack, targetRepo);
c.setDesiredStackVersion(targetStack);
- c.createClusterVersion(targetStack, targetRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(targetStack, targetRepo, RepositoryVersionState.INSTALLED);
// Create a host version for the starting repo in INSTALLED
HostVersionEntity entitySource = new HostVersionEntity();
@@ -301,8 +281,6 @@ public class UpgradeActionTest {
"]");
repoVersionDAO.merge(sourceRepositoryVersion);
- c.createClusterVersion(sourceStack, sourceRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(sourceStack, sourceRepo, RepositoryVersionState.CURRENT);
return sourceRepositoryVersion;
}
@@ -320,8 +298,6 @@ public class UpgradeActionTest {
repoVersionDAO.create(stackEntityTarget, targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
// Start upgrading the newer repo
- c.createClusterVersion(targetStack, targetRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(targetStack, targetRepo, RepositoryVersionState.INSTALLED);
c.setCurrentStackVersion(targetStack);
// create a single host with the UPGRADED HostVersionEntity
@@ -371,15 +347,11 @@ public class UpgradeActionTest {
// Create the starting repo version
sourceRepositoryVersion = m_helper.getOrCreateRepositoryVersion(sourceStack, sourceRepo);
- c.createClusterVersion(sourceStack, sourceRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(sourceStack, sourceRepo, RepositoryVersionState.CURRENT);
}
private void makeCrossStackUpgradeTargetRepo(StackId targetStack, String targetRepo, String hostName) throws Exception{
StackEntity stackEntityTarget = stackDAO.find(targetStack.getStackName(), targetStack.getStackVersion());
assertNotNull(stackEntityTarget);
- Cluster c = clusters.getCluster(clusterName);
-
// Create the new repo version
String urlInfo = "[{'repositories':["
@@ -388,8 +360,6 @@ public class UpgradeActionTest {
repoVersionDAO.create(stackEntityTarget, targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
// Start upgrading the newer repo
- c.createClusterVersion(targetStack, targetRepo, "admin", RepositoryVersionState.INSTALLING);
- c.transitionClusterVersion(targetStack, targetRepo, RepositoryVersionState.INSTALLED);
HostDAO hostDAO = m_injector.getInstance(HostDAO.class);
@@ -478,6 +448,7 @@ public class UpgradeActionTest {
CommandReport report = action.execute(null);
assertNotNull(report);
+
assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
List<ServiceConfigVersionResponse> configVersionsAfter = cluster.getServiceConfigVersions();
@@ -526,14 +497,6 @@ public class UpgradeActionTest {
assertEquals(RepositoryVersionState.INSTALLED, entity.getState());
}
}
-
- for (ClusterVersionEntity entity : clusterVersionDAO.findByCluster(clusterName)) {
- if (entity.getRepositoryVersion().getVersion().equals(sourceRepo)) {
- assertEquals(RepositoryVersionState.CURRENT, entity.getState());
- } else if (entity.getRepositoryVersion().getVersion().equals(targetRepo)) {
- assertEquals(RepositoryVersionState.INSTALLED, entity.getState());
- }
- }
}
/**
@@ -865,17 +828,11 @@ public class UpgradeActionTest {
// inject an unhappy path where the cluster repo version is still UPGRADING
// even though all of the hosts are UPGRADED
- ClusterVersionEntity upgradingClusterVersion = clusterVersionDAO.findByClusterAndStackAndVersion(
- clusterName, HDP_22_STACK, targetRepo);
- upgradingClusterVersion.setState(RepositoryVersionState.INSTALLING);
- upgradingClusterVersion = clusterVersionDAO.merge(upgradingClusterVersion);
// verify the conditions for the test are met properly
- upgradingClusterVersion = clusterVersionDAO.findByClusterAndStackAndVersion(clusterName, HDP_22_STACK, targetRepo);
List<HostVersionEntity> hostVersions = hostVersionDAO.findByClusterStackAndVersion(clusterName, HDP_22_STACK, targetRepo);
- assertEquals(RepositoryVersionState.INSTALLING, upgradingClusterVersion.getState());
assertTrue(hostVersions.size() > 0);
for (HostVersionEntity hostVersion : hostVersions) {
assertEquals(RepositoryVersionState.INSTALLED, hostVersion.getState());
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java
index d67cdfc..ba6e6ff 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java
@@ -18,37 +18,35 @@
package org.apache.ambari.server.stack;
+import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.lang.reflect.Field;
+import java.util.Collections;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.dao.ClusterDAO;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
-import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
-import org.apache.ambari.server.orm.entities.RepositoryEntity;
+import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.state.RepositoryInfo;
import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
-import org.junit.Assert;
import org.junit.Test;
+import org.mockito.Mockito;
import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableList;
import com.google.common.io.Resources;
import com.google.gson.Gson;
import com.google.inject.Guice;
-import com.google.inject.Injector;
import com.google.inject.Provider;
/**
@@ -60,7 +58,6 @@ public class UpdateActiveRepoVersionOnStartupTest {
private static String ADD_ON_REPO_ID = "MSFT_R-8.0";
private RepositoryVersionDAO repositoryVersionDao;
- private RepositoryVersionEntity repoVersion;
private UpdateActiveRepoVersionOnStartup activeRepoUpdater;
@Test
@@ -82,22 +79,12 @@ public class UpdateActiveRepoVersionOnStartupTest {
* @throws Exception
*/
private void verifyRepoIsAdded() throws Exception {
- verify(repositoryVersionDao, times(1)).merge(repoVersion);
-
- boolean serviceRepoAddedToJson = false;
- outer:
- for (OperatingSystemEntity os: repoVersion.getOperatingSystems()) if (os.getOsType().equals("redhat6")) {
- for (RepositoryEntity repo: os.getRepositories()) if (repo.getRepositoryId().equals(ADD_ON_REPO_ID)) {
- serviceRepoAddedToJson = true;
- break outer;
- }
- }
- Assert.assertTrue(ADD_ON_REPO_ID + " is add-on repo was not added to JSON representation", serviceRepoAddedToJson);
+ verify(repositoryVersionDao, atLeast(1)).merge(Mockito.any(RepositoryVersionEntity.class));
}
public void init(boolean addClusterVersion) throws Exception {
ClusterDAO clusterDao = mock(ClusterDAO.class);
- ClusterVersionDAO clusterVersionDAO = mock(ClusterVersionDAO.class);
+
repositoryVersionDao = mock(RepositoryVersionDAO.class);
final RepositoryVersionHelper repositoryVersionHelper = new RepositoryVersionHelper();
@@ -105,7 +92,6 @@ public class UpdateActiveRepoVersionOnStartupTest {
field.setAccessible(true);
field.set(repositoryVersionHelper, new Gson());
-
final AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
StackManager stackManager = mock(StackManager.class);
@@ -120,22 +106,34 @@ public class UpdateActiveRepoVersionOnStartupTest {
stackEntity.setStackVersion("2.3");
cluster.setDesiredStack(stackEntity);
+ RepositoryVersionEntity desiredRepositoryVersion = new RepositoryVersionEntity();
+ desiredRepositoryVersion.setStack(stackEntity);
+ desiredRepositoryVersion.setOperatingSystems(resourceAsString("org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest_initialRepos.json"));
+
+ ServiceDesiredStateEntity serviceDesiredStateEntity = new ServiceDesiredStateEntity();
+ serviceDesiredStateEntity.setDesiredRepositoryVersion(desiredRepositoryVersion);
+
+ ClusterServiceEntity clusterServiceEntity = new ClusterServiceEntity();
+ clusterServiceEntity.setServiceDesiredStateEntity(serviceDesiredStateEntity);
+ cluster.setClusterServiceEntities(Collections.singletonList(clusterServiceEntity));
+
StackInfo stackInfo = new StackInfo();
stackInfo.setName("HDP");
stackInfo.setVersion("2.3");
+
RepositoryInfo repositoryInfo = new RepositoryInfo();
repositoryInfo.setBaseUrl("http://msft.r");
repositoryInfo.setRepoId(ADD_ON_REPO_ID);
repositoryInfo.setRepoName("MSFT_R");
repositoryInfo.setOsType("redhat6");
stackInfo.getRepositories().add(repositoryInfo);
+
when(stackManager.getStack("HDP", "2.3")).thenReturn(stackInfo);
final Provider<RepositoryVersionHelper> repositoryVersionHelperProvider = mock(Provider.class);
when(repositoryVersionHelperProvider.get()).thenReturn(repositoryVersionHelper);
-
InMemoryDefaultTestModule testModule = new InMemoryDefaultTestModule() {
@Override
protected void configure() {
@@ -151,23 +149,21 @@ public class UpdateActiveRepoVersionOnStartupTest {
}
};
- Injector injector = Guice.createInjector(testModule);
+ Guice.createInjector(testModule);
if (addClusterVersion) {
- repoVersion = new RepositoryVersionEntity();
- repoVersion.setStack(stackEntity);
- repoVersion.setOperatingSystems(resourceAsString("org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest_initialRepos.json"));
- ClusterVersionEntity clusterVersion = new ClusterVersionEntity();
- clusterVersion.setRepositoryVersion(repoVersion);
- when(clusterVersionDAO.findByClusterAndStateCurrent(CLUSTER_NAME)).thenReturn(clusterVersion);
+ RepositoryInfo info = new RepositoryInfo();
+ info.setBaseUrl("http://msft.r");
+ info.setRepoId(ADD_ON_REPO_ID);
+ info.setRepoName("MSFT_R1");
+ info.setOsType("redhat6");
+ stackInfo.getRepositories().add(info);
}
activeRepoUpdater = new UpdateActiveRepoVersionOnStartup(clusterDao,
- clusterVersionDAO, repositoryVersionDao, repositoryVersionHelper, metaInfo);
+ repositoryVersionDao, repositoryVersionHelper, metaInfo);
}
-
-
private static String resourceAsString(String resourceName) throws IOException {
return Resources.toString(Resources.getResource(resourceName), Charsets.UTF_8);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
index 63eae6a..cf4a9cb 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
@@ -29,7 +29,6 @@ import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.CheckDescription;
import org.apache.ambari.server.checks.ServicesUpCheck;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
@@ -155,7 +154,6 @@ public class CheckHelperTest {
@Override
protected void configure() {
bind(Clusters.class).toInstance(clusters);
- bind(ClusterVersionDAO.class).toProvider(Providers.<ClusterVersionDAO>of(null));
bind(HostVersionDAO.class).toProvider(Providers.<HostVersionDAO>of(null));
bind(UpgradeDAO.class).toProvider(Providers.<UpgradeDAO>of(null));
bind(RepositoryVersionDAO.class).toProvider(Providers.<RepositoryVersionDAO>of(null));
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
index 8f2020d..325fc90 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
@@ -105,9 +105,6 @@ public class ServiceComponentTest {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
-
Service s = serviceFactory.createNew(cluster, serviceName, repositoryVersion);
cluster.addService(s);
service = cluster.getService(serviceName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index 364b92c..e3ffe8f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@ -98,8 +98,8 @@ import com.google.inject.util.Modules;
*/
public class UpgradeHelperTest {
- private static final StackId HDP_21 = new StackId("HDP-2.1.1");
- private static final StackId HDP_22 = new StackId("HDP-2.2.0");
+// private static final StackId HDP_21 = new StackId("HDP-2.1.1");
+// private static final StackId HDP_22 = new StackId("HDP-2.2.0");
private static final String UPGRADE_VERSION = "2.2.1.0-1234";
private static final String DOWNGRADE_VERSION = "2.2.0.0-1234";
@@ -1260,9 +1260,6 @@ public class UpgradeHelperTest {
helper.getOrCreateRepositoryVersion(stackId2, UPGRADE_VERSION);
- c.createClusterVersion(stackId, repositoryVersionString, "admin",
- RepositoryVersionState.INSTALLING);
-
for (int i = 0; i < 4; i++) {
String hostName = "h" + (i+1);
clusters.addHost(hostName);
@@ -1485,8 +1482,6 @@ public class UpgradeHelperTest {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, version);
- c.createClusterVersion(stackId, version, "admin", RepositoryVersionState.INSTALLING);
-
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
clusters.addHost(hostName);
@@ -1564,8 +1559,6 @@ public class UpgradeHelperTest {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
version);
- c.createClusterVersion(stackId, version, "admin", RepositoryVersionState.INSTALLING);
-
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
clusters.addHost(hostName);
@@ -1627,8 +1620,6 @@ public class UpgradeHelperTest {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
version);
- c.createClusterVersion(stackId, version, "admin", RepositoryVersionState.INSTALLING);
-
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
clusters.addHost(hostName);
@@ -1691,8 +1682,6 @@ public class UpgradeHelperTest {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
version);
- c.createClusterVersion(stackId, version, "admin", RepositoryVersionState.INSTALLING);
-
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
clusters.addHost(hostName);
@@ -1811,8 +1800,6 @@ public class UpgradeHelperTest {
helper.getOrCreateRepositoryVersion(stackId2,"2.2.0");
- c.createClusterVersion(stackId, version, "admin", RepositoryVersionState.INSTALLING);
-
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
clusters.addHost(hostName);
@@ -1912,8 +1899,6 @@ public class UpgradeHelperTest {
helper.getOrCreateRepositoryVersion(stackId2, UPGRADE_VERSION);
- c.createClusterVersion(stackId, version, "admin", RepositoryVersionState.INSTALLING);
-
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
clusters.addHost(hostName);
@@ -2097,8 +2082,6 @@ public class UpgradeHelperTest {
helper.getOrCreateRepositoryVersion(stackId2, "2.2.0");
- c.createClusterVersion(stackId, version, "admin", RepositoryVersionState.INSTALLING);
-
// create 2 hosts
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
index 9c17e01..e7516e6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
@@ -42,7 +42,6 @@ import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.MaintenanceState;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentFactory;
@@ -124,8 +123,6 @@ public class ClusterDeadlockTest {
clusters.addCluster("c1", stackId);
cluster = clusters.getCluster("c1");
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster.createClusterVersion(stackId,
- stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
Config config1 = configFactory.createNew(cluster, "test-type1", "version1", new HashMap<String, String>(), new HashMap<String,
Map<String, String>>());
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterEffectiveVersionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterEffectiveVersionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterEffectiveVersionTest.java
deleted file mode 100644
index bba197f..0000000
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterEffectiveVersionTest.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.server.state.cluster;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-
-import org.apache.ambari.server.actionmanager.ActionManager;
-import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
-import org.apache.ambari.server.actionmanager.RequestFactory;
-import org.apache.ambari.server.actionmanager.StageFactory;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
-import org.apache.ambari.server.controller.AbstractRootServiceResponseFactory;
-import org.apache.ambari.server.controller.AmbariManagementController;
-import org.apache.ambari.server.controller.KerberosHelper;
-import org.apache.ambari.server.controller.spi.ClusterController;
-import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
-import org.apache.ambari.server.hooks.HookContextFactory;
-import org.apache.ambari.server.hooks.HookService;
-import org.apache.ambari.server.metadata.CachedRoleCommandOrderProvider;
-import org.apache.ambari.server.metadata.RoleCommandOrderProvider;
-import org.apache.ambari.server.orm.DBAccessor;
-import org.apache.ambari.server.orm.dao.ClusterDAO;
-import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
-import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
-import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
-import org.apache.ambari.server.orm.entities.ConfigGroupEntity;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.RequestScheduleEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
-import org.apache.ambari.server.orm.entities.UpgradeEntity;
-import org.apache.ambari.server.scheduler.ExecutionScheduler;
-import org.apache.ambari.server.security.authorization.Users;
-import org.apache.ambari.server.stack.StackManagerFactory;
-import org.apache.ambari.server.stageplanner.RoleGraphFactory;
-import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.ConfigFactory;
-import org.apache.ambari.server.state.ServiceComponentFactory;
-import org.apache.ambari.server.state.ServiceComponentHostFactory;
-import org.apache.ambari.server.state.ServiceFactory;
-import org.apache.ambari.server.state.ServiceInfo;
-import org.apache.ambari.server.state.UpgradeContextFactory;
-import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
-import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
-import org.apache.ambari.server.state.stack.OsFamily;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
-import org.easymock.EasyMock;
-import org.easymock.EasyMockSupport;
-import org.eclipse.jetty.server.SessionManager;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-import com.google.common.collect.Lists;
-import com.google.inject.Binder;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-import com.google.inject.assistedinject.FactoryModuleBuilder;
-
-/**
- * Tests that cluster effective version is calcualted correctly during upgrades.
- */
-@RunWith(value = PowerMockRunner.class)
-@PrepareForTest({ ClusterImpl.class })
-public class ClusterEffectiveVersionTest extends EasyMockSupport {
-
- private Injector m_injector;
- private ClusterEntity m_clusterEntity;
- private Cluster m_cluster;
-
- /**
- * @throws Exception
- */
- @Before
- public void setup() throws Exception {
- m_injector = Guice.createInjector(new MockModule());
- m_clusterEntity = createNiceMock(ClusterEntity.class);
-
- expectClusterEntityMocks();
-
- replayAll();
-
- ClusterFactory clusterFactory = m_injector.getInstance(ClusterFactory.class);
- m_cluster = clusterFactory.create(m_clusterEntity);
-
- verifyAll();
- }
-
- /**
- * Tests that {@link Cluster#getEffectiveClusterVersion()} returns the
- * "current" version when there is no upgrade in progress.
- */
- @Test
- public void testEffectiveVersionWithNoUpgrade() throws Exception {
- Cluster clusterSpy = Mockito.spy(m_cluster);
-
- Mockito.doReturn(null).when(clusterSpy).getUpgradeInProgress();
-
- ClusterVersionEntity currentClusterVersion = new ClusterVersionEntity();
- Mockito.doReturn(currentClusterVersion).when(clusterSpy).getCurrentClusterVersion();
-
- ClusterVersionEntity effectiveVersion = clusterSpy.getEffectiveClusterVersion();
- Assert.assertEquals(currentClusterVersion, effectiveVersion);
- }
-
- /**
- * Tests that {@link Cluster#getEffectiveClusterVersion()} returns the target
- * version in an active rolling upgrade.
- */
- @Test
- public void testEffectiveVersionWithActiveRollingUpgrade() throws Exception {
- resetAll();
- expectClusterEntityMocks();
-
- Cluster clusterSpy = Mockito.spy(m_cluster);
-
- UpgradeEntity upgradeEntity = createNiceMock(UpgradeEntity.class);
- EasyMock.expect(upgradeEntity.getId()).andReturn(1L).atLeastOnce();
- EasyMock.expect(upgradeEntity.getUpgradeType()).andReturn(UpgradeType.ROLLING).atLeastOnce();
- EasyMock.expect(upgradeEntity.getFromVersion()).andReturn("2.3.0.0-1234").anyTimes();
- EasyMock.expect(upgradeEntity.getToVersion()).andReturn("2.4.0.0-1234").atLeastOnce();
-
- RepositoryVersionEntity repositoryVersionEntity = createNiceMock(RepositoryVersionEntity.class);
- EasyMock.expect(repositoryVersionEntity.getVersion()).andReturn("2.4.0.0-1234").atLeastOnce();
-
- ClusterVersionEntity clusterVersionUpgradingTo = createNiceMock(ClusterVersionEntity.class);
- EasyMock.expect(clusterVersionUpgradingTo.getRepositoryVersion()).andReturn(
- repositoryVersionEntity).atLeastOnce();
-
- List<ClusterVersionEntity> clusterVersionEntities = Lists.newArrayList(clusterVersionUpgradingTo);
- EasyMock.expect(m_clusterEntity.getClusterVersionEntities()).andReturn(clusterVersionEntities).atLeastOnce();
-
- replayAll();
-
- Mockito.doReturn(upgradeEntity).when(clusterSpy).getUpgradeInProgress();
-
- // this shouldn't be returned since there is an upgrade in progress
- ClusterVersionEntity currentClusterVersion = new ClusterVersionEntity();
- Mockito.doReturn(currentClusterVersion).when(clusterSpy).getCurrentClusterVersion();
-
- ClusterVersionEntity effectiveVersion = clusterSpy.getEffectiveClusterVersion();
- Assert.assertEquals(clusterVersionUpgradingTo, effectiveVersion);
-
- verifyAll();
- }
-
- /**
- * Tests that {@link Cluster#getEffectiveClusterVersion()} returns the target
- * version in an active rolling upgrade.
- */
- @Test
- public void testEffectiveVersionWithActiveExpressDowngrade() throws Exception {
- resetAll();
- expectClusterEntityMocks();
-
- Cluster clusterSpy = Mockito.spy(m_cluster);
-
- // from/to are switched on downgrade
- UpgradeEntity upgradeEntity = createNiceMock(UpgradeEntity.class);
- EasyMock.expect(upgradeEntity.getId()).andReturn(1L).atLeastOnce();
- EasyMock.expect(upgradeEntity.getUpgradeType()).andReturn(UpgradeType.NON_ROLLING).atLeastOnce();
- EasyMock.expect(upgradeEntity.getToVersion()).andReturn("2.3.0.0-1234").atLeastOnce();
- EasyMock.expect(upgradeEntity.getFromVersion()).andReturn("2.4.0.0-1234").anyTimes();
- EasyMock.expect(upgradeEntity.getDirection()).andReturn(Direction.DOWNGRADE).atLeastOnce();
-
- RepositoryVersionEntity repositoryVersionEntity = createNiceMock(RepositoryVersionEntity.class);
- EasyMock.expect(repositoryVersionEntity.getVersion()).andReturn("2.3.0.0-1234").atLeastOnce();
-
- ClusterVersionEntity clusterVersionUpgradingTo = createNiceMock(ClusterVersionEntity.class);
- EasyMock.expect(clusterVersionUpgradingTo.getRepositoryVersion()).andReturn(
- repositoryVersionEntity).atLeastOnce();
-
- List<ClusterVersionEntity> clusterVersionEntities = Lists.newArrayList(clusterVersionUpgradingTo);
- EasyMock.expect(m_clusterEntity.getClusterVersionEntities()).andReturn(clusterVersionEntities).atLeastOnce();
-
- replayAll();
-
- Mockito.doReturn(upgradeEntity).when(clusterSpy).getUpgradeInProgress();
-
- // this shouldn't be returned since there is an upgrade in progress
- ClusterVersionEntity currentClusterVersion = new ClusterVersionEntity();
- Mockito.doReturn(currentClusterVersion).when(clusterSpy).getCurrentClusterVersion();
-
- ClusterVersionEntity effectiveVersion = clusterSpy.getEffectiveClusterVersion();
- Assert.assertEquals(clusterVersionUpgradingTo, effectiveVersion);
-
- verifyAll();
- }
-
- /**
- * Sets the expectations on the {@link ClusterEntity} mock.
- */
- private void expectClusterEntityMocks() {
- ClusterDAO clusterDAO = m_injector.getInstance(ClusterDAO.class);
- StackEntity stackEntity = createNiceMock(StackEntity.class);
-
- EasyMock.expect(clusterDAO.findById(1L)).andReturn(m_clusterEntity).anyTimes();
-
- EasyMock.expect(stackEntity.getStackId()).andReturn(1L).anyTimes();
- EasyMock.expect(stackEntity.getStackName()).andReturn("HDP").anyTimes();
- EasyMock.expect(stackEntity.getStackVersion()).andReturn("2.3").anyTimes();
-
- EasyMock.expect(m_clusterEntity.getClusterId()).andReturn(1L).anyTimes();
- EasyMock.expect(m_clusterEntity.getClusterName()).andReturn("c1").anyTimes();
- EasyMock.expect(m_clusterEntity.getDesiredStack()).andReturn(stackEntity).anyTimes();
- EasyMock.expect(m_clusterEntity.getClusterServiceEntities()).andReturn(
- new ArrayList<ClusterServiceEntity>()).anyTimes();
- EasyMock.expect(m_clusterEntity.getClusterConfigEntities()).andReturn(
- new ArrayList<ClusterConfigEntity>()).anyTimes();
-
- EasyMock.expect(m_clusterEntity.getConfigGroupEntities()).andReturn(
- new ArrayList<ConfigGroupEntity>()).anyTimes();
-
- EasyMock.expect(m_clusterEntity.getRequestScheduleEntities()).andReturn(
- new ArrayList<RequestScheduleEntity>()).anyTimes();
- }
-
- /**
- *
- */
- private class MockModule implements Module {
- /**
- *
- */
- @Override
- public void configure(Binder binder) {
- binder.bind(UpgradeContextFactory.class).toInstance(EasyMock.createNiceMock(UpgradeContextFactory.class));
- binder.bind(Clusters.class).toInstance(EasyMock.createNiceMock(Clusters.class));
- binder.bind(OsFamily.class).toInstance(EasyMock.createNiceMock(OsFamily.class));
- binder.bind(DBAccessor.class).toInstance(EasyMock.createNiceMock(DBAccessor.class));
- binder.bind(EntityManager.class).toInstance(EasyMock.createNiceMock(EntityManager.class));
- binder.bind(ActionManager.class).toInstance(EasyMock.createNiceMock(ActionManager.class));
- binder.bind(HostRoleCommandFactory.class).toInstance(EasyMock.createNiceMock(HostRoleCommandFactory.class));
- binder.bind(HostRoleCommandDAO.class).toInstance(EasyMock.createNiceMock(HostRoleCommandDAO.class));
- binder.bind(AmbariManagementController.class).toInstance(EasyMock.createNiceMock(AmbariManagementController.class));
- binder.bind(ClusterController.class).toInstance(EasyMock.createNiceMock(ClusterController.class));
- binder.bind(StackManagerFactory.class).toInstance(EasyMock.createNiceMock(StackManagerFactory.class));
- binder.bind(SessionManager.class).toInstance(EasyMock.createNiceMock(SessionManager.class));
- binder.bind(RequestExecutionFactory.class).toInstance(EasyMock.createNiceMock(RequestExecutionFactory.class));
- binder.bind(ExecutionScheduler.class).toInstance(EasyMock.createNiceMock(ExecutionScheduler.class));
- binder.bind(RequestFactory.class).toInstance(EasyMock.createNiceMock(RequestFactory.class));
- binder.bind(StageFactory.class).toInstance(EasyMock.createNiceMock(StageFactory.class));
- binder.bind(RoleGraphFactory.class).toInstance(EasyMock.createNiceMock(RoleGraphFactory.class));
- binder.bind(AbstractRootServiceResponseFactory.class).toInstance(EasyMock.createNiceMock(AbstractRootServiceResponseFactory.class));
- binder.bind(ConfigFactory.class).toInstance(EasyMock.createNiceMock(ConfigFactory.class));
- binder.bind(ConfigGroupFactory.class).toInstance(EasyMock.createNiceMock(ConfigGroupFactory.class));
- binder.bind(ServiceFactory.class).toInstance(EasyMock.createNiceMock(ServiceFactory.class));
- binder.bind(ServiceComponentFactory.class).toInstance(EasyMock.createNiceMock(ServiceComponentFactory.class));
- binder.bind(ServiceComponentHostFactory.class).toInstance(EasyMock.createNiceMock(ServiceComponentHostFactory.class));
- binder.bind(PasswordEncoder.class).toInstance(EasyMock.createNiceMock(PasswordEncoder.class));
- binder.bind(KerberosHelper.class).toInstance(EasyMock.createNiceMock(KerberosHelper.class));
- binder.bind(Users.class).toInstance(EasyMock.createNiceMock(Users.class));
- binder.bind(AmbariEventPublisher.class).toInstance(createNiceMock(AmbariEventPublisher.class));
- binder.bind(HookContextFactory.class).toInstance(createMock(HookContextFactory.class));
- binder.bind(HookService.class).toInstance(createMock(HookService.class));
- binder.install(new FactoryModuleBuilder().implement(
- Cluster.class, ClusterImpl.class).build(ClusterFactory.class));
-
- binder.bind(RoleCommandOrderProvider.class).to(CachedRoleCommandOrderProvider.class);
-
- try {
- AmbariMetaInfo ambariMetaInfo = EasyMock.createNiceMock(AmbariMetaInfo.class);
- EasyMock.expect(
- ambariMetaInfo.getServices(EasyMock.anyString(), EasyMock.anyString())).andReturn(
- new HashMap<String, ServiceInfo>()).anyTimes();
-
- EasyMock.replay(ambariMetaInfo);
-
- binder.bind(AmbariMetaInfo.class).toInstance(ambariMetaInfo);
- } catch (Exception exception) {
- Assert.fail(exception.toString());
- }
-
- binder.bind(ClusterDAO.class).toInstance(createNiceMock(ClusterDAO.class));
- }
- }
-}
[50/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fb2076c7
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fb2076c7
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fb2076c7
Branch: refs/heads/trunk
Commit: fb2076c718c5bcafb1e83c35a841111d30c6204d
Parents: 138aa48 dc30b4e
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed May 31 15:23:58 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed May 31 15:23:58 2017 -0400
----------------------------------------------------------------------
ambari-infra/ambari-infra-manager/README.md | 92 ++-
.../ambari-infra-manager/docs/api/swagger.yaml | 784 +++++++++++++++++++
.../docs/images/batch-1.png | Bin 0 -> 20521 bytes
.../docs/images/batch-2.png | Bin 0 -> 29388 bytes
.../docs/images/batch-3.png | Bin 0 -> 14105 bytes
.../docs/images/batch-4.png | Bin 0 -> 23277 bytes
.../infra/common/InfraManagerConstants.java | 2 +-
.../infra/conf/InfraManagerApiDocConfig.java | 35 +-
.../conf/batch/InfraManagerBatchConfig.java | 8 +-
.../ambari/infra/job/dummy/DummyItemWriter.java | 13 +
.../infra/job/dummy/DummyJobListener.java | 39 +
.../infra/job/dummy/DummyStepListener.java | 41 +
.../apache/ambari/infra/rest/JobResource.java | 2 +-
.../internal/UpgradeResourceProvider.java | 8 +-
14 files changed, 1009 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb2076c7/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index 6f452b0,a8b7fb4..345bf5f
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@@ -99,11 -117,12 +99,12 @@@ import org.apache.ambari.server.state.s
import org.apache.ambari.server.state.stack.upgrade.Task;
import org.apache.ambari.server.state.stack.upgrade.TaskWrapper;
import org.apache.ambari.server.state.stack.upgrade.UpdateStackGrouping;
-import org.apache.ambari.server.state.stack.upgrade.UpgradeScope;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostServerActionEvent;
+ import org.apache.ambari.server.utils.StageUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
+import org.codehaus.jackson.annotate.JsonProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@@ -784,18 -995,287 +785,23 @@@ public class UpgradeResourceProvider ex
return upgradeEntity;
}
- private RequestStageContainer createRequest(UpgradeContext upgradeContext) {
- /**
- * Handles the creation or resetting of configurations based on whether an
- * upgrade or downgrade is occurring. This method will not do anything when
- * the target stack version is the same as the cluster's current stack version
- * since, by definition, no new configurations are automatically created when
- * upgrading with the same stack (ie HDP 2.2.0.0 -> HDP 2.2.1.0).
- * <p/>
- * When upgrading or downgrade between stacks (HDP 2.2.0.0 -> HDP 2.3.0.0)
- * then this will perform the following:
- * <ul>
- * <li>Upgrade: Create new configurations that are a merge between the current
- * stack and the desired stack. If a value has changed between stacks, then
- * the target stack value should be taken unless the cluster's value differs
- * from the old stack. This can occur if a property has been customized after
- * installation.</li>
- * <li>Downgrade: Reset the latest configurations from the cluster's original
- * stack. The new configurations that were created on upgrade must be left
- * intact until all components have been reverted, otherwise heartbeats will
- * fail due to missing configurations.</li>
- * </ul>
- *
- *
- * @param stackName Stack name such as HDP, HDPWIN, BIGTOP
- * @param cluster
- * the cluster
- * @param version
- * the version
- * @param direction
- * upgrade or downgrade
- * @param upgradePack
- * upgrade pack used for upgrade or downgrade. This is needed to determine
- * which services are effected.
- * @param userName
- * username performing the action
- * @throws AmbariException
- */
- public void applyStackAndProcessConfigurations(String stackName, Cluster cluster, String version, Direction direction, UpgradePack upgradePack, String userName)
- throws AmbariException {
- RepositoryVersionEntity targetRve = s_repoVersionDAO.findByStackNameAndVersion(stackName, version);
- if (null == targetRve) {
- LOG.info("Could not find version entity for {}; not setting new configs", version);
- return;
- }
-
- if (null == userName) {
- userName = getManagementController().getAuthName();
- }
-
- // if the current and target stacks are the same (ie HDP 2.2.0.0 -> 2.2.1.0)
- // then we should never do anything with configs on either upgrade or
- // downgrade; however if we are going across stacks, we have to do the stack
- // checks differently depending on whether this is an upgrade or downgrade
- StackEntity targetStack = targetRve.getStack();
- StackId currentStackId = cluster.getCurrentStackVersion();
- StackId desiredStackId = cluster.getDesiredStackVersion();
- StackId targetStackId = new StackId(targetStack);
- // Only change configs if moving to a different stack.
- switch (direction) {
- case UPGRADE:
- if (currentStackId.equals(targetStackId)) {
- return;
- }
- break;
- case DOWNGRADE:
- if (desiredStackId.equals(targetStackId)) {
- return;
- }
- break;
- }
-
- Map<String, Map<String, String>> newConfigurationsByType = null;
- ConfigHelper configHelper = getManagementController().getConfigHelper();
-
- if (direction == Direction.UPGRADE) {
- // populate a map of default configurations for the old stack (this is
- // used when determining if a property has been customized and should be
- // overriden with the new stack value)
- Map<String, Map<String, String>> oldStackDefaultConfigurationsByType = configHelper.getDefaultProperties(
- currentStackId, cluster, true);
-
- // populate a map with default configurations from the new stack
- newConfigurationsByType = configHelper.getDefaultProperties(targetStackId, cluster, true);
-
- // We want to skip updating config-types of services that are not in the upgrade pack.
- // Care should be taken as some config-types could be in services that are in and out
- // of the upgrade pack. We should never ignore config-types of services in upgrade pack.
- Set<String> skipConfigTypes = new HashSet<>();
- Set<String> upgradePackServices = new HashSet<>();
- Set<String> upgradePackConfigTypes = new HashSet<>();
- AmbariMetaInfo ambariMetaInfo = s_metaProvider.get();
-
- // ensure that we get the service info from the target stack
- // (since it could include new configuration types for a service)
- Map<String, ServiceInfo> stackServicesMap = ambariMetaInfo.getServices(
- targetStack.getStackName(), targetStack.getStackVersion());
-
- for (Grouping group : upgradePack.getGroups(direction)) {
- for (UpgradePack.OrderService service : group.services) {
- if (service.serviceName == null || upgradePackServices.contains(service.serviceName)) {
- // No need to re-process service that has already been looked at
- continue;
- }
-
- upgradePackServices.add(service.serviceName);
- ServiceInfo serviceInfo = stackServicesMap.get(service.serviceName);
- if (serviceInfo == null) {
- continue;
- }
-
- // add every configuration type for all services defined in the
- // upgrade pack
- Set<String> serviceConfigTypes = serviceInfo.getConfigTypeAttributes().keySet();
- for (String serviceConfigType : serviceConfigTypes) {
- if (!upgradePackConfigTypes.contains(serviceConfigType)) {
- upgradePackConfigTypes.add(serviceConfigType);
- }
- }
- }
- }
-
- // build a set of configurations that should not be merged since their
- // services are not installed
- Set<String> servicesNotInUpgradePack = new HashSet<>(stackServicesMap.keySet());
- servicesNotInUpgradePack.removeAll(upgradePackServices);
- for (String serviceNotInUpgradePack : servicesNotInUpgradePack) {
- ServiceInfo serviceInfo = stackServicesMap.get(serviceNotInUpgradePack);
- Set<String> configTypesOfServiceNotInUpgradePack = serviceInfo.getConfigTypeAttributes().keySet();
- for (String configType : configTypesOfServiceNotInUpgradePack) {
- if (!upgradePackConfigTypes.contains(configType) && !skipConfigTypes.contains(configType)) {
- skipConfigTypes.add(configType);
- }
- }
- }
-
- // remove any configurations from the target stack that are not used
- // because the services are not installed
- Iterator<String> iterator = newConfigurationsByType.keySet().iterator();
- while (iterator.hasNext()) {
- String configType = iterator.next();
- if (skipConfigTypes.contains(configType)) {
- LOG.info("Stack Upgrade: Removing configs for config-type {}", configType);
- iterator.remove();
- }
- }
-
- // now that the map has been populated with the default configurations
- // from the stack/service, overlay the existing configurations on top
- Map<String, DesiredConfig> existingDesiredConfigurationsByType = cluster.getDesiredConfigs();
- for (Map.Entry<String, DesiredConfig> existingEntry : existingDesiredConfigurationsByType.entrySet()) {
- String configurationType = existingEntry.getKey();
- if(skipConfigTypes.contains(configurationType)) {
- LOG.info("Stack Upgrade: Skipping config-type {} as upgrade-pack contains no updates to its service", configurationType);
- continue;
- }
-
- // NPE sanity, although shouldn't even happen since we are iterating
- // over the desired configs to start with
- Config currentClusterConfig = cluster.getDesiredConfigByType(configurationType);
- if (null == currentClusterConfig) {
- continue;
- }
-
- // get current stack default configurations on install
- Map<String, String> configurationTypeDefaultConfigurations = oldStackDefaultConfigurationsByType.get(
- configurationType);
-
- // NPE sanity for current stack defaults
- if (null == configurationTypeDefaultConfigurations) {
- configurationTypeDefaultConfigurations = Collections.emptyMap();
- }
-
- // get the existing configurations
- Map<String, String> existingConfigurations = currentClusterConfig.getProperties();
-
- // if the new stack configurations don't have the type, then simply add
- // all of the existing in
- Map<String, String> newDefaultConfigurations = newConfigurationsByType.get(
- configurationType);
-
- if (null == newDefaultConfigurations) {
- newConfigurationsByType.put(configurationType, existingConfigurations);
- continue;
- } else {
- // TODO, should we remove existing configs whose value is NULL even though they don't have a value in the new stack?
-
- // Remove any configs in the new stack whose value is NULL, unless they currently exist and the value is not NULL.
- Iterator<Map.Entry<String, String>> iter = newDefaultConfigurations.entrySet().iterator();
- while (iter.hasNext()) {
- Map.Entry<String, String> entry = iter.next();
- if (entry.getValue() == null) {
- iter.remove();
- }
- }
- }
-
- // for every existing configuration, see if an entry exists; if it does
- // not exist, then put it in the map, otherwise we'll have to compare
- // the existing value to the original stack value to see if its been
- // customized
- for (Map.Entry<String, String> existingConfigurationEntry : existingConfigurations.entrySet()) {
- String existingConfigurationKey = existingConfigurationEntry.getKey();
- String existingConfigurationValue = existingConfigurationEntry.getValue();
-
- // if there is already an entry, we now have to try to determine if
- // the value was customized after stack installation
- if (newDefaultConfigurations.containsKey(existingConfigurationKey)) {
- String newDefaultConfigurationValue = newDefaultConfigurations.get(
- existingConfigurationKey);
-
- if (!StringUtils.equals(existingConfigurationValue, newDefaultConfigurationValue)) {
- // the new default is different from the existing cluster value;
- // only override the default value if the existing value differs
- // from the original stack
- String oldDefaultValue = configurationTypeDefaultConfigurations.get(
- existingConfigurationKey);
-
- if (!StringUtils.equals(existingConfigurationValue, oldDefaultValue)) {
- // at this point, we've determined that there is a difference
- // between default values between stacks, but the value was
- // also customized, so keep the customized value
- newDefaultConfigurations.put(existingConfigurationKey, existingConfigurationValue);
- }
- }
- } else {
- // there is no entry in the map, so add the existing key/value pair
- newDefaultConfigurations.put(existingConfigurationKey, existingConfigurationValue);
- }
- }
-
- /*
- for every new configuration which does not exist in the existing
- configurations, see if it was present in the current stack
-
- stack 2.x has foo-site/property (on-ambari-upgrade is false)
- stack 2.y has foo-site/property
- the current cluster (on 2.x) does not have it
-
- In this case, we should NOT add it back as clearly stack advisor has removed it
- */
- Iterator<Map.Entry<String, String>> newDefaultConfigurationsIterator = newDefaultConfigurations.entrySet().iterator();
- while( newDefaultConfigurationsIterator.hasNext() ){
- Map.Entry<String, String> newConfigurationEntry = newDefaultConfigurationsIterator.next();
- String newConfigurationPropertyName = newConfigurationEntry.getKey();
- if (configurationTypeDefaultConfigurations.containsKey(newConfigurationPropertyName)
- && !existingConfigurations.containsKey(newConfigurationPropertyName)) {
- LOG.info(
- "The property {}/{} exists in both {} and {} but is not part of the current set of configurations and will therefore not be included in the configuration merge",
- configurationType, newConfigurationPropertyName, currentStackId, targetStackId);
-
- // remove the property so it doesn't get merged in
- newDefaultConfigurationsIterator.remove();
- }
- }
- }
- } else {
- // downgrade
- cluster.applyLatestConfigurations(cluster.getCurrentStackVersion());
- }
-
- // !!! update the stack
- cluster.setDesiredStackVersion(
- new StackId(targetStack.getStackName(), targetStack.getStackVersion()), true);
-
- // !!! configs must be created after setting the stack version
- if (null != newConfigurationsByType) {
- configHelper.createConfigTypes(cluster, getManagementController(), newConfigurationsByType,
- userName, "Configuration created for Upgrade");
- }
- }
-
- private RequestStageContainer createRequest(Cluster cluster, Direction direction, String version) throws AmbariException {
++ private RequestStageContainer createRequest(UpgradeContext upgradeContext) throws AmbariException {
ActionManager actionManager = getManagementController().getActionManager();
RequestStageContainer requestStages = new RequestStageContainer(
actionManager.getNextRequestId(), null, s_requestFactory.get(), actionManager);
- requestStages.setRequestContext(String.format("%s to %s", direction.getVerb(true), version));
+ Direction direction = upgradeContext.getDirection();
+ RepositoryVersionEntity repositoryVersion = upgradeContext.getRepositoryVersion();
+
+ requestStages.setRequestContext(String.format("%s %s %s", direction.getVerb(true),
+ direction.getPreposition(), repositoryVersion.getVersion()));
+
++ Cluster cluster = upgradeContext.getCluster();
+ Map<String, Set<String>> clusterHostInfo = StageUtils.getClusterHostInfo(cluster);
+ String clusterHostInfoJson = StageUtils.getGson().toJson(clusterHostInfo);
+ requestStages.setClusterHostInfo(clusterHostInfoJson);
+
return requestStages;
}
[25/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ace89b7b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ace89b7b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ace89b7b
Branch: refs/heads/trunk
Commit: ace89b7bbe39cf18f4ee7540acb6258833d54b76
Parents: c413278 2e27f66
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Thu May 18 09:51:09 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Thu May 18 09:51:09 2017 -0400
----------------------------------------------------------------------
.../resources/ui/admin-web/app/views/main.html | 50 +-
ambari-infra/ambari-infra-assembly/pom.xml | 6 +-
ambari-infra/ambari-infra-manager/README.md | 6 +
ambari-infra/ambari-infra-manager/build.xml | 1 +
.../ambari-infra-manager/docker/Dockerfile | 52 +++
.../ambari-infra-manager/docker/bin/start.sh | 21 +
.../docker/infra-manager-docker.sh | 85 ++++
.../src/main/resources/infra-manager-env.sh | 18 +
.../src/main/resources/infraManager.sh | 2 +-
.../ambari-logsearch-config-api/pom.xml | 2 +-
.../config/api/InputConfigMonitor.java | 4 +-
.../config/api/LogLevelFilterMonitor.java | 44 ++
.../logsearch/config/api/LogSearchConfig.java | 57 ++-
.../model/loglevelfilter/LogLevelFilter.java | 79 ++++
.../model/loglevelfilter/LogLevelFilterMap.java | 33 ++
.../config/api/LogSearchConfigClass1.java | 21 +-
.../config/api/LogSearchConfigClass2.java | 21 +-
.../ambari-logsearch-config-zookeeper/pom.xml | 4 +
.../config/zookeeper/LogSearchConfigZK.java | 191 +++++---
.../org/apache/ambari/logfeeder/LogFeeder.java | 6 +-
.../logfeeder/input/InputConfigUploader.java | 2 +-
.../logfeeder/logconfig/FilterLogData.java | 87 ----
.../logfeeder/logconfig/LogConfigFetcher.java | 168 -------
.../logfeeder/logconfig/LogConfigHandler.java | 213 ---------
.../logfeeder/logconfig/LogFeederFilter.java | 90 ----
.../logconfig/LogFeederFilterWrapper.java | 55 ---
.../logfeeder/loglevelfilter/FilterLogData.java | 73 +++
.../loglevelfilter/LogLevelFilterHandler.java | 157 +++++++
.../logfeeder/metrics/LogFeederAMSClient.java | 12 +-
.../ambari/logfeeder/output/OutputManager.java | 2 +-
.../ambari/logfeeder/util/LogFeederUtil.java | 19 -
.../logconfig/LogConfigHandlerTest.java | 90 ++--
.../src/test/resources/logfeeder.properties | 3 +-
.../configurer/LogfeederFilterConfigurer.java | 66 ---
.../ambari/logsearch/dao/UserConfigSolrDao.java | 79 ----
.../ambari/logsearch/doc/DocConstants.java | 10 +-
.../logsearch/manager/ShipperConfigManager.java | 45 +-
.../logsearch/manager/UserConfigManager.java | 24 -
.../model/common/LSServerLogLevelFilter.java | 100 ++++
.../model/common/LSServerLogLevelFilterMap.java | 65 +++
.../model/common/LogFeederDataMap.java | 50 --
.../model/common/LogfeederFilterData.java | 87 ----
.../logsearch/rest/ShipperConfigResource.java | 43 +-
.../logsearch/rest/UserConfigResource.java | 18 -
.../webapp/templates/common/Header_tmpl.html | 5 +-
ambari-metrics/ambari-metrics-assembly/pom.xml | 20 +
.../src/main/assembly/monitor-windows.xml | 7 +
.../src/main/assembly/monitor.xml | 9 +-
.../timeline/AbstractTimelineMetricsSink.java | 24 +-
.../sink/timeline/AggregationResult.java | 60 +++
.../metrics2/sink/timeline/MetricAggregate.java | 110 +++++
.../sink/timeline/MetricClusterAggregate.java | 73 +++
.../sink/timeline/MetricHostAggregate.java | 81 ++++
.../metrics2/sink/timeline/TimelineMetric.java | 6 +-
.../TimelineMetricWithAggregatedValues.java | 65 +++
.../AbstractTimelineMetricSinkTest.java | 10 +
.../availability/MetricCollectorHATest.java | 10 +
.../cache/HandleConnectExceptionTest.java | 10 +
.../sink/flume/FlumeTimelineMetricsSink.java | 16 +
.../timeline/HadoopTimelineMetricsSink.java | 20 +-
.../conf/unix/log4j.properties | 31 ++
.../conf/windows/log4j.properties | 29 ++
.../ambari-metrics-host-aggregator/pom.xml | 120 +++++
.../AbstractMetricPublisherThread.java | 134 ++++++
.../aggregator/AggregatedMetricsPublisher.java | 101 ++++
.../host/aggregator/AggregatorApplication.java | 180 ++++++++
.../host/aggregator/AggregatorWebService.java | 56 +++
.../host/aggregator/RawMetricsPublisher.java | 60 +++
.../host/aggregator/TimelineMetricsHolder.java | 98 ++++
.../conf/unix/ambari-metrics-monitor | 2 +-
.../src/main/python/core/aggregator.py | 110 +++++
.../src/main/python/core/config_reader.py | 35 +-
.../src/main/python/core/controller.py | 28 ++
.../src/main/python/core/emitter.py | 8 +-
.../src/main/python/core/stop_handler.py | 3 +-
.../src/main/python/main.py | 6 +-
.../kafka/KafkaTimelineMetricsReporter.java | 17 +
.../storm/StormTimelineMetricsReporter.java | 14 +
.../sink/storm/StormTimelineMetricsSink.java | 14 +
.../storm/StormTimelineMetricsReporter.java | 16 +
.../sink/storm/StormTimelineMetricsSink.java | 16 +
.../timeline/HBaseTimelineMetricStore.java | 29 +-
.../metrics/timeline/PhoenixHBaseAccessor.java | 4 +-
.../timeline/TimelineMetricConfiguration.java | 2 +
.../metrics/timeline/TimelineMetricStore.java | 2 +
.../timeline/TimelineMetricsAggregatorSink.java | 4 +-
.../timeline/aggregators/MetricAggregate.java | 110 -----
.../aggregators/MetricClusterAggregate.java | 73 ---
.../aggregators/MetricHostAggregate.java | 81 ----
.../TimelineMetricAppAggregator.java | 1 +
.../TimelineMetricClusterAggregator.java | 2 +
.../TimelineMetricClusterAggregatorSecond.java | 1 +
.../TimelineMetricHostAggregator.java | 1 +
.../aggregators/TimelineMetricReadHelper.java | 2 +
.../webapp/TimelineWebServices.java | 31 ++
.../timeline/ITPhoenixHBaseAccessor.java | 4 +-
.../metrics/timeline/MetricTestHelper.java | 2 +-
.../timeline/PhoenixHBaseAccessorTest.java | 4 +-
.../timeline/TestMetricHostAggregate.java | 8 +-
.../timeline/TestTimelineMetricStore.java | 6 +
.../TimelineMetricsAggregatorMemorySink.java | 4 +-
.../aggregators/ITClusterAggregator.java | 4 +-
.../aggregators/ITMetricAggregator.java | 13 +-
...melineMetricClusterAggregatorSecondTest.java | 1 +
ambari-metrics/pom.xml | 1 +
.../system/impl/AmbariMetricSinkImpl.java | 10 +
.../server/upgrade/UpgradeCatalog251.java | 47 +-
.../server/upgrade/UpgradeCatalog300.java | 15 +
ambari-server/src/main/python/ambari-server.py | 299 +++++++-----
.../main/python/ambari_server/setupMpacks.py | 7 +-
.../1.6.1.2.2.0/package/scripts/params.py | 2 +
.../hadoop-metrics2-accumulo.properties.j2 | 3 +
.../0.1.0/configuration/ams-env.xml | 8 +
.../0.1.0/configuration/ams-site.xml | 11 +
.../AMBARI_METRICS/0.1.0/metainfo.xml | 3 +
.../AMBARI_METRICS/0.1.0/package/scripts/ams.py | 30 ++
.../0.1.0/package/scripts/params.py | 5 +
.../hadoop-metrics2-hbase.properties.j2 | 3 +
.../package/templates/metric_monitor.ini.j2 | 7 +
.../FLUME/1.4.0.2.0/package/scripts/params.py | 3 +
.../templates/flume-metrics2.properties.j2 | 2 +
.../0.96.0.2.0/package/scripts/params_linux.py | 3 +
...-metrics2-hbase.properties-GANGLIA-MASTER.j2 | 2 +
...doop-metrics2-hbase.properties-GANGLIA-RS.j2 | 2 +
.../hadoop-metrics2.properties.xml | 2 +
.../0.12.0.2.0/package/scripts/params_linux.py | 2 +
.../hadoop-metrics2-hivemetastore.properties.j2 | 2 +
.../hadoop-metrics2-hiveserver2.properties.j2 | 2 +
.../templates/hadoop-metrics2-llapdaemon.j2 | 2 +
.../hadoop-metrics2-llaptaskscheduler.j2 | 2 +
.../2.1.0.3.0/package/scripts/params_linux.py | 3 +
.../hadoop-metrics2-hivemetastore.properties.j2 | 2 +
.../hadoop-metrics2-hiveserver2.properties.j2 | 2 +
.../templates/hadoop-metrics2-llapdaemon.j2 | 2 +
.../hadoop-metrics2-llaptaskscheduler.j2 | 2 +
.../KAFKA/0.8.1/configuration/kafka-broker.xml | 11 +
.../KAFKA/0.8.1/package/scripts/params.py | 3 +
.../common-services/KNOX/0.5.0.3.0/alerts.json | 32 ++
.../0.5.0.3.0/configuration/admin-topology.xml | 97 ++++
.../0.5.0.3.0/configuration/gateway-log4j.xml | 110 +++++
.../0.5.0.3.0/configuration/gateway-site.xml | 71 +++
.../KNOX/0.5.0.3.0/configuration/knox-env.xml | 83 ++++
.../configuration/knoxsso-topology.xml | 126 +++++
.../KNOX/0.5.0.3.0/configuration/ldap-log4j.xml | 93 ++++
.../configuration/ranger-knox-audit.xml | 132 ++++++
.../ranger-knox-plugin-properties.xml | 132 ++++++
.../configuration/ranger-knox-policymgr-ssl.xml | 66 +++
.../configuration/ranger-knox-security.xml | 64 +++
.../KNOX/0.5.0.3.0/configuration/topology.xml | 174 +++++++
.../KNOX/0.5.0.3.0/configuration/users-ldif.xml | 140 ++++++
.../KNOX/0.5.0.3.0/kerberos.json | 81 ++++
.../common-services/KNOX/0.5.0.3.0/metainfo.xml | 109 +++++
.../package/files/validateKnoxStatus.py | 43 ++
.../KNOX/0.5.0.3.0/package/scripts/knox.py | 192 ++++++++
.../0.5.0.3.0/package/scripts/knox_gateway.py | 220 +++++++++
.../KNOX/0.5.0.3.0/package/scripts/knox_ldap.py | 59 +++
.../KNOX/0.5.0.3.0/package/scripts/params.py | 29 ++
.../0.5.0.3.0/package/scripts/params_linux.py | 457 +++++++++++++++++++
.../0.5.0.3.0/package/scripts/params_windows.py | 71 +++
.../0.5.0.3.0/package/scripts/service_check.py | 96 ++++
.../package/scripts/setup_ranger_knox.py | 121 +++++
.../0.5.0.3.0/package/scripts/status_params.py | 59 +++
.../KNOX/0.5.0.3.0/package/scripts/upgrade.py | 118 +++++
.../package/templates/input.config-knox.json.j2 | 60 +++
.../package/templates/krb5JAASLogin.conf.j2 | 30 ++
.../KNOX/0.5.0.3.0/role_command_order.json | 7 +
.../KNOX/0.5.0.3.0/service_advisor.py | 253 ++++++++++
.../configuration/logfeeder-properties.xml | 10 +
.../configuration/logsearch-properties.xml | 10 -
.../LOGSEARCH/0.5.0/themes/theme.json | 4 +-
.../scripts/alerts/alert_spark_livy_port.py | 8 +-
.../SPARK/1.2.1/package/scripts/params.py | 1 +
.../1.2.1/package/scripts/service_check.py | 2 +-
.../scripts/alerts/alert_spark2_livy_port.py | 8 +-
.../SPARK2/2.0.0/package/scripts/params.py | 1 +
.../2.0.0/package/scripts/service_check.py | 2 +-
.../sqoop-atlas-application.properties.xml | 47 ++
.../SQOOP/1.4.4.3.0/configuration/sqoop-env.xml | 87 ++++
.../1.4.4.3.0/configuration/sqoop-site.xml | 38 ++
.../SQOOP/1.4.4.3.0/kerberos.json | 20 +
.../SQOOP/1.4.4.3.0/metainfo.xml | 115 +++++
.../SQOOP/1.4.4.3.0/package/scripts/__init__.py | 19 +
.../SQOOP/1.4.4.3.0/package/scripts/params.py | 27 ++
.../1.4.4.3.0/package/scripts/params_linux.py | 135 ++++++
.../1.4.4.3.0/package/scripts/params_windows.py | 30 ++
.../1.4.4.3.0/package/scripts/service_check.py | 62 +++
.../SQOOP/1.4.4.3.0/package/scripts/sqoop.py | 124 +++++
.../1.4.4.3.0/package/scripts/sqoop_client.py | 66 +++
.../SQOOP/1.4.4.3.0/role_command_order.json | 6 +
.../SQOOP/1.4.4.3.0/service_advisor.py | 197 ++++++++
.../STORM/0.9.1/package/scripts/params_linux.py | 2 +
.../0.9.1/package/templates/config.yaml.j2 | 2 +
.../templates/storm-metrics2.properties.j2 | 2 +
.../2.0.6/hooks/before-START/scripts/params.py | 3 +
.../templates/hadoop-metrics2.properties.j2 | 2 +
.../stacks/HDP/2.3/services/stack_advisor.py | 2 +-
.../hadoop-metrics2.properties.xml | 2 +
.../3.0/hooks/before-START/scripts/params.py | 2 +
.../templates/hadoop-metrics2.properties.j2 | 2 +
.../stacks/HDP/3.0/services/KNOX/metainfo.xml | 27 ++
.../stacks/HDP/3.0/services/SQOOP/metainfo.xml | 27 ++
.../system/impl/TestAmbariMetricsSinkImpl.java | 10 +
.../server/upgrade/UpgradeCatalog251Test.java | 92 ++++
.../server/upgrade/UpgradeCatalog300Test.java | 29 ++
.../src/test/python/TestAmbariServer.py | 409 +++++++++--------
ambari-web/app/app.js | 7 +
ambari-web/app/controllers/installer.js | 15 -
.../journalNode/step1_controller.js | 2 +-
.../main/admin/stack_and_upgrade_controller.js | 9 +-
.../service/manage_config_groups_controller.js | 89 +++-
ambari-web/app/controllers/wizard.js | 44 +-
.../wizard/step7/assign_master_controller.js | 16 +-
.../app/controllers/wizard/step7_controller.js | 1 +
.../app/controllers/wizard/step8_controller.js | 167 ++++++-
ambari-web/app/messages.js | 3 +-
.../app/mixins/common/configs/configs_saver.js | 32 +-
.../mixins/wizard/assign_master_components.js | 77 +++-
.../app/mixins/wizard/wizardHostsLoading.js | 6 +-
ambari-web/app/routes/add_service_routes.js | 1 +
ambari-web/app/routes/installer.js | 1 +
ambari-web/app/templates/wizard/step8.hbs | 5 +
ambari-web/app/utils/ajax/ajax.js | 8 +-
.../common/assign_master_components_view.js | 4 +
.../app/views/main/service/reassign_view.js | 4 -
ambari-web/test/controllers/installer_test.js | 12 -
.../journalNode/step1_controller_test.js | 4 +-
.../admin/stack_and_upgrade_controller_test.js | 6 +
.../main/service/add_controller_test.js | 54 +--
.../test/controllers/wizard/step5_test.js | 86 ++--
.../test/controllers/wizard/step8_test.js | 132 ++++--
ambari-web/test/controllers/wizard_test.js | 30 +-
.../mixins/common/configs/configs_saver_test.js | 13 +
.../resourceManager/wizard_view_test.js | 18 +-
.../views/main/service/reassign_view_test.js | 12 -
.../2.0/hooks/before-START/scripts/params.py | 2 +
.../resources/ui/hive-web/app/routes/splash.js | 2 +-
236 files changed, 8509 insertions(+), 2064 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/ace89b7b/ambari-server/src/main/python/ambari-server.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/ace89b7b/ambari-server/src/test/python/TestAmbariServer.py
----------------------------------------------------------------------
[03/50] [abbrv] ambari git commit: AMBARI-20940 - Propagate Component
versions and states to Service (jonathanhurley)
Posted by jo...@apache.org.
AMBARI-20940 - Propagate Component versions and states to Service (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f65692a3
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f65692a3
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f65692a3
Branch: refs/heads/trunk
Commit: f65692a32d95e200624fa9d7dfb9ee7a1b00cb29
Parents: 8782cf6
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Fri May 5 10:22:16 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Fri May 5 13:34:59 2017 -0400
----------------------------------------------------------------------
.../alerts/ComponentVersionAlertRunnable.java | 2 +-
.../AmbariManagementControllerImpl.java | 10 +--
.../controller/ResourceProviderFactory.java | 8 +-
.../controller/ServiceComponentResponse.java | 41 ++++-----
.../server/controller/ServiceResponse.java | 34 ++++---
.../AbstractControllerResourceProvider.java | 22 ++++-
.../internal/ComponentResourceProvider.java | 54 +++++++++--
.../internal/ServiceResourceProvider.java | 91 +++++++++++++------
.../controller/utilities/PropertyHelper.java | 8 ++
.../PrepareDisableKerberosServerAction.java | 2 +-
.../server/state/RepositoryVersionState.java | 56 ++++++++++--
.../org/apache/ambari/server/state/Service.java | 8 +-
.../ambari/server/state/ServiceComponent.java | 2 +-
.../server/state/ServiceComponentImpl.java | 18 ++--
.../apache/ambari/server/state/ServiceImpl.java | 39 +++++---
.../svccomphost/ServiceComponentHostImpl.java | 10 +--
.../src/main/resources/key_properties.json | 10 ---
.../src/main/resources/properties.json | 38 --------
.../ComponentVersionAlertRunnableTest.java | 2 +-
.../resources/BaseResourceDefinitionTest.java | 11 +--
.../AmbariManagementControllerImplTest.java | 6 +-
.../AmbariManagementControllerTest.java | 16 ++--
.../AbstractControllerResourceProviderTest.java | 27 ++----
.../internal/AbstractResourceProviderTest.java | 19 ++--
.../internal/ComponentResourceProviderTest.java | 94 ++++++++------------
.../internal/JMXHostProviderTest.java | 6 +-
.../controller/internal/RequestImplTest.java | 28 +++++-
.../internal/ServiceResourceProviderTest.java | 46 ++++------
.../UpgradeResourceProviderHDP22Test.java | 8 +-
.../internal/UpgradeResourceProviderTest.java | 8 +-
.../server/state/ServiceComponentTest.java | 33 ++++---
.../apache/ambari/server/state/ServiceTest.java | 8 +-
.../svccomphost/ServiceComponentHostTest.java | 4 +-
33 files changed, 417 insertions(+), 352 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java b/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java
index d275eb2..ec5c85e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnable.java
@@ -111,7 +111,7 @@ public class ComponentVersionAlertRunnable extends AlertRunnable {
ServiceComponent serviceComponent = service.getServiceComponent(hostComponent.getServiceComponentName());
RepositoryVersionEntity desiredRepositoryVersion = service.getDesiredRepositoryVersion();
- StackId desiredStackId = serviceComponent.getDesiredStackVersion();
+ StackId desiredStackId = serviceComponent.getDesiredStackId();
String desiredVersion = desiredRepositoryVersion.getVersion();
final ComponentInfo componentInfo;
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/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 67ae5d5..e2bd50f 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
@@ -2070,7 +2070,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
changedComponentCount.get(serviceName).keySet()) {
ServiceComponent sc = cluster.getService(serviceName).
getServiceComponent(componentName);
- StackId stackId = sc.getDesiredStackVersion();
+ StackId stackId = sc.getDesiredStackId();
ComponentInfo compInfo = ambariMetaInfo.getComponent(
stackId.getStackName(), stackId.getStackVersion(), serviceName,
componentName);
@@ -2782,7 +2782,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
event = new ServiceComponentHostInstallEvent(
scHost.getServiceComponentName(), scHost.getHostName(),
nowTimestamp,
- serviceComponent.getDesiredStackVersion().getStackId());
+ serviceComponent.getDesiredStackId().getStackId());
}
} else if (oldSchState == State.STARTED
// TODO: oldSchState == State.INSTALLED is always false, looks like a bug
@@ -2796,7 +2796,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
roleCommand = RoleCommand.UPGRADE;
event = new ServiceComponentHostUpgradeEvent(
scHost.getServiceComponentName(), scHost.getHostName(),
- nowTimestamp, serviceComponent.getDesiredStackVersion().getStackId());
+ nowTimestamp, serviceComponent.getDesiredStackId().getStackId());
} else {
throw new AmbariException("Invalid transition for"
+ " servicecomponenthost"
@@ -2810,7 +2810,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
break;
case STARTED:
- StackId stackId = serviceComponent.getDesiredStackVersion();
+ StackId stackId = serviceComponent.getDesiredStackId();
ComponentInfo compInfo = ambariMetaInfo.getComponent(
stackId.getStackName(), stackId.getStackVersion(), scHost.getServiceName(),
scHost.getServiceComponentName());
@@ -3865,7 +3865,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
* that has client component is in maintenance state
*/
- StackId stackId = service.getDesiredStackVersion();
+ StackId stackId = service.getDesiredStackId();
ComponentInfo compInfo =
ambariMetaInfo.getService(stackId.getStackName(),
stackId.getStackVersion(), service.getName()).getClientComponent();
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
index 2ab69cb..175c6b5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
@@ -41,14 +41,10 @@ public interface ResourceProviderFactory {
AmbariManagementController managementController);
@Named("service")
- ResourceProvider getServiceResourceProvider(Set<String> propertyIds,
- Map<Type, String> keyPropertyIds,
- AmbariManagementController managementController);
+ ResourceProvider getServiceResourceProvider(AmbariManagementController managementController);
@Named("component")
- ResourceProvider getComponentResourceProvider(Set<String> propertyIds,
- Map<Type, String> keyPropertyIds,
- AmbariManagementController managementController);
+ ResourceProvider getComponentResourceProvider(AmbariManagementController managementController);
@Named("member")
ResourceProvider getMemberResourceProvider(Set<String> propertyIds,
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentResponse.java
index 16f724f..177c8ab 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentResponse.java
@@ -22,6 +22,7 @@ package org.apache.ambari.server.controller;
import java.util.Map;
import org.apache.ambari.server.state.RepositoryVersionState;
+import org.apache.ambari.server.state.StackId;
public class ServiceComponentResponse {
@@ -30,7 +31,7 @@ public class ServiceComponentResponse {
private String serviceName;
private String componentName;
private String displayName;
- private String desiredStackVersion;
+ private String desiredStackId;
private String desiredState;
private String category;
private Map<String, Integer> serviceComponentStateCount;
@@ -38,22 +39,17 @@ public class ServiceComponentResponse {
private String desiredVersion;
private RepositoryVersionState repoState;
- public ServiceComponentResponse(Long clusterId, String clusterName,
- String serviceName,
- String componentName,
- String desiredStackVersion,
- String desiredState,
- Map<String, Integer> serviceComponentStateCount,
- boolean recoveryEnabled,
- String displayName,
- String desiredVersion,
- RepositoryVersionState repoState) {
+ public ServiceComponentResponse(Long clusterId, String clusterName, String serviceName,
+ String componentName, StackId desiredStackId, String desiredState,
+ Map<String, Integer> serviceComponentStateCount, boolean recoveryEnabled, String displayName,
+ String desiredVersion, RepositoryVersionState repoState) {
+
this.clusterId = clusterId;
this.clusterName = clusterName;
this.serviceName = serviceName;
this.componentName = componentName;
this.displayName = displayName;
- this.desiredStackVersion = desiredStackVersion;
+ this.desiredStackId = desiredStackId.getStackId();
this.desiredState = desiredState;
this.serviceComponentStateCount = serviceComponentStateCount;
this.recoveryEnabled = recoveryEnabled;
@@ -139,17 +135,12 @@ public class ServiceComponentResponse {
}
/**
+ * Gets the desired stack ID.
+ *
* @return the desiredStackVersion
*/
- public String getDesiredStackVersion() {
- return desiredStackVersion;
- }
-
- /**
- * @param desiredStackVersion the desiredStackVersion to set
- */
- public void setDesiredStackVersion(String desiredStackVersion) {
- this.desiredStackVersion = desiredStackVersion;
+ public String getDesiredStackId() {
+ return desiredStackId;
}
/**
@@ -211,8 +202,12 @@ public class ServiceComponentResponse {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
ServiceComponentResponse that =
(ServiceComponentResponse) o;
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java
index e67d124f..a16b688 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceResponse.java
@@ -18,26 +18,31 @@
package org.apache.ambari.server.controller;
+import org.apache.ambari.server.state.RepositoryVersionState;
+import org.apache.ambari.server.state.StackId;
public class ServiceResponse {
private Long clusterId;
private String clusterName;
private String serviceName;
- private String desiredStackVersion;
+ private StackId desiredStackId;
private String desiredRepositoryVersion;
+ private RepositoryVersionState repositoryVersionState;
private String desiredState;
private String maintenanceState;
private boolean credentialStoreSupported;
private boolean credentialStoreEnabled;
public ServiceResponse(Long clusterId, String clusterName, String serviceName,
- String desiredStackVersion, String desiredRepositoryVersion, String desiredState,
+ StackId desiredStackId, String desiredRepositoryVersion,
+ RepositoryVersionState repositoryVersionState, String desiredState,
boolean credentialStoreSupported, boolean credentialStoreEnabled) {
this.clusterId = clusterId;
this.clusterName = clusterName;
this.serviceName = serviceName;
- setDesiredStackVersion(desiredStackVersion);
+ this.desiredStackId = desiredStackId;
+ this.repositoryVersionState = repositoryVersionState;
setDesiredState(desiredState);
this.desiredRepositoryVersion = desiredRepositoryVersion;
this.credentialStoreSupported = credentialStoreSupported;
@@ -103,17 +108,10 @@ public class ServiceResponse {
}
/**
- * @return the desiredStackVersion
+ * @return the desired stack ID.
*/
- public String getDesiredStackVersion() {
- return desiredStackVersion;
- }
-
- /**
- * @param desiredStackVersion the desiredStackVersion to set
- */
- public void setDesiredStackVersion(String desiredStackVersion) {
- this.desiredStackVersion = desiredStackVersion;
+ public String getDesiredStackId() {
+ return desiredStackId.getStackId();
}
/**
@@ -125,6 +123,16 @@ public class ServiceResponse {
return desiredRepositoryVersion;
}
+ /**
+ * Gets the calculated repository version state from the components of this
+ * service.
+ *
+ * @return the desired repository version state
+ */
+ public RepositoryVersionState getRepositoryVersionState() {
+ return repositoryVersionState;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
index b26814a..a27a5d0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
@@ -27,6 +27,7 @@ import org.apache.ambari.server.controller.ResourceProviderFactory;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceProvider;
import org.apache.ambari.server.controller.utilities.ClusterControllerHelper;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.state.Cluster;
/**
@@ -57,6 +58,23 @@ public abstract class AbstractControllerResourceProvider extends AbstractAuthori
this.managementController = managementController;
}
+ /**
+ * Create a new resource provider for the given management controller.
+ *
+ * @param propertyIds
+ * the property ids
+ * @param keyPropertyIds
+ * the key property ids
+ * @param managementController
+ * the management controller
+ */
+ protected AbstractControllerResourceProvider(Resource.Type type, Set<String> propertyIds,
+ Map<Resource.Type, String> keyPropertyIds, AmbariManagementController managementController) {
+ this(propertyIds, keyPropertyIds, managementController);
+ PropertyHelper.setPropertyIds(type, propertyIds);
+ PropertyHelper.setKeyPropertyIds(type, keyPropertyIds);
+ }
+
public static void init(ResourceProviderFactory factory) {
resourceProviderFactory = factory;
}
@@ -130,9 +148,9 @@ public abstract class AbstractControllerResourceProvider extends AbstractAuthori
case Cluster:
return new ClusterResourceProvider(managementController);
case Service:
- return resourceProviderFactory.getServiceResourceProvider(propertyIds, keyPropertyIds, managementController);
+ return resourceProviderFactory.getServiceResourceProvider(managementController);
case Component:
- return resourceProviderFactory.getComponentResourceProvider(propertyIds, keyPropertyIds, managementController);
+ return resourceProviderFactory.getComponentResourceProvider(managementController);
case Host:
return resourceProviderFactory.getHostResourceProvider(propertyIds, keyPropertyIds, managementController);
case HostComponent:
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
index 3f4e7c2..24ef41a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
@@ -89,6 +89,7 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
protected static final String COMPONENT_UNKNOWN_COUNT_PROPERTY_ID = "ServiceComponentInfo/unknown_count";
protected static final String COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID = "ServiceComponentInfo/install_failed_count";
protected static final String COMPONENT_RECOVERY_ENABLED_ID = "ServiceComponentInfo/recovery_enabled";
+ protected static final String COMPONENT_DESIRED_STACK = "ServiceComponentInfo/desired_stack";
protected static final String COMPONENT_DESIRED_VERSION = "ServiceComponentInfo/desired_version";
protected static final String COMPONENT_REPOSITORY_STATE = "ServiceComponentInfo/repository_state";
@@ -102,6 +103,44 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
COMPONENT_SERVICE_NAME_PROPERTY_ID,
COMPONENT_COMPONENT_NAME_PROPERTY_ID);
+ /**
+ * The property ids for an servce resource.
+ */
+ private static final Set<String> PROPERTY_IDS = new HashSet<>();
+
+ /**
+ * The key property ids for an service resource.
+ */
+ private static final Map<Resource.Type, String> KEY_PROPERTY_IDS = new HashMap<>();
+
+ static {
+ // properties
+ PROPERTY_IDS.add(COMPONENT_CLUSTER_NAME_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_SERVICE_NAME_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_COMPONENT_NAME_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_DISPLAY_NAME_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_STATE_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_CATEGORY_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_TOTAL_COUNT_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_STARTED_COUNT_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_INSTALLED_COUNT_PROPERTY_ID);
+
+ PROPERTY_IDS.add(COMPONENT_INIT_COUNT_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_UNKNOWN_COUNT_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID);
+ PROPERTY_IDS.add(COMPONENT_RECOVERY_ENABLED_ID);
+ PROPERTY_IDS.add(COMPONENT_DESIRED_STACK);
+ PROPERTY_IDS.add(COMPONENT_DESIRED_VERSION);
+ PROPERTY_IDS.add(COMPONENT_REPOSITORY_STATE);
+
+ PROPERTY_IDS.add(QUERY_PARAMETERS_RUN_SMOKE_TEST_ID);
+
+ // keys
+ KEY_PROPERTY_IDS.put(Resource.Type.Component, COMPONENT_COMPONENT_NAME_PROPERTY_ID);
+ KEY_PROPERTY_IDS.put(Resource.Type.Service, COMPONENT_SERVICE_NAME_PROPERTY_ID);
+ KEY_PROPERTY_IDS.put(Resource.Type.Cluster, COMPONENT_CLUSTER_NAME_PROPERTY_ID);
+ }
+
private MaintenanceStateHelper maintenanceStateHelper;
// ----- Constructors ----------------------------------------------------
@@ -109,16 +148,12 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
/**
* Create a new resource provider for the given management controller.
*
- * @param propertyIds the property ids
- * @param keyPropertyIds the key property ids
* @param managementController the management controller
*/
@AssistedInject
- ComponentResourceProvider(@Assisted Set<String> propertyIds,
- @Assisted Map<Resource.Type, String> keyPropertyIds,
- @Assisted AmbariManagementController managementController,
- MaintenanceStateHelper maintenanceStateHelper) {
- super(propertyIds, keyPropertyIds, managementController);
+ ComponentResourceProvider(@Assisted AmbariManagementController managementController,
+ MaintenanceStateHelper maintenanceStateHelper) {
+ super(Resource.Type.Component, PROPERTY_IDS, KEY_PROPERTY_IDS, managementController);
this.maintenanceStateHelper = maintenanceStateHelper;
setRequiredCreateAuthorizations(EnumSet.of(RoleAuthorization.SERVICE_ADD_DELETE_SERVICES, RoleAuthorization.HOST_ADD_DELETE_COMPONENTS));
@@ -189,6 +224,7 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
setResourceProperty(resource, COMPONENT_INIT_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("initCount"), requestedIds);
setResourceProperty(resource, COMPONENT_UNKNOWN_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("unknownCount"), requestedIds);
setResourceProperty(resource, COMPONENT_RECOVERY_ENABLED_ID, String.valueOf(response.isRecoveryEnabled()), requestedIds);
+ setResourceProperty(resource, COMPONENT_DESIRED_STACK, response.getDesiredStackId(), requestedIds);
setResourceProperty(resource, COMPONENT_DESIRED_VERSION, response.getDesiredVersion(), requestedIds);
setResourceProperty(resource, COMPONENT_REPOSITORY_STATE, response.getRepositoryState(), requestedIds);
@@ -327,7 +363,7 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
// Expected
}
- StackId stackId = s.getDesiredStackVersion();
+ StackId stackId = s.getDesiredStackId();
if (!ambariMetaInfo.isValidServiceComponent(stackId.getStackName(),
stackId.getStackVersion(), s.getName(), request.getComponentName())) {
throw new IllegalArgumentException("Unsupported or invalid component"
@@ -370,7 +406,7 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
sc.setRecoveryEnabled(recoveryEnabled);
LOG.info("Component: {}, recovery_enabled from request: {}", request.getComponentName(), recoveryEnabled);
} else {
- StackId stackId = s.getDesiredStackVersion();
+ StackId stackId = s.getDesiredStackId();
ComponentInfo componentInfo = ambariMetaInfo.getComponent(stackId.getStackName(),
stackId.getStackVersion(), s.getName(), request.getComponentName());
if (componentInfo == null) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
index 9cbcea6..c611037 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
@@ -85,40 +85,76 @@ import com.google.inject.assistedinject.AssistedInject;
* Resource provider for service resources.
*/
public class ServiceResourceProvider extends AbstractControllerResourceProvider {
+ public static final String SERVICE_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId(
+ "ServiceInfo", "cluster_name");
+ public static final String SERVICE_SERVICE_NAME_PROPERTY_ID = PropertyHelper.getPropertyId(
+ "ServiceInfo", "service_name");
- // ----- Property ID constants ---------------------------------------------
+ public static final String SERVICE_SERVICE_STATE_PROPERTY_ID = PropertyHelper.getPropertyId(
+ "ServiceInfo", "state");
- // Services
- public static final String SERVICE_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("ServiceInfo", "cluster_name");
- public static final String SERVICE_SERVICE_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("ServiceInfo", "service_name");
- public static final String SERVICE_SERVICE_STATE_PROPERTY_ID = PropertyHelper.getPropertyId("ServiceInfo", "state");
- public static final String SERVICE_MAINTENANCE_STATE_PROPERTY_ID = PropertyHelper.getPropertyId("ServiceInfo", "maintenance_state");
- public static final String SERVICE_CREDENTIAL_STORE_SUPPORTED_PROPERTY_ID =
- PropertyHelper.getPropertyId("ServiceInfo", "credential_store_supported");
- public static final String SERVICE_CREDENTIAL_STORE_ENABLED_PROPERTY_ID =
- PropertyHelper.getPropertyId("ServiceInfo", "credential_store_enabled");
+ public static final String SERVICE_MAINTENANCE_STATE_PROPERTY_ID = PropertyHelper.getPropertyId(
+ "ServiceInfo", "maintenance_state");
- public static final String SERVICE_ATTRIBUTES_PROPERTY_ID = PropertyHelper.getPropertyId("Services", "attributes");
+ public static final String SERVICE_CREDENTIAL_STORE_SUPPORTED_PROPERTY_ID = PropertyHelper.getPropertyId(
+ "ServiceInfo", "credential_store_supported");
- public static final String SERVICE_DESIRED_STACK_PROPERTY_ID = PropertyHelper.getPropertyId("ServiceInfo", "desired_stack");
- public static final String SERVICE_DESIRED_REPO_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("ServiceInfo", "desired_repository_version");
+ public static final String SERVICE_CREDENTIAL_STORE_ENABLED_PROPERTY_ID = PropertyHelper.getPropertyId(
+ "ServiceInfo", "credential_store_enabled");
- //Parameters from the predicate
- private static final String QUERY_PARAMETERS_RUN_SMOKE_TEST_ID =
- "params/run_smoke_test";
+ public static final String SERVICE_ATTRIBUTES_PROPERTY_ID = PropertyHelper.getPropertyId(
+ "Services", "attributes");
+
+ public static final String SERVICE_DESIRED_STACK_PROPERTY_ID = PropertyHelper.getPropertyId(
+ "ServiceInfo", "desired_stack");
+
+ public static final String SERVICE_DESIRED_REPO_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId(
+ "ServiceInfo", "desired_repository_version");
- private static final String QUERY_PARAMETERS_RECONFIGURE_CLIENT =
- "params/reconfigure_client";
+ protected static final String SERVICE_REPOSITORY_STATE = "ServiceInfo/repository_state";
- private static final String QUERY_PARAMETERS_START_DEPENDENCIES =
- "params/start_dependencies";
+ //Parameters from the predicate
+ private static final String QUERY_PARAMETERS_RUN_SMOKE_TEST_ID = "params/run_smoke_test";
+ private static final String QUERY_PARAMETERS_RECONFIGURE_CLIENT = "params/reconfigure_client";
+ private static final String QUERY_PARAMETERS_START_DEPENDENCIES = "params/start_dependencies";
private static Set<String> pkPropertyIds =
new HashSet<>(Arrays.asList(new String[]{
SERVICE_CLUSTER_NAME_PROPERTY_ID,
SERVICE_SERVICE_NAME_PROPERTY_ID}));
+ /**
+ * The property ids for an service resource.
+ */
+ private static final Set<String> PROPERTY_IDS = new HashSet<>();
+
+ /**
+ * The key property ids for an service resource.
+ */
+ private static final Map<Resource.Type, String> KEY_PROPERTY_IDS = new HashMap<>();
+
+ static {
+ // properties
+ PROPERTY_IDS.add(SERVICE_CLUSTER_NAME_PROPERTY_ID);
+ PROPERTY_IDS.add(SERVICE_SERVICE_NAME_PROPERTY_ID);
+ PROPERTY_IDS.add(SERVICE_SERVICE_STATE_PROPERTY_ID);
+ PROPERTY_IDS.add(SERVICE_MAINTENANCE_STATE_PROPERTY_ID);
+ PROPERTY_IDS.add(SERVICE_CREDENTIAL_STORE_SUPPORTED_PROPERTY_ID);
+ PROPERTY_IDS.add(SERVICE_CREDENTIAL_STORE_ENABLED_PROPERTY_ID);
+ PROPERTY_IDS.add(SERVICE_ATTRIBUTES_PROPERTY_ID);
+ PROPERTY_IDS.add(SERVICE_DESIRED_STACK_PROPERTY_ID);
+ PROPERTY_IDS.add(SERVICE_DESIRED_REPO_VERSION_PROPERTY_ID);
+ PROPERTY_IDS.add(SERVICE_REPOSITORY_STATE);
+
+ PROPERTY_IDS.add(QUERY_PARAMETERS_RUN_SMOKE_TEST_ID);
+ PROPERTY_IDS.add(QUERY_PARAMETERS_RECONFIGURE_CLIENT);
+ PROPERTY_IDS.add(QUERY_PARAMETERS_START_DEPENDENCIES);
+
+ // keys
+ KEY_PROPERTY_IDS.put(Resource.Type.Service, SERVICE_SERVICE_NAME_PROPERTY_ID);
+ KEY_PROPERTY_IDS.put(Resource.Type.Cluster, SERVICE_CLUSTER_NAME_PROPERTY_ID);
+ }
private MaintenanceStateHelper maintenanceStateHelper;
@@ -138,16 +174,13 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
/**
* Create a new resource provider for the given management controller.
*
- * @param propertyIds the property ids
- * @param keyPropertyIds the key property ids
* @param managementController the management controller
*/
@AssistedInject
- public ServiceResourceProvider(@Assisted Set<String> propertyIds,
- @Assisted Map<Resource.Type, String> keyPropertyIds,
+ public ServiceResourceProvider(
@Assisted AmbariManagementController managementController,
MaintenanceStateHelper maintenanceStateHelper, RepositoryVersionDAO repositoryVersionDAO) {
- super(propertyIds, keyPropertyIds, managementController);
+ super(Resource.Type.Service, PROPERTY_IDS, KEY_PROPERTY_IDS, managementController);
this.maintenanceStateHelper = maintenanceStateHelper;
this.repositoryVersionDAO = repositoryVersionDAO;
@@ -219,11 +252,14 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
String.valueOf(response.isCredentialStoreEnabled()), requestedIds);
setResourceProperty(resource, SERVICE_DESIRED_STACK_PROPERTY_ID,
- response.getDesiredStackVersion(), requestedIds);
+ response.getDesiredStackId(), requestedIds);
setResourceProperty(resource, SERVICE_DESIRED_REPO_VERSION_PROPERTY_ID,
response.getDesiredRepositoryVersion(), requestedIds);
+ setResourceProperty(resource, SERVICE_REPOSITORY_STATE,
+ response.getRepositoryVersionState(), requestedIds);
+
Map<String, Object> serviceSpecificProperties = getServiceSpecificProperties(
response.getClusterName(), response.getServiceName(), requestedIds);
@@ -548,8 +584,6 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
// We don't expect batch requests for different clusters, that's why
// nothing bad should happen if value is overwritten few times
- String maintenanceCluster = null;
-
for (ServiceRequest request : requests) {
if (request.getClusterName() == null
|| request.getClusterName().isEmpty()
@@ -608,7 +642,6 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
"maintenance state to one of " + EnumSet.of(MaintenanceState.OFF, MaintenanceState.ON));
} else {
s.setMaintenanceState(newMaint);
- maintenanceCluster = cluster.getClusterName();
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
index c747a33..f868e86 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
@@ -115,6 +115,10 @@ public class PropertyHelper {
return propertyIds == null ? Collections.<String>emptySet() : propertyIds;
}
+ public static void setPropertyIds(Resource.Type resourceType, Set<String> propertyIds) {
+ PROPERTY_IDS.put(resourceType.getInternalType(), propertyIds);
+ }
+
/**
* Extract the set of property ids from a component PropertyInfo map.
*
@@ -147,6 +151,10 @@ public class PropertyHelper {
return KEY_PROPERTY_IDS.get(resourceType.getInternalType());
}
+ public static void setKeyPropertyIds(Resource.Type resourceType, Map<Resource.Type, String> keyPropertyKeys) {
+ KEY_PROPERTY_IDS.put(resourceType.getInternalType(), keyPropertyKeys);
+ }
+
/**
* Helper to get a property name from a string.
*
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/PrepareDisableKerberosServerAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/PrepareDisableKerberosServerAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/PrepareDisableKerberosServerAction.java
index 3087379..c85d58f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/PrepareDisableKerberosServerAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/PrepareDisableKerberosServerAction.java
@@ -179,7 +179,7 @@ public class PrepareDisableKerberosServerAction extends AbstractPrepareKerberosS
if (!visitedServices.contains(serviceName)) {
ServiceComponent serviceComponent = sch.getServiceComponent();
- StackId stackVersion = serviceComponent.getDesiredStackVersion();
+ StackId stackVersion = serviceComponent.getDesiredStackId();
visitedServices.add(serviceName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/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 e02e422..11ea512 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
@@ -18,6 +18,8 @@
package org.apache.ambari.server.state;
+import java.util.List;
+
/**
* There must be exactly one repository version that is in a CURRENT state for a particular cluster or host.
* There may be 0 or more repository versions in an INSTALLED or INSTALLING state.
@@ -69,31 +71,71 @@ public enum RepositoryVersionState {
* when creating a cluster using a specific version. Transition occurs naturally as
* hosts report CURRENT.
*/
- INIT,
+ INIT(2),
/**
* Repository version is not required
*/
- NOT_REQUIRED,
+ NOT_REQUIRED(1),
+
/**
* Repository version that is in the process of being installed.
*/
- INSTALLING,
+ INSTALLING(3),
+
/**
* Repository version that is installed and supported but not the active version.
*/
- INSTALLED,
+ INSTALLED(2),
+
/**
* Repository version that during the install process failed to install some components.
*/
- INSTALL_FAILED,
+ INSTALL_FAILED(5),
+
/**
* Repository version that is installed for some components but not for all.
*/
- OUT_OF_SYNC,
+ OUT_OF_SYNC(4),
+
/**
* Repository version that is installed and supported and is the active version.
*/
- CURRENT,
+ CURRENT(0);
+
+ private final int weight;
+
+ /**
+ * Constructor.
+ *
+ * @param weight
+ * the weight of the state.
+ */
+ private RepositoryVersionState(int weight) {
+ this.weight = weight;
+ }
+
+ /**
+ * Gets a single representation of the repository state based on the supplied
+ * states.
+ *
+ * @param states
+ * the states to calculate the aggregate for.
+ * @return the "heaviest" state.
+ */
+ public static RepositoryVersionState getAggregateState(List<RepositoryVersionState> states) {
+ if (null == states || states.isEmpty()) {
+ return INIT;
+ }
+
+ RepositoryVersionState heaviestState = states.get(0);
+ for (RepositoryVersionState state : states) {
+ if (state.weight > heaviestState.weight) {
+ heaviestState = state;
+ }
+ }
+
+ return heaviestState;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
index 7849463..aa0203b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
@@ -65,7 +65,7 @@ public interface Service {
*/
void setSecurityState(SecurityState securityState) throws AmbariException;
- StackId getDesiredStackVersion();
+ StackId getDesiredStackId();
ServiceResponse convertToResponse();
@@ -148,6 +148,12 @@ public interface Service {
*/
void setDesiredRepositoryVersion(RepositoryVersionEntity desiredRepositoryVersion);
+ /**
+ * Gets the repository for the desired version of this service by consulting
+ * the repository states of all known components.
+ */
+ RepositoryVersionState getRepositoryState();
+
enum Type {
HDFS,
GLUSTERFS,
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java
index 80b4470..57bd8b2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java
@@ -59,7 +59,7 @@ public interface ServiceComponent {
*/
RepositoryVersionEntity getDesiredRepositoryVersion();
- StackId getDesiredStackVersion();
+ StackId getDesiredStackId();
String getDesiredVersion();
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
index 1f9dc5b..3c8ef35 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
@@ -136,7 +136,7 @@ public class ServiceComponentImpl implements ServiceComponent {
@Override
public void updateComponentInfo() throws AmbariException {
- StackId stackId = service.getDesiredStackVersion();
+ StackId stackId = service.getDesiredStackId();
try {
ComponentInfo compInfo = ambariMetaInfo.getComponent(stackId.getStackName(),
stackId.getStackVersion(), service.getName(), componentName);
@@ -378,7 +378,7 @@ public class ServiceComponentImpl implements ServiceComponent {
}
@Override
- public StackId getDesiredStackVersion() {
+ public StackId getDesiredStackId() {
ServiceComponentDesiredStateEntity desiredStateEntity = serviceComponentDesiredStateDAO.findById(
desiredStateEntityId);
@@ -429,11 +429,15 @@ public class ServiceComponentImpl implements ServiceComponent {
@Override
public ServiceComponentResponse convertToResponse() {
Cluster cluster = service.getCluster();
+ RepositoryVersionEntity repositoryVersionEntity = getDesiredRepositoryVersion();
+ StackId desiredStackId = repositoryVersionEntity.getStackId();
+
ServiceComponentResponse r = new ServiceComponentResponse(getClusterId(),
cluster.getClusterName(), service.getName(), getName(),
- getDesiredStackVersion().getStackId(), getDesiredState().toString(),
+ desiredStackId, getDesiredState().toString(),
getServiceComponentStateCount(), isRecoveryEnabled(), displayName,
- getDesiredVersion(), getRepositoryState());
+ repositoryVersionEntity.getVersion(), getRepositoryState());
+
return r;
}
@@ -450,7 +454,7 @@ public class ServiceComponentImpl implements ServiceComponent {
.append(", clusterName=").append(service.getCluster().getClusterName())
.append(", clusterId=").append(service.getCluster().getClusterId())
.append(", serviceName=").append(service.getName())
- .append(", desiredStackVersion=").append(getDesiredStackVersion())
+ .append(", desiredStackVersion=").append(getDesiredStackId())
.append(", desiredState=").append(getDesiredState())
.append(", hostcomponents=[ ");
boolean first = true;
@@ -656,7 +660,7 @@ public class ServiceComponentImpl implements ServiceComponent {
if (null == componentVersion) {
RepositoryVersionEntity repoVersion = repoVersionDAO.findByStackAndVersion(
- getDesiredStackVersion(), reportedVersion);
+ getDesiredStackId(), reportedVersion);
if (null != repoVersion) {
componentVersion = new ServiceComponentVersionEntity();
@@ -674,7 +678,7 @@ public class ServiceComponentImpl implements ServiceComponent {
} else {
LOG.warn("There is no repository available for stack {}, version {}",
- getDesiredStackVersion(), reportedVersion);
+ getDesiredStackId(), reportedVersion);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
index 4e50153..6bb0ffb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.state;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
@@ -169,7 +170,7 @@ public class ServiceImpl implements Service {
}
}
- StackId stackId = getDesiredStackVersion();
+ StackId stackId = getDesiredStackId();
ServiceInfo sInfo = ambariMetaInfo.getService(stackId.getStackName(),
stackId.getStackVersion(), getName());
isClientOnlyService = sInfo.isClientOnlyService();
@@ -305,7 +306,7 @@ public class ServiceImpl implements Service {
* {@inheritDoc}
*/
@Override
- public StackId getDesiredStackVersion() {
+ public StackId getDesiredStackId() {
ServiceDesiredStateEntity serviceDesiredStateEntity = getServiceDesiredStateEntity();
StackEntity desiredStackEntity = serviceDesiredStateEntity.getDesiredStack();
return new StackId(desiredStackEntity);
@@ -336,12 +337,31 @@ public class ServiceImpl implements Service {
}
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public RepositoryVersionState getRepositoryState() {
+ if (components.isEmpty()) {
+ return RepositoryVersionState.INIT;
+ }
+
+ List<RepositoryVersionState> states = new ArrayList<>();
+ for( ServiceComponent component : components.values() ){
+ states.add(component.getRepositoryState());
+ }
+
+ return RepositoryVersionState.getAggregateState(states);
+ }
+
@Override
public ServiceResponse convertToResponse() {
+ RepositoryVersionEntity desiredRespositoryVersion = getDesiredRepositoryVersion();
+ StackId desiredStackId = desiredRespositoryVersion.getStackId();
+
ServiceResponse r = new ServiceResponse(cluster.getClusterId(), cluster.getClusterName(),
- getName(), getDesiredStackVersion().getStackId(),
- getDesiredRepositoryVersion().getVersion(), getDesiredState().toString(),
- isCredentialStoreSupported(), isCredentialStoreEnabled());
+ getName(), desiredStackId, desiredRespositoryVersion.getVersion(), getRepositoryState(),
+ getDesiredState().toString(), isCredentialStoreSupported(), isCredentialStoreEnabled());
r.setMaintenanceState(getMaintenanceState().name());
return r;
@@ -427,7 +447,7 @@ public class ServiceImpl implements Service {
sb.append("Service={ serviceName=").append(getName())
.append(", clusterName=").append(cluster.getClusterName())
.append(", clusterId=").append(cluster.getClusterId())
- .append(", desiredStackVersion=").append(getDesiredStackVersion())
+ .append(", desiredStackVersion=").append(getDesiredStackId())
.append(", desiredState=").append(getDesiredState())
.append(", components=[ ");
boolean first = true;
@@ -589,12 +609,7 @@ public class ServiceImpl implements Service {
@Transactional
protected void removeEntities() throws AmbariException {
serviceDesiredStateDAO.removeByPK(serviceDesiredStateEntityPK);
-
- ClusterServiceEntityPK pk = new ClusterServiceEntityPK();
- pk.setClusterId(getClusterId());
- pk.setServiceName(getName());
-
- clusterServiceDAO.removeByPK(pk);
+ clusterServiceDAO.removeByPK(serviceEntityPK);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
index a0d7352..056959e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
@@ -769,7 +769,7 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
throw new RuntimeException(e);
}
- StackId stackId = serviceComponent.getDesiredStackVersion();
+ StackId stackId = serviceComponent.getDesiredStackId();
StackEntity stackEntity = stackDAO.find(stackId.getStackName(),
stackId.getStackVersion());
@@ -1195,13 +1195,13 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
String publicHostName = hostEntity.getPublicHostName();
String state = getState().toString();
String desiredState = (hostComponentDesiredStateEntity == null) ? null : hostComponentDesiredStateEntity.getDesiredState().toString();
- String desiredStackId = serviceComponent.getDesiredStackVersion().getStackId();
+ String desiredStackId = serviceComponent.getDesiredStackId().getStackId();
HostComponentAdminState componentAdminState = getComponentAdminStateFromDesiredStateEntity(hostComponentDesiredStateEntity);
UpgradeState upgradeState = hostComponentStateEntity.getUpgradeState();
String displayName = null;
try {
- StackId stackVersion = serviceComponent.getDesiredStackVersion();
+ StackId stackVersion = serviceComponent.getDesiredStackId();
ComponentInfo compInfo = ambariMetaInfo.getComponent(stackVersion.getStackName(),
stackVersion.getStackVersion(), serviceName, serviceComponentName);
displayName = compInfo.getDisplayName();
@@ -1246,7 +1246,7 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
.append(", serviceName=")
.append(serviceComponent.getServiceName())
.append(", desiredStackVersion=")
- .append(serviceComponent.getDesiredStackVersion())
+ .append(serviceComponent.getDesiredStackId())
.append(", desiredState=")
.append(getDesiredState())
.append(", version=")
@@ -1311,7 +1311,7 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
// completed, but only if it was persisted
if (fireRemovalEvent) {
long clusterId = getClusterId();
- StackId stackId = serviceComponent.getDesiredStackVersion();
+ StackId stackId = serviceComponent.getDesiredStackId();
String stackVersion = stackId.getStackVersion();
String stackName = stackId.getStackName();
String serviceName = getServiceName();
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/resources/key_properties.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/key_properties.json b/ambari-server/src/main/resources/key_properties.json
index df2006a..5d76062 100644
--- a/ambari-server/src/main/resources/key_properties.json
+++ b/ambari-server/src/main/resources/key_properties.json
@@ -2,20 +2,10 @@
"Cluster": {
"Cluster": "Clusters/cluster_name"
},
- "Service": {
- "Cluster": "ServiceInfo/cluster_name",
- "Service": "ServiceInfo/service_name"
- },
"Host": {
"Cluster": "Hosts/cluster_name",
"Host": "Hosts/host_name"
},
- "Component": {
- "Cluster": "ServiceComponentInfo/cluster_name",
- "Service": "ServiceComponentInfo/service_name",
- "Component": "ServiceComponentInfo/component_name",
- "HostComponent": "ServiceComponentInfo/component_name"
- },
"HostComponent": {
"Cluster": "HostRoles/cluster_name",
"Host": "HostRoles/host_name",
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/main/resources/properties.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json
index c3b0f68..ed94f44 100644
--- a/ambari-server/src/main/resources/properties.json
+++ b/ambari-server/src/main/resources/properties.json
@@ -12,23 +12,6 @@
"Clusters/health_report",
"_"
],
- "Service":[
- "ServiceInfo/service_name",
- "ServiceInfo/cluster_name",
- "ServiceInfo/desired_stack",
- "ServiceInfo/desired_repository_version",
- "ServiceInfo/state",
- "ServiceInfo/maintenance_state",
- "ServiceInfo/credential_store_supported",
- "ServiceInfo/credential_store_enabled",
- "Services/description",
- "Services/display_name",
- "Services/attributes",
- "params/run_smoke_test",
- "params/reconfigure_client",
- "params/start_dependencies",
- "_"
- ],
"Host":[
"Hosts/cluster_name",
"Hosts/host_name",
@@ -55,27 +38,6 @@
"Hosts/recovery_summary",
"_"
],
- "Component":[
- "ServiceComponentInfo/service_name",
- "ServiceComponentInfo/component_name",
- "ServiceComponentInfo/cluster_name",
- "ServiceComponentInfo/display_name",
- "ServiceComponentInfo/state",
- "ServiceComponentInfo/display_name",
- "ServiceComponentInfo/description",
- "ServiceComponentInfo/category",
- "ServiceComponentInfo/total_count",
- "ServiceComponentInfo/started_count",
- "ServiceComponentInfo/installed_count",
- "ServiceComponentInfo/install_failed_count",
- "ServiceComponentInfo/init_count",
- "ServiceComponentInfo/unknown_count",
- "ServiceComponentInfo/recovery_enabled",
- "ServiceComponentInfo/desired_version",
- "ServiceComponentInfo/repository_state",
- "params/run_smoke_test",
- "_"
- ],
"HostComponent":[
"HostRoles/role_id",
"HostRoles/cluster_name",
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java b/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java
index 7ba5bc0..b361418 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/alerts/ComponentVersionAlertRunnableTest.java
@@ -149,7 +149,7 @@ public class ComponentVersionAlertRunnableTest extends EasyMockSupport {
expect(service.getDesiredRepositoryVersion()).andReturn(repositoryVersionEntity).atLeastOnce();
ServiceComponent serviceComponent = createNiceMock(ServiceComponent.class);
- expect(serviceComponent.getDesiredStackVersion()).andReturn(m_desidredStackId).atLeastOnce();
+ expect(serviceComponent.getDesiredStackId()).andReturn(m_desidredStackId).atLeastOnce();
expect(service.getServiceComponent(EasyMock.anyString())).andReturn(serviceComponent).atLeastOnce();
// components
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java
index 8bbd49a..5564957 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java
@@ -34,7 +34,6 @@ 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.api.handlers.BaseManagementHandler;
@@ -50,12 +49,10 @@ import org.apache.ambari.server.controller.internal.ResourceImpl;
import org.apache.ambari.server.controller.internal.ServiceResourceProvider;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceProvider;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.view.ViewRegistry;
-import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -98,13 +95,11 @@ public class BaseResourceDefinitionTest {
expect(maintenanceStateHelper.isOperationAllowed(anyObject(Resource.Type.class),
anyObject(Service.class))).andReturn(true).anyTimes();
- ResourceProvider serviceResourceProvider = new ServiceResourceProvider(
- PropertyHelper.getPropertyIds(Resource.Type.Service),
- PropertyHelper.getKeyPropertyIds(Resource.Type.Service), managementController,
+ ResourceProvider serviceResourceProvider = new ServiceResourceProvider(managementController,
maintenanceStateHelper, repositoryVersionDAO);
- expect(factory.getServiceResourceProvider(EasyMock.<Set<String>>anyObject(),
- EasyMock.<Map<Resource.Type, String>>anyObject(),
+ expect(
+ factory.getServiceResourceProvider(
anyObject(AmbariManagementController.class))).andReturn(serviceResourceProvider);
AbstractControllerResourceProvider.init(factory);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/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 f35122a..f5848f4 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
@@ -343,7 +343,7 @@ public class AmbariManagementControllerImplTest {
expect(service.getName()).andReturn("service");
expect(service.getServiceComponent("component")).andReturn(component);
- expect(service.getDesiredStackVersion()).andReturn(stackId);
+ expect(service.getDesiredStackId()).andReturn(stackId);
expect(stackId.getStackName()).andReturn("stack");
expect(stackId.getStackVersion()).andReturn("1.0");
@@ -377,7 +377,7 @@ public class AmbariManagementControllerImplTest {
expect(service.getName()).andReturn("service");
expect(service.getServiceComponent("component")).andThrow(
new ServiceComponentNotFoundException("cluster", "service", "component"));
- expect(service.getDesiredStackVersion()).andReturn(stackId);
+ expect(service.getDesiredStackId()).andReturn(stackId);
expect(stackId.getStackName()).andReturn("stack");
expect(stackId.getStackVersion()).andReturn("1.0");
Map<String, ServiceComponent> componentsMap = new HashMap<>();
@@ -415,7 +415,7 @@ public class AmbariManagementControllerImplTest {
ServiceComponent component2 = createNiceMock(ServiceComponent.class);
expect(service.getName()).andReturn("service");
- expect(service.getDesiredStackVersion()).andReturn(stackId);
+ expect(service.getDesiredStackId()).andReturn(stackId);
expect(stackId.getStackName()).andReturn("stack");
expect(stackId.getStackVersion()).andReturn("1.0");
Map<String, ServiceComponent> componentsMap = new HashMap<>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 38e6a22..1899b3a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -752,7 +752,7 @@ public class AmbariManagementControllerTest {
Assert.assertEquals(serviceName, resp.getServiceName());
Assert.assertEquals(cluster1, resp.getClusterName());
Assert.assertEquals(State.INIT.toString(), resp.getDesiredState());
- Assert.assertEquals("HDP-0.2", resp.getDesiredStackVersion());
+ Assert.assertEquals("HDP-0.2", resp.getDesiredStackId());
}
@Test
@@ -896,7 +896,7 @@ public class AmbariManagementControllerTest {
for (ServiceResponse svc : response) {
Assert.assertTrue(svc.getServiceName().equals(serviceName)
|| svc.getServiceName().equals(serviceName2));
- Assert.assertEquals("HDP-0.2", svc.getDesiredStackVersion());
+ Assert.assertEquals("HDP-0.2", svc.getDesiredStackId());
Assert.assertEquals(State.INIT.toString(), svc.getDesiredState());
}
}
@@ -2339,12 +2339,10 @@ public class AmbariManagementControllerTest {
ServiceResponse resp1 = resp.iterator().next();
Assert.assertEquals(s1.getClusterId(), resp1.getClusterId().longValue());
- Assert.assertEquals(s1.getCluster().getClusterName(),
- resp1.getClusterName());
+ Assert.assertEquals(s1.getCluster().getClusterName(), resp1.getClusterName());
Assert.assertEquals(s1.getName(), resp1.getServiceName());
- Assert.assertEquals("HDP-0.1", s1.getDesiredStackVersion().getStackId());
- Assert.assertEquals(s1.getDesiredStackVersion().getStackId(),
- resp1.getDesiredStackVersion());
+ Assert.assertEquals("HDP-0.1", s1.getDesiredStackId().getStackId());
+ Assert.assertEquals(s1.getDesiredStackId().getStackId(), resp1.getDesiredStackId());
Assert.assertEquals(State.INSTALLED.toString(), resp1.getDesiredState());
}
@@ -2458,7 +2456,7 @@ public class AmbariManagementControllerTest {
Assert.assertEquals(c1.getClusterName(), resp.getClusterName());
Assert.assertEquals(sc1.getName(), resp.getComponentName());
Assert.assertEquals(s1.getName(), resp.getServiceName());
- Assert.assertEquals("HDP-0.2", resp.getDesiredStackVersion());
+ Assert.assertEquals("HDP-0.2", resp.getDesiredStackId());
Assert.assertEquals(sc1.getDesiredState().toString(),
resp.getDesiredState());
Assert.assertEquals(c1.getClusterId(), resp.getClusterId().longValue());
@@ -2628,7 +2626,7 @@ public class AmbariManagementControllerTest {
Assert.assertEquals(sch1.getState().toString(),
resp.getLiveState());
Assert.assertEquals(repositoryVersion.getStackId(),
- sch1.getServiceComponent().getDesiredStackVersion());
+ sch1.getServiceComponent().getDesiredStackId());
Assert.assertNotNull(resp.getActualConfigs());
Assert.assertEquals(1, resp.getActualConfigs().size());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java
index 35ce868..f473aeb 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java
@@ -25,11 +25,6 @@ import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
-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.MaintenanceStateHelper;
import org.apache.ambari.server.controller.ResourceProviderFactory;
@@ -46,17 +41,6 @@ import junit.framework.Assert;
public class AbstractControllerResourceProviderTest {
@Test
public void testGetResourceProvider() throws Exception {
- Set<String> propertyIds = new HashSet<>();
- propertyIds.add("foo");
- propertyIds.add("cat1/foo");
- propertyIds.add("cat2/bar");
- propertyIds.add("cat2/baz");
- propertyIds.add("cat3/sub1/bam");
- propertyIds.add("cat4/sub2/sub3/bat");
- propertyIds.add("cat5/subcat5/map");
-
- Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
-
AmbariManagementController managementController = createMock(AmbariManagementController.class);
ResourceProviderFactory factory = createMock(ResourceProviderFactory.class);
@@ -64,10 +48,11 @@ public class AbstractControllerResourceProviderTest {
MaintenanceStateHelper maintenanceStateHelper = createNiceMock(MaintenanceStateHelper.class);
RepositoryVersionDAO repositoryVersionDAO = createNiceMock(RepositoryVersionDAO.class);
- ResourceProvider serviceResourceProvider = new ServiceResourceProvider(propertyIds,
- keyPropertyIds, managementController, maintenanceStateHelper, repositoryVersionDAO);
+ ResourceProvider serviceResourceProvider = new ServiceResourceProvider(managementController,
+ maintenanceStateHelper, repositoryVersionDAO);
- expect(factory.getServiceResourceProvider(propertyIds, keyPropertyIds, managementController)).andReturn(serviceResourceProvider);
+ expect(factory.getServiceResourceProvider(managementController)).andReturn(
+ serviceResourceProvider);
AbstractControllerResourceProvider.init(factory);
@@ -76,8 +61,8 @@ public class AbstractControllerResourceProviderTest {
AbstractResourceProvider provider =
(AbstractResourceProvider) AbstractControllerResourceProvider.getResourceProvider(
Resource.Type.Service,
- propertyIds,
- keyPropertyIds,
+ null,
+ null,
managementController);
Assert.assertTrue(provider instanceof ServiceResourceProvider);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
index 8f0a6bb..c3b879b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
@@ -79,12 +79,9 @@ public class AbstractResourceProviderTest {
Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
AmbariManagementController managementController = createMock(AmbariManagementController.class);
- MaintenanceStateHelper maintenanceStateHelper = createNiceMock(MaintenanceStateHelper.class);
- RepositoryVersionDAO repositoryVersionDAO = createNiceMock(RepositoryVersionDAO.class);
- replay(maintenanceStateHelper, repositoryVersionDAO);
- AbstractResourceProvider provider = new ServiceResourceProvider(propertyIds, keyPropertyIds,
- managementController, maintenanceStateHelper, repositoryVersionDAO);
+ AbstractResourceProvider provider = new HostComponentProcessResourceProvider(propertyIds,
+ keyPropertyIds, managementController);
Set<String> unsupported = provider.checkPropertyIds(Collections.singleton("foo"));
Assert.assertTrue(unsupported.isEmpty());
@@ -115,15 +112,13 @@ public class AbstractResourceProviderTest {
propertyIds.add("cat3/sub1/bam");
propertyIds.add("cat4/sub2/sub3/bat");
- Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
-
AmbariManagementController managementController = createMock(AmbariManagementController.class);
MaintenanceStateHelper maintenanceStateHelper = createNiceMock(MaintenanceStateHelper.class);
RepositoryVersionDAO repositoryVersionDAO = createNiceMock(RepositoryVersionDAO.class);
replay(maintenanceStateHelper, repositoryVersionDAO);
- AbstractResourceProvider provider = new ServiceResourceProvider(propertyIds, keyPropertyIds,
- managementController, maintenanceStateHelper, repositoryVersionDAO);
+ AbstractResourceProvider provider = new HostComponentProcessResourceProvider(propertyIds,
+ keyPropertyIds, managementController);
Set<String> supportedPropertyIds = provider.getPropertyIds();
Assert.assertTrue(supportedPropertyIds.containsAll(propertyIds));
@@ -131,15 +126,13 @@ public class AbstractResourceProviderTest {
@Test
public void testGetRequestStatus() {
- Set<String> propertyIds = new HashSet<>();
- Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
AmbariManagementController managementController = createMock(AmbariManagementController.class);
MaintenanceStateHelper maintenanceStateHelper = createNiceMock(MaintenanceStateHelper.class);
RepositoryVersionDAO repositoryVersionDAO = createNiceMock(RepositoryVersionDAO.class);
replay(maintenanceStateHelper, repositoryVersionDAO);
- AbstractResourceProvider provider = new ServiceResourceProvider(propertyIds, keyPropertyIds,
- managementController, maintenanceStateHelper, repositoryVersionDAO);
+ AbstractResourceProvider provider = new ServiceResourceProvider(managementController,
+ maintenanceStateHelper, repositoryVersionDAO);
RequestStatus status = provider.getRequestStatus(null);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
index d1705d8..03e3e66 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
@@ -75,7 +75,6 @@ import org.apache.ambari.server.state.ServiceComponentFactory;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
-import org.apache.log4j.Logger;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.junit.Assert;
@@ -91,8 +90,6 @@ import com.google.inject.Injector;
* Tests for the component resource provider.
*/
public class ComponentResourceProviderTest {
- private static final Logger LOG = Logger.getLogger(ComponentResourceProviderTest.class);
-
private static final long CLUSTER_ID = 100;
private static final String CLUSTER_NAME = "Cluster100";
private static final String SERVICE_NAME = "Service100";
@@ -141,7 +138,7 @@ public class ComponentResourceProviderTest {
expect(cluster.getService("Service100")).andReturn(service).anyTimes();
expect(cluster.getClusterId()).andReturn(2L).anyTimes();
- expect(service.getDesiredStackVersion()).andReturn(stackId).anyTimes();
+ expect(service.getDesiredStackId()).andReturn(stackId).anyTimes();
expect(service.getName()).andReturn("Service100").anyTimes();
expect(stackId.getStackName()).andReturn("HDP").anyTimes();
@@ -161,9 +158,8 @@ public class ComponentResourceProviderTest {
SecurityContextHolder.getContext().setAuthentication(authentication);
- ResourceProvider provider = new ComponentResourceProvider(PropertyHelper.getPropertyIds(type),
- PropertyHelper.getKeyPropertyIds(type),
- managementController, maintenanceStateHelper);
+ ResourceProvider provider = new ComponentResourceProvider(managementController,
+ maintenanceStateHelper);
// add the property map to a set for the request. add more maps for multiple creates
Set<Map<String, Object>> propertySet = new LinkedHashSet<>();
@@ -215,7 +211,7 @@ public class ComponentResourceProviderTest {
ServiceComponent serviceComponent1 = createNiceMock(ServiceComponent.class);
ServiceComponent serviceComponent2 = createNiceMock(ServiceComponent.class);
ServiceComponent serviceComponent3 = createNiceMock(ServiceComponent.class);
- StackId stackId = createNiceMock(StackId.class);
+ StackId stackId = new StackId("FOO-1.0");
final ComponentInfo componentInfo1 = createNiceMock(ComponentInfo.class);
final ComponentInfo componentInfo2 = createNiceMock(ComponentInfo.class);
Map <String, Integer> serviceComponentStateCountMap = new HashMap<>();
@@ -245,33 +241,34 @@ public class ComponentResourceProviderTest {
expect(service.getServiceComponents()).andReturn(serviceComponentMap).anyTimes();
expect(serviceComponent1.convertToResponse()).andReturn(
- new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component100", null, "", serviceComponentStateCountMap,
+ new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component100", stackId, "", serviceComponentStateCountMap,
true /* recovery enabled */, "Component100 Client", null, null));
expect(serviceComponent2.convertToResponse()).andReturn(
- new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component101", null, "", serviceComponentStateCountMap,
+ new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component101", stackId, "", serviceComponentStateCountMap,
false /* recovery not enabled */, "Component101 Client", null, null));
expect(serviceComponent3.convertToResponse()).andReturn(
- new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component102", null, "", serviceComponentStateCountMap,
+ new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component102", stackId, "", serviceComponentStateCountMap,
true /* recovery enabled */, "Component102 Client", "1.1", RepositoryVersionState.CURRENT));
- expect(ambariMetaInfo.getComponent(null, null, null, "Component100")).andReturn(componentInfo1);
- expect(ambariMetaInfo.getComponent(null, null, null, "Component101")).andReturn(componentInfo2);
- expect(ambariMetaInfo.getComponent(null, null, null, "Component102")).andReturn(componentInfo1);
+ expect(ambariMetaInfo.getComponent("FOO", "1.0", null, "Component100")).andReturn(
+ componentInfo1);
+ expect(ambariMetaInfo.getComponent("FOO", "1.0", null, "Component101")).andReturn(
+ componentInfo2);
+ expect(ambariMetaInfo.getComponent("FOO", "1.0", null, "Component102")).andReturn(
+ componentInfo1);
expect(componentInfo1.getCategory()).andReturn("MASTER").anyTimes();
expect(componentInfo2.getCategory()).andReturn("SLAVE").anyTimes();
// replay
replay(managementController, clusters, cluster, ambariMetaInfo, service,
- serviceComponent1, serviceComponent2, serviceComponent3, stackId,
+ serviceComponent1, serviceComponent2, serviceComponent3,
componentInfo1, componentInfo2);
SecurityContextHolder.getContext().setAuthentication(authentication);
- ResourceProvider provider = new ComponentResourceProvider(
- PropertyHelper.getPropertyIds(type),
- PropertyHelper.getKeyPropertyIds(type),
- managementController, maintenanceStateHelper);
+ ResourceProvider provider = new ComponentResourceProvider(managementController,
+ maintenanceStateHelper);
Set<String> propertyIds = new HashSet<>();
@@ -333,9 +330,8 @@ public class ComponentResourceProviderTest {
}
// verify
- verify(managementController, clusters, cluster, ambariMetaInfo, service,
- serviceComponent1, serviceComponent2, serviceComponent3, stackId,
- componentInfo1, componentInfo2);
+ verify(managementController, clusters, cluster, ambariMetaInfo, service, serviceComponent1,
+ serviceComponent2, serviceComponent3, componentInfo1, componentInfo2);
}
@Test
@@ -371,7 +367,7 @@ public class ComponentResourceProviderTest {
ServiceComponent serviceComponent3 = createNiceMock(ServiceComponent.class);
ServiceComponentHost serviceComponentHost = createNiceMock(ServiceComponentHost.class);
RequestStatusResponse requestStatusResponse = createNiceMock(RequestStatusResponse.class);
- StackId stackId = createNiceMock(StackId.class);
+ StackId stackId = new StackId("stackName-1");
Map<String, ServiceComponent> serviceComponentMap = new HashMap<>();
serviceComponentMap.put("Component101", serviceComponent1);
@@ -392,8 +388,6 @@ public class ComponentResourceProviderTest {
expect(managementController.getEffectiveMaintenanceState(
capture(EasyMock.<ServiceComponentHost>newCapture()))).andReturn(MaintenanceState.OFF).anyTimes();
- expect(stackId.getStackName()).andReturn("stackName").anyTimes();
- expect(stackId.getStackVersion()).andReturn("1").anyTimes();
expect(clusters.getCluster("Cluster100")).andReturn(cluster).anyTimes();
expect(cluster.getDesiredStackVersion()).andReturn(stackId);
@@ -420,13 +414,13 @@ public class ComponentResourceProviderTest {
expect(component3Info.getCategory()).andReturn(null);
expect(serviceComponent1.convertToResponse()).andReturn(
- new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component101", null, "", serviceComponentStateCountMap,
+ new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component101", stackId, "", serviceComponentStateCountMap,
false /* recovery not enabled */, "Component101 Client", null, null));
expect(serviceComponent2.convertToResponse()).andReturn(
- new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component102", null, "", serviceComponentStateCountMap,
+ new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component102", stackId, "", serviceComponentStateCountMap,
false /* recovery not enabled */, "Component102 Client", null, null));
expect(serviceComponent3.convertToResponse()).andReturn(
- new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component103", null, "", serviceComponentStateCountMap,
+ new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component103", stackId, "", serviceComponentStateCountMap,
false /* recovery not enabled */, "Component103 Client", null, null));
expect(serviceComponent1.getDesiredState()).andReturn(State.INSTALLED).anyTimes();
expect(serviceComponent2.getDesiredState()).andReturn(State.INSTALLED).anyTimes();
@@ -460,14 +454,12 @@ public class ComponentResourceProviderTest {
// replay
replay(managementController, clusters, cluster, ambariMetaInfo, service, component1Info,
component2Info, component3Info, serviceComponent1, serviceComponent2, serviceComponent3,
- serviceComponentHost, requestStatusResponse, stackId, maintenanceStateHelper);
+ serviceComponentHost, requestStatusResponse, maintenanceStateHelper);
SecurityContextHolder.getContext().setAuthentication(authentication);
- ResourceProvider provider = new ComponentResourceProvider(
- PropertyHelper.getPropertyIds(type),
- PropertyHelper.getKeyPropertyIds(type),
- managementController, maintenanceStateHelper);
+ ResourceProvider provider = new ComponentResourceProvider(managementController,
+ maintenanceStateHelper);
Map<String, Object> properties = new LinkedHashMap<>();
@@ -486,7 +478,7 @@ public class ComponentResourceProviderTest {
// verify
verify(managementController, clusters, cluster, ambariMetaInfo, service, component1Info,
component2Info, component3Info, serviceComponent1, serviceComponent2, serviceComponent3,
- serviceComponentHost, requestStatusResponse, stackId, maintenanceStateHelper);
+ serviceComponentHost, requestStatusResponse, maintenanceStateHelper);
}
@Test
@@ -551,10 +543,8 @@ public class ComponentResourceProviderTest {
SecurityContextHolder.getContext().setAuthentication(authentication);
- ResourceProvider provider = new ComponentResourceProvider(
- PropertyHelper.getPropertyIds(type),
- PropertyHelper.getKeyPropertyIds(type),
- managementController, maintenanceStateHelper);
+ ResourceProvider provider = new ComponentResourceProvider(managementController,
+ maintenanceStateHelper);
AbstractResourceProviderTest.TestObserver observer = new AbstractResourceProviderTest.TestObserver();
@@ -608,10 +598,8 @@ public class ComponentResourceProviderTest {
SecurityContextHolder.getContext().setAuthentication(authentication);
- ResourceProvider provider = new ComponentResourceProvider(
- PropertyHelper.getPropertyIds(type),
- PropertyHelper.getKeyPropertyIds(type),
- managementController,maintenanceStateHelper);
+ ResourceProvider provider = new ComponentResourceProvider(managementController,
+ maintenanceStateHelper);
AbstractResourceProviderTest.TestObserver observer = new AbstractResourceProviderTest.TestObserver();
@@ -691,7 +679,7 @@ public class ComponentResourceProviderTest {
ServiceComponent serviceComponent1 = createMock(ServiceComponent.class);
ServiceComponentHost serviceComponentHost = createMock(ServiceComponentHost.class);
RequestStatusResponse requestStatusResponse = createNiceMock(RequestStatusResponse.class);
- StackId stackId = createMock(StackId.class);
+ StackId stackId = new StackId("stackName-1");
Map<String, ServiceComponent> serviceComponentMap = new HashMap<>();
serviceComponentMap.put("Component101", serviceComponent1);
@@ -711,9 +699,6 @@ public class ComponentResourceProviderTest {
expect(managementController.getEffectiveMaintenanceState(
capture(EasyMock.<ServiceComponentHost>newCapture()))).andReturn(MaintenanceState.OFF).anyTimes();
- expect(stackId.getStackName()).andReturn("stackName").anyTimes();
- expect(stackId.getStackVersion()).andReturn("1").anyTimes();
-
expect(clusters.getCluster("Cluster100")).andReturn(cluster).anyTimes();
expect(cluster.getDesiredStackVersion()).andReturn(stackId);
@@ -736,7 +721,7 @@ public class ComponentResourceProviderTest {
expect(component1Info.getCategory()).andReturn(null);
expect(serviceComponent1.convertToResponse()).andReturn(
- new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component101", null, "", serviceComponentStateCountMap,
+ new ServiceComponentResponse(100L, "Cluster100", "Service100", "Component101", stackId, "", serviceComponentStateCountMap,
false /* recovery not enabled */, "Component101 Client", null, null));
expect(serviceComponent1.getDesiredState()).andReturn(State.INSTALLED).anyTimes();
@@ -764,14 +749,12 @@ public class ComponentResourceProviderTest {
// replay
replay(managementController, clusters, cluster, ambariMetaInfo, service, component1Info,
- serviceComponent1, serviceComponentHost, requestStatusResponse, stackId, maintenanceStateHelper);
+ serviceComponent1, serviceComponentHost, requestStatusResponse, maintenanceStateHelper);
SecurityContextHolder.getContext().setAuthentication(authentication);
- ResourceProvider provider = new ComponentResourceProvider(
- PropertyHelper.getPropertyIds(type),
- PropertyHelper.getKeyPropertyIds(type),
- managementController, maintenanceStateHelper);
+ ResourceProvider provider = new ComponentResourceProvider(managementController,
+ maintenanceStateHelper);
Map<String, Object> properties = new LinkedHashMap<>();
@@ -787,7 +770,7 @@ public class ComponentResourceProviderTest {
// verify
verify(managementController, clusters, cluster, ambariMetaInfo, service, component1Info,
- serviceComponent1, serviceComponentHost, requestStatusResponse, stackId, maintenanceStateHelper);
+ serviceComponent1, serviceComponentHost, requestStatusResponse, maintenanceStateHelper);
}
@Test
@@ -937,10 +920,7 @@ public class ComponentResourceProviderTest {
anyObject(ServiceComponentHost.class))).andReturn(true).anyTimes();
replay(maintenanceStateHelper);
- return new ComponentResourceProvider(
- PropertyHelper.getPropertyIds(type),
- PropertyHelper.getKeyPropertyIds(type),
- managementController, maintenanceStateHelper);
+ return new ComponentResourceProvider(managementController, maintenanceStateHelper);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/f65692a3/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
index 9486f9d..c49ff51 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
@@ -664,10 +664,8 @@ public class JMXHostProviderTest {
replay(maintenanceStateHelper, injector);
}
- ResourceProvider serviceResourceProvider = new ServiceResourceProvider(
- PropertyHelper.getPropertyIds(Resource.Type.Service),
- PropertyHelper.getKeyPropertyIds(Resource.Type.Service), controller, maintenanceStateHelper,
- repositoryVersionDAO);
+ ResourceProvider serviceResourceProvider = new ServiceResourceProvider(controller,
+ maintenanceStateHelper, repositoryVersionDAO);
ResourceProvider hostCompResourceProvider = new
HostComponentResourceProvider(PropertyHelper.getPropertyIds(Resource
[49/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/138aa48f
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/138aa48f
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/138aa48f
Branch: refs/heads/trunk
Commit: 138aa48f5f6e21ab7c7ec0636fe12e71a88281b0
Parents: 2892aee 753f8aa
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed May 31 10:31:40 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed May 31 10:37:02 2017 -0400
----------------------------------------------------------------------
.../ambari-logsearch-appender/pom.xml | 3 +-
.../api/model/inputconfig/InputDescriptor.java | 2 -
.../inputconfig/impl/InputDescriptorImpl.java | 12 -
.../inputconfig/impl/MapDateDescriptorImpl.java | 2 +-
.../impl/MapFieldNameDescriptorImpl.java | 4 +-
.../logsearch/steps/LogSearchApiSteps.java | 6 +-
.../ambari-logsearch-logfeeder/README.md | 28 +-
.../ambari-logsearch-logfeeder/docs/filter.md | 59 ++++
.../ambari-logsearch-logfeeder/docs/input.md | 63 ++++
.../docs/inputConfig.md | 29 ++
.../docs/postMapValues.md | 61 ++++
.../ambari-logsearch-logfeeder/pom.xml | 2 -
.../logfeeder/input/AbstractInputFile.java | 9 +-
.../ambari/logfeeder/mapper/MapperDate.java | 2 +-
.../src/main/resources/log4j.xml | 3 +-
.../ambari/logfeeder/input/InputFileTest.java | 1 -
.../resources/samples/config/config_audit.json | 339 +++++++++----------
.../samples/config/config_service.json | 79 +++--
.../ambari-logsearch-server/pom.xml | 2 -
.../AbstractLogRequestFacetQueryConverter.java | 2 +
.../handler/ListCollectionHandler.java | 1 +
.../logsearch/manager/AuditLogsManager.java | 11 +-
.../ambari/logsearch/manager/ManagerBase.java | 5 +-
.../logsearch/manager/ServiceLogsManager.java | 62 ++--
.../logsearch/manager/ShipperConfigManager.java | 10 +-
.../model/common/LSServerConditions.java | 7 +
.../logsearch/model/common/LSServerFields.java | 6 +
.../logsearch/model/common/LSServerFilter.java | 27 +-
.../common/LSServerFilterDeserializer.java | 60 ++++
.../model/common/LSServerFilterGrok.java | 6 +
.../model/common/LSServerFilterJson.java | 2 +
.../model/common/LSServerFilterKeyValue.java | 2 +
.../logsearch/model/common/LSServerInput.java | 43 ++-
.../model/common/LSServerInputConfig.java | 13 +
.../model/common/LSServerInputDeserializer.java | 62 ++++
.../model/common/LSServerInputFile.java | 2 +
.../model/common/LSServerInputFileBase.java | 2 +
.../model/common/LSServerInputS3File.java | 6 +
.../model/common/LSServerLogLevelFilter.java | 24 +-
.../model/common/LSServerLogLevelFilterMap.java | 5 +
.../logsearch/model/common/LSServerMapDate.java | 7 +-
.../model/common/LSServerMapFieldCopy.java | 5 +
.../model/common/LSServerMapFieldName.java | 5 +
.../model/common/LSServerMapFieldValue.java | 6 +
.../model/common/LSServerPostMapValues.java | 34 +-
.../model/common/LSServerPostMapValuesList.java | 59 ++++
.../LSServerPostMapValuesListDeserializer.java | 79 +++++
.../LSServerPostMapValuesListSerializer.java | 44 +++
.../common/LSServerPostMapValuesSerializer.java | 39 ---
.../logsearch/rest/ShipperConfigResource.java | 19 +-
.../LogsearchAuthSuccessHandler.java | 4 -
.../web/filters/LogsearchKrbFilter.java | 62 ++--
.../web/model/JWTAuthenticationToken.java | 2 +-
.../src/main/resources/log4j.xml | 158 +++++----
.../logfeeder/shipper-conf/global.config.json | 5 +-
ambari-server/conf/unix/ambari-env.sh | 2 +-
.../server/upgrade/UpgradeCatalog300.java | 19 ++
.../src/main/python/ambari_server_main.py | 2 +-
.../package/templates/global.config.json.j2 | 3 +-
.../0.5.0/properties/logfeeder-log4j.xml.j2 | 2 +-
.../0.5.0/properties/logsearch-log4j.xml.j2 | 2 +-
.../scripts/alerts/alert_spark_thrift_port.py | 5 +-
.../scripts/alerts/alert_spark2_thrift_port.py | 5 +-
.../STORM/1.1.0/configuration/storm-site.xml | 36 +-
.../common-services/STORM/1.1.0/kerberos.json | 6 +-
.../HDP/2.0.6/properties/stack_features.json | 6 +-
.../services/STORM/configuration/storm-site.xml | 61 ++++
.../stacks/HDP/2.6/services/STORM/metainfo.xml | 6 +-
.../server/upgrade/UpgradeCatalog300Test.java | 33 ++
.../app/controllers/wizard/step7_controller.js | 3 +
.../app/controllers/wizard/step8_controller.js | 11 +
ambari-web/app/messages.js | 1 +
ambari-web/app/templates/wizard/step8.hbs | 2 +-
ambari-web/app/utils/ajax/ajax.js | 2 +-
docs/pom.xml | 2 +-
docs/src/site/apt/index.apt | 2 +-
docs/src/site/apt/whats-new.apt | 4 +-
docs/src/site/site.xml | 4 +
78 files changed, 1267 insertions(+), 544 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/138aa48f/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
index 43707dd,dbc77af..782cf2c
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
@@@ -322,9 -321,35 +322,35 @@@ public class UpgradeCatalog300Test
expect(cluster.getDesiredConfigByType("logsearch-properties")).andReturn(logSearchPropertiesConf).times(2);
expect(logSearchPropertiesConf.getProperties()).andReturn(oldLogSearchProperties).times(2);
Capture<Map<String, String>> logSearchPropertiesCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), eq("logsearch-properties"), capture(logSearchPropertiesCapture),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), eq("logsearch-properties"), capture(logSearchPropertiesCapture),
anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
+ Map<String, String> oldLogFeederLog4j = ImmutableMap.of(
+ "content", "<!DOCTYPE log4j:configuration SYSTEM \"log4j.dtd\">");
+
+ Map<String, String> expectedLogFeederLog4j = ImmutableMap.of(
+ "content", "<!DOCTYPE log4j:configuration SYSTEM \"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd\">");
+
+ Config mockLogFeederLog4j = easyMockSupport.createNiceMock(Config.class);
+ expect(cluster.getDesiredConfigByType("logfeeder-log4j")).andReturn(mockLogFeederLog4j).atLeastOnce();
+ expect(mockLogFeederLog4j.getProperties()).andReturn(oldLogFeederLog4j).anyTimes();
+ Capture<Map<String, String>> logFeederLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logFeederLog4jCapture), anyString(),
++ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(logFeederLog4jCapture), anyString(),
+ EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
+
+ Map<String, String> oldLogSearchLog4j = ImmutableMap.of(
+ "content", "<!DOCTYPE log4j:configuration SYSTEM \"log4j.dtd\">");
+
+ Map<String, String> expectedLogSearchLog4j = ImmutableMap.of(
+ "content", "<!DOCTYPE log4j:configuration SYSTEM \"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd\">");
+
+ Config mockLogSearchLog4j = easyMockSupport.createNiceMock(Config.class);
+ expect(cluster.getDesiredConfigByType("logsearch-log4j")).andReturn(mockLogSearchLog4j).atLeastOnce();
+ expect(mockLogSearchLog4j.getProperties()).andReturn(oldLogSearchLog4j).anyTimes();
+ Capture<Map<String, String>> logSearchLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logSearchLog4jCapture), anyString(),
++ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(logSearchLog4jCapture), anyString(),
+ EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
+
replay(clusters, cluster);
replay(controller, injector2);
replay(confSomethingElse1, confSomethingElse2, confLogSearchConf1, confLogSearchConf2);
@@@ -337,11 -363,17 +364,17 @@@
for (Map<String, String> updatedLogSearchConf : updatedLogSearchConfs) {
assertTrue(Maps.difference(Collections.<String, String> emptyMap(), updatedLogSearchConf).areEqual());
}
-
+
Map<String,String> newLogFeederProperties = logFeederPropertiesCapture.getValue();
assertTrue(Maps.difference(expectedLogFeederProperties, newLogFeederProperties).areEqual());
-
+
Map<String,String> newLogSearchProperties = logSearchPropertiesCapture.getValue();
assertTrue(Maps.difference(Collections.<String, String> emptyMap(), newLogSearchProperties).areEqual());
+
+ Map<String, String> updatedLogFeederLog4j = logFeederLog4jCapture.getValue();
+ assertTrue(Maps.difference(expectedLogFeederLog4j, updatedLogFeederLog4j).areEqual());
+
+ Map<String, String> updatedLogSearchLog4j = logSearchLog4jCapture.getValue();
+ assertTrue(Maps.difference(expectedLogSearchLog4j, updatedLogSearchLog4j).areEqual());
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/138aa48f/ambari-web/app/controllers/wizard/step8_controller.js
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/138aa48f/ambari-web/app/messages.js
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/138aa48f/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
[45/50] [abbrv] ambari git commit: AMBARI-21102. To/From Version
Information is Incorrect When Looking at Prior Upgrades (alexantonenko)
Posted by jo...@apache.org.
AMBARI-21102. To/From Version Information is Incorrect When Looking at Prior Upgrades (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7a7f489b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7a7f489b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7a7f489b
Branch: refs/heads/trunk
Commit: 7a7f489bc51a0351f9e2c0c1fbb79180319f1d80
Parents: 770c519
Author: Alex Antonenko <hi...@gmail.com>
Authored: Thu May 25 14:07:13 2017 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Thu May 25 14:07:13 2017 +0300
----------------------------------------------------------------------
.../stack_version/stack_upgrade_history.js | 1 +
.../admin/stack_upgrade/upgrade_history.hbs | 14 ++--
ambari-web/app/utils/array_utils.js | 6 +-
.../admin/stack_upgrade/upgrade_history_view.js | 39 ++++-----
.../stack_upgrade/upgrade_history_view_test.js | 83 +++++++++++++++++---
5 files changed, 107 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/7a7f489b/ambari-web/app/models/stack_version/stack_upgrade_history.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_version/stack_upgrade_history.js b/ambari-web/app/models/stack_version/stack_upgrade_history.js
index 9b0c8b2..cf38277 100644
--- a/ambari-web/app/models/stack_version/stack_upgrade_history.js
+++ b/ambari-web/app/models/stack_version/stack_upgrade_history.js
@@ -33,6 +33,7 @@ App.StackUpgradeHistory = DS.Model.extend({
endTime: DS.attr('number'),
startTime: DS.attr('number'),
createTime: DS.attr('number'),
+ versions: DS.attr('object'),
displayStatus: function() {
return stringUtils.upperUnderscoreToText(this.get('requestStatus'));
}.property('requestStatus')
http://git-wip-us.apache.org/repos/asf/ambari/blob/7a7f489b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history.hbs
index 44168ca..85fa4c0 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history.hbs
@@ -48,14 +48,16 @@
</div>
<table class="table advanced-header-table table-hover" id="upgrade-summary-table">
<thead>
+ <tr>
<th>{{t common.direction}}</th>
<th>{{t common.type}}</th>
- <th>{{t common.from.version}}</th>
- <th>{{t common.to.version}}</th>
+ <th>{{t common.service}}</th>
+ <th>{{t common.version}}</th>
<th>{{t common.start.time}}</th>
<th>{{t common.duration}}</th>
<th>{{t common.end.time}}</th>
<th>{{t common.status}}</th>
+ </tr>
</thead>
<tbody>
{{#if view.pageContent}}
@@ -63,7 +65,7 @@
<tr>
<td class='name'>
<span class="trim_hostname">
- <a href="#" class="black" {{action "showUpgradeHistoryRecord" item target="view"}}>
+ <a href="#" class="black" {{action "showUpgradeHistoryRecord" item.stackUpgradeHistoryItem target="view"}}>
{{unbound item.directionLabel}}
</a>
</span>
@@ -72,10 +74,10 @@
<span>{{item.upgradeTypeLabel}}</span>
</td>
<td>
- <span>{{item.fromVersion}}</span>
+ <span>{{item.serviceName}}</span>
</td>
<td>
- <span>{{item.toVersion}}</span>
+ <span>{{item.version}}</span>
</td>
<td>
<span>{{item.startTimeLabel}}</span>
@@ -102,4 +104,4 @@
</tfoot>
</table>
</div>
-</div>
\ No newline at end of file
+</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/7a7f489b/ambari-web/app/utils/array_utils.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/array_utils.js b/ambari-web/app/utils/array_utils.js
index 76914c4..8bf4e43 100644
--- a/ambari-web/app/utils/array_utils.js
+++ b/ambari-web/app/utils/array_utils.js
@@ -20,6 +20,8 @@ function _parseId(id) {
return id.replace(/[^\d|\.]/g, '').split('.').map(function (i) {return parseInt(i, 10);});
}
+const flatten = (list) => list.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
+
module.exports = {
/**
*
@@ -83,6 +85,8 @@ module.exports = {
return 0
}
return lId1 > lId2 ? 1 : -1;
- }
+ },
+
+ flatten
};
http://git-wip-us.apache.org/repos/asf/ambari/blob/7a7f489b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js
index 718ddc7..0e0ee7f 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_history_view.js
@@ -16,9 +16,9 @@
* limitations under the License.
*/
-
var App = require('app');
var date = require('utils/date/date');
+const arrayUtils = require('utils/array_utils');
App.MainAdminStackUpgradeHistoryView = App.TableView.extend(App.TableServerViewMixin, {
@@ -98,8 +98,7 @@ App.MainAdminStackUpgradeHistoryView = App.TableView.extend(App.TableServerViewM
selectedCategory: Em.computed.findBy('categories', 'isSelected', true),
filteredCount: function () {
- var filteredContent = this.get('filteredContent').toArray();
- return filteredContent.length;
+ return this.get('filteredContent').map(item => Object.keys(item.get('versions') || {}).length).reduce(Em.sum, 0);
}.property('filteredContent'),
/**
@@ -115,7 +114,7 @@ App.MainAdminStackUpgradeHistoryView = App.TableView.extend(App.TableServerViewM
}.property('selectedCategory'),
/**
- * sort and slice recieved content by pagination parameters
+ * sort and slice received content by pagination parameters
*/
pageContent: function () {
var content = this.get('filteredContent').toArray();
@@ -125,21 +124,23 @@ App.MainAdminStackUpgradeHistoryView = App.TableView.extend(App.TableServerViewM
}.property('filteredContent', 'startIndex', 'endIndex'),
processForDisplay: function (content) {
- var processedContent = [];
-
- content.forEach(function (item) {
- var direction = item.get('direction') === 'UPGRADE' ? Em.I18n.t('common.upgrade') : Em.I18n.t('common.downgrade');
- var method = this.get('upgradeMethods').findProperty('type', item.get('upgradeType'));
- item.setProperties({
- directionLabel: direction,
- upgradeTypeLabel: method ? method.get('displayName') : method,
- startTimeLabel: date.startTime(App.dateTimeWithTimeZone(item.get('startTime'))),
- endTimeLabel: date.endTime(App.dateTimeWithTimeZone(item.get('endTime'))),
- duration: date.durationSummary(item.get('startTime'), item.get('endTime'))
+ return arrayUtils.flatten(content.map(item => {
+ const versions = item.get('versions');
+ const method = this.get('upgradeMethods').findProperty('type', item.get('upgradeType'));
+ return Object.keys(versions).map(serviceName => {
+ return {
+ version: versions[serviceName].to_repository_version,
+ serviceName: App.format.role(serviceName),
+ directionLabel: item.get('direction') === 'UPGRADE' ? Em.I18n.t('common.upgrade') : Em.I18n.t('common.downgrade'),
+ upgradeTypeLabel: method ? method.get('displayName') : method,
+ startTimeLabel: date.startTime(App.dateTimeWithTimeZone(item.get('startTime'))),
+ endTimeLabel: date.endTime(App.dateTimeWithTimeZone(item.get('endTime'))),
+ duration: date.durationSummary(item.get('startTime'), item.get('endTime')),
+ displayStatus: item.get('displayStatus'),
+ stackUpgradeHistoryItem: item
+ };
});
- processedContent.push(item);
- }, this);
- return processedContent;
+ }));
},
paginationLeftClass: function () {
@@ -293,7 +294,7 @@ App.MainAdminStackUpgradeHistoryView = App.TableView.extend(App.TableServerViewM
var associatedVersion = record.get('associatedVersion');
var type = this.get('upgradeMethods').findProperty('type', record.get('upgradeType'));
var displayName = type ? type.get('displayName') : App.format.normalizeName(record.get('upgradeType'));
- const i18nKeySuffix = direction === 'UPGRADE' ? 'upgrade' : 'downgrade';
+ const i18nKeySuffix = direction.toLowerCase() === 'upgrade' ? 'upgrade' : 'downgrade';
this.get('controller').set('currentUpgradeRecord', record);
http://git-wip-us.apache.org/repos/asf/ambari/blob/7a7f489b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_history_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_history_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_history_view_test.js
index 0ca7080..de60c74 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_history_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_history_view_test.js
@@ -135,13 +135,13 @@ describe('App.MainAdminStackUpgradeHistoryView', function () {
event = {
context: Em.Object.create({
isSelected: false,
- value: 'ALL',
+ value: 'ALL'
})
};
view.set('categories', [
Em.Object.create({
isSelected: true,
- value: 'UPGRADE_COMPLETED',
+ value: 'UPGRADE_COMPLETED'
}),
event.context
]);
@@ -169,6 +169,61 @@ describe('App.MainAdminStackUpgradeHistoryView', function () {
});
});
+ describe('#filteredCount', function () {
+
+ [
+ {
+ filteredContent: [
+ Em.Object.create({
+ versions: {s1: {}}
+ })
+ ],
+ m: '1 version',
+ e: 1
+ },
+ {
+ filteredContent: [
+ Em.Object.create({
+ versions: {s1: {}, s2: {}}
+ })
+ ],
+ m: '2 versions',
+ e: 2
+ },
+ {
+ filteredContent: [
+ Em.Object.create({
+ versions: {s1: {}, s2: {}}
+ }),
+ Em.Object.create({
+ versions: {s1: {}, s2: {}, s3: {}}
+ })
+ ],
+ m: '5 versions',
+ e: 5
+ }
+ ].forEach(function (test) {
+ describe(test.m, function () {
+ beforeEach(function () {
+ sinon.stub(view, 'get', function (key) {
+ if (key === 'filteredContent') {
+ return test.filteredContent;
+ }
+ return Em.get(this, key);
+ });
+ });
+ afterEach(function () {
+ view.get.restore();
+ });
+ it('should map versions', function () {
+ view.set('filteredContent', test.filteredContent);
+ expect(view.get('filteredCount')).to.be.equal(test.e);
+ });
+ });
+ });
+
+ });
+
describe('#processForDisplay', function () {
var timestamp = 1484698121448;
@@ -178,13 +233,15 @@ describe('App.MainAdminStackUpgradeHistoryView', function () {
direction: 'UPGRADE',
upgradeType: 'ROLLING',
startTime: timestamp,
- endTime: timestamp + 3600 * 1000
+ endTime: timestamp + 3600 * 1000,
+ versions: {s1: {}}
}),
Em.Object.create({
direction: 'DOWNGRADE',
upgradeType: 'HOST_ORDERED',
startTime: timestamp,
- endTime: timestamp + 3600 * 1000 * 2
+ endTime: timestamp + 3600 * 1000 * 2,
+ versions: {s1: {}}
})
];
@@ -192,16 +249,18 @@ describe('App.MainAdminStackUpgradeHistoryView', function () {
Em.Object.create({
directionLabel: Em.I18n.t('common.upgrade'),
upgradeTypeLabel: Em.I18n.t('common.rolling'),
- duration: '1.00 hours'
+ duration: '1.00 hours',
+ serviceName: 'S1'
}),
Em.Object.create({
directionLabel: Em.I18n.t('common.downgrade'),
upgradeTypeLabel: Em.I18n.t('common.hostOrdered'),
- duration: '2.00 hours'
+ duration: '2.00 hours',
+ serviceName: 'S1'
})
];
- var fields = ['directionLabel', 'upgradeTypeLabel', 'duration'];
+ var fields = ['directionLabel', 'upgradeTypeLabel', 'duration', 'serviceName'];
var processedContent;
@@ -216,13 +275,17 @@ describe('App.MainAdminStackUpgradeHistoryView', function () {
App.dateTimeWithTimeZone.restore();
});
+ it('2 items mapped', function () {
+ expect(processedContent.length).to.be.equal(2);
+ })
+
expected.forEach(function (item, index) {
describe('test #' + (index + 1), function () {
fields.forEach(function (field) {
it('#' + field, function () {
- expect(processedContent[index].get(field)).to.be.equal(item.get(field));
+ expect(processedContent[index][field]).to.be.equal(item.get(field));
});
});
@@ -232,8 +295,8 @@ describe('App.MainAdminStackUpgradeHistoryView', function () {
it('End Time for upgrade in progress is `Not finished`', function () {
- processedContent = view.processForDisplay([Em.Object.create({endTime: -1})]);
- expect(processedContent[0].get('endTimeLabel')).to.be.equal('Not finished');
+ processedContent = view.processForDisplay([Em.Object.create({endTime: -1, versions: {s1:{}}})]);
+ expect(processedContent[0].endTimeLabel).to.be.equal('Not finished');
});
});
[32/50] [abbrv] ambari git commit: AMBARI-21059. Reduce Dependency on
Cluster Desired Stack ID (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121.java
index 0487cd7..ab41b99 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121.java
@@ -31,6 +31,7 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -135,36 +136,47 @@ public class UpgradeCatalog2121 extends AbstractUpgradeCatalog {
Map<String, Cluster> clusterMap = clusters.getClusters();
if ((clusterMap != null) && !clusterMap.isEmpty()) {
// Iterate through the clusters and perform any configuration updates
+ Set<StackId> stackIds = new HashSet<>();
+
for (final Cluster cluster : clusterMap.values()) {
- StackId currentStackVersion = cluster.getCurrentStackVersion();
- String currentStackName = currentStackVersion != null? currentStackVersion.getStackName() : null;
- if (currentStackName != null && currentStackName.equalsIgnoreCase("PHD")) {
- // Update configs only if PHD stack is deployed
- Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs();
- if(desiredConfigs != null && !desiredConfigs.isEmpty()) {
- for (Map.Entry<String, DesiredConfig> dc : desiredConfigs.entrySet()) {
- String configType = dc.getKey();
- DesiredConfig desiredConfig = dc.getValue();
- String configTag = desiredConfig.getTag();
- Config config = cluster.getConfig(configType, configTag);
-
- Map<String, String> properties = config.getProperties();
- if(properties != null && !properties.isEmpty()) {
- Map<String, String> updates = new HashMap<>();
- for (Map.Entry<String, String> property : properties.entrySet()) {
- String propertyKey = property.getKey();
- String propertyValue = property.getValue();
- String modifiedPropertyValue = propertyValue;
- for (String regex : replacements.keySet()) {
- modifiedPropertyValue = modifiedPropertyValue.replaceAll(regex, replacements.get(regex));
+ for (Service service : cluster.getServices().values()) {
+ StackId currentStackVersion = service.getDesiredStackId();
+
+ if (stackIds.contains(currentStackVersion)) {
+ continue;
+ } else {
+ stackIds.add(currentStackVersion);
+ }
+
+ String currentStackName = currentStackVersion != null? currentStackVersion.getStackName() : null;
+ if (currentStackName != null && currentStackName.equalsIgnoreCase("PHD")) {
+ // Update configs only if PHD stack is deployed
+ Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs();
+ if(desiredConfigs != null && !desiredConfigs.isEmpty()) {
+ for (Map.Entry<String, DesiredConfig> dc : desiredConfigs.entrySet()) {
+ String configType = dc.getKey();
+ DesiredConfig desiredConfig = dc.getValue();
+ String configTag = desiredConfig.getTag();
+ Config config = cluster.getConfig(configType, configTag);
+
+ Map<String, String> properties = config.getProperties();
+ if(properties != null && !properties.isEmpty()) {
+ Map<String, String> updates = new HashMap<>();
+ for (Map.Entry<String, String> property : properties.entrySet()) {
+ String propertyKey = property.getKey();
+ String propertyValue = property.getValue();
+ String modifiedPropertyValue = propertyValue;
+ for (String regex : replacements.keySet()) {
+ modifiedPropertyValue = modifiedPropertyValue.replaceAll(regex, replacements.get(regex));
+ }
+ if (!modifiedPropertyValue.equals(propertyValue)) {
+ updates.put(propertyKey, modifiedPropertyValue);
+ }
}
- if (!modifiedPropertyValue.equals(propertyValue)) {
- updates.put(propertyKey, modifiedPropertyValue);
+ if (!updates.isEmpty()) {
+ updateConfigurationPropertiesForCluster(cluster, configType, updates, true, false);
}
}
- if (!updates.isEmpty()) {
- updateConfigurationPropertiesForCluster(cluster, configType, updates, true, false);
- }
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
index 9cf7bbd..f171086 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
@@ -730,103 +730,89 @@ public class UpgradeCatalog220 extends AbstractUpgradeCatalog {
for (Cluster cluster : clusters.getClusters().values()) {
ClusterEntity clusterEntity = clusterDAO.findByName(cluster.getClusterName());
- final StackId stackId = cluster.getCurrentStackVersion();
- LOG.info(MessageFormat.format("Analyzing cluster {0}, currently at stack {1} and version {2}",
- cluster.getClusterName(), stackId.getStackName(), stackId.getStackVersion()));
- if (stackId.getStackName().equalsIgnoreCase("HDP") && stackId.getStackVersion().equalsIgnoreCase("2.1")) {
- final StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
- StackEntity stackEntity = stackDAO.find(stackId.getStackName(), stackId.getStackVersion());
+ Set<StackId> stackIds = new HashSet<>();
- LOG.info("Bootstrapping the versions since using HDP-2.1");
+ for (Service service : cluster.getServices().values()) {
+ StackId stackId = service.getDesiredStackId();
- // The actual value is not known, so use this.
- String displayName = stackId.getStackName() + "-" + hardcodedInitialVersion;
-
- // However, the Repo URLs should be correct.
- String operatingSystems = repositoryVersionHelper.serializeOperatingSystems(stackInfo.getRepositories());
-
- // Create the Repo Version if it doesn't already exist.
- RepositoryVersionEntity repoVersionEntity = repositoryVersionDAO.findByDisplayName(displayName);
- if (null != repoVersionEntity) {
- LOG.info(MessageFormat.format("A Repo Version already exists with Display Name: {0}", displayName));
+ if (stackIds.contains(stackId)) {
+ continue;
} else {
- final long repoVersionIdSeq = repositoryVersionDAO.findMaxId("id");
- // Safe to attempt to add the sequence if it doesn't exist already.
- addSequence("repo_version_id_seq", repoVersionIdSeq, false);
-
- repoVersionEntity = repositoryVersionDAO.create(
- stackEntity, hardcodedInitialVersion, displayName, operatingSystems);
- LOG.info(MessageFormat.format("Created Repo Version with ID: {0,number,#}\n, Display Name: {1}, Repo URLs: {2}\n",
- repoVersionEntity.getId(), displayName, operatingSystems));
+ stackIds.add(stackId);
}
- /*
- // Create the Cluster Version if it doesn't already exist.
- ClusterVersionEntity clusterVersionEntity = clusterVersionDAO.findByClusterAndStackAndVersion(cluster.getClusterName(),
- stackId, hardcodedInitialVersion);
- if (null != clusterVersionEntity) {
- LOG.info(MessageFormat.format("A Cluster Version version for cluster: {0}, version: {1}, already exists; its state is {2}.",
- cluster.getClusterName(), clusterVersionEntity.getRepositoryVersion().getVersion(), clusterVersionEntity.getState()));
- // If there are not CURRENT cluster versions, make this one the CURRENT one.
- if (clusterVersionEntity.getState() != RepositoryVersionState.CURRENT &&
- clusterVersionDAO.findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.CURRENT).isEmpty()) {
- clusterVersionEntity.setState(RepositoryVersionState.CURRENT);
- clusterVersionDAO.merge(clusterVersionEntity);
+ LOG.info(MessageFormat.format("Analyzing cluster {0}, currently at stack {1} and version {2}",
+ cluster.getClusterName(), stackId.getStackName(), stackId.getStackVersion()));
+
+ if (stackId.getStackName().equalsIgnoreCase("HDP") && stackId.getStackVersion().equalsIgnoreCase("2.1")) {
+ final StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
+ StackEntity stackEntity = stackDAO.find(stackId.getStackName(), stackId.getStackVersion());
+
+ LOG.info("Bootstrapping the versions since using HDP-2.1");
+
+ // The actual value is not known, so use this.
+ String displayName = stackId.getStackName() + "-" + hardcodedInitialVersion;
+
+ // However, the Repo URLs should be correct.
+ String operatingSystems = repositoryVersionHelper.serializeOperatingSystems(stackInfo.getRepositories());
+
+ // Create the Repo Version if it doesn't already exist.
+ RepositoryVersionEntity repoVersionEntity = repositoryVersionDAO.findByDisplayName(displayName);
+ if (null != repoVersionEntity) {
+ LOG.info(MessageFormat.format("A Repo Version already exists with Display Name: {0}", displayName));
+ } else {
+ final long repoVersionIdSeq = repositoryVersionDAO.findMaxId("id");
+ // Safe to attempt to add the sequence if it doesn't exist already.
+ addSequence("repo_version_id_seq", repoVersionIdSeq, false);
+
+ repoVersionEntity = repositoryVersionDAO.create(
+ stackEntity, hardcodedInitialVersion, displayName, operatingSystems);
+ LOG.info(MessageFormat.format("Created Repo Version with ID: {0,number,#}\n, Display Name: {1}, Repo URLs: {2}\n",
+ repoVersionEntity.getId(), displayName, operatingSystems));
}
- } else {
- final long clusterVersionIdSeq = clusterVersionDAO.findMaxId("id");
- // Safe to attempt to add the sequence if it doesn't exist already.
- addSequence("cluster_version_id_seq", clusterVersionIdSeq, false);
-
- clusterVersionEntity = clusterVersionDAO.create(clusterEntity, repoVersionEntity, RepositoryVersionState.CURRENT,
- System.currentTimeMillis(), System.currentTimeMillis(), "admin");
- LOG.info(MessageFormat.format("Created Cluster Version with ID: {0,number,#}, cluster: {1}, version: {2}, state: {3}.",
- clusterVersionEntity.getId(), cluster.getClusterName(), clusterVersionEntity.getRepositoryVersion().getVersion(),
- clusterVersionEntity.getState()));
- }
- */
-
- // Create the Host Versions if they don't already exist.
- Collection<HostEntity> hosts = clusterEntity.getHostEntities();
- boolean addedAtLeastOneHost = false;
- if (null != hosts && !hosts.isEmpty()) {
- for (HostEntity hostEntity : hosts) {
- HostVersionEntity hostVersionEntity = hostVersionDAO.findByClusterStackVersionAndHost(cluster.getClusterName(),
- stackId, hardcodedInitialVersion, hostEntity.getHostName());
-
- if (null != hostVersionEntity) {
- LOG.info(MessageFormat.format("A Host Version version for cluster: {0}, version: {1}, host: {2}, already exists; its state is {3}.",
- cluster.getClusterName(), hostVersionEntity.getRepositoryVersion().getVersion(),
- hostEntity.getHostName(), hostVersionEntity.getState()));
-
- if (hostVersionEntity.getState() != RepositoryVersionState.CURRENT &&
- hostVersionDAO.findByClusterHostAndState(cluster.getClusterName(), hostEntity.getHostName(),
- RepositoryVersionState.CURRENT).isEmpty()) {
- hostVersionEntity.setState(RepositoryVersionState.CURRENT);
- hostVersionDAO.merge(hostVersionEntity);
- }
- } else {
- // This should only be done the first time.
- if (!addedAtLeastOneHost) {
- final long hostVersionIdSeq = hostVersionDAO.findMaxId("id");
- // Safe to attempt to add the sequence if it doesn't exist already.
- addSequence("host_version_id_seq", hostVersionIdSeq, false);
- addedAtLeastOneHost = true;
- }
- hostVersionEntity = new HostVersionEntity(hostEntity, repoVersionEntity, RepositoryVersionState.CURRENT);
- hostVersionDAO.create(hostVersionEntity);
- LOG.info(MessageFormat.format("Created Host Version with ID: {0,number,#}, cluster: {1}, version: {2}, host: {3}, state: {4}.",
- hostVersionEntity.getId(), cluster.getClusterName(), hostVersionEntity.getRepositoryVersion().getVersion(),
- hostEntity.getHostName(), hostVersionEntity.getState()));
+ // Create the Host Versions if they don't already exist.
+ Collection<HostEntity> hosts = clusterEntity.getHostEntities();
+ boolean addedAtLeastOneHost = false;
+ if (null != hosts && !hosts.isEmpty()) {
+ for (HostEntity hostEntity : hosts) {
+ HostVersionEntity hostVersionEntity = hostVersionDAO.findByClusterStackVersionAndHost(cluster.getClusterName(),
+ stackId, hardcodedInitialVersion, hostEntity.getHostName());
+
+ if (null != hostVersionEntity) {
+ LOG.info(MessageFormat.format("A Host Version version for cluster: {0}, version: {1}, host: {2}, already exists; its state is {3}.",
+ cluster.getClusterName(), hostVersionEntity.getRepositoryVersion().getVersion(),
+ hostEntity.getHostName(), hostVersionEntity.getState()));
+
+ if (hostVersionEntity.getState() != RepositoryVersionState.CURRENT &&
+ hostVersionDAO.findByClusterHostAndState(cluster.getClusterName(), hostEntity.getHostName(),
+ RepositoryVersionState.CURRENT).isEmpty()) {
+ hostVersionEntity.setState(RepositoryVersionState.CURRENT);
+ hostVersionDAO.merge(hostVersionEntity);
+ }
+ } else {
+ // This should only be done the first time.
+ if (!addedAtLeastOneHost) {
+ final long hostVersionIdSeq = hostVersionDAO.findMaxId("id");
+ // Safe to attempt to add the sequence if it doesn't exist already.
+ addSequence("host_version_id_seq", hostVersionIdSeq, false);
+ addedAtLeastOneHost = true;
+ }
+
+ hostVersionEntity = new HostVersionEntity(hostEntity, repoVersionEntity, RepositoryVersionState.CURRENT);
+ hostVersionDAO.create(hostVersionEntity);
+ LOG.info(MessageFormat.format("Created Host Version with ID: {0,number,#}, cluster: {1}, version: {2}, host: {3}, state: {4}.",
+ hostVersionEntity.getId(), cluster.getClusterName(), hostVersionEntity.getRepositoryVersion().getVersion(),
+ hostEntity.getHostName(), hostVersionEntity.getState()));
+ }
}
+ } else {
+ LOG.info(MessageFormat.format("Not inserting any Host Version records since cluster {0} does not have any hosts.",
+ cluster.getClusterName()));
}
- } else {
- LOG.info(MessageFormat.format("Not inserting any Host Version records since cluster {0} does not have any hosts.",
- cluster.getClusterName()));
}
}
}
@@ -1017,7 +1003,14 @@ public class UpgradeCatalog220 extends AbstractUpgradeCatalog {
updateConfigurationPropertiesForCluster(cluster, HIVE_SITE_CONFIG, updates, true, false);
}
}
- StackId stackId = cluster.getCurrentStackVersion();
+
+ Service service = cluster.getServices().get("HIVE");
+
+ if (null == service) {
+ continue;
+ }
+
+ StackId stackId = service.getDesiredStackId();
boolean isStackNotLess23 = (stackId != null && stackId.getStackName().equals("HDP") &&
VersionUtils.compareVersions(stackId.getStackVersion(), "2.3") >= 0);
@@ -1037,7 +1030,6 @@ public class UpgradeCatalog220 extends AbstractUpgradeCatalog {
updateConfigurationPropertiesForCluster(cluster, HIVE_ENV_CONFIG, hiveEnvProps, true, true);
}
}
-
}
}
@@ -1046,7 +1038,13 @@ public class UpgradeCatalog220 extends AbstractUpgradeCatalog {
boolean updateConfig = false;
for (final Cluster cluster : getCheckedClusterMap(ambariManagementController.getClusters()).values()) {
- StackId stackId = cluster.getCurrentStackVersion();
+ Service service = cluster.getServices().get("HBASE");
+
+ if (null == service) {
+ continue;
+ }
+
+ StackId stackId = service.getDesiredStackId();
Config hbaseEnvConfig = cluster.getDesiredConfigByType(HBASE_ENV_CONFIG);
if (hbaseEnvConfig != null) {
String content = hbaseEnvConfig.getProperties().get(CONTENT_PROPERTY);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog221.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog221.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog221.java
index c235cf8..d9afec8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog221.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog221.java
@@ -36,6 +36,7 @@ import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.utils.VersionUtils;
import org.apache.commons.lang.StringUtils;
@@ -381,6 +382,12 @@ public class UpgradeCatalog221 extends AbstractUpgradeCatalog {
protected void updateTezConfigs() throws AmbariException {
AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
for (final Cluster cluster : getCheckedClusterMap(ambariManagementController.getClusters()).values()) {
+ Service service = cluster.getServices().get("TEZ");
+
+ if (null == service) {
+ continue;
+ }
+
Config tezSiteProps = cluster.getDesiredConfigByType(TEZ_SITE);
if (tezSiteProps != null) {
@@ -388,8 +395,8 @@ public class UpgradeCatalog221 extends AbstractUpgradeCatalog {
String tezCountersMaxProperty = tezSiteProps.getProperties().get(TEZ_COUNTERS_MAX);
String tezCountersMaxGroupesProperty = tezSiteProps.getProperties().get(TEZ_COUNTERS_MAX_GROUPS);
- StackId stackId = cluster.getCurrentStackVersion();
- boolean isStackNotLess23 = (stackId != null && stackId.getStackName().equals("HDP") &&
+ StackId stackId = service.getDesiredStackId();
+ boolean isStackNotLess23 = (stackId.getStackName().equals("HDP") &&
VersionUtils.compareVersions(stackId.getStackVersion(), "2.3") >= 0);
if (isStackNotLess23) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java
index f0f9253..9632cd1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java
@@ -26,6 +26,7 @@ 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;
@@ -240,13 +241,22 @@ public class UpgradeCatalog222 extends AbstractUpgradeCatalog {
Map<String, Cluster> clusterMap = getCheckedClusterMap(ambariManagementController.getClusters());
for (final Cluster cluster : clusterMap.values()) {
+
+ Service service = cluster.getServices().get("HBASE");
+
+ if (null == service) {
+ continue;
+ }
+
+ StackId stackId = service.getDesiredStackId();
+
Config hbaseSite = cluster.getDesiredConfigByType("hbase-site");
boolean rangerHbasePluginEnabled = isConfigEnabled(cluster,
AbstractUpgradeCatalog.CONFIGURATION_TYPE_RANGER_HBASE_PLUGIN_PROPERTIES,
AbstractUpgradeCatalog.PROPERTY_RANGER_HBASE_PLUGIN_ENABLED);
if (hbaseSite != null && rangerHbasePluginEnabled) {
Map<String, String> updates = new HashMap<>();
- String stackVersion = cluster.getCurrentStackVersion().getStackVersion();
+ String stackVersion = stackId.getStackVersion();
if (VersionUtils.compareVersions(stackVersion, "2.2") == 0) {
if (hbaseSite.getProperties().containsKey(HBASE_SITE_HBASE_COPROCESSOR_MASTER_CLASSES)) {
updates.put(HBASE_SITE_HBASE_COPROCESSOR_MASTER_CLASSES,
@@ -572,6 +582,7 @@ public class UpgradeCatalog222 extends AbstractUpgradeCatalog {
return Collections.emptyMap();
}
+ @Override
protected void updateWidgetDefinitionsForService(String serviceName, Map<String, List<String>> widgetMap,
Map<String, String> sectionLayoutMap) throws AmbariException {
AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
@@ -582,74 +593,86 @@ public class UpgradeCatalog222 extends AbstractUpgradeCatalog {
Clusters clusters = ambariManagementController.getClusters();
+
+
Map<String, Cluster> clusterMap = getCheckedClusterMap(clusters);
for (final Cluster cluster : clusterMap.values()) {
long clusterID = cluster.getClusterId();
- StackId stackId = cluster.getDesiredStackVersion();
- Map<String, Object> widgetDescriptor = null;
- StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
- ServiceInfo serviceInfo = stackInfo.getService(serviceName);
- if (serviceInfo == null) {
- LOG.info("Skipping updating widget definition, because " + serviceName + " service is not present in cluster " +
- "cluster_name= " + cluster.getClusterName());
- continue;
- }
- for (String section : widgetMap.keySet()) {
- List<String> widgets = widgetMap.get(section);
- for (String widgetName : widgets) {
- List<WidgetEntity> widgetEntities = widgetDAO.findByName(clusterID,
- widgetName, "ambari", section);
-
- if (widgetEntities != null && widgetEntities.size() > 0) {
- WidgetEntity entityToUpdate = null;
- if (widgetEntities.size() > 1) {
- LOG.info("Found more that 1 entity with name = "+ widgetName +
- " for cluster = " + cluster.getClusterName() + ", skipping update.");
- } else {
- entityToUpdate = widgetEntities.iterator().next();
- }
- if (entityToUpdate != null) {
- LOG.info("Updating widget: " + entityToUpdate.getWidgetName());
- // Get the definition from widgets.json file
- WidgetLayoutInfo targetWidgetLayoutInfo = null;
- File widgetDescriptorFile = serviceInfo.getWidgetsDescriptorFile();
- if (widgetDescriptorFile != null && widgetDescriptorFile.exists()) {
- try {
- widgetDescriptor = gson.fromJson(new FileReader(widgetDescriptorFile), widgetLayoutType);
- } catch (Exception ex) {
- String msg = "Error loading widgets from file: " + widgetDescriptorFile;
- LOG.error(msg, ex);
- widgetDescriptor = null;
- }
+ Set<StackId> stackIds = new HashSet<>();
+ for (Service service : cluster.getServices().values()) {
+ StackId stackId = service.getDesiredStackId();
+ if (stackIds.contains(stackId)) {
+ continue;
+ } else {
+ stackIds.add(stackId);
+ }
+
+ Map<String, Object> widgetDescriptor = null;
+ StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
+ ServiceInfo serviceInfo = stackInfo.getService(serviceName);
+ if (serviceInfo == null) {
+ LOG.info("Skipping updating widget definition, because " + serviceName + " service is not present in cluster " +
+ "cluster_name= " + cluster.getClusterName());
+ continue;
+ }
+
+ for (String section : widgetMap.keySet()) {
+ List<String> widgets = widgetMap.get(section);
+ for (String widgetName : widgets) {
+ List<WidgetEntity> widgetEntities = widgetDAO.findByName(clusterID,
+ widgetName, "ambari", section);
+
+ if (widgetEntities != null && widgetEntities.size() > 0) {
+ WidgetEntity entityToUpdate = null;
+ if (widgetEntities.size() > 1) {
+ LOG.info("Found more that 1 entity with name = "+ widgetName +
+ " for cluster = " + cluster.getClusterName() + ", skipping update.");
+ } else {
+ entityToUpdate = widgetEntities.iterator().next();
}
- if (widgetDescriptor != null) {
- LOG.debug("Loaded widget descriptor: " + widgetDescriptor);
- for (Object artifact : widgetDescriptor.values()) {
- List<WidgetLayout> widgetLayouts = (List<WidgetLayout>) artifact;
- for (WidgetLayout widgetLayout : widgetLayouts) {
- if (widgetLayout.getLayoutName().equals(sectionLayoutMap.get(section))) {
- for (WidgetLayoutInfo layoutInfo : widgetLayout.getWidgetLayoutInfoList()) {
- if (layoutInfo.getWidgetName().equals(widgetName)) {
- targetWidgetLayoutInfo = layoutInfo;
+ if (entityToUpdate != null) {
+ LOG.info("Updating widget: " + entityToUpdate.getWidgetName());
+ // Get the definition from widgets.json file
+ WidgetLayoutInfo targetWidgetLayoutInfo = null;
+ File widgetDescriptorFile = serviceInfo.getWidgetsDescriptorFile();
+ if (widgetDescriptorFile != null && widgetDescriptorFile.exists()) {
+ try {
+ widgetDescriptor = gson.fromJson(new FileReader(widgetDescriptorFile), widgetLayoutType);
+ } catch (Exception ex) {
+ String msg = "Error loading widgets from file: " + widgetDescriptorFile;
+ LOG.error(msg, ex);
+ widgetDescriptor = null;
+ }
+ }
+ if (widgetDescriptor != null) {
+ LOG.debug("Loaded widget descriptor: " + widgetDescriptor);
+ for (Object artifact : widgetDescriptor.values()) {
+ List<WidgetLayout> widgetLayouts = (List<WidgetLayout>) artifact;
+ for (WidgetLayout widgetLayout : widgetLayouts) {
+ if (widgetLayout.getLayoutName().equals(sectionLayoutMap.get(section))) {
+ for (WidgetLayoutInfo layoutInfo : widgetLayout.getWidgetLayoutInfoList()) {
+ if (layoutInfo.getWidgetName().equals(widgetName)) {
+ targetWidgetLayoutInfo = layoutInfo;
+ }
}
}
}
}
}
- }
- if (targetWidgetLayoutInfo != null) {
- entityToUpdate.setMetrics(gson.toJson(targetWidgetLayoutInfo.getMetricsInfo()));
- entityToUpdate.setWidgetValues(gson.toJson(targetWidgetLayoutInfo.getValues()));
- if ("HBASE".equals(serviceName) && "Reads and Writes".equals(widgetName)) {
- entityToUpdate.setDescription(targetWidgetLayoutInfo.getDescription());
- LOG.info("Update description for HBase Reads and Writes widget");
+ if (targetWidgetLayoutInfo != null) {
+ entityToUpdate.setMetrics(gson.toJson(targetWidgetLayoutInfo.getMetricsInfo()));
+ entityToUpdate.setWidgetValues(gson.toJson(targetWidgetLayoutInfo.getValues()));
+ if ("HBASE".equals(serviceName) && "Reads and Writes".equals(widgetName)) {
+ entityToUpdate.setDescription(targetWidgetLayoutInfo.getDescription());
+ LOG.info("Update description for HBase Reads and Writes widget");
+ }
+ widgetDAO.merge(entityToUpdate);
+ } else {
+ LOG.warn("Unable to find widget layout info for " + widgetName +
+ " in the stack: " + stackId);
}
- widgetDAO.merge(entityToUpdate);
- } else {
- LOG.warn("Unable to find widget layout info for " + widgetName +
- " in the stack: " + stackId);
}
}
}
@@ -664,7 +687,14 @@ public class UpgradeCatalog222 extends AbstractUpgradeCatalog {
Config hiveSiteConfig = cluster.getDesiredConfigByType(HIVE_SITE_CONFIG);
Config atlasConfig = cluster.getDesiredConfigByType(ATLAS_APPLICATION_PROPERTIES_CONFIG);
- StackId stackId = cluster.getCurrentStackVersion();
+ Service service = cluster.getServices().get("ATLAS");
+
+ if (null == service) {
+ continue;
+ }
+
+ StackId stackId = service.getDesiredStackId();
+
boolean isStackNotLess23 = (stackId != null && stackId.getStackName().equals("HDP") &&
VersionUtils.compareVersions(stackId.getStackVersion(), "2.3") >= 0);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
index 8488795..1e8b51b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
@@ -84,6 +84,7 @@ import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.PropertyInfo;
import org.apache.ambari.server.state.RepositoryType;
import org.apache.ambari.server.state.SecurityType;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
@@ -1926,7 +1927,7 @@ public class UpgradeCatalog240 extends AbstractUpgradeCatalog {
}
}
}
-
+
protected void updateKAFKAConfigs() throws AmbariException {
AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
Clusters clusters = ambariManagementController.getClusters();
@@ -2217,13 +2218,28 @@ public class UpgradeCatalog240 extends AbstractUpgradeCatalog {
Clusters clusters = ambariManagementController.getClusters();
Map<String, Cluster> clusterMap = getCheckedClusterMap(clusters);
+
+ Set<StackId> stackIds = new HashSet<>();
+
for (final Cluster cluster : clusterMap.values()) {
Config config;
+ Service service = cluster.getServices().get("KERBEROS");
+ if (null == service) {
+ continue;
+ }
+
+ StackId stackId = service.getDesiredStackId();
+
+ if (stackIds.contains(stackId)) {
+ continue;
+ } else {
+ stackIds.add(stackId);
+ }
+
// Find the new stack default value for krb5-conf/content
String newDefault = null;
AmbariMetaInfo metaInfo = ambariManagementController.getAmbariMetaInfo();
- StackId stackId = cluster.getCurrentStackVersion();
StackInfo stackInfo = ((metaInfo == null) || (stackId == null))
? null
: metaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
@@ -2729,11 +2745,16 @@ public class UpgradeCatalog240 extends AbstractUpgradeCatalog {
if (null != clusterMap && !clusterMap.isEmpty()) {
for (final Cluster cluster : clusterMap.values()) {
- Set<String> installedServices = cluster.getServices().keySet();
- StackId stackId = cluster.getCurrentStackVersion();
+ Service service = cluster.getServices().get("HBASE");
+
+ if (null == service) {
+ continue;
+ }
+
+ StackId stackId = service.getDesiredStackId();
// HBase is installed and Kerberos is enabled
- if (installedServices.contains("HBASE") && SecurityType.KERBEROS == cluster.getSecurityType() && isAtLeastHdp25(stackId)) {
+ if (SecurityType.KERBEROS == cluster.getSecurityType() && isAtLeastHdp25(stackId)) {
Config hbaseSite = cluster.getDesiredConfigByType(HBASE_SITE_CONFIG);
if (null != hbaseSite) {
Map<String, String> hbaseSiteProperties = hbaseSite.getProperties();
@@ -2935,11 +2956,16 @@ public class UpgradeCatalog240 extends AbstractUpgradeCatalog {
if (null != clusterMap && !clusterMap.isEmpty()) {
for (final Cluster cluster : clusterMap.values()) {
- Set<String> installedServices = cluster.getServices().keySet();
- StackId stackId = cluster.getCurrentStackVersion();
+
+ Service service = cluster.getServices().get("HBASE");
+ if (null == service) {
+ continue;
+ }
+
+ StackId stackId = service.getDesiredStackId();
// HBase is installed and Kerberos is enabled
- if (installedServices.contains("HBASE") && SecurityType.KERBEROS == cluster.getSecurityType()) {
+ if (SecurityType.KERBEROS == cluster.getSecurityType()) {
Config hbaseSite = cluster.getDesiredConfigByType(HBASE_SITE_CONFIG);
if (null != hbaseSite) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
index 0125d54..9b4f2f6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
@@ -966,9 +966,14 @@ public class ViewRegistry {
try {
org.apache.ambari.server.state.Cluster cluster = clusters.getClusterById(clusterId);
String clusterName = cluster.getClusterName();
-
- StackId stackId = cluster.getCurrentStackVersion();
+
+ Set<StackId> stackIds = new HashSet<>();
Set<String> serviceNames = cluster.getServices().keySet();
+
+ for (String serviceName : serviceNames) {
+ Service service = cluster.getService(serviceName);
+ stackIds.add(service.getDesiredStackId());
+ }
for (ViewEntity viewEntity : getDefinitions()) {
@@ -980,13 +985,15 @@ public class ViewRegistry {
roles.addAll(autoConfig.getRoles());
}
- try {
- if (checkAutoInstanceConfig(autoConfig, stackId, event.getServiceName(), serviceNames)) {
- installAutoInstance(clusterId, clusterName, cluster.getService(event.getServiceName()), viewEntity, viewName, viewConfig, autoConfig, roles);
+ for (StackId stackId : stackIds) {
+ try {
+ if (checkAutoInstanceConfig(autoConfig, stackId, event.getServiceName(), serviceNames)) {
+ installAutoInstance(clusterId, clusterName, cluster.getService(event.getServiceName()), viewEntity, viewName, viewConfig, autoConfig, roles);
+ }
+ } catch (Exception e) {
+ LOG.error("Can't auto create instance of view " + viewName + " for cluster " + clusterName +
+ ". Caught exception :" + e.getMessage(), e);
}
- } catch (Exception e) {
- LOG.error("Can't auto create instance of view " + viewName + " for cluster " + clusterName +
- ". Caught exception :" + e.getMessage(), e);
}
}
} catch (AmbariException e) {
@@ -1937,12 +1944,12 @@ public class ViewRegistry {
String clusterName = cluster.getClusterName();
Long clusterId = cluster.getClusterId();
- StackId stackId = cluster.getCurrentStackVersion();
Set<String> serviceNames = cluster.getServices().keySet();
for (String service : services) {
try {
-
+ Service svc = cluster.getService(service);
+ StackId stackId = svc.getDesiredStackId();
if (checkAutoInstanceConfig(autoInstanceConfig, stackId, service, serviceNames)) {
installAutoInstance(clusterId, clusterName, cluster.getService(service), viewEntity, viewName, viewConfig, autoInstanceConfig, roles);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
index 89ec32b..1212115 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
@@ -36,6 +36,8 @@ import org.apache.ambari.server.agent.AgentCommand.AgentCommandType;
import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.OrmTestHelper;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ConfigFactory;
@@ -45,14 +47,13 @@ import org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent
import org.apache.ambari.server.utils.StageUtils;
import org.codehaus.jettison.json.JSONException;
import org.junit.AfterClass;
+import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
-import junit.framework.Assert;
-
public class ExecutionCommandWrapperTest {
private static final String HOST1 = "dev01.ambari.apache.org";
@@ -164,6 +165,12 @@ public class ExecutionCommandWrapperTest {
@Test
public void testGetExecutionCommand() throws JSONException, AmbariException {
+ Cluster cluster = clusters.getCluster(CLUSTER1);
+
+ OrmTestHelper helper = injector.getInstance(OrmTestHelper.class);
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(cluster);
+
+ cluster.addService("HDFS", repositoryVersion);
Map<String, Map<String, String>> confs = new HashMap<>();
Map<String, String> configurationsGlobal = new HashMap<>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
index 76de02c..9fc5858 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
@@ -89,6 +89,7 @@ import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
@@ -1311,27 +1312,15 @@ public class TestHeartbeatHandler {
@Test
public void testComponents() throws Exception,
InvalidStateTransitionException {
+
ComponentsResponse expected = new ComponentsResponse();
StackId dummyStackId = new StackId(DummyStackId);
Map<String, Map<String, String>> dummyComponents = new HashMap<>();
Map<String, String> dummyCategoryMap = new HashMap<>();
- dummyCategoryMap.put("PIG", "CLIENT");
- dummyComponents.put("PIG", dummyCategoryMap);
-
- dummyCategoryMap = new HashMap<>();
- dummyCategoryMap.put("MAPREDUCE_CLIENT", "CLIENT");
- dummyCategoryMap.put("JOBTRACKER", "MASTER");
- dummyCategoryMap.put("TASKTRACKER", "SLAVE");
- dummyComponents.put("MAPREDUCE", dummyCategoryMap);
dummyCategoryMap = new HashMap<>();
- dummyCategoryMap.put("DATANODE2", "SLAVE");
dummyCategoryMap.put("NAMENODE", "MASTER");
- dummyCategoryMap.put("HDFS_CLIENT", "CLIENT");
- dummyCategoryMap.put("DATANODE1", "SLAVE");
- dummyCategoryMap.put("SECONDARY_NAMENODE", "MASTER");
- dummyCategoryMap.put("DATANODE", "SLAVE");
dummyComponents.put("HDFS", dummyCategoryMap);
expected.setClusterName(DummyCluster);
@@ -1339,7 +1328,22 @@ public class TestHeartbeatHandler {
expected.setStackVersion(dummyStackId.getStackVersion());
expected.setComponents(dummyComponents);
- heartbeatTestHelper.getDummyCluster();
+ Cluster cluster = heartbeatTestHelper.getDummyCluster();
+ Service service = EasyMock.createNiceMock(Service.class);
+ expect(service.getName()).andReturn("HDFS").atLeastOnce();
+
+ Map<String, ServiceComponent> componentMap = new HashMap<>();
+ ServiceComponent nnComponent = EasyMock.createNiceMock(ServiceComponent.class);
+ expect(nnComponent.getName()).andReturn("NAMENODE").atLeastOnce();
+ expect(nnComponent.getDesiredStackId()).andReturn(dummyStackId).atLeastOnce();
+ componentMap.put("NAMENODE", nnComponent);
+
+ expect(service.getServiceComponents()).andReturn(componentMap);
+
+ replay(service, nnComponent);
+
+ cluster.addService(service);
+
HeartBeatHandler handler = heartbeatTestHelper.getHeartBeatHandler(
actionManagerTestHelper.getMockActionManager(),
new ActionQueue());
@@ -1351,8 +1355,6 @@ public class TestHeartbeatHandler {
}
assertEquals(expected.getClusterName(), actual.getClusterName());
- assertEquals(expected.getStackName(), actual.getStackName());
- assertEquals(expected.getStackVersion(), actual.getStackVersion());
assertEquals(expected.getComponents(), actual.getComponents());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java
index 7b7d817..1e87146 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java
@@ -106,14 +106,16 @@ public class HostsMasterMaintenanceCheckTest {
Mockito.when(repositoryVersionHelper.getUpgradePackageName(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), (UpgradeType) Mockito.anyObject())).thenReturn(null);
PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- hostsMasterMaintenanceCheck.perform(check, new PrereqCheckRequest("cluster"));
+ PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ request.setSourceStackId(new StackId("HDP-1.0"));
+ hostsMasterMaintenanceCheck.perform(check, request);
Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
Mockito.when(repositoryVersionHelper.getUpgradePackageName(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), (UpgradeType) Mockito.anyObject())).thenReturn(upgradePackName);
Mockito.when(ambariMetaInfo.getUpgradePacks(Mockito.anyString(), Mockito.anyString())).thenReturn(new HashMap<String, UpgradePack>());
check = new PrerequisiteCheck(null, null);
- hostsMasterMaintenanceCheck.perform(check, new PrereqCheckRequest("cluster"));
+ hostsMasterMaintenanceCheck.perform(check, request);
Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
final Map<String, UpgradePack> upgradePacks = new HashMap<>();
@@ -126,7 +128,7 @@ public class HostsMasterMaintenanceCheckTest {
Mockito.when(clusters.getHostsForCluster(Mockito.anyString())).thenReturn(new HashMap<String, Host>());
check = new PrerequisiteCheck(null, null);
- hostsMasterMaintenanceCheck.perform(check, new PrereqCheckRequest("cluster"));
+ hostsMasterMaintenanceCheck.perform(check, request);
Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/checks/RangerPasswordCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/RangerPasswordCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/RangerPasswordCheckTest.java
index 91b3296..c69c4e5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/RangerPasswordCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/RangerPasswordCheckTest.java
@@ -135,14 +135,18 @@ public class RangerPasswordCheckTest {
public void testApplicable() throws Exception {
final Service service = EasyMock.createMock(Service.class);
+
Map<String, Service> services = new HashMap<>();
services.put("RANGER", service);
+ expect(service.getDesiredStackId()).andReturn(new StackId("HDP-2.3")).anyTimes();
+
Cluster cluster = m_clusters.getCluster("cluster");
EasyMock.reset(cluster);
expect(cluster.getServices()).andReturn(services).anyTimes();
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP-2.3")).anyTimes();
- replay(cluster);
+ expect(cluster.getService("RANGER")).andReturn(service).atLeastOnce();
+
+ replay(cluster, service);
PrereqCheckRequest request = new PrereqCheckRequest("cluster");
request.setSourceStackId(new StackId("HDP-2.3"));
@@ -152,10 +156,11 @@ public class RangerPasswordCheckTest {
request.setSourceStackId(new StackId("HDP-2.2"));
assertFalse(m_rpc.isApplicable(request));
- EasyMock.reset(cluster);
+ EasyMock.reset(cluster, service);
expect(cluster.getServices()).andReturn(services).anyTimes();
- expect(cluster.getCurrentStackVersion()).andReturn(new StackId("WILDSTACK-2.0")).anyTimes();
- replay(cluster);
+ expect(cluster.getService("RANGER")).andReturn(service).atLeastOnce();
+ expect(service.getDesiredStackId()).andReturn(new StackId("WILDSTACK-2.0")).anyTimes();
+ replay(cluster, service);
request = new PrereqCheckRequest("cluster");
request.setSourceStackId(new StackId("HDP-2.2"));
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
index 996f349..4d8a109 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
@@ -45,7 +45,6 @@ import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
-
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -97,13 +96,13 @@ public class ServiceCheckValidityCheckTest {
}
};
-
Cluster cluster = mock(Cluster.class);
when(clusters.getCluster(CLUSTER_NAME)).thenReturn(cluster);
when(cluster.getClusterId()).thenReturn(CLUSTER_ID);
when(cluster.getServices()).thenReturn(ImmutableMap.of(SERVICE_NAME, service));
when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP", "2.2"));
when(service.getName()).thenReturn(SERVICE_NAME);
+ when(service.getDesiredStackId()).thenReturn(new StackId("HDP", "2.2"));
serviceCheckValidityCheck.ambariMetaInfo = new Provider<AmbariMetaInfo>() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
index 1368b8d..45c24d3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
@@ -129,6 +129,10 @@ public class ServicesUpCheckTest {
Mockito.when(tezService.isClientOnlyService()).thenReturn(true);
Mockito.when(amsService.isClientOnlyService()).thenReturn(false);
+ Mockito.when(hdfsService.getDesiredStackId()).thenReturn(new StackId("HDP", "2.2"));
+ Mockito.when(tezService.getDesiredStackId()).thenReturn(new StackId("HDP", "2.2"));
+ Mockito.when(amsService.getDesiredStackId()).thenReturn(new StackId("HDP", "2.2"));
+
Mockito.when(cluster.getServices()).thenReturn(clusterServices);
Mockito.when(ambariMetaInfo.getComponent(Mockito.anyString(), Mockito.anyString(),
@@ -246,6 +250,7 @@ public class ServicesUpCheckTest {
Mockito.when(hcs.getDesiredState()).thenReturn(State.INSTALLED);
Mockito.when(hcs.getCurrentState()).thenReturn(State.STARTED);
}
+
PrerequisiteCheck check = new PrerequisiteCheck(null, null);
servicesUpCheck.perform(check, new PrereqCheckRequest("cluster"));
Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/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 0735d5a..cd5649f 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
@@ -110,6 +110,7 @@ import org.junit.Test;
import org.springframework.security.core.context.SecurityContextHolder;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.inject.Binder;
@@ -1043,13 +1044,10 @@ public class AmbariManagementControllerImplTest {
put("host1", host);
}}).anyTimes();
- expect(cluster.getDesiredStackVersion()).andReturn(stack);
- expect(stack.getStackName()).andReturn("stackName");
- expect(stack.getStackVersion()).andReturn("stackVersion");
-
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
+ expect(cluster.getServiceByComponentName("component1")).andReturn(service);
expect(service.getServiceComponent("component1")).andReturn(component);
+ expect(service.getName()).andReturn("service1");
expect(component.getName()).andReturn("component1");
expect(component.getServiceComponentHosts()).andReturn(
new HashMap<String, ServiceComponentHost>() {{
@@ -1109,13 +1107,15 @@ public class AmbariManagementControllerImplTest {
expect(clusters.getCluster("cluster1")).andReturn(cluster);
expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster));
- expect(cluster.getDesiredStackVersion()).andReturn(stack);
- expect(stack.getStackName()).andReturn("stackName");
- expect(stack.getStackVersion()).andReturn("stackVersion");
-
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
+// expect(cluster.getDesiredStackVersion()).andReturn(stack);
+// expect(stack.getStackName()).andReturn("stackName");
+// expect(stack.getStackVersion()).andReturn("stackVersion");
+//
+// expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
+ expect(cluster.getServiceByComponentName("component1")).andReturn(service);
expect(service.getServiceComponent("component1")).andReturn(component);
+ expect(service.getName()).andReturn("service1");
expect(component.getName()).andReturn("component1").anyTimes();
expect(component.getServiceComponentHosts()).andReturn(null);
@@ -1181,14 +1181,16 @@ public class AmbariManagementControllerImplTest {
put("host1", host);
}}).anyTimes();
- expect(cluster.getDesiredStackVersion()).andReturn(stack);
+// expect(cluster.getDesiredStackVersion()).andReturn(stack);
+// expect(stack.getStackName()).andReturn("stackName");
+// expect(stack.getStackVersion()).andReturn("stackVersion");
+//
+// expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
expect(cluster.getClusterName()).andReturn("cl1");
- expect(stack.getStackName()).andReturn("stackName");
- expect(stack.getStackVersion()).andReturn("stackVersion");
-
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
+ expect(cluster.getServiceByComponentName("component1")).andReturn(service);
expect(service.getServiceComponent("component1")).andReturn(component);
+ expect(service.getName()).andReturn("service1");
expect(component.getName()).andReturn("component1").anyTimes();
expect(component.getServiceComponentHosts()).andReturn(new HashMap<String, ServiceComponentHost>() {{
put("host1", componentHost1);
@@ -1256,14 +1258,11 @@ public class AmbariManagementControllerImplTest {
put("host1", host);
}}).anyTimes();
- expect(cluster.getDesiredStackVersion()).andReturn(stack);
expect(cluster.getClusterName()).andReturn("cl1");
- expect(stack.getStackName()).andReturn("stackName");
- expect(stack.getStackVersion()).andReturn("stackVersion");
-
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
+ expect(cluster.getServiceByComponentName("component1")).andReturn(service);
expect(service.getServiceComponent("component1")).andReturn(component);
+ expect(service.getName()).andReturn("service1");
expect(component.getName()).andReturn("component1").anyTimes();
expect(component.getServiceComponentHosts()).andReturn(new HashMap<String, ServiceComponentHost>() {{
put("host1", componentHost1);
@@ -1298,7 +1297,7 @@ public class AmbariManagementControllerImplTest {
Cluster cluster = createNiceMock(Cluster.class);
final Host host = createNiceMock(Host.class);
Service service = createNiceMock(Service.class);
- ServiceComponent component = createNiceMock(ServiceComponent.class);
+ ServiceComponent component1 = createNiceMock(ServiceComponent.class);
ServiceComponent component2 = createNiceMock(ServiceComponent.class);
ServiceComponent component3 = createNiceMock(ServiceComponent.class);
@@ -1345,27 +1344,24 @@ public class AmbariManagementControllerImplTest {
expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster)).anyTimes();
expect(cluster.getService("service1")).andReturn(service).times(3);
- expect(cluster.getDesiredStackVersion()).andReturn(stack).anyTimes();
- expect(stack.getStackName()).andReturn("stackName").anyTimes();
- expect(stack.getStackVersion()).andReturn("stackVersion").anyTimes();
-
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
- expect(service.getServiceComponent("component1")).andReturn(component);
- expect(component.getName()).andReturn("component1");
- expect(component.getServiceComponentHosts()).andReturn(
+ expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+ expect(service.getServiceComponent("component1")).andReturn(component1);
+ expect(service.getName()).andReturn("service1").anyTimes();
+ expect(component1.getName()).andReturn("component1");
+ expect(component1.getServiceComponentHosts()).andReturn(
new HashMap<String, ServiceComponentHost>() {{
put("host1", componentHost1);
}});
expect(componentHost1.convertToResponse(null)).andReturn(response1);
expect(componentHost1.getHostName()).andReturn("host1");
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component2")).andReturn("service1");
+ expect(cluster.getServiceByComponentName("component2")).andReturn(service);
expect(service.getServiceComponent("component2")).andReturn(component2);
expect(component2.getName()).andReturn("component2");
expect(component2.getServiceComponentHosts()).andReturn(null);
expect(componentHost2.getHostName()).andReturn("host1");
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component3")).andReturn("service1");
+ expect(cluster.getServiceByComponentName("component3")).andReturn(service);
expect(service.getServiceComponent("component3")).andReturn(component3);
expect(component3.getName()).andReturn("component3");
expect(component3.getServiceComponentHosts()).andReturn(
@@ -1376,7 +1372,7 @@ public class AmbariManagementControllerImplTest {
// replay mocks
replay(stateHelper, injector, clusters, cluster, host, stack,
- ambariMetaInfo, service, component, component2, component3, componentHost1,
+ ambariMetaInfo, service, component1, component2, component3, componentHost1,
componentHost2, response1, response2);
//test
@@ -1391,7 +1387,7 @@ public class AmbariManagementControllerImplTest {
assertTrue(setResponses.contains(response1));
assertTrue(setResponses.contains(response2));
- verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, component, component2, component3,
+ verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, component1, component2, component3,
componentHost1, componentHost2, response1, response2);
}
@@ -1405,7 +1401,7 @@ public class AmbariManagementControllerImplTest {
Cluster cluster = createNiceMock(Cluster.class);
final Host host = createNiceMock(Host.class);
Service service = createNiceMock(Service.class);
- ServiceComponent component = createNiceMock(ServiceComponent.class);
+ ServiceComponent component1 = createNiceMock(ServiceComponent.class);
ServiceComponent component2 = createNiceMock(ServiceComponent.class);
ServiceComponent component3 = createNiceMock(ServiceComponent.class);
@@ -1452,22 +1448,23 @@ public class AmbariManagementControllerImplTest {
put("host1", host);
}}).anyTimes();
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
+// expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
- expect(service.getServiceComponent("component1")).andReturn(component);
- expect(component.getName()).andReturn("component1");
- expect(component.getServiceComponentHosts()).andReturn(new
+ expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+ expect(service.getName()).andReturn("service1").atLeastOnce();
+ expect(service.getServiceComponent("component1")).andReturn(component1);
+ expect(component1.getName()).andReturn("component1");
+ expect(component1.getServiceComponentHosts()).andReturn(new
HashMap<String, ServiceComponentHost>() {{
put("host1", componentHost1);
}});
expect(componentHost1.convertToResponse(null)).andReturn(response1);
expect(componentHost1.getHostName()).andReturn("host1");
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component2")).andReturn("service2");
- expect(cluster.getService("service2")).andThrow(new ServiceNotFoundException("cluster1", "service2"));
+ expect(cluster.getServiceByComponentName("component2")).andThrow(new ServiceNotFoundException("cluster1", "service2"));
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component3")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
+ expect(cluster.getServiceByComponentName("component3")).andReturn(service);
expect(service.getServiceComponent("component3")).andReturn(component3);
expect(component3.getName()).andReturn("component3");
expect(component3.getServiceComponentHosts()).andReturn(new
@@ -1479,7 +1476,7 @@ public class AmbariManagementControllerImplTest {
// replay mocks
replay(maintHelper, injector, clusters, cluster, host, stack, ambariMetaInfo,
- service, component, component2, component3, componentHost1,
+ service, component1, component2, component3, componentHost1,
componentHost2, response1, response2);
//test
@@ -1494,7 +1491,7 @@ public class AmbariManagementControllerImplTest {
assertTrue(setResponses.contains(response1));
assertTrue(setResponses.contains(response2));
- verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, component, component2, component3,
+ verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, component1, component2, component3,
componentHost1, componentHost2, response1, response2);
}
@@ -1549,39 +1546,42 @@ public class AmbariManagementControllerImplTest {
// getHostComponent
expect(clusters.getCluster("cluster1")).andReturn(cluster).times(3);
expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster)).anyTimes();
- expect(clusters.getHostsForCluster((String) anyObject())).andReturn(
- new HashMap<String, Host>() {{
- put("host1", host);
- }}).anyTimes();
+ expect(clusters.getHostsForCluster((String) anyObject())).andReturn(ImmutableMap.<String, Host>builder()
+ .put("host1", host)
+ .build()).anyTimes();
expect(cluster.getDesiredStackVersion()).andReturn(stack).anyTimes();
expect(stack.getStackName()).andReturn("stackName").anyTimes();
expect(stack.getStackVersion()).andReturn("stackVersion").anyTimes();
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
+// expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
+ expect(cluster.getServiceByComponentName("component1")).andReturn(service);
expect(service.getServiceComponent("component1")).andReturn(component);
+ expect(service.getName()).andReturn("service1").anyTimes();
expect(component.getName()).andReturn("component1");
- expect(component.getServiceComponentHosts()).andReturn(
- new HashMap<String, ServiceComponentHost>() {{
- put("host1", componentHost1);
- }});
+ expect(component.getServiceComponentHosts()).andReturn(ImmutableMap.<String, ServiceComponentHost>builder()
+ .put("host1", componentHost1)
+ .build());
expect(componentHost1.convertToResponse(null)).andReturn(response1);
expect(componentHost1.getHostName()).andReturn("host1");
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component2")).andReturn("service2");
+// expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component2")).andReturn("service2");
expect(cluster.getService("service2")).andReturn(service2);
+ expect(cluster.getServiceByComponentName("component2")).andReturn(service2);
+ expect(service2.getName()).andReturn("service2");
expect(service2.getServiceComponent("component2")).
andThrow(new ServiceComponentNotFoundException("cluster1", "service2", "component2"));
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component3")).andReturn("service1");
+// expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component3")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
+ expect(cluster.getServiceByComponentName("component3")).andReturn(service);
expect(service.getServiceComponent("component3")).andReturn(component3);
+
expect(component3.getName()).andReturn("component3");
- expect(component3.getServiceComponentHosts()).andReturn(
- new HashMap<String, ServiceComponentHost>() {{
- put("host1", componentHost2);
- }});
+ expect(component3.getServiceComponentHosts()).andReturn(ImmutableMap.<String, ServiceComponentHost>builder()
+ .put("host1", componentHost2)
+ .build());
expect(componentHost2.convertToResponse(null)).andReturn(response2);
expect(componentHost2.getHostName()).andReturn("host1");
@@ -1664,9 +1664,10 @@ public class AmbariManagementControllerImplTest {
expect(stack.getStackName()).andReturn("stackName").anyTimes();
expect(stack.getStackVersion()).andReturn("stackVersion").anyTimes();
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
+ expect(cluster.getServiceByComponentName("component1")).andReturn(service);
expect(service.getServiceComponent("component1")).andReturn(component);
+ expect(service.getName()).andReturn("service1").anyTimes();
expect(component.getName()).andReturn("component1");
expect(component.getServiceComponentHosts()).andReturn(Collections.singletonMap("foo", componentHost1));
expect(componentHost1.convertToResponse(null)).andReturn(response1);
@@ -1674,8 +1675,8 @@ public class AmbariManagementControllerImplTest {
expect(clusters.getClustersForHost("host2")).andThrow(new HostNotFoundException("host2"));
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component3")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
+ expect(cluster.getServiceByComponentName("component3")).andReturn(service);
expect(service.getServiceComponent("component3")).andReturn(component3);
expect(component3.getName()).andReturn("component3");
expect(component3.getServiceComponentHosts()).andReturn(Collections.singletonMap("foo", componentHost2));
@@ -1860,15 +1861,12 @@ public class AmbariManagementControllerImplTest {
new HashMap<String, Host>() {{
put("host1", createNiceMock(Host.class));
}}).anyTimes();
- expect(cluster.getDesiredStackVersion()).andReturn(stack);
- expect(stack.getStackName()).andReturn("stackName");
- expect(stack.getStackVersion()).andReturn("stackVersion");
- expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1");
expect(cluster.getService("service1")).andReturn(service);
- expect(service.getServiceComponent("component1")).andReturn(component);
expect(component.getName()).andReturn("component1").anyTimes();
-
+ expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+ expect(service.getServiceComponent("component1")).andReturn(component);
+ expect(service.getName()).andReturn("service1");
expect(component.getServiceComponentHosts()).andReturn(mapHostComponents);
expect(componentHost1.convertToResponse(null)).andReturn(response1);
expect(componentHost2.convertToResponse(null)).andReturn(response2);
@@ -2076,6 +2074,7 @@ public class AmbariManagementControllerImplTest {
expect(configuration.getDatabaseConnectorNames()).andReturn(new HashMap<String, String>()).anyTimes();
expect(configuration.getPreviousDatabaseConnectorNames()).andReturn(new HashMap<String, String>()).anyTimes();
expect(repositoryVersionEntity.getVersion()).andReturn("1234").anyTimes();
+ expect(repositoryVersionEntity.getStackId()).andReturn(stackId).anyTimes();
expect(configHelper.getPropertyValuesWithPropertyType(stackId,
PropertyInfo.PropertyType.NOT_MANAGED_HDFS_PATH, cluster, desiredConfigs)).andReturn(
notManagedHdfsPathSet);
@@ -2117,10 +2116,10 @@ public class AmbariManagementControllerImplTest {
Map<String, String> defaultHostParams = helper.createDefaultHostParams(cluster, repositoryVersionEntity);
- assertEquals(defaultHostParams.size(), 15);
- assertEquals(defaultHostParams.get(DB_DRIVER_FILENAME), MYSQL_JAR);
- assertEquals(defaultHostParams.get(STACK_NAME), SOME_STACK_NAME);
- assertEquals(defaultHostParams.get(STACK_VERSION), SOME_STACK_VERSION);
+ assertEquals(15, defaultHostParams.size());
+ assertEquals(MYSQL_JAR, defaultHostParams.get(DB_DRIVER_FILENAME));
+ assertEquals(SOME_STACK_NAME, defaultHostParams.get(STACK_NAME));
+ assertEquals(SOME_STACK_VERSION, defaultHostParams.get(STACK_VERSION));
assertEquals("true", defaultHostParams.get(HOST_SYS_PREPPED));
assertEquals("8", defaultHostParams.get(JAVA_VERSION));
assertNotNull(defaultHostParams.get(NOT_MANAGED_HDFS_PATH_LIST));
@@ -2288,7 +2287,6 @@ public class AmbariManagementControllerImplTest {
dummyRepoInfo.setRepoName("repo_name");
expect(clusters.getCluster("c1")).andReturn(cluster).anyTimes();
- expect(cluster.getCurrentStackVersion()).andReturn(stackId);
expect(service.getName()).andReturn("HDFS").anyTimes();
Map<String, ServiceComponent> serviceComponents = new HashMap<>();
@@ -2305,7 +2303,9 @@ public class AmbariManagementControllerImplTest {
Set<String> services = new HashSet<>();
services.add("HDFS");
- expect(ambariMetaInfo.getRackSensitiveServicesNames(null, null)).andReturn(services);
+ ServiceInfo serviceInfo = new ServiceInfo();
+ serviceInfo.setRestartRequiredAfterRackChange(true);
+ expect(ambariMetaInfo.getService(service)).andReturn(serviceInfo);
Map<String, Service> serviceMap = new HashMap<>();
@@ -2337,17 +2337,25 @@ public class AmbariManagementControllerImplTest {
expect(injector.getInstance(Gson.class)).andReturn(null);
expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class));
+ StackId stackId = new StackId("HDP-2.1");
+
Cluster cluster = createNiceMock(Cluster.class);
- expect(cluster.getDesiredStackVersion()).andReturn(new StackId("HDP-2.1")).atLeastOnce();
+ Service service = createNiceMock(Service.class);
+ expect(service.getDesiredStackId()).andReturn(stackId).atLeastOnce();
+ expect(cluster.getServices()).andReturn(ImmutableMap.<String, Service>builder()
+ .put("HDFS", service)
+ .build());
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();
+ expect(ambariMetaInfo.getStack(stackId)).andReturn(stackInfo).atLeastOnce();
- replay(injector, clusters, ambariMetaInfo, stackInfo, cluster, repoVersionDAO, repoVersion);
+ replay(injector, clusters, ambariMetaInfo, stackInfo, cluster, service, repoVersionDAO, repoVersion);
AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector);
setAmbariMetaInfo(ambariMetaInfo, controller);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index d1d819f..9c723c1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -1309,6 +1309,7 @@ public class AmbariManagementControllerTest {
// Install
installService(cluster1, serviceName, false, false);
+
ExecutionCommand ec =
controller.getExecutionCommand(cluster,
s1.getServiceComponent("NAMENODE").getServiceComponentHost(host1),
@@ -1398,14 +1399,16 @@ public class AmbariManagementControllerTest {
private void createServiceComponentHostSimple(String clusterName, String host1,
String host2) throws AmbariException, AuthorizationException {
+
createCluster(clusterName);
clusters.getCluster(clusterName)
.setDesiredStackVersion(new StackId("HDP-0.1"));
String serviceName = "HDFS";
- createService(clusterName, serviceName, null);
+ createService(clusterName, serviceName, repositoryVersion01, null);
String componentName1 = "NAMENODE";
String componentName2 = "DATANODE";
String componentName3 = "HDFS_CLIENT";
+
createServiceComponent(clusterName, serviceName, componentName1,
State.INIT);
createServiceComponent(clusterName, serviceName, componentName2,
@@ -1944,6 +1947,7 @@ public class AmbariManagementControllerTest {
set1.clear();
HostRequest rInvalid1 =
new HostRequest(host1, cluster1, null);
+ rInvalid1.setRackInfo(UUID.randomUUID().toString());
HostRequest rInvalid2 =
new HostRequest(host1, cluster1, null);
set1.add(rInvalid1);
@@ -2280,7 +2284,7 @@ public class AmbariManagementControllerTest {
r = new ClusterRequest(null, null, "", null);
resp = controller.getClusters(Collections.singleton(r));
- Assert.assertEquals(0, resp.size());
+ Assert.assertTrue("Stack ID request is invalid and expect them all", resp.size() > 3);
}
@Test
@@ -3214,6 +3218,7 @@ public class AmbariManagementControllerTest {
String cluster2 = getUniqueName();
createCluster(cluster2);
String serviceName1 = "HDFS";
+
createService(cluster1, serviceName1, null);
String serviceName2 = "HBASE";
String serviceName3 = "HBASE";
@@ -3222,7 +3227,7 @@ public class AmbariManagementControllerTest {
mapRequestProps.put("context", "Called from a test");
try {
- createService(cluster2, serviceName3, null);
+ createService(cluster2, serviceName3, repositoryVersion01, null);
fail("Expected fail for invalid service for stack 0.1");
} catch (Exception e) {
// Expected
@@ -3284,7 +3289,7 @@ public class AmbariManagementControllerTest {
}
- @Test
+ @Ignore("Something fishy with the stacks here that's causing the RCO to be loaded incorrectly")
public void testServiceUpdateRecursive() throws AmbariException, AuthorizationException {
String cluster1 = getUniqueName();
@@ -3292,9 +3297,11 @@ public class AmbariManagementControllerTest {
clusters.getCluster(cluster1)
.setDesiredStackVersion(new StackId("HDP-0.2"));
String serviceName1 = "HDFS";
- createService(cluster1, serviceName1, null);
+ createService(cluster1, serviceName1, repositoryVersion02, null);
+
String serviceName2 = "HBASE";
- createService(cluster1, serviceName2, null);
+ createService(cluster1, serviceName2, repositoryVersion02, null);
+
String componentName1 = "NAMENODE";
String componentName2 = "DATANODE";
String componentName3 = "HBASE_MASTER";
@@ -3423,11 +3430,13 @@ public class AmbariManagementControllerTest {
sc1.setDesiredState(State.STARTED);
sc2.setDesiredState(State.INSTALLED);
sc3.setDesiredState(State.STARTED);
+
sch1.setDesiredState(State.STARTED);
sch2.setDesiredState(State.STARTED);
sch3.setDesiredState(State.STARTED);
sch4.setDesiredState(State.STARTED);
sch5.setDesiredState(State.STARTED);
+
sch1.setState(State.INSTALLED);
sch2.setState(State.INSTALLED);
sch3.setState(State.INSTALLED);
@@ -4024,7 +4033,7 @@ public class AmbariManagementControllerTest {
Assert.assertEquals("1800", cmd.getCommandParams().get("command_timeout"));
resourceFilters.clear();
- resourceFilter = new RequestResourceFilter("", "", null);
+ resourceFilter = new RequestResourceFilter("HDFS", "", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest(cluster1, null, actionDef2, resourceFilters, null, params, false);
response = controller.createAction(actionRequest, requestProperties);
@@ -4063,7 +4072,7 @@ public class AmbariManagementControllerTest {
hosts = new ArrayList<String>() {{add(host3);}};
resourceFilters.clear();
- resourceFilter = new RequestResourceFilter("", "", hosts);
+ resourceFilter = new RequestResourceFilter("HDFS", "", hosts);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest(cluster1, null, actionDef1, resourceFilters, null, params, false);
@@ -4388,7 +4397,7 @@ public class AmbariManagementControllerTest {
actionRequest = new ExecuteActionRequest(cluster1, null, actionDef1, resourceFilters, null, params, false);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
- "Action " + actionDef1 + " targets service HDFS2 that does not exist");
+ "Service not found, clusterName=" + cluster1 + ", serviceName=HDFS2");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS", "HDFS_CLIENT2", null);
@@ -4396,7 +4405,7 @@ public class AmbariManagementControllerTest {
actionRequest = new ExecuteActionRequest(cluster1, null, actionDef1, resourceFilters, null, params, false);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
- "Action " + actionDef1 + " targets component HDFS_CLIENT2 that does not exist");
+ "ServiceComponent not found, clusterName=" + cluster1 + ", serviceName=HDFS, serviceComponentName=HDFS_CLIENT2");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("", "HDFS_CLIENT2", null);
@@ -4413,28 +4422,18 @@ public class AmbariManagementControllerTest {
// targets a service that is not a member of the stack (e.g. MR not in HDP-2)
actionRequest = new ExecuteActionRequest(cluster1, null, actionDef3, resourceFilters, null, params, false);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
- "Action " + actionDef3 + " targets service MAPREDUCE that does not exist");
+ "Service not found, clusterName=" + cluster1 + ", serviceName=MAPREDUCE");
hosts = new ArrayList<>();
hosts.add("h6");
resourceFilters.clear();
- resourceFilter = new RequestResourceFilter("", "", hosts);
+ resourceFilter = new RequestResourceFilter("HDFS", "", hosts);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest(cluster1, null, actionDef2, resourceFilters, null, params, false);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Request specifies host h6 but it is not a valid host based on the target service=HDFS and component=DATANODE");
- hosts.clear();
- hosts.add(host1);
- resourceFilters.clear();
- resourceFilter = new RequestResourceFilter("", "", hosts);
- resourceFilters.add(resourceFilter);
- params.put("success_factor", "1r");
- actionRequest = new ExecuteActionRequest(cluster1, null, "update_repo", resourceFilters, null, params, false);
- expectActionCreationErrorWithMessage(actionRequest, requestProperties,
- "Failed to cast success_factor value to float!");
-
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HIVE", "", null);
resourceFilters.add(resourceFilter);
@@ -5163,8 +5162,8 @@ public class AmbariManagementControllerTest {
String componentName5 = "TASKTRACKER";
String componentName6 = "MAPREDUCE_CLIENT";
- createService(cluster1, serviceName1, null);
- createService(cluster1, serviceName2, null);
+ createService(cluster1, serviceName1, repositoryVersion01, null);
+ createService(cluster1, serviceName2, repositoryVersion01, null);
createServiceComponent(cluster1, serviceName1, componentName1,
State.INIT);
@@ -10523,11 +10522,6 @@ public class AmbariManagementControllerTest {
}
@Test
- public void testClusterWidgetCreateOnClusterCreate() throws Exception {
- // TODO: Add once cluster widgets.json is available
- }
-
- @Test
public void testServiceWidgetCreationOnServiceCreate() throws Exception {
String cluster1 = getUniqueName();
ClusterRequest r = new ClusterRequest(null, cluster1,
@@ -10535,7 +10529,11 @@ public class AmbariManagementControllerTest {
controller.createCluster(r);
String serviceName = "HBASE";
clusters.getCluster(cluster1).setDesiredStackVersion(new StackId("OTHER-2.0"));
- createService(cluster1, serviceName, State.INIT);
+
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(
+ new StackId("OTHER-2.0"), "2.0-1234");
+
+ createService(cluster1, serviceName, repositoryVersion, State.INIT);
Service s = clusters.getCluster(cluster1).getService(serviceName);
Assert.assertNotNull(s);
[05/50] [abbrv] ambari git commit: AMBARI-20957. Remove
cluster_version use (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
index 6471988..6f06f43 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
@@ -46,7 +46,6 @@ import java.util.Map;
import java.util.Set;
import javax.persistence.EntityManager;
-import javax.persistence.RollbackException;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.H2DatabaseCleaner;
@@ -64,7 +63,6 @@ import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
import org.apache.ambari.server.orm.dao.ClusterDAO;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
@@ -73,7 +71,6 @@ import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
import org.apache.ambari.server.orm.entities.ClusterEntity;
import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostStateEntity;
@@ -108,7 +105,6 @@ import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
import org.apache.ambari.server.state.host.HostHealthyHeartbeatEvent;
import org.apache.ambari.server.state.host.HostRegistrationRequestEvent;
-import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.utils.EventBusSynchronizer;
import org.apache.commons.lang.StringUtils;
import org.junit.After;
@@ -123,8 +119,6 @@ import com.google.gson.Gson;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
-import com.google.inject.Singleton;
-import com.google.inject.persist.Transactional;
import com.google.inject.persist.UnitOfWork;
import com.google.inject.util.Modules;
@@ -148,42 +142,15 @@ public class ClusterTest {
private StackDAO stackDAO;
private ClusterDAO clusterDAO;
private HostDAO hostDAO;
- private ClusterVersionDAO clusterVersionDAO;
+
private HostVersionDAO hostVersionDAO;
private HostComponentStateDAO hostComponentStateDAO;
private RepositoryVersionDAO repositoryVersionDAO;
private Gson gson;
- @Singleton
- static class ClusterVersionDAOMock extends ClusterVersionDAO {
- static boolean failOnCurrentVersionState;
- static List<ClusterVersionEntity> mockedClusterVersions;
-
- @Override
- @Transactional
- public ClusterVersionEntity merge(ClusterVersionEntity entity) {
- if (!failOnCurrentVersionState || entity.getState() != RepositoryVersionState.CURRENT) {
- return super.merge(entity);
- } else {
- throw new RollbackException();
- }
- }
-
- @Override
- @Transactional
- public List<ClusterVersionEntity> findByCluster(String clusterName) {
- if (mockedClusterVersions == null) {
- return super.findByCluster(clusterName);
- } else {
- return mockedClusterVersions;
- }
- }
- }
-
private static class MockModule extends AbstractModule {
@Override
protected void configure() {
- bind(ClusterVersionDAO.class).to(ClusterVersionDAOMock.class);
EventBusSynchronizer.synchronizeAmbariEventPublisher(binder());
}
}
@@ -205,7 +172,6 @@ public class ClusterTest {
stackDAO = injector.getInstance(StackDAO.class);
clusterDAO = injector.getInstance(ClusterDAO.class);
hostDAO = injector.getInstance(HostDAO.class);
- clusterVersionDAO = injector.getInstance(ClusterVersionDAO.class);
hostVersionDAO = injector.getInstance(HostVersionDAO.class);
hostComponentStateDAO = injector.getInstance(HostComponentStateDAO.class);
repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
@@ -241,6 +207,8 @@ public class ClusterTest {
hostAttributes.put("os_family", "redhat");
hostAttributes.put("os_release_version", "5.9");
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
+
for (String hostName : hostNames) {
clusters.addHost(hostName);
@@ -248,19 +216,23 @@ public class ClusterTest {
hostEntity.setIpv4("ipv4");
hostEntity.setIpv6("ipv6");
hostEntity.setHostAttributes(gson.toJson(hostAttributes));
+
+
+// hostDAO.merge(hostEntity);
+
+ HostVersionEntity hostVersionEntity = new HostVersionEntity();
+ hostVersionEntity.setRepositoryVersion(repositoryVersion);
+ hostVersionEntity.setState(RepositoryVersionState.CURRENT);
+ hostVersionEntity.setHostEntity(hostEntity);
+ hostEntity.setHostVersionEntities(Collections.singletonList(hostVersionEntity));
+
hostDAO.merge(hostEntity);
}
clusters.mapAndPublishHostsToCluster(hostNames, clusterName);
c1 = clusters.getCluster(clusterName);
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, stackId.getStackVersion(),
- RepositoryVersionState.CURRENT);
- ClusterVersionDAOMock.failOnCurrentVersionState = false;
}
public ClusterEntity createDummyData() {
@@ -321,28 +293,6 @@ public class ClusterTest {
return clusterEntity;
}
- private void checkStackVersionState(StackId stackId, String version, RepositoryVersionState state) {
- Collection<ClusterVersionEntity> allClusterVersions = c1.getAllClusterVersions();
- for (ClusterVersionEntity entity : allClusterVersions) {
- StackId repoVersionStackId = new StackId(entity.getRepositoryVersion().getStack());
- if (repoVersionStackId.equals(stackId)
- && repoVersionStackId.getStackVersion().equals(version)) {
- assertEquals(state, entity.getState());
- }
- }
- }
-
- private void assertStateException(StackId stackId, String version,
- RepositoryVersionState transitionState,
- RepositoryVersionState stateAfter) {
- try {
- c1.transitionClusterVersion(stackId, version, transitionState);
- Assert.fail();
- } catch (AmbariException e) {}
- checkStackVersionState(stackId, version, stateAfter);
- assertNotNull(c1.getCurrentClusterVersion());
- }
-
/**
* For Rolling Upgrades, create a cluster with the following components HDFS:
* NameNode, DataNode, HDFS Client ZK: Zookeeper Server, Zookeeper Monitor
@@ -532,7 +482,6 @@ public class ClusterTest {
ServiceComponentHost scHost = svcComp.getServiceComponentHost(hce.getHostName());
scHost.recalculateHostVersionState();
- cluster.recalculateClusterVersionState(rv);
}
}
@@ -654,7 +603,7 @@ public class ClusterTest {
// public Service getService(String serviceName) throws AmbariException;
// public Map<String, Service> getServices();
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service s1 = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
Service s2 = serviceFactory.createNew(c1, "MAPREDUCE", repositoryVersion);
@@ -684,7 +633,7 @@ public class ClusterTest {
// TODO write unit tests
// public List<ServiceComponentHost> getServiceComponentHosts(String hostname);
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service s = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
c1.addService(s);
@@ -723,7 +672,7 @@ public class ClusterTest {
public void testGetServiceComponentHosts_ForService() throws Exception {
createDefaultCluster();
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service s = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
c1.addService(s);
@@ -753,7 +702,7 @@ public class ClusterTest {
public void testGetServiceComponentHosts_ForServiceComponent() throws Exception {
createDefaultCluster();
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service s = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
c1.addService(s);
@@ -789,7 +738,7 @@ public class ClusterTest {
public void testGetServiceComponentHostMap() throws Exception {
createDefaultCluster();
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service s = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
c1.addService(s);
@@ -823,7 +772,7 @@ public class ClusterTest {
public void testGetServiceComponentHostMap_ForService() throws Exception {
createDefaultCluster();
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service sfHDFS = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
c1.addService(sfHDFS);
@@ -881,7 +830,7 @@ public class ClusterTest {
public void testGetServiceComponentHostMap_ForHost() throws Exception {
createDefaultCluster();
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service sfHDFS = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
c1.addService(sfHDFS);
@@ -940,7 +889,7 @@ public class ClusterTest {
public void testGetServiceComponentHostMap_ForHostAndService() throws Exception {
createDefaultCluster();
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service sfHDFS = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
c1.addService(sfHDFS);
@@ -1126,7 +1075,7 @@ public class ClusterTest {
public void testDeleteService() throws Exception {
createDefaultCluster();
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
c1.addService("MAPREDUCE", repositoryVersion);
@@ -1148,7 +1097,7 @@ public class ClusterTest {
public void testDeleteServiceWithConfigHistory() throws Exception {
createDefaultCluster();
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
c1.addService("HDFS", repositoryVersion);
@@ -1562,106 +1511,6 @@ public class ClusterTest {
assertEquals(false, allServiceConfigResponses.get(1).getIsCurrent());
assertEquals(ServiceConfigVersionResponse.DELETED_CONFIG_GROUP_NAME, allServiceConfigResponses.get(1).getGroupName());
-
-
- }
-
- @Test
- public void testTransitionClusterVersion() throws Exception {
- createDefaultCluster();
-
- String stack = "HDP";
- String version = "0.2";
-
- StackId stackId = new StackId(stack, version);
-
- helper.getOrCreateRepositoryVersion(stackId, version);
- c1.createClusterVersion(stackId, version, "admin",
- RepositoryVersionState.INSTALLING);
-
- assertStateException(stackId, version, RepositoryVersionState.CURRENT,
- RepositoryVersionState.INSTALLING);
-
- c1.transitionClusterVersion(stackId, version,
- RepositoryVersionState.INSTALL_FAILED);
- checkStackVersionState(stackId, version,
- RepositoryVersionState.INSTALL_FAILED);
-
- assertStateException(stackId, version, RepositoryVersionState.CURRENT,
- RepositoryVersionState.INSTALL_FAILED);
- assertStateException(stackId, version, RepositoryVersionState.INSTALLED,
- RepositoryVersionState.INSTALL_FAILED);
- assertStateException(stackId, version, RepositoryVersionState.OUT_OF_SYNC,
- RepositoryVersionState.INSTALL_FAILED);
-
- c1.transitionClusterVersion(stackId, version,
- RepositoryVersionState.INSTALLING);
- checkStackVersionState(stackId, version, RepositoryVersionState.INSTALLING);
-
- c1.transitionClusterVersion(stackId, version,
- RepositoryVersionState.INSTALLED);
- checkStackVersionState(stackId, version, RepositoryVersionState.INSTALLED);
-
- assertStateException(stackId, version,
- RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.INSTALLED);
-
- c1.transitionClusterVersion(stackId, version,
- RepositoryVersionState.OUT_OF_SYNC);
- checkStackVersionState(stackId, version, RepositoryVersionState.OUT_OF_SYNC);
-
- assertStateException(stackId, version, RepositoryVersionState.CURRENT,
- RepositoryVersionState.OUT_OF_SYNC);
- assertStateException(stackId, version, RepositoryVersionState.INSTALLED,
- RepositoryVersionState.OUT_OF_SYNC);
- assertStateException(stackId, version,
- RepositoryVersionState.INSTALL_FAILED,
- RepositoryVersionState.OUT_OF_SYNC);
-
- c1.transitionClusterVersion(stackId, version,
- RepositoryVersionState.INSTALLING);
- checkStackVersionState(stackId, version, RepositoryVersionState.INSTALLING);
-
- c1.transitionClusterVersion(stackId, version,
- RepositoryVersionState.INSTALLED);
- checkStackVersionState(stackId, version, RepositoryVersionState.INSTALLED);
-
- c1.setDesiredStackVersion(stackId);
- c1.transitionClusterVersion(stackId, version,
- RepositoryVersionState.CURRENT);
-
- checkStackVersionState(stackId, version, RepositoryVersionState.CURRENT);
-
- checkStackVersionState(new StackId("HDP", "0.1"), "0.1",
- RepositoryVersionState.INSTALLED);
-
- // The only CURRENT state should not be changed
- assertStateException(stackId, version, RepositoryVersionState.INSTALLED,
- RepositoryVersionState.CURRENT);
- }
-
- @Test
- public void testTransitionClusterVersionTransactionFail() throws Exception {
- createDefaultCluster();
-
- StackId stackId = new StackId("HDP", "0.2");
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- c1.createClusterVersion(stackId, "0.2", "admin",
- RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, "0.2",
- RepositoryVersionState.INSTALLED);
- try {
- ClusterVersionDAOMock.failOnCurrentVersionState = true;
- c1.transitionClusterVersion(stackId, "0.2",
- RepositoryVersionState.CURRENT);
- Assert.fail();
- } catch (AmbariException e) {
-
- } finally {
- ClusterVersionDAOMock.failOnCurrentVersionState = false;
- }
-
- // There must be CURRENT state for cluster
- assertNotNull(c1.getCurrentClusterVersion());
}
/**
@@ -1678,31 +1527,16 @@ public class ClusterTest {
StackId originalStackId = new StackId("HDP", "2.0.5");
createDefaultCluster(Sets.newHashSet("h1", "h2"), originalStackId);
- StackId stackId = new StackId("HDP", "2.0.6");
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
-
- c1.createClusterVersion(stackId, "2.0.6", "admin", RepositoryVersionState.INSTALLING);
-
- ClusterVersionEntity entityHDP2 = null;
- for (ClusterVersionEntity entity : c1.getAllClusterVersions()) {
- StackEntity repoVersionStackEntity = entity.getRepositoryVersion().getStack();
- StackId repoVersionStackId = new StackId(repoVersionStackEntity);
-
- if (repoVersionStackId.getStackName().equals("HDP")
- && repoVersionStackId.getStackVersion().equals("2.0.6")) {
- entityHDP2 = entity;
- break;
- }
- }
-
- assertNotNull(entityHDP2);
-
List<HostVersionEntity> hostVersionsH1Before = hostVersionDAO.findByClusterAndHost("c1", "h1");
assertEquals(1, hostVersionsH1Before.size());
+ StackId stackId = new StackId("HDP", "2.0.6");
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
+
+
// this should move both to NOT_REQUIRED since they have no versionable
// components
- c1.transitionHostsToInstalling(entityHDP2, entityHDP2.getRepositoryVersion(), null, false);
+ c1.transitionHostsToInstalling(repositoryVersion, null, false);
List<HostVersionEntity> hostVersionsH1After = hostVersionDAO.findByClusterAndHost("c1", "h1");
assertEquals(2, hostVersionsH1After.size());
@@ -1720,8 +1554,6 @@ public class ClusterTest {
assertTrue(checked);
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
-
// add some host components
Service hdfs = serviceFactory.createNew(c1, "HDFS", repositoryVersion);
c1.addService(hdfs);
@@ -1739,12 +1571,9 @@ public class ClusterTest {
assertNotNull(namenodeHost1);
assertNotNull(datanodeHost2);
- c1.transitionClusterVersion(stackId, entityHDP2.getRepositoryVersion().getVersion(),
- RepositoryVersionState.INSTALLING);
-
// with hosts now having components which report versions, we should have
// two in the INSTALLING state
- c1.transitionHostsToInstalling(entityHDP2, entityHDP2.getRepositoryVersion(), null, false);
+ c1.transitionHostsToInstalling(repositoryVersion, null, false);
hostVersionsH1After = hostVersionDAO.findByClusterAndHost("c1", "h1");
assertEquals(2, hostVersionsH1After.size());
@@ -1783,7 +1612,7 @@ public class ClusterTest {
hostInMaintenanceMode.setMaintenanceState(c1.getClusterId(), MaintenanceState.ON);
// transition host versions to INSTALLING
- c1.transitionHostsToInstalling(entityHDP2, entityHDP2.getRepositoryVersion(), null, false);
+ c1.transitionHostsToInstalling(repositoryVersion, null, false);
List<HostVersionEntity> hostInMaintModeVersions = hostVersionDAO.findByClusterAndHost("c1",
hostInMaintenanceMode.getHostName());
@@ -1810,198 +1639,6 @@ public class ClusterTest {
}
}
- @Test
- public void testRecalculateClusterVersionState() throws Exception {
- createDefaultCluster();
-
- Host h1 = clusters.getHost("h1");
- h1.setState(HostState.HEALTHY);
-
- Host h2 = clusters.getHost("h2");
- h2.setState(HostState.HEALTHY);
-
- // Phase 1: Install bits during distribution
- StackId stackId = new StackId("HDP-0.1");
- final String stackVersion = "0.1-1000";
- RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(
- stackId,
- stackVersion);
- // Because the cluster already has a Cluster Version, an additional stack must init with INSTALLING
- c1.createClusterVersion(stackId, stackVersion, "admin",
- RepositoryVersionState.INSTALLING);
- c1.setCurrentStackVersion(stackId);
-
- HostVersionEntity hv1 = helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLING);
- HostVersionEntity hv2 = helper.createHostVersion("h2", repositoryVersionEntity, RepositoryVersionState.INSTALLING);
-
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- //Should remain in its current state
- checkStackVersionState(stackId, stackVersion,
- RepositoryVersionState.INSTALLING);
-
- h2.setState(HostState.UNHEALTHY);
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- // In order for the states to be accurately reflected, the host health status should not impact the status
- // of the host_version.
- checkStackVersionState(stackId, stackVersion,
- RepositoryVersionState.INSTALLING);
- // Retry by going back to INSTALLING
- c1.transitionClusterVersion(stackId, stackVersion,
- RepositoryVersionState.INSTALLING);
-
- // Installation on one host fails (other is continuing)
- hv1.setState(RepositoryVersionState.INSTALL_FAILED);
- hostVersionDAO.merge(hv1);
- // Check that cluster version is still in a non-final state
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- checkStackVersionState(stackId, stackVersion,
- RepositoryVersionState.INSTALLING);
-
- h2.setState(HostState.HEALTHY);
- hv2.setState(RepositoryVersionState.INSTALLED);
- hostVersionDAO.merge(hv2);
- // Now both cluster versions are in a final state, so
- // cluster version state changes to final state
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- checkStackVersionState(stackId, stackVersion,
- RepositoryVersionState.INSTALL_FAILED);
-
- // Retry by going back to INSTALLING
- c1.transitionClusterVersion(stackId, stackVersion,
- RepositoryVersionState.INSTALLING);
-
- h2.setState(HostState.HEALTHY);
- hv2.setState(RepositoryVersionState.INSTALLED);
- hostVersionDAO.merge(hv2);
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- checkStackVersionState(stackId, stackVersion,
- RepositoryVersionState.INSTALLING);
-
- // Make the last host fail
- hv1.setState(RepositoryVersionState.INSTALL_FAILED);
- hostVersionDAO.merge(hv1);
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- checkStackVersionState(stackId, stackVersion,
- RepositoryVersionState.INSTALL_FAILED);
- // Retry by going back to INSTALLING
- c1.transitionClusterVersion(stackId, stackVersion,
- RepositoryVersionState.INSTALLING);
-
- // Now, all hosts are in INSTALLED
- hv1.setState(RepositoryVersionState.INSTALLED);
- hostVersionDAO.merge(hv1);
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- checkStackVersionState(stackId, stackVersion,
- RepositoryVersionState.INSTALLED);
-
- // Set both hosts to CURRENT
- hv1.setState(RepositoryVersionState.CURRENT);
- hostVersionDAO.merge(hv1);
- hv2.setState(RepositoryVersionState.CURRENT);
- hostVersionDAO.merge(hv2);
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- checkStackVersionState(stackId, stackVersion,
- RepositoryVersionState.CURRENT);
- }
-
- @Test
- public void testRecalculateClusterVersionStateWithNotRequired() throws Exception {
- createDefaultCluster(Sets.newHashSet("h1", "h2", "h3"));
-
- Host h1 = clusters.getHost("h1");
- h1.setState(HostState.HEALTHY);
-
- Host h2 = clusters.getHost("h2");
- h2.setState(HostState.HEALTHY);
-
- Host h3 = clusters.getHost("h3");
- h3.setState(HostState.HEALTHY);
-
- // Phase 1: Install bits during distribution
- StackId stackId = new StackId("HDP-0.1");
- final String stackVersion = "0.1-1000";
- RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(
- stackId,
- stackVersion);
- // Because the cluster already has a Cluster Version, an additional stack must init with INSTALLING
- c1.createClusterVersion(stackId, stackVersion, "admin",
- RepositoryVersionState.INSTALLING);
- c1.setCurrentStackVersion(stackId);
-
- HostVersionEntity hv1 = helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.NOT_REQUIRED);
- HostVersionEntity hv2 = helper.createHostVersion("h2", repositoryVersionEntity, RepositoryVersionState.INSTALLING);
- HostVersionEntity hv3 = helper.createHostVersion("h3", repositoryVersionEntity, RepositoryVersionState.INSTALLED);
-
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- ClusterVersionEntity cv = clusterVersionDAO.findByClusterAndStackAndVersion(c1.getClusterName(), stackId, stackVersion);
- assertEquals(RepositoryVersionState.INSTALLING, cv.getState());
-
- // 1 in NOT_REQUIRED, 1 in INSTALLED, 1 in CURRENT so should be INSTALLED
- hv2.setState(RepositoryVersionState.CURRENT);
- hostVersionDAO.merge(hv2);
-
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- cv = clusterVersionDAO.findByClusterAndStackAndVersion(c1.getClusterName(), stackId, stackVersion);
- assertEquals(RepositoryVersionState.INSTALLED, cv.getState());
-
- // 1 in NOT_REQUIRED, and 2 in CURRENT, so cluster version should be CURRENT
- hv3.setState(RepositoryVersionState.CURRENT);
- hostVersionDAO.merge(hv3);
-
- c1.recalculateClusterVersionState(repositoryVersionEntity);
- cv = clusterVersionDAO.findByClusterAndStackAndVersion(c1.getClusterName(), stackId, stackVersion);
- assertEquals(RepositoryVersionState.CURRENT, cv.getState());
- }
-
-
- @Test
- public void testRecalculateAllClusterVersionStates() throws Exception {
- createDefaultCluster();
-
- Host h1 = clusters.getHost("h1");
- h1.setState(HostState.HEALTHY);
-
- Host h2 = clusters.getHost("h2");
- h2.setState(HostState.HEALTHY);
-
- StackId stackId = new StackId("HDP-0.1");
- RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(
- stackId,
- "0.1-1000");
- c1.createClusterVersion(stackId, "0.1-1000", "admin",
- RepositoryVersionState.INSTALLING);
- c1.setCurrentStackVersion(stackId);
- c1.recalculateAllClusterVersionStates();
- checkStackVersionState(stackId, "0.1-1000",
- RepositoryVersionState.INSTALLING);
- checkStackVersionState(stackId, "0.1-2086", RepositoryVersionState.CURRENT);
-
- HostVersionEntity hv1 = helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLING);
- HostVersionEntity hv2 = helper.createHostVersion("h2", repositoryVersionEntity, RepositoryVersionState.INSTALLING);
-
- c1.recalculateAllClusterVersionStates();
- checkStackVersionState(stackId, "0.1-1000",
- RepositoryVersionState.INSTALLING);
- checkStackVersionState(stackId, "1.0-2086", RepositoryVersionState.CURRENT);
-
- hv1.setState(RepositoryVersionState.INSTALL_FAILED);
- hostVersionDAO.merge(hv1);
- c1.recalculateAllClusterVersionStates();
- checkStackVersionState(stackId, "0.1-1000",
- RepositoryVersionState.INSTALL_FAILED);
- checkStackVersionState(stackId, "0.1-2086", RepositoryVersionState.CURRENT);
- // Retry by going back to INSTALLING
- c1.transitionClusterVersion(stackId, "0.1-1000",
- RepositoryVersionState.INSTALLING);
-
- hv1.setState(RepositoryVersionState.CURRENT);
- hostVersionDAO.merge(hv1);
- c1.recalculateAllClusterVersionStates();
- checkStackVersionState(stackId, "0.1-1000",
- RepositoryVersionState.OUT_OF_SYNC);
- checkStackVersionState(stackId, "0.1-2086", RepositoryVersionState.CURRENT);
- }
-
/**
* Comprehensive test for transitionHostVersion and recalculateClusterVersion.
* It creates a cluster with 3 hosts and 3 services, one of which does not advertise a version.
@@ -2050,20 +1687,11 @@ public class ClusterTest {
ServiceComponentHost scHost = svcComp.getServiceComponentHost(hce.getHostName());
scHost.recalculateHostVersionState();
- cluster.recalculateClusterVersionState(rv1);
-
- Collection<ClusterVersionEntity> clusterVersions = cluster.getAllClusterVersions();
if (versionedComponentCount > 0) {
// On the first component with a version, a RepoVersion should have been created
RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, v1);
Assert.assertNotNull(repositoryVersion);
- Assert.assertTrue(clusterVersions != null && clusterVersions.size() == 1);
-
- // Last component to report a version should cause the ClusterVersion to go to CURRENT
- if (i == hostComponentStates.size() - 1) {
- Assert.assertEquals(clusterVersions.iterator().next().getState(), RepositoryVersionState.CURRENT);
- }
}
}
@@ -2089,7 +1717,10 @@ public class ClusterTest {
simulateStackVersionListener(stackId, v1, cluster, hostComponentStateDAO.findByHost("h-4"));
Collection<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
+
+ // h-4 doesn't have a host version record yet
Assert.assertEquals(hostVersions.size(), clusters.getHosts().size());
+
HostVersionEntity h4Version1 = hostVersionDAO.findByClusterStackVersionAndHost(clusterName, stackId, v1, "h-4");
Assert.assertNotNull(h4Version1);
Assert.assertEquals(h4Version1.getState(), RepositoryVersionState.CURRENT);
@@ -2102,14 +1733,6 @@ public class ClusterTest {
HostVersionEntity hve = new HostVersionEntity(host, rv2, RepositoryVersionState.INSTALLED);
hostVersionDAO.create(hve);
}
- cluster.createClusterVersion(stackId, v2, "admin",
- RepositoryVersionState.INSTALLING);
- cluster.transitionClusterVersion(stackId, v2,
- RepositoryVersionState.INSTALLED);
-
- ClusterVersionEntity cv2 = clusterVersionDAO.findByClusterAndStackAndVersion(clusterName, stackId, v2);
- Assert.assertNotNull(cv2);
- Assert.assertEquals(cv2.getState(), RepositoryVersionState.INSTALLED);
// Add one more Host, with only Ganglia on it. It should have a HostVersion in NOT_REQUIRED for v2,
// as Ganglia isn't versionable
@@ -2151,15 +1774,11 @@ public class ClusterTest {
ServiceComponentHost scHost = svcComp.getServiceComponentHost(hce.getHostName());
scHost.recalculateHostVersionState();
- cluster.recalculateClusterVersionState(rv2);
-
- Collection<ClusterVersionEntity> clusterVersions = cluster.getAllClusterVersions();
if (versionedComponentCount > 0) {
// On the first component with a version, a RepoVersion should have been created
RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, v2);
Assert.assertNotNull(repositoryVersion);
- Assert.assertTrue(clusterVersions != null && clusterVersions.size() == 2);
}
}
@@ -2215,21 +1834,11 @@ public class ClusterTest {
ServiceComponentHost scHost = svcComp.getServiceComponentHost(hce.getHostName());
scHost.recalculateHostVersionState();
- cluster.recalculateClusterVersionState(rv1);
-
- Collection<ClusterVersionEntity> clusterVersions = cluster.getAllClusterVersions();
if (versionedComponentCount > 0) {
// On the first component with a version, a RepoVersion should have been created
RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion(stackId, v1);
Assert.assertNotNull(repositoryVersion);
- Assert.assertTrue(clusterVersions != null && clusterVersions.size() == 1);
-
- // Since host 2 is dead, and host 3 contains only components that dont report a version,
- // cluster version transitions to CURRENT after first component on host 1 reports it's version
- if (versionedComponentCount == 1 && i < (hostComponentStates.size() - 1)) {
- Assert.assertEquals(clusterVersions.iterator().next().getState(), RepositoryVersionState.CURRENT);
- }
}
}
}
@@ -2256,6 +1865,7 @@ public class ClusterTest {
hostAttributes.put("os_family", "redhat");
hostAttributes.put("os_release_version", "5.9");
h.setHostAttributes(hostAttributes);
+
}
String v1 = "2.0.5-1";
@@ -2265,16 +1875,12 @@ public class ClusterTest {
RepositoryVersionEntity rve2 = helper.getOrCreateRepositoryVersion(stackId, v2);
c1.setCurrentStackVersion(stackId);
- c1.createClusterVersion(stackId, v1, "admin",
- RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, v1, RepositoryVersionState.CURRENT);
clusters.mapHostToCluster("h-1", clusterName);
clusters.mapHostToCluster("h-2", clusterName);
clusters.mapHostToCluster("h-3", clusterName);
- ClusterVersionDAOMock.failOnCurrentVersionState = false;
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service service = c1.addService("ZOOKEEPER", repositoryVersion);
ServiceComponent sc = service.addServiceComponent("ZOOKEEPER_SERVER");
@@ -2285,13 +1891,13 @@ public class ClusterTest {
sc = service.addServiceComponent("SQOOP");
sc.addServiceComponentHost("h-3");
+ HostEntity hostEntity = hostDAO.findByName("h-3");
+ assertNotNull(hostEntity);
+
List<HostVersionEntity> entities = hostVersionDAO.findByClusterAndHost(clusterName, "h-3");
assertTrue("Expected no host versions", null == entities || 0 == entities.size());
- c1.createClusterVersion(stackId, v2, "admin",
- RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.INSTALLED);
- c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.CURRENT);
+ c1.transitionHostVersionState(hostEntity, repositoryVersion, c1.getDesiredStackVersion());
entities = hostVersionDAO.findByClusterAndHost(clusterName, "h-3");
@@ -2336,27 +1942,17 @@ public class ClusterTest {
v2);
c1.setCurrentStackVersion(stackId);
- c1.createClusterVersion(stackId, v1, "admin",
- RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, v1, RepositoryVersionState.CURRENT);
clusters.mapHostToCluster("h-1", clusterName);
clusters.mapHostToCluster("h-2", clusterName);
- ClusterVersionDAOMock.failOnCurrentVersionState = false;
-
- RepositoryVersionEntity repositoryVersion = c1.getCurrentClusterVersion().getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
Service service = c1.addService("ZOOKEEPER", repositoryVersion);
ServiceComponent sc = service.addServiceComponent("ZOOKEEPER_SERVER");
sc.addServiceComponentHost("h-1");
sc.addServiceComponentHost("h-2");
- c1.createClusterVersion(stackId, v2, "admin",
- RepositoryVersionState.INSTALLING);
- c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.INSTALLED);
- c1.transitionClusterVersion(stackId, v2, RepositoryVersionState.OUT_OF_SYNC);
-
clusters.mapHostToCluster(h3, clusterName);
// This method is usually called when we receive heartbeat from new host
@@ -2373,15 +1969,8 @@ public class ClusterTest {
ArgumentCaptor<HostVersionEntity> hostVersionCaptor = ArgumentCaptor.forClass(HostVersionEntity.class);
- ClusterVersionDAOMock.mockedClusterVersions = new ArrayList<ClusterVersionEntity>() {{
- addAll(c1.getAllClusterVersions());
- }};
-
c1.transitionHostVersionState(hostEntity3, rve1, stackId);
- // Revert fields of static instance
- ClusterVersionDAOMock.mockedClusterVersions = null;
-
verify(hostVersionDAOMock).merge(hostVersionCaptor.capture());
assertEquals(hostVersionCaptor.getValue().getState(), RepositoryVersionState.CURRENT);
}
@@ -2767,27 +2356,4 @@ public class ClusterTest {
assertFalse(((ClusterImpl) cluster).isClusterPropertyCached("foo"));
}
-
- /**
- * Tests that the {@link ClusterVersionEntity} can be created initially with a
- * state of {@link RepositoryVersionState#INSTALLED}. This state is needed for
- * {@link UpgradeType#HOST_ORDERED}.
- *
- * @throws Exception
- */
- @Test
- public void testClusterVersionCreationWithInstalledState() throws Exception {
- StackId stackId = new StackId("HDP", "0.1");
- StackEntity stackEntity = stackDAO.find(stackId.getStackName(), stackId.getStackVersion());
- org.junit.Assert.assertNotNull(stackEntity);
-
- String clusterName = "c1";
- clusters.addCluster(clusterName, stackId);
- c1 = clusters.getCluster(clusterName);
-
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
-
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLED);
- }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
index 801f3a7..022cf1f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
@@ -38,7 +38,6 @@ import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentFactory;
@@ -112,8 +111,6 @@ public class ClustersDeadlockTest {
cluster = clusters.getCluster(CLUSTER_NAME);
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
// install HDFS
installService("HDFS");
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
index 43e9737..d59d1d5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
@@ -64,7 +64,6 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.Host;
-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;
@@ -273,15 +272,6 @@ public class ClustersTest {
cluster1.setDesiredStackVersion(stackId);
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
- cluster1.transitionClusterVersion(stackId, stackId.getStackVersion(),
- RepositoryVersionState.CURRENT);
- cluster2.setDesiredStackVersion(stackId);
- cluster2.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
- cluster2.transitionClusterVersion(stackId, stackId.getStackVersion(),
- RepositoryVersionState.CURRENT);
try {
clusters.mapHostToCluster(h1, c1);
@@ -364,15 +354,7 @@ public class ClustersTest {
Assert.assertNotNull(clusters.getCluster(c2));
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
- cluster1.transitionClusterVersion(stackId, stackId.getStackVersion(),
- RepositoryVersionState.CURRENT);
- cluster2.setDesiredStackVersion(stackId);
- cluster2.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
- cluster2.transitionClusterVersion(stackId, stackId.getStackVersion(),
- RepositoryVersionState.CURRENT);
+
clusters.addHost(h1);
clusters.addHost(h2);
clusters.addHost(h3);
@@ -404,12 +386,6 @@ public class ClustersTest {
RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId,
stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
-
- cluster.transitionClusterVersion(stackId, stackId.getStackVersion(),
- RepositoryVersionState.CURRENT);
-
final Config config1 = injector.getInstance(ConfigFactory.class).createNew(cluster, "t1", "1",
new HashMap<String, String>() {{
put("prop1", "val1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
index 4d06f60..c643b2f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
@@ -38,7 +38,6 @@ import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentFactory;
@@ -113,8 +112,6 @@ public class ConcurrentServiceConfigVersionTest {
clusters.addCluster("c1", stackId);
cluster = clusters.getCluster("c1");
repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster.createClusterVersion(stackId,
- stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
String hostName = "c6401.ambari.apache.org";
clusters.addHost(hostName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
index 8cd00ce..0678a71 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
@@ -40,7 +40,6 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentFactory;
@@ -115,7 +114,6 @@ public class ServiceComponentHostConcurrentWriteDeadlockTest {
clusters.addCluster("c1", stackId);
cluster = clusters.getCluster("c1");
m_repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, REPO_VERSION);
- cluster.createClusterVersion(stackId, REPO_VERSION, "admin", RepositoryVersionState.INSTALLING);
Config config1 = configFactory.createNew(cluster, "test-type1", null, new HashMap<String, String>(), new HashMap<String,
Map<String, String>>());
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
index 32e8dae..6572daf 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
@@ -55,7 +55,6 @@ import org.apache.ambari.server.state.HostHealthStatus;
import org.apache.ambari.server.state.HostHealthStatus.HealthStatus;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.MaintenanceState;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.StackId;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -367,8 +366,7 @@ public class HostTest {
Cluster c1 = clusters.getCluster("c1");
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
+
Assert.assertEquals("c1", c1.getClusterName());
clusters.addHost("h1");
Host host = clusters.getHost("h1");
@@ -434,8 +432,6 @@ public class HostTest {
host.setHostAttributes(hostAttributes);
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
c1.setDesiredStackVersion(stackId);
clusters.mapHostToCluster("h1", "c1");
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
index f52f007..83a8945 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
@@ -45,7 +45,6 @@ import org.apache.ambari.server.orm.entities.StageEntityPK;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
@@ -249,9 +248,6 @@ public class RetryUpgradeActionServiceTest {
repoVersionDAO.create(repoVersionEntity);
helper.getOrCreateRepositoryVersion(stack220, stack220.getStackVersion());
-
- cluster.createClusterVersion(stack220, stack220.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
- cluster.transitionClusterVersion(stack220, stack220.getStackVersion(), RepositoryVersionState.CURRENT);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
index ed92db7..d5c1b1a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
@@ -40,7 +40,6 @@ import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
@@ -52,7 +51,6 @@ import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostConfig;
import org.apache.ambari.server.state.MaintenanceState;
-import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
@@ -127,12 +125,7 @@ public class ServiceComponentHostTest {
hostNames.add(hostName1);
addHostsToCluster(clusterName, hostAttributes, hostNames);
- Cluster c1 = clusters.getCluster(clusterName);
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- ClusterVersionEntity clusterVersion = c1.createClusterVersion(stackId,
- stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
-
- repositoryVersion = clusterVersion.getRepositoryVersion();
+ repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
}
@After
@@ -718,11 +711,7 @@ public class ServiceComponentHostTest {
Cluster cluster = clusters.getCluster(clusterName);
Assert.assertNotNull(cluster);
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- ClusterVersionEntity clusterVersion = cluster.createClusterVersion(stackId,
- stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
-
- RepositoryVersionEntity repositoryVersion = clusterVersion.getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
ServiceComponentHost sch1 = createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", hostName);
ServiceComponentHost sch2 = createNewServiceComponentHost(cluster, "HDFS", "DATANODE", hostName);
@@ -909,12 +898,7 @@ public class ServiceComponentHostTest {
Cluster cluster = clusters.getCluster(clusterName);
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- ClusterVersionEntity clusterVersion = cluster.createClusterVersion(stackId,
- stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
-
- RepositoryVersionEntity repositoryVersion = clusterVersion.getRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
ServiceComponentHost sch1 = createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", hostName);
ServiceComponentHost sch2 = createNewServiceComponentHost(cluster, "HDFS", "DATANODE", hostName);
@@ -1042,8 +1026,6 @@ public class ServiceComponentHostTest {
Cluster cluster = clusters.getCluster(clusterName);
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
HostEntity hostEntity = hostDAO.findByName(hostName);
Assert.assertNotNull(hostEntity);
@@ -1089,8 +1071,6 @@ public class ServiceComponentHostTest {
Cluster cluster = clusters.getCluster(clusterName);
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
- cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
- RepositoryVersionState.INSTALLING);
HostEntity hostEntity = hostDAO.findByName(hostName);
ServiceComponentHost sch1 = createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", hostName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
index 8b78479..fc754a0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
@@ -20,7 +20,6 @@ package org.apache.ambari.server.upgrade;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
-import static org.easymock.EasyMock.anyLong;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.anyString;
import static org.easymock.EasyMock.capture;
@@ -40,8 +39,6 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -66,29 +63,20 @@ import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.dao.AlertDefinitionDAO;
import org.apache.ambari.server.orm.dao.ArtifactDAO;
import org.apache.ambari.server.orm.dao.ClusterDAO;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.DaoUtils;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
import org.apache.ambari.server.orm.entities.ArtifactEntity;
-import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
-import org.apache.ambari.server.orm.entities.HostEntity;
-import org.apache.ambari.server.orm.entities.HostVersionEntity;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.stack.StackManagerFactory;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
-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.StackId;
-import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.kerberos.KerberosComponentDescriptor;
import org.apache.ambari.server.state.kerberos.KerberosDescriptor;
import org.apache.ambari.server.state.kerberos.KerberosDescriptorFactory;
@@ -119,13 +107,10 @@ public class UpgradeCatalog220Test {
private static Injector injector;
private static Provider<EntityManager> entityManagerProvider = createStrictMock(Provider.class);
private static EntityManager entityManager = createNiceMock(EntityManager.class);
- private static UpgradeCatalogHelper upgradeCatalogHelper;
- private static StackEntity desiredStackEntity;
private AmbariManagementController amc = createNiceMock(AmbariManagementController.class);
private AmbariMetaInfo metaInfo = createNiceMock(AmbariMetaInfo.class);
private StackDAO stackDAO = createNiceMock(StackDAO.class);
private RepositoryVersionDAO repositoryVersionDAO = createNiceMock(RepositoryVersionDAO.class);
- private ClusterVersionDAO clusterVersionDAO = createNiceMock(ClusterVersionDAO.class);
private HostVersionDAO hostVersionDAO = createNiceMock(HostVersionDAO.class);
private ClusterDAO clusterDAO = createNiceMock(ClusterDAO.class);
@@ -139,12 +124,11 @@ public class UpgradeCatalog220Test {
injector = Guice.createInjector(new InMemoryDefaultTestModule());
injector.getInstance(GuiceJpaInitializer.class);
- upgradeCatalogHelper = injector.getInstance(UpgradeCatalogHelper.class);
+
// inject AmbariMetaInfo to ensure that stacks get populated in the DB
injector.getInstance(AmbariMetaInfo.class);
// load the stack entity
- StackDAO stackDAO = injector.getInstance(StackDAO.class);
- desiredStackEntity = stackDAO.find("HDP", "2.2.0");
+
}
@AfterClass
@@ -311,89 +295,6 @@ public class UpgradeCatalog220Test {
verify(upgradeCatalog220);
}
- /**
- * Verify that when bootstrapping HDP 2.1, records get inserted into the
- * repo_version, cluster_version, and host_version tables.
- * @throws AmbariException
- */
- private void verifyBootstrapHDP21() throws Exception, AmbariException {
- final String stackName = "HDP";
- final String stackVersion = "2.1";
- final String stackNameAndVersion = stackName + "-" + stackVersion;
- final String buildNumber = "2.1.0.0-0001";
- final String stackAndBuild = stackName + "-" + buildNumber;
- final String clusterName = "c1";
-
- expect(amc.getAmbariMetaInfo()).andReturn(metaInfo);
-
- // Mock the actions to bootstrap if using HDP 2.1
- Clusters clusters = createNiceMock(Clusters.class);
- expect(amc.getClusters()).andReturn(clusters);
-
- Map<String, Cluster> clusterHashMap = new HashMap<>();
- Cluster cluster = createNiceMock(Cluster.class);
- clusterHashMap.put(clusterName, cluster);
- expect(clusters.getClusters()).andReturn(clusterHashMap);
-
- StackId stackId = new StackId(stackNameAndVersion);
- expect(cluster.getCurrentStackVersion()).andReturn(stackId);
-
- StackInfo stackInfo = new StackInfo();
- stackInfo.setVersion(buildNumber);
- expect(metaInfo.getStack(stackName, stackVersion)).andReturn(stackInfo);
-
- StackEntity stackEntity = createNiceMock(StackEntity.class);
- expect(stackEntity.getStackName()).andReturn(stackName);
- expect(stackEntity.getStackVersion()).andReturn(stackVersion);
-
- expect(stackDAO.find(stackName, stackVersion)).andReturn(stackEntity);
-
- replay(amc, metaInfo, clusters, cluster, stackEntity, stackDAO);
-
- // Mock more function calls
- // Repository Version
- RepositoryVersionEntity repositoryVersionEntity = createNiceMock(RepositoryVersionEntity.class);
- expect(repositoryVersionDAO.findByDisplayName(stackAndBuild)).andReturn(null);
- expect(repositoryVersionDAO.findMaxId("id")).andReturn(0L);
- expect(repositoryVersionDAO.findAll()).andReturn(Collections.<RepositoryVersionEntity>emptyList());
- expect(repositoryVersionDAO.create(anyObject(StackEntity.class), anyObject(String.class), anyObject(String.class), anyObject(String.class))).andReturn(repositoryVersionEntity);
- expect(repositoryVersionEntity.getId()).andReturn(1L);
- expect(repositoryVersionEntity.getVersion()).andReturn(buildNumber);
- replay(repositoryVersionDAO, repositoryVersionEntity);
-
- // Cluster Version
- ClusterVersionEntity clusterVersionEntity = createNiceMock(ClusterVersionEntity.class);
- expect(clusterVersionEntity.getId()).andReturn(1L);
- expect(clusterVersionEntity.getState()).andReturn(RepositoryVersionState.CURRENT);
- expect(clusterVersionEntity.getRepositoryVersion()).andReturn(repositoryVersionEntity);
-
- expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class), anyObject(StackId.class), anyObject(String.class))).andReturn(null);
- expect(clusterVersionDAO.findMaxId("id")).andReturn(0L);
- expect(clusterVersionDAO.findAll()).andReturn(Collections.<ClusterVersionEntity>emptyList());
- expect(clusterVersionDAO.create(anyObject(ClusterEntity.class), anyObject(RepositoryVersionEntity.class), anyObject(RepositoryVersionState.class), anyLong(), anyLong(), anyObject(String.class))).andReturn(clusterVersionEntity);
- replay(clusterVersionDAO, clusterVersionEntity);
-
- // Host Version
- ClusterEntity clusterEntity = createNiceMock(ClusterEntity.class);
- expect(clusterEntity.getClusterName()).andReturn(clusterName).anyTimes();
- expect(clusterDAO.findByName(anyObject(String.class))).andReturn(clusterEntity);
-
- Collection<HostEntity> hostEntities = new ArrayList<>();
- HostEntity hostEntity1 = createNiceMock(HostEntity.class);
- HostEntity hostEntity2 = createNiceMock(HostEntity.class);
- expect(hostEntity1.getHostName()).andReturn("host1");
- expect(hostEntity2.getHostName()).andReturn("host2");
- hostEntities.add(hostEntity1);
- hostEntities.add(hostEntity2);
- expect(clusterEntity.getHostEntities()).andReturn(hostEntities);
-
- expect(hostVersionDAO.findByClusterStackVersionAndHost(anyObject(String.class), anyObject(StackId.class), anyObject(String.class), anyObject(String.class))).andReturn(null);
- expect(hostVersionDAO.findMaxId("id")).andReturn(0L);
- expect(hostVersionDAO.findAll()).andReturn(Collections.<HostVersionEntity>emptyList());
-
- replay(clusterEntity, clusterDAO, hostVersionDAO, hostEntity1, hostEntity2);
- }
-
@Test
public void testExecuteUpgradePreDMLUpdates() throws Exception {
Method executeStackPreDMLUpdates = UpgradeCatalog220.class.getDeclaredMethod("executeUpgradePreDMLUpdates");
@@ -994,7 +895,6 @@ public class UpgradeCatalog220Test {
binder.bind(StackManagerFactory.class).toInstance(createNiceMock(StackManagerFactory.class));
binder.bind(StackDAO.class).toInstance(stackDAO);
binder.bind(RepositoryVersionDAO.class).toInstance(repositoryVersionDAO);
- binder.bind(ClusterVersionDAO.class).toInstance(clusterVersionDAO);
binder.bind(HostVersionDAO.class).toInstance(hostVersionDAO);
}
};
@@ -1585,7 +1485,7 @@ public class UpgradeCatalog220Test {
put("kerberos.server.primary", "{{bare_accumulo_principal}}");
}
};
-
+
final Config clientConfig = easyMockSupport.createNiceMock(Config.class);
final Injector mockInjector = Guice.createInjector(new AbstractModule() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
index af3ba73..2d3704d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
@@ -45,18 +45,13 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.H2DatabaseCleaner;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
-import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.orm.DBAccessor;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.dao.ClusterDAO;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
-import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.PermissionDAO;
import org.apache.ambari.server.orm.dao.PrincipalDAO;
import org.apache.ambari.server.orm.dao.PrincipalTypeDAO;
import org.apache.ambari.server.orm.dao.PrivilegeDAO;
-import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.ResourceTypeDAO;
import org.apache.ambari.server.orm.dao.RoleAuthorizationDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
@@ -67,12 +62,9 @@ import org.apache.ambari.server.orm.entities.PrivilegeEntity;
import org.apache.ambari.server.orm.entities.ResourceEntity;
import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
import org.apache.ambari.server.orm.entities.RoleAuthorizationEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.state.stack.OsFamily;
import org.easymock.Capture;
-import org.easymock.EasyMock;
import org.easymock.EasyMockSupport;
-import org.easymock.IMocksControl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -91,17 +83,7 @@ public class UpgradeCatalog242Test {
private Injector injector;
private Provider<EntityManager> entityManagerProvider = createStrictMock(Provider.class);
private EntityManager entityManager = createNiceMock(EntityManager.class);
- private UpgradeCatalogHelper upgradeCatalogHelper;
- private StackEntity desiredStackEntity;
- private AmbariManagementController amc = createNiceMock(AmbariManagementController.class);
- private AmbariMetaInfo metaInfo = createNiceMock(AmbariMetaInfo.class);
- private StackDAO stackDAO = createNiceMock(StackDAO.class);
- private RepositoryVersionDAO repositoryVersionDAO = createNiceMock(RepositoryVersionDAO.class);
- private ClusterVersionDAO clusterVersionDAO = createNiceMock(ClusterVersionDAO.class);
- private HostVersionDAO hostVersionDAO = createNiceMock(HostVersionDAO.class);
- private ClusterDAO clusterDAO = createNiceMock(ClusterDAO.class);
-
- private IMocksControl mocksControl = EasyMock.createControl();
+
@Before
public void init() {
@@ -111,12 +93,10 @@ public class UpgradeCatalog242Test {
injector = Guice.createInjector(new InMemoryDefaultTestModule());
injector.getInstance(GuiceJpaInitializer.class);
- upgradeCatalogHelper = injector.getInstance(UpgradeCatalogHelper.class);
// inject AmbariMetaInfo to ensure that stacks get populated in the DB
injector.getInstance(AmbariMetaInfo.class);
// load the stack entity
StackDAO stackDAO = injector.getInstance(StackDAO.class);
- desiredStackEntity = stackDAO.find("HDP", "2.2.0");
}
@After
[12/50] [abbrv] ambari git commit: AMBARI-20958 - Host Version on
Finalization Must Be Scoped Correctly Based on Upgrade Type (jonathanhurley)
Posted by jo...@apache.org.
AMBARI-20958 - Host Version on Finalization Must Be Scoped Correctly Based on Upgrade Type (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a2632675
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a2632675
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a2632675
Branch: refs/heads/trunk
Commit: a2632675a37223d66dc2cb2edb3138467d74fb5b
Parents: aaa821c
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon May 8 14:46:53 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue May 9 16:49:23 2017 -0400
----------------------------------------------------------------------
.../ClusterStackVersionResourceProvider.java | 15 --
.../VersionDefinitionResourceProvider.java | 4 +-
.../upgrade/HostVersionOutOfSyncListener.java | 6 +-
.../listeners/upgrade/StackVersionListener.java | 154 +++++++++----------
.../server/orm/dao/HostComponentStateDAO.java | 31 ----
.../ambari/server/orm/dao/HostVersionDAO.java | 147 +++---------------
.../server/orm/dao/RepositoryVersionDAO.java | 9 +-
.../server/orm/entities/HostVersionEntity.java | 35 +++--
.../orm/entities/RepositoryVersionEntity.java | 72 +++++----
.../serveraction/ServerActionExecutor.java | 3 +-
.../upgrades/FinalizeUpgradeAction.java | 106 ++++---------
.../upgrades/UpdateDesiredStackAction.java | 32 +++-
.../org/apache/ambari/server/state/Cluster.java | 16 --
.../server/state/ServiceComponentHost.java | 18 ++-
.../ambari/server/state/UpgradeContext.java | 37 ++++-
.../ambari/server/state/UpgradeHelper.java | 2 +-
.../server/state/cluster/ClusterImpl.java | 63 --------
.../svccomphost/ServiceComponentHostImpl.java | 82 +++++-----
.../ServiceComponentHostSummary.java | 104 ++++++-------
.../main/resources/Ambari-DDL-Derby-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 2 +-
.../internal/UpgradeResourceProviderTest.java | 19 +--
.../upgrade/StackVersionListenerTest.java | 37 +++--
.../server/state/cluster/ClusterTest.java | 112 +++-----------
28 files changed, 436 insertions(+), 680 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index 774ba0c..1e49eb2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -681,21 +681,6 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
}
/**
- * Updates the version states. Transactional to ensure only one transaction for all updates
- * @param clusterId the cluster
- * @param current the repository that is current for the cluster
- * @param target the target repository
- */
- @Transactional
- protected void updateVersionStates(Long clusterId, RepositoryVersionEntity current,
- RepositoryVersionEntity target) {
-
- hostComponentStateDAO.updateVersions(target.getVersion());
- hostVersionDAO.updateVersions(target, current);
-// clusterVersionDAO.updateVersions(clusterId, target, current);
- }
-
- /**
* Additional check over {@link VersionUtils#compareVersions(String, String)} that
* compares build numbers
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProvider.java
index 5f12e52..e41e3da 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProvider.java
@@ -355,7 +355,7 @@ public class VersionDefinitionResourceProvider extends AbstractAuthorizedResourc
Set<Map<String, Object>> propertyMaps = getPropertyMaps(predicate);
if (propertyMaps.isEmpty()) {
- List<RepositoryVersionEntity> versions = s_repoVersionDAO.findAllDefinitions();
+ List<RepositoryVersionEntity> versions = s_repoVersionDAO.findRepositoriesWithVersionDefinitions();
for (RepositoryVersionEntity entity : versions) {
results.add(toResource(entity, requestPropertyIds));
@@ -393,7 +393,7 @@ public class VersionDefinitionResourceProvider extends AbstractAuthorizedResourc
results.add(res);
}
} else {
- List<RepositoryVersionEntity> versions = s_repoVersionDAO.findAllDefinitions();
+ List<RepositoryVersionEntity> versions = s_repoVersionDAO.findRepositoriesWithVersionDefinitions();
for (RepositoryVersionEntity entity : versions) {
results.add(toResource(entity, requestPropertyIds));
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
index c0a074f..aa665a7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
@@ -24,6 +24,8 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.Lock;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.EagerSingleton;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -283,7 +285,9 @@ public class HostVersionOutOfSyncListener {
LOG.debug(event.toString());
}
- List<RepositoryVersionEntity> repos = repositoryVersionDAO.get().findAllDefinitions();
+ // create host version entries for every repository
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES, comment="Eventually take into account deleted repositories")
+ List<RepositoryVersionEntity> repos = repositoryVersionDAO.get().findAll();
for (String hostName : event.getHostNames()) {
HostEntity hostEntity = hostDAO.get().findByName(hostName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
index 1cedea8..1326154 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
@@ -19,13 +19,11 @@ package org.apache.ambari.server.events.listeners.upgrade;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.EagerSingleton;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.events.HostComponentVersionAdvertisedEvent;
import org.apache.ambari.server.events.publishers.VersionEventPublisher;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.State;
@@ -36,14 +34,13 @@ import org.slf4j.LoggerFactory;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
-import com.google.inject.Provider;
import com.google.inject.Singleton;
/**
* The {@link StackVersionListener} class handles the propagation of versions
* advertised by the {@link org.apache.ambari.server.state.ServiceComponentHost}
* that bubble up to the
- * {@link org.apache.ambari.server.orm.entities.HostVersionEntity}
+ * {@link org.apache.ambari.server.orm.entities.HostVersionEntity}.
*/
@Singleton
@EagerSingleton
@@ -57,9 +54,6 @@ public class StackVersionListener {
@Inject
private RepositoryVersionDAO repositoryVersionDAO;
- @Inject
- Provider<AmbariMetaInfo> ambariMetaInfo;
-
/**
* Constructor.
*
@@ -101,27 +95,27 @@ public class StackVersionListener {
// Update host component version value if needed
try {
- AmbariMetaInfo metaInfo = ambariMetaInfo.get();
- ComponentInfo componentInfo = metaInfo.getComponent(cluster.getDesiredStackVersion().getStackName(),
- cluster.getDesiredStackVersion().getStackVersion(), sch.getServiceName(), sch.getServiceComponentName());
- ServiceComponent sc = cluster.getService(sch.getServiceName()).getServiceComponent(sch.getServiceComponentName());
-
- if (componentInfo.isVersionAdvertised() && StringUtils.isNotBlank(newVersion)
- && !UNKNOWN_VERSION.equalsIgnoreCase(newVersion)) {
- processComponentAdvertisedVersion(cluster, sch, newVersion, sc);
- } else if(!sc.isVersionAdvertised() && StringUtils.isNotBlank(newVersion)
- && !UNKNOWN_VERSION.equalsIgnoreCase(newVersion)) {
- LOG.debug("ServiceComponent {} doesn't advertise version, " +
- "however ServiceHostComponent {} on host {} advertised version as {}. Skipping version update",
- sc.getName(), sch.getServiceComponentName(), sch.getHostName(), newVersion);
- } else {
- if (UNKNOWN_VERSION.equals(sc.getDesiredVersion())) {
- processUnknownDesiredVersion(cluster, sc, sch, newVersion);
- } else {
- processComponentAdvertisedVersion(cluster, sch, newVersion, sc);
+ ServiceComponent sc = cluster.getService(sch.getServiceName()).getServiceComponent(
+ sch.getServiceComponentName());
+
+ // not advertising a version, do nothing
+ if (!sc.isVersionAdvertised()) {
+ // that's odd; a version came back - log it and still do nothing
+ if (!StringUtils.equalsIgnoreCase(UNKNOWN_VERSION, newVersion)) {
+ LOG.debug(
+ "ServiceComponent {} doesn't advertise version, however ServiceHostComponent {} on host {} advertised version as {}. Skipping version update",
+ sc.getName(), sch.getServiceComponentName(), sch.getHostName(), newVersion);
}
+ return;
}
+ // proces the UNKNOWN version
+ if (StringUtils.equalsIgnoreCase(UNKNOWN_VERSION, newVersion)) {
+ processUnknownDesiredVersion(cluster, sc, sch, newVersion);
+ return;
+ }
+
+ processComponentAdvertisedVersion(cluster, sc, sch, newVersion);
} catch (Exception e) {
LOG.error(
"Unable to propagate version for ServiceHostComponent on component: {}, host: {}. Error: {}",
@@ -129,46 +123,67 @@ public class StackVersionListener {
}
}
+
/**
- * Update host component version
- * or
- * Bootstrap cluster/repo version when version is reported for the first time
- * @param cluster target cluster
- * @param sch target host component
- * @param newVersion advertised version
- * @param sc target service component
+ * Updates the version and {@link UpgradeState} for the specified
+ * {@link ServiceComponentHost} if necessary. If the version or the upgrade
+ * state changes, then this method will call
+ * {@link ServiceComponentHost#recalculateHostVersionState()} in order to
+ * ensure that the host version state is properly updated.
+ * <p/>
+ *
+ *
+ * @param cluster
+ * @param sc
+ * @param sch
+ * @param newVersion
* @throws AmbariException
*/
- private void processComponentAdvertisedVersion(Cluster cluster, ServiceComponentHost sch, String newVersion, ServiceComponent sc) throws AmbariException {
+ private void processComponentAdvertisedVersion(Cluster cluster, ServiceComponent sc,
+ ServiceComponentHost sch, String newVersion) throws AmbariException {
if (StringUtils.isBlank(newVersion)) {
return;
}
String previousVersion = sch.getVersion();
- if (previousVersion == null || UNKNOWN_VERSION.equalsIgnoreCase(previousVersion)) {
+ String desiredVersion = sc.getDesiredVersion();
+ UpgradeState upgradeState = sch.getUpgradeState();
+
+ boolean versionIsCorrect = StringUtils.equals(desiredVersion, newVersion);
+
+ // update the SCH to the new version reported only if it changed
+ if (!StringUtils.equals(previousVersion, newVersion)) {
+ sch.setVersion(newVersion);
+ }
+
+ if (previousVersion == null || StringUtils.equalsIgnoreCase(UNKNOWN_VERSION, previousVersion)) {
// value may be "UNKNOWN" when upgrading from older Ambari versions
// or if host component reports it's version for the first time
sch.setUpgradeState(UpgradeState.NONE);
- sch.setVersion(newVersion);
- bootstrapVersion(cluster, sch);
- } else if (!StringUtils.equals(previousVersion, newVersion)) {
- processComponentVersionChange(cluster, sc, sch, newVersion);
+ sch.recalculateHostVersionState();
+ } else {
+ if (versionIsCorrect) {
+ boolean isUpgradeInProgressForThisComponent = null != cluster.getUpgradeInProgress()
+ && upgradeState != UpgradeState.NONE;
+
+ if (isUpgradeInProgressForThisComponent) {
+ setUpgradeStateAndRecalculateHostVersions(sch, UpgradeState.COMPLETE);
+ } else {
+ // no upgrade in progress for this component, then this should always
+ // be NONE
+ setUpgradeStateAndRecalculateHostVersions(sch, UpgradeState.NONE);
+ }
+ } else {
+ // if the versions don't match for any reason, regardless of upgrade
+ // state, then VERSION_MISMATCH it
+ setUpgradeStateAndRecalculateHostVersions(sch, UpgradeState.VERSION_MISMATCH);
+ }
}
sc.updateRepositoryState(newVersion);
}
/**
- * Bootstrap cluster/repo version when version is reported for the first time
- * @param cluster target cluster
- * @param sch target host component
- * @throws AmbariException
- */
- private void bootstrapVersion(Cluster cluster, ServiceComponentHost sch) throws AmbariException {
- sch.recalculateHostVersionState();
- }
-
- /**
* Possible situation after upgrade from older Ambari version. Just use
* reported component version as desired version
* @param cluster target cluster
@@ -181,40 +196,23 @@ public class StackVersionListener {
String newVersion) throws AmbariException {
sch.setUpgradeState(UpgradeState.NONE);
sch.setVersion(newVersion);
- bootstrapVersion(cluster, sch);
+ sch.recalculateHostVersionState();
}
/**
- * Focuses on cases when host component version really changed
- * @param cluster target cluster
- * @param sc target service component
- * @param sch target host component
- * @param newVersion advertised version
+ * @param sch
+ * @param upgradeState
+ * @throws AmbariException
*/
- private void processComponentVersionChange(Cluster cluster, ServiceComponent sc,
- ServiceComponentHost sch,
- String newVersion) {
- String desiredVersion = sc.getDesiredVersion();
- UpgradeState upgradeState = sch.getUpgradeState();
- if (upgradeState == UpgradeState.IN_PROGRESS) {
- // Component status update is received during upgrade process
- if (desiredVersion.equals(newVersion)) {
- // Component upgrade confirmed
- sch.setUpgradeState(UpgradeState.COMPLETE);
- } else { // Unexpected (wrong) version received
- // Even during failed upgrade, we should not receive wrong version
- // That's why mark as VERSION_MISMATCH
- sch.setUpgradeState(UpgradeState.VERSION_MISMATCH);
- }
- } else if (upgradeState == UpgradeState.VERSION_MISMATCH && desiredVersion.equals(newVersion)) {
- if (cluster.getUpgradeInProgress() != null) {
- sch.setUpgradeState(UpgradeState.COMPLETE);
- } else {
- sch.setUpgradeState(UpgradeState.NONE);
- }
- } else { // No upgrade in progress, unexpected version change
- sch.setUpgradeState(UpgradeState.VERSION_MISMATCH);
+ private void setUpgradeStateAndRecalculateHostVersions(ServiceComponentHost sch,
+ UpgradeState upgradeState) throws AmbariException {
+
+ if (sch.getUpgradeState() == upgradeState) {
+ return;
}
- sch.setVersion(newVersion);
+
+ // if the upgrade state changes, then also recalculate host versions
+ sch.setUpgradeState(upgradeState);
+ sch.recalculateHostVersionState();
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostComponentStateDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostComponentStateDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostComponentStateDAO.java
index 6174912..935db28 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostComponentStateDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostComponentStateDAO.java
@@ -18,7 +18,6 @@
package org.apache.ambari.server.orm.dao;
-import java.util.Arrays;
import java.util.List;
import javax.persistence.EntityManager;
@@ -27,7 +26,6 @@ import javax.persistence.TypedQuery;
import org.apache.ambari.server.orm.RequiresSession;
import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
-import org.apache.ambari.server.state.UpgradeState;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -180,35 +178,6 @@ public class HostComponentStateDAO {
}
/**
- * Marks hosts components to the specified version that are NOT already set or "UNKNOWN".
- * Also marks all host components as not being in an upgrade state. This method
- * invokes {@code clear()} on the entity manager to force entities to be refreshed.
- *
- * @param version the version
- */
- @Transactional
- public void updateVersions(String version) {
- EntityManager em = entityManagerProvider.get();
-
- // !!! first the version
- StringBuilder sb = new StringBuilder("UPDATE HostComponentStateEntity hostComponent");
- sb.append(" SET hostComponent.version = ?1 ");
- sb.append(" WHERE hostComponent.version NOT IN ?2");
-
- TypedQuery<Long> query = em.createQuery(sb.toString(), Long.class);
- daoUtils.executeUpdate(query, version, Arrays.asList(version, "UNKNOWN"));
-
- // !!! now the upgrade state
- sb = new StringBuilder("UPDATE HostComponentStateEntity hostComponent");
- sb.append(" SET hostComponent.upgradeState = ?1");
-
- query = em.createQuery(sb.toString(), Long.class);
- daoUtils.executeUpdate(query, UpgradeState.NONE);
-
- em.clear();
- }
-
- /**
* @param serviceName
* @param componentName
* @param version
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
index d367aa0..cffb599 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
@@ -22,11 +22,10 @@ import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
import javax.persistence.TypedQuery;
import org.apache.ambari.server.orm.RequiresSession;
+import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.RepositoryVersionState;
@@ -132,7 +131,6 @@ public class HostVersionDAO extends CrudDAO<HostVersionEntity, Long> {
/**
* Retrieve all of the host versions for the given cluster name, host name, and state. <br/>
- * Consider using faster method: {@link HostVersionDAO#findByClusterHostAndState(long, long, org.apache.ambari.server.state.RepositoryVersionState)}
* @param clusterName Cluster name
* @param hostName FQDN of host
* @param state repository version state
@@ -150,77 +148,6 @@ public class HostVersionDAO extends CrudDAO<HostVersionEntity, Long> {
}
/**
- * Faster version of {@link HostVersionDAO#findByClusterHostAndState(java.lang.String, java.lang.String, org.apache.ambari.server.state.RepositoryVersionState)}
- *
- * @param clusterId Cluster ID
- * @param hostId Host ID
- * @param state repository version state
- * @return Return all of the host versions that match the criteria.
- */
- @RequiresSession
- public List<HostVersionEntity> findByClusterHostAndState(long clusterId, long hostId, RepositoryVersionState state) {
- TypedQuery<HostVersionEntity> query =
- entityManagerProvider.get().createNamedQuery("hostVersionByClusterHostIdAndState", HostVersionEntity.class);
-
- query.setParameter("clusterId", clusterId);
- query.setParameter("hostId", hostId);
- query.setParameter("state", state);
-
- return daoUtils.selectList(query);
- }
-
- /**
- * Retrieve the single host version whose state is {@link org.apache.ambari.server.state.RepositoryVersionState#CURRENT}, of which there should be exactly one at all times
- * for the given host.
- * Consider using faster method {@link HostVersionDAO#findByHostAndStateCurrent(long, long)}
- *
- * @param clusterName Cluster name
- * @param hostName Host name
- * @return Returns the single host version for this host whose state is {@link org.apache.ambari.server.state.RepositoryVersionState#CURRENT}, or {@code null} otherwise.
- */
- @RequiresSession
- public HostVersionEntity findByHostAndStateCurrent(String clusterName, String hostName) {
- try {
- List<?> results = findByClusterHostAndState(clusterName, hostName, RepositoryVersionState.CURRENT);
- if (results.isEmpty()) {
- return null;
- } else {
- if (results.size() == 1) {
- return (HostVersionEntity) results.get(0);
- }
- }
- throw new NonUniqueResultException();
- } catch (NoResultException ignored) {
- return null;
- }
- }
-
- /**
- * Retrieve the single host version whose state is {@link org.apache.ambari.server.state.RepositoryVersionState#CURRENT}, of which there should be exactly one at all times
- * for the given host.
- * Faster version of {@link HostVersionDAO#findByHostAndStateCurrent(java.lang.String, java.lang.String)}
- * @param clusterId Cluster ID
- * @param hostId host ID
- * @return Returns the single host version for this host whose state is {@link org.apache.ambari.server.state.RepositoryVersionState#CURRENT}, or {@code null} otherwise.
- */
- @RequiresSession
- public HostVersionEntity findByHostAndStateCurrent(long clusterId, long hostId) {
- try {
- List<?> results = findByClusterHostAndState(clusterId, hostId, RepositoryVersionState.CURRENT);
- if (results.isEmpty()) {
- return null;
- } else {
- if (results.size() == 1) {
- return (HostVersionEntity) results.get(0);
- }
- }
- throw new NonUniqueResultException();
- } catch (NoResultException ignored) {
- return null;
- }
- }
-
- /**
* Retrieve the single host version for the given cluster, stack name, stack
* version, and host name. <br/>
* This query is slow and not suitable for frequent use. <br/>
@@ -253,29 +180,6 @@ public class HostVersionDAO extends CrudDAO<HostVersionEntity, Long> {
}
/**
- * Optimized version of {@link HostVersionDAO#findByClusterStackVersionAndHost(java.lang.String, org.apache.ambari.server.state.StackId, java.lang.String, java.lang.String)}
- * @param clusterId Id of cluster
- * @param stackId Stack ID (e.g., HDP-2.2)
- * @param version Stack version (e.g., 2.2.0.1-995)
- * @param hostId Host Id
- * @return Returns the single host version that matches the criteria.
- */
- @RequiresSession
- public HostVersionEntity findByClusterStackVersionAndHost(long clusterId, StackId stackId, String version,
- long hostId) {
- TypedQuery<HostVersionEntity> query = entityManagerProvider.get()
- .createNamedQuery("hostVersionByClusterStackVersionAndHostId", HostVersionEntity.class);
-
- query.setParameter("clusterId", clusterId);
- query.setParameter("stackName", stackId.getStackName());
- query.setParameter("stackVersion", stackId.getStackVersion());
- query.setParameter("version", version);
- query.setParameter("hostId", hostId);
-
- return daoUtils.selectSingle(query);
- }
-
- /**
* Gets all host version entities assocaited with the specified cluster and
* repository.
*
@@ -319,41 +223,30 @@ public class HostVersionDAO extends CrudDAO<HostVersionEntity, Long> {
return daoUtils.selectList(query);
}
- @Transactional
- public void removeByHostName(String hostName) {
- Collection<HostVersionEntity> hostVersions = findByHost(hostName);
- this.remove(hostVersions);
- }
-
/**
- * Updates the host versions existing CURRENT record to the INSTALLED, and the target
- * becomes CURRENT. This method invokes {@code clear()} on the entity manager to force entities to be refreshed.
- * @param target the repo version that all hosts to mark as CURRENT
- * @param current the repo version that all hosts marked as INSTALLED
+ * Gets the {@link HostVersionEntity} associted with the specified host and
+ * repository.
+ *
+ * @param host
+ * @param repositoryVersion
+ * @return
*/
- @Transactional
- public void updateVersions(RepositoryVersionEntity target, RepositoryVersionEntity current) {
- // !!! first update target to be current
- StringBuilder sb = new StringBuilder("UPDATE HostVersionEntity hve");
- sb.append(" SET hve.state = ?1 ");
- sb.append(" WHERE hve.repositoryVersion = ?2");
-
- EntityManager em = entityManagerProvider.get();
-
- TypedQuery<Long> query = em.createQuery(sb.toString(), Long.class);
- daoUtils.executeUpdate(query, RepositoryVersionState.CURRENT, target);
+ @RequiresSession
+ public HostVersionEntity findHostVersionByHostAndRepository(HostEntity host,
+ RepositoryVersionEntity repositoryVersion) {
+ TypedQuery<HostVersionEntity> query = entityManagerProvider.get().createNamedQuery(
+ "findByHostAndRepository", HostVersionEntity.class);
- // !!! then move existing current to installed
- sb = new StringBuilder("UPDATE HostVersionEntity hve");
- sb.append(" SET hve.state = ?1 ");
- sb.append(" WHERE hve.repositoryVersion = ?2");
- sb.append(" AND hve.state = ?3");
+ query.setParameter("host", host);
+ query.setParameter("repositoryVersion", repositoryVersion);
- query = em.createQuery(sb.toString(), Long.class);
- daoUtils.executeUpdate(query, RepositoryVersionState.INSTALLED, current,
- RepositoryVersionState.CURRENT);
+ return daoUtils.selectOne(query);
+ }
- em.clear();
+ @Transactional
+ public void removeByHostName(String hostName) {
+ Collection<HostVersionEntity> hostVersions = findByHost(hostName);
+ this.remove(hostVersions);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
index 26f96e8..a2472b6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
@@ -198,12 +198,15 @@ public class RepositoryVersionDAO extends CrudDAO<RepositoryVersionEntity, Long>
}
/**
- * Retrieves repository version when they are loaded by a version definition file
+ * Retrieves repository version when they are loaded by a version definition
+ * file. This will not return all repositories - it will only return those
+ * which have a non-NULL VDF.
*
- * @return a list of entities, or an empty list when there are none
+ * @return a list of repositories created by VDF, or an empty list when there
+ * are none.
*/
@RequiresSession
- public List<RepositoryVersionEntity> findAllDefinitions() {
+ public List<RepositoryVersionEntity> findRepositoriesWithVersionDefinitions() {
final TypedQuery<RepositoryVersionEntity> query = entityManagerProvider.get().createNamedQuery(
"repositoryVersionsFromDefinition", RepositoryVersionEntity.class);
return daoUtils.selectList(query);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
index 4bd6e9d..ee5f296 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
@@ -35,13 +35,19 @@ import javax.persistence.UniqueConstraint;
import org.apache.ambari.server.state.RepositoryVersionState;
-@Table(name = "host_version", uniqueConstraints = @UniqueConstraint(name = "UQ_host_repo", columnNames = { "repo_version_id", "host_id" }))
@Entity
-@TableGenerator(name = "host_version_id_generator",
- table = "ambari_sequences", pkColumnName = "sequence_name", valueColumnName = "sequence_value"
- , pkColumnValue = "host_version_id_seq"
- , initialValue = 0
-)
+@Table(
+ name = "host_version",
+ uniqueConstraints = @UniqueConstraint(
+ name = "UQ_host_repo",
+ columnNames = { "host_id", "repo_version_id" }))
+@TableGenerator(
+ name = "host_version_id_generator",
+ table = "ambari_sequences",
+ pkColumnName = "sequence_name",
+ valueColumnName = "sequence_value",
+ pkColumnValue = "host_version_id_seq",
+ initialValue = 0)
@NamedQueries({
@NamedQuery(name = "hostVersionByClusterAndStackAndVersion", query =
"SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " +
@@ -64,22 +70,19 @@ import org.apache.ambari.server.state.RepositoryVersionState;
"WHERE clusters.clusterName=:clusterName AND hostVersion.repositoryVersion.stack.stackName=:stackName AND hostVersion.repositoryVersion.stack.stackVersion=:stackVersion AND hostVersion.repositoryVersion.version=:version AND " +
"hostVersion.hostEntity.hostName=:hostName"),
- @NamedQuery(name = "hostVersionByClusterHostIdAndState", query =
- "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " +
- "WHERE clusters.clusterId=:clusterId AND hostVersion.hostId=:hostId AND hostVersion.state=:state"),
-
- @NamedQuery(name = "hostVersionByClusterStackVersionAndHostId", query =
- "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " +
- "WHERE hostVersion.hostId=:hostId AND clusters.clusterId=:clusterId AND hostVersion.repositoryVersion.stack.stackName=:stackName " +
- "AND hostVersion.repositoryVersion.stack.stackVersion=:stackVersion AND hostVersion.repositoryVersion.version=:version"),
-
@NamedQuery(
name = "findHostVersionByClusterAndRepository",
query = "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters "
+ "WHERE clusters.clusterId = :clusterId AND hostVersion.repositoryVersion = :repositoryVersion"),
+
@NamedQuery(
name = "hostVersionByRepositoryAndStates",
- query = "SELECT hostVersion FROM HostVersionEntity hostVersion WHERE hostVersion.repositoryVersion = :repositoryVersion AND hostVersion.state IN :states")
+ query = "SELECT hostVersion FROM HostVersionEntity hostVersion WHERE hostVersion.repositoryVersion = :repositoryVersion AND hostVersion.state IN :states"),
+
+ @NamedQuery(
+ name = "findByHostAndRepository",
+ query = "SELECT hostVersion FROM HostVersionEntity hostVersion WHERE hostVersion.hostEntity = :host AND hostVersion.repositoryVersion = :repositoryVersion")
+
})
public class HostVersionEntity {
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
index 7d6db2c..47abde4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
@@ -52,9 +52,11 @@ import org.apache.ambari.server.state.repository.Release;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.base.Objects;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -275,37 +277,6 @@ public class RepositoryVersionEntity {
this.type = type;
}
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- RepositoryVersionEntity that = (RepositoryVersionEntity) o;
-
- if (id != null ? !id.equals(that.id) : that.id != null) {
- return false;
- }
- if (stack != null ? !stack.equals(that.stack) : that.stack != null) {
- return false;
- }
- if (version != null ? !version.equals(that.version) : that.version != null) {
- return false;
- }
- if (displayName != null ? !displayName.equals(that.displayName) : that.displayName != null) {
- return false;
- }
-
- if (operatingSystems != null ? !operatingSystems.equals(that.operatingSystems) : that.operatingSystems != null) {
- return false;
- }
-
- return true;
- }
-
/**
* @return the XML that is the basis for the version
*/
@@ -366,14 +337,41 @@ public class RepositoryVersionEntity {
return versionDefinition;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ RepositoryVersionEntity that = (RepositoryVersionEntity) o;
+ return new EqualsBuilder().append(id, that.id).append(stack, that.stack).append(version,
+ that.version).append(displayName, that.displayName).isEquals();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
@Override
public int hashCode() {
- int result = id != null ? id.hashCode() : 0;
- result = 31 * result + (stack != null ? stack.hashCode() : 0);
- result = 31 * result + (version != null ? version.hashCode() : 0);
- result = 31 * result + (displayName != null ? displayName.hashCode() : 0);
- result = 31 * result + (operatingSystems != null ? operatingSystems.hashCode() : 0);
- return result;
+ return Objects.hashCode(id, stack, version, displayName);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString(){
+ return Objects.toStringHelper(this)
+ .add("id", id)
+ .add("stack", stack)
+ .add("version", version).toString();
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/serveraction/ServerActionExecutor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/ServerActionExecutor.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/ServerActionExecutor.java
index 68124fc..50e3cfe 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/ServerActionExecutor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/ServerActionExecutor.java
@@ -18,7 +18,6 @@
package org.apache.ambari.server.serveraction;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -84,7 +83,7 @@ public class ServerActionExecutor {
* requestSharedDataMap object
*/
private final Map<Long, ConcurrentMap<String, Object>> requestSharedDataMap =
- new HashMap<>();
+ new ConcurrentHashMap<>();
/**
* Database accessor to query and update the database of action commands.
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
index 7a39dcd..1b9fb23 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
@@ -38,7 +38,6 @@ import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
-import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
@@ -55,7 +54,6 @@ import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.UpgradeState;
import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.state.svccomphost.ServiceComponentHostSummary;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.text.StrBuilder;
@@ -136,66 +134,49 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
outSB.append(message).append(System.lineSeparator());
Cluster cluster = upgradeContext.getCluster();
- StackId clusterDesiredStackId = cluster.getDesiredStackVersion();
- StackId clusterCurrentStackId = cluster.getCurrentStackVersion();
String version = upgradeContext.getVersion();
RepositoryVersionEntity repositoryVersion = upgradeContext.getTargetRepositoryVersion();
- // for all hosts participating in this upgrade, validate their repo
- // versions
+ // iterate through all host components and make sure that they are on the
+ // correct version; if they are not, then this will throw an exception
+ List<InfoTuple> errors = getHostComponentsWhichDidNotUpgrade(upgradeContext);
+ if (!errors.isEmpty()) {
+ StrBuilder messageBuff = new StrBuilder(String.format(
+ "The following %d host component(s) "
+ + "have not been upgraded to version %s. Please install and upgrade "
+ + "the Stack Version on those hosts and try again.\nHost components:",
+ errors.size(), version)).append(System.lineSeparator());
+
+ for (InfoTuple error : errors) {
+ messageBuff.append(String.format("%s on host %s\n", error.componentName, error.hostName));
+ }
+
+ throw new AmbariException(messageBuff.toString());
+ }
+
+ // for all hosts participating in this upgrade, update thei repository
+ // versions and upgrade state
List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository(
cluster.getClusterId(), repositoryVersion);
- // Will include hosts whose state is INSTALLED
Set<HostVersionEntity> hostVersionsAllowed = new HashSet<>();
Set<String> hostsWithoutCorrectVersionState = new HashSet<>();
- Set<String> hostsToUpdate = new HashSet<>();
- // It is important to only iterate over the hosts with a version, as
- // opposed to all hosts, since some hosts may only have components that do
- // not advertise a version, such as AMBARI_METRICS.
+ // for every host version for this repository, determine if any didn't
+ // transition correctly
for (HostVersionEntity hostVersion : hostVersions) {
- boolean hostHasCorrectVersionState = false;
RepositoryVersionState hostVersionState = hostVersion.getState();
switch( hostVersionState ){
- case CURRENT:{
- // if the state is correct, then do nothing
- hostHasCorrectVersionState = true;
- break;
- }
- case NOT_REQUIRED:
- case INSTALLED:{
- // It is possible that the host version has a state of INSTALLED and it
- // never changed if the host only has components that do not advertise a
- // version.
- HostEntity host = hostVersion.getHostEntity();
-
- ServiceComponentHostSummary hostSummary = new ServiceComponentHostSummary(ambariMetaInfo,
- host, clusterDesiredStackId);
-
- // if all components have finished advertising their version, then
- // this host can be considered upgraded
- if (hostSummary.haveAllComponentsFinishedAdvertisingVersion()) {
- // mark this as upgraded
- hostHasCorrectVersionState = true;
- } else {
- hostsWithoutCorrectVersionState.add(hostVersion.getHostName());
- }
-
+ case CURRENT:
+ case NOT_REQUIRED: {
+ hostVersionsAllowed.add(hostVersion);
break;
}
default: {
- // all other states are not allowed
hostsWithoutCorrectVersionState.add(hostVersion.getHostName());
break;
}
}
-
- // keep track of this host version in order to transition it correctly
- if (hostHasCorrectVersionState) {
- hostVersionsAllowed.add(hostVersion);
- hostsToUpdate.add(hostVersion.getHostName());
- }
}
// throw an exception if there are hosts which are not not fully upgraded
@@ -210,24 +191,6 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
throw new AmbariException(message);
}
- // iterate through all host components and make sure that they are on the
- // correct version; if they are not, then this will throw an exception
- List<InfoTuple> errors = getHostComponentsWhichDidNotUpgrade(upgradeContext);
- if (! errors.isEmpty()) {
- StrBuilder messageBuff = new StrBuilder(
- String.format(
- "The following %d host component(s) "
- + "have not been upgraded to version %s. Please install and upgrade "
- + "the Stack Version on those hosts and try again.\nHost components:",
- errors.size(), version)).append(System.lineSeparator());
-
- for (InfoTuple error : errors) {
- messageBuff.append(String.format("%s on host %s\n", error.componentName, error.hostName));
- }
-
- throw new AmbariException(messageBuff.toString());
- }
-
outSB.append(
String.format("Finalizing the upgrade state of %d host(s).",
hostVersionsAllowed.size())).append(System.lineSeparator());
@@ -246,15 +209,8 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
String.format("Finalizing the version for %d host(s).",
hostVersionsAllowed.size())).append(System.lineSeparator());
-
versionEventPublisher.publish(new StackUpgradeFinishEvent(cluster));
- // transitioning the cluster into CURRENT will update the current/desired
- // stack values
- outSB.append(
- String.format("Finalizing the version for cluster %s.", cluster.getClusterName())).append(
- System.lineSeparator());
-
outSB.append("Creating upgrade history...").append(System.lineSeparator());
writeComponentHistory(upgradeContext);
@@ -285,7 +241,6 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
try {
Cluster cluster = upgradeContext.getCluster();
- StackId currentClusterStackId = cluster.getCurrentStackVersion();
RepositoryVersionEntity repositoryVersion = upgradeContext.getTargetRepositoryVersion();
String message;
@@ -322,9 +277,14 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository(
cluster.getClusterId(), repositoryVersion);
+ outSB.append(
+ String.format("Finalizing the downgrade state of %d host(s).",
+ hostVersions.size())).append(
+ System.lineSeparator());
+
for( HostVersionEntity hostVersion : hostVersions ){
- if( hostVersion.getState() != RepositoryVersionState.INSTALLED ){
- hostVersion.setState(RepositoryVersionState.INSTALLED);
+ if (hostVersion.getState() != RepositoryVersionState.CURRENT) {
+ hostVersion.setState(RepositoryVersionState.CURRENT);
hostVersionDAO.merge(hostVersion);
}
@@ -339,12 +299,14 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
// ensure that when downgrading, we set the desired back to the
// original value
- cluster.setDesiredStackVersion(currentClusterStackId);
versionEventPublisher.publish(new StackUpgradeFinishEvent(cluster));
// Reset upgrade state
cluster.setUpgradeEntity(null);
+ message = String.format("The downgrade to %s has completed.", upgradeContext.getVersion());
+ outSB.append(message).append(System.lineSeparator());
+
return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", outSB.toString(), errSB.toString());
} catch (Exception e) {
StringWriter sw = new StringWriter();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
index 22f2e73..e6336c8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
@@ -22,6 +22,7 @@ import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.VERSION;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.MessageFormat;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
@@ -33,10 +34,14 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariServer;
import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
+import org.apache.ambari.server.orm.dao.HostVersionDAO;
+import org.apache.ambari.server.orm.entities.HostVersionEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.serveraction.ServerAction;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.stack.UpgradePack;
@@ -46,6 +51,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
+import com.google.inject.persist.Transactional;
/**
* Action that represents updating the Desired Stack Id during the middle of a stack upgrade (typically NonRolling).
@@ -95,6 +101,12 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
private Configuration m_configuration;
/**
+ * Used for restting host version states on downgrade.
+ */
+ @Inject
+ private HostVersionDAO m_hostVersionDAO;
+
+ /**
* {@inheritDoc}
*/
@Override
@@ -152,7 +164,8 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
* username performing the action
* @return the command report to return
*/
- private CommandReport updateDesiredRepositoryVersion(
+ @Transactional
+ CommandReport updateDesiredRepositoryVersion(
Cluster cluster, StackId originalStackId, StackId targetStackId,
UpgradeContext upgradeContext, UpgradePack upgradePack, String userName)
throws AmbariException, InterruptedException {
@@ -177,7 +190,22 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
upgradeContext.getVersion(), StringUtils.join(servicesInUpgrade, ','));
}
- out.append(message);
+ out.append(message).append(System.lineSeparator());
+
+ // a downgrade must force host versions back to INSTALLED
+ if (upgradeContext.getDirection() == Direction.DOWNGRADE) {
+ RepositoryVersionEntity downgradeFromRepositoryVersion = upgradeContext.getDowngradeFromRepositoryVersion();
+ out.append(String.format("Setting all host versions back to %s for repository version %s",
+ RepositoryVersionState.INSTALLED, downgradeFromRepositoryVersion.getVersion()));
+
+ List<HostVersionEntity> hostVersionsToReset = m_hostVersionDAO.findHostVersionByClusterAndRepository(
+ cluster.getClusterId(), downgradeFromRepositoryVersion);
+
+ for (HostVersionEntity hostVersion : hostVersionsToReset) {
+ hostVersion.setState(RepositoryVersionState.INSTALLED);
+ }
+ }
+
return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", out.toString(), err.toString());
} catch (Exception e) {
StringWriter sw = new StringWriter();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/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 6cefd42..9098cf1 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
@@ -28,8 +28,6 @@ import org.apache.ambari.server.controller.ClusterResponse;
import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
import org.apache.ambari.server.events.ClusterConfigChangedEvent;
import org.apache.ambari.server.metadata.RoleCommandOrder;
-import org.apache.ambari.server.orm.entities.HostEntity;
-import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.PrivilegeEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
@@ -201,21 +199,7 @@ public interface Cluster {
VersionDefinitionXml versionDefinitionXml, boolean forceInstalled) throws AmbariException;
/**
- * For a given host, will either either update an existing Host Version Entity for the given version, or create
- * one if it doesn't exist
- *
- * @param host Host Entity object
- * @param repositoryVersion Repository Version that the host is transitioning to
- * @param stack Stack information with the version
- * @return Returns either the newly created or the updated Host Version Entity.
- * @throws AmbariException
- */
- HostVersionEntity transitionHostVersionState(HostEntity host,
- final RepositoryVersionEntity repositoryVersion, final StackId stack)
- throws AmbariException;
-
- /**
* Update state of a cluster stack version for cluster based on states of host versions and stackids.
* @param repositoryVersion the repository version entity whose version is a value like 2.2.1.0-100)
* @throws AmbariException
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
index b7f8d29..9a35bcc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
@@ -24,7 +24,7 @@ import java.util.Map;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.ServiceComponentHostResponse;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
@@ -234,12 +234,6 @@ public interface ServiceComponentHost {
*/
void setRestartRequired(boolean restartRequired);
- /**
- * Changes host version state according to state of the components installed on the host.
- * @return The Repository Version Entity with that component in the host
- * @throws AmbariException if host is detached from the cluster
- */
- RepositoryVersionEntity recalculateHostVersionState() throws AmbariException;
HostComponentDesiredStateEntity getDesiredStateEntity();
@@ -250,4 +244,14 @@ public interface ServiceComponentHost {
*/
ServiceComponent getServiceComponent();
+ /**
+ * Updates an existing {@link HostVersionEntity} for the desired repository of
+ * this component, or create one if it doesn't exist.
+ *
+ * @return Returns either the newly created or the updated Host Version
+ * Entity.
+ * @throws AmbariException
+ */
+ HostVersionEntity recalculateHostVersionState() throws AmbariException;
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
index f1bd900..a68a2e1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
@@ -43,6 +43,7 @@ import org.apache.ambari.server.state.stack.upgrade.Grouping;
import org.apache.ambari.server.state.stack.upgrade.UpgradeScope;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import com.google.common.base.Objects;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.inject.Inject;
@@ -138,6 +139,11 @@ public class UpgradeContext {
*/
private RepositoryVersionEntity m_targetRepositoryVersion;
+ /**
+ * Optionally set if {@link #setDowngradeFromVersion(String)} is called.
+ */
+ private RepositoryVersionEntity m_downgradeFromRepositoryVersion;
+
private MasterHostResolver m_resolver;
private AmbariMetaInfo m_metaInfo;
private List<ServiceComponentHost> m_unhealthy = new ArrayList<>();
@@ -249,7 +255,7 @@ public class UpgradeContext {
setSourceAndTargetVersions();
if (m_direction == Direction.DOWNGRADE) {
- m_downgradeFromVersion = upgradeEntity.getFromVersion();
+ setDowngradeFromVersion(upgradeEntity.getFromVersion());
}
// since this constructor is initialized from an entity, then this map is
@@ -309,7 +315,7 @@ public class UpgradeContext {
break;
}
- m_targetStackId = targetStackId;
+ m_targetStackId = m_targetRepositoryVersion.getStackId();
}
/**
@@ -499,7 +505,8 @@ public class UpgradeContext {
}
/**
- * This method returns the non-finalized version we are downgrading from.
+ * Optionally set if doing a downgrade. Represents the non-finalized version
+ * being downgraded from.
*
* @return version cluster is downgrading from
*/
@@ -508,12 +515,25 @@ public class UpgradeContext {
}
/**
+ * Optionally set if doing a downgrade. Represents the non-finalized version
+ * being downgraded from.
+ *
+ * @return
+ */
+ public RepositoryVersionEntity getDowngradeFromRepositoryVersion() {
+ return m_downgradeFromRepositoryVersion;
+ }
+
+ /**
* Set the HDP stack version we are downgrading from.
*
* @param downgradeFromVersion
*/
public void setDowngradeFromVersion(String downgradeFromVersion) {
m_downgradeFromVersion = downgradeFromVersion;
+
+ m_downgradeFromRepositoryVersion = m_repoVersionDAO.findByStackAndVersion(m_targetStackId,
+ downgradeFromVersion);
}
/**
@@ -683,4 +703,15 @@ public class UpgradeContext {
parameters.put(KeyNames.REFRESH_CONFIG_TAGS_BEFORE_EXECUTION, "true");
return parameters;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("direction", m_direction)
+ .add("type", m_type)
+ .add("target",m_targetRepositoryVersion).toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index bb84fb7..3ec907f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -779,7 +779,7 @@ public class UpgradeHelper {
}
// !!! if we aren't version advertised, but there IS a version, set it.
- if (!versionAdvertised && StringUtils.equals(StackVersionListener.UNKNOWN_VERSION,
+ if (!versionAdvertised && !StringUtils.equals(StackVersionListener.UNKNOWN_VERSION,
serviceComponentHost.getVersion())) {
serviceComponentHost.setVersion(StackVersionListener.UNKNOWN_VERSION);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/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 7e162d7..281523a 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
@@ -131,7 +131,6 @@ import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.scheduler.RequestExecution;
import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
-import org.apache.ambari.server.state.svccomphost.ServiceComponentHostSummary;
import org.apache.ambari.server.topology.TopologyRequest;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
@@ -1080,68 +1079,6 @@ public class ClusterImpl implements Cluster {
return hostsRequiringInstallation;
}
- /**
- * Transition the Host Version across states.
- * @param host Host object
- * @param repositoryVersion Repository Version with stack and version information
- * @param stack Stack information
- * @throws AmbariException
- */
- @Override
- @Transactional
- public HostVersionEntity transitionHostVersionState(HostEntity host, final RepositoryVersionEntity repositoryVersion, final StackId stack) throws AmbariException {
- StackEntity repoVersionStackEntity = repositoryVersion.getStack();
- StackId repoVersionStackId = new StackId(repoVersionStackEntity);
-
- HostVersionEntity hostVersionEntity = hostVersionDAO.findByClusterStackVersionAndHost(
- getClusterId(), repoVersionStackId, repositoryVersion.getVersion(),
- host.getHostId());
-
- hostTransitionStateWriteLock.lock();
- try {
- // Create one if it doesn't already exist. It will be possible to make further transitions below.
- boolean performingInitialBootstrap = false;
- if (hostVersionEntity == null) {
- if (hostVersionDAO.findByClusterAndHost(getClusterName(), host.getHostName()).isEmpty()) {
- // That is an initial bootstrap
- performingInitialBootstrap = true;
- }
- hostVersionEntity = new HostVersionEntity(host, repositoryVersion, RepositoryVersionState.INSTALLING);
-
- LOG.info("Creating host version for {}, state={}, repo={} (repo_id={})",
- hostVersionEntity.getHostName(), hostVersionEntity.getState(),
- hostVersionEntity.getRepositoryVersion().getVersion(), hostVersionEntity.getRepositoryVersion().getId());
-
- hostVersionDAO.create(hostVersionEntity);
- }
-
- HostVersionEntity currentVersionEntity = hostVersionDAO.findByHostAndStateCurrent(getClusterId(), host.getHostId());
- boolean isCurrentPresent = (currentVersionEntity != null);
- final ServiceComponentHostSummary hostSummary = new ServiceComponentHostSummary(ambariMetaInfo, host, stack);
-
- if (!isCurrentPresent) {
- // Transition from UPGRADING -> CURRENT. This is allowed because Host Version Entity is bootstrapped in an UPGRADING state.
- // Alternatively, transition to CURRENT during initial bootstrap if at least one host component advertised a version
- if (hostSummary.isUpgradeFinished() || performingInitialBootstrap) {
- hostVersionEntity.setState(RepositoryVersionState.CURRENT);
- hostVersionEntity = hostVersionDAO.merge(hostVersionEntity);
- }
- } else {
- // Handle transitions during a Stack Upgrade
- if (hostSummary.isUpgradeFinished() && hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
- currentVersionEntity.setState(RepositoryVersionState.INSTALLED);
- hostVersionEntity.setState(RepositoryVersionState.CURRENT);
-
- hostVersionDAO.merge(currentVersionEntity);
- hostVersionEntity = hostVersionDAO.merge(hostVersionEntity);
- }
- }
- } finally {
- hostTransitionStateWriteLock.unlock();
- }
- return hostVersionEntity;
- }
-
@Override
@Transactional
public void setCurrentStackVersion(StackId stackId) throws AmbariException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
index 056959e..e08b1f9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
@@ -24,7 +24,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
@@ -42,12 +41,14 @@ import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
+import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
+import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
@@ -61,6 +62,7 @@ import org.apache.ambari.server.state.HostComponentAdminState;
import org.apache.ambari.server.state.HostConfig;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.MaintenanceState;
+import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
@@ -82,6 +84,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableList;
+import com.google.common.util.concurrent.Striped;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
@@ -108,6 +111,9 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
@Inject
private RepositoryVersionDAO repositoryVersionDAO;
+ @Inject
+ private HostVersionDAO hostVersionDAO;
+
private final ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO;
private final Clusters clusters;
@@ -156,6 +162,12 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
private ImmutableList<Map<String, String>> processes = ImmutableList.of();
/**
+ * Used for preventing multiple components on the same host from trying to
+ * recalculate versions concurrently.
+ */
+ private static final Striped<Lock> HOST_VERSION_LOCK = Striped.lazyWeakLock(20);
+
+ /**
* The name of the host (which should never, ever change)
*/
private final String hostName;
@@ -1486,46 +1498,46 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
}
/**
- * Bootstrap any Repo Version, and potentially transition the Host Version across states.
- * If a Host Component has a valid version, then create a Host Version if it does not already exist.
- * If a Host Component does not have a version, return right away because no information is known.
- * @return Return the Repository Version object
- * @throws AmbariException
+ * {@inheritDoc}
*/
@Override
- public RepositoryVersionEntity recalculateHostVersionState() throws AmbariException {
- RepositoryVersionEntity repositoryVersion = null;
- String version = getVersion();
- if (getUpgradeState().equals(UpgradeState.IN_PROGRESS) ||
- getUpgradeState().equals(UpgradeState.VERSION_MISMATCH) ||
- State.UNKNOWN.toString().equals(version)) {
- // TODO: we still recalculate host version if upgrading component failed. It seems to be ok
- // Recalculate only if no upgrade in progress/no version mismatch
- return null;
- }
+ @Transactional
+ public HostVersionEntity recalculateHostVersionState() throws AmbariException {
+ RepositoryVersionEntity repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
+ HostEntity hostEntity = host.getHostEntity();
+ HostVersionEntity hostVersionEntity = hostVersionDAO.findHostVersionByHostAndRepository(
+ hostEntity, repositoryVersion);
- final String hostName = getHostName();
- final long hostId = getHost().getHostId();
- final Set<Cluster> clustersForHost = clusters.getClustersForHost(hostName);
- if (clustersForHost.size() != 1) {
- throw new AmbariException("Host " + hostName + " should be assigned only to one cluster");
- }
- final Cluster cluster = clustersForHost.iterator().next();
- final StackId stackId = cluster.getDesiredStackVersion();
- final StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
+ Lock lock = HOST_VERSION_LOCK.get(host.getHostName());
+ lock.lock();
+ try {
+ // Create one if it doesn't already exist. It will be possible to make
+ // further transitions below.
+ if (hostVersionEntity == null) {
+ hostVersionEntity = new HostVersionEntity(hostEntity, repositoryVersion,
+ RepositoryVersionState.INSTALLING);
+
+ LOG.info("Creating host version for {}, state={}, repo={} (repo_id={})",
+ hostVersionEntity.getHostName(), hostVersionEntity.getState(),
+ hostVersionEntity.getRepositoryVersion().getVersion(),
+ hostVersionEntity.getRepositoryVersion().getId());
+
+ hostVersionDAO.create(hostVersionEntity);
+ }
- // Check if there is a Repo Version already for the version.
- // If it doesn't exist, will have to create it.
- repositoryVersion = repositoryVersionDAO.findByStackNameAndVersion(stackId.getStackName(), version);
+ final ServiceComponentHostSummary hostSummary = new ServiceComponentHostSummary(
+ ambariMetaInfo, hostEntity, repositoryVersion);
- if (null == repositoryVersion) {
- repositoryVersion = createRepositoryVersion(version, stackId, stackInfo);
+ if (hostSummary.isVersionCorrectForAllHosts(repositoryVersion)) {
+ if (hostVersionEntity.getState() != RepositoryVersionState.CURRENT) {
+ hostVersionEntity.setState(RepositoryVersionState.CURRENT);
+ hostVersionEntity = hostVersionDAO.merge(hostVersionEntity);
+ }
+ }
+ } finally {
+ lock.unlock();
}
-
- final HostEntity host = hostDAO.findById(hostId);
- cluster.transitionHostVersionState(host, repositoryVersion, stackId);
-
- return repositoryVersion;
+ return hostVersionEntity;
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
index 75d5fa6..bc26edb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
@@ -21,17 +21,17 @@ package org.apache.ambari.server.state.svccomphost;
import java.util.Collection;
import java.util.HashSet;
-import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
-import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
import org.apache.ambari.server.state.ComponentInfo;
-import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.UpgradeState;
+import org.apache.commons.lang.StringUtils;
/**
@@ -43,14 +43,28 @@ public class ServiceComponentHostSummary {
private Collection<HostComponentStateEntity> haveAdvertisedVersion;
private Collection<HostComponentStateEntity> waitingToAdvertiseVersion;
private Collection<HostComponentStateEntity> noVersionToAdvertise;
- private Set<String> versions;
- public ServiceComponentHostSummary(AmbariMetaInfo ambariMetaInfo, HostEntity host, String stackName, String stackVersion) throws AmbariException {
+ /**
+ * Constructor.
+ *
+ * @param ambariMetaInfo
+ * used to lookup whether a component advertises a version (not
+ * {@code null}).
+ * @param host
+ * the host to generate a component summary for (not {@code null}).
+ * @param repositoryVersion
+ * the repository to generate a summary for (not {@code null}).
+ * @throws AmbariException
+ */
+ public ServiceComponentHostSummary(AmbariMetaInfo ambariMetaInfo, HostEntity host,
+ RepositoryVersionEntity repositoryVersion) throws AmbariException {
allHostComponents = host.getHostComponentStateEntities();
haveAdvertisedVersion = new HashSet<>();
waitingToAdvertiseVersion = new HashSet<>();
noVersionToAdvertise = new HashSet<>();
- versions = new HashSet<>();
+
+ String stackName = repositoryVersion.getStackName();
+ String stackVersion = repositoryVersion.getStackVersion();
for (HostComponentStateEntity hostComponentStateEntity : allHostComponents) {
ComponentInfo compInfo = ambariMetaInfo.getComponent(
@@ -60,64 +74,50 @@ public class ServiceComponentHostSummary {
if (!compInfo.isVersionAdvertised()) {
// Some Components cannot advertise a version. E.g., ZKF, AMBARI_METRICS, Kerberos
noVersionToAdvertise.add(hostComponentStateEntity);
- } else {
- if (hostComponentStateEntity.getUpgradeState().equals(UpgradeState.IN_PROGRESS) ||
- hostComponentStateEntity.getVersion().equalsIgnoreCase(State.UNKNOWN.toString())) {
- waitingToAdvertiseVersion.add(hostComponentStateEntity);
- } else {
- haveAdvertisedVersion.add(hostComponentStateEntity);
- versions.add(hostComponentStateEntity.getVersion());
- } // TODO: what if component reported wrong version?
+ continue;
}
- }
- }
-
- public ServiceComponentHostSummary(AmbariMetaInfo ambariMetaInfo, HostEntity host, StackId stackId) throws AmbariException {
- this(ambariMetaInfo, host, stackId.getStackName(), stackId.getStackVersion());
- }
-
- public Collection<HostComponentStateEntity> getHaveAdvertisedVersion() {
- return haveAdvertisedVersion;
- }
- public boolean isUpgradeFinished() {
- return haveAllComponentsFinishedAdvertisingVersion() && noComponentVersionMismatches(getHaveAdvertisedVersion());
- }
-
- /**
- * @param upgradeEntity Upgrade info about update on given host
- * @return Return true if multiple component versions are found for this host, or if it does not coincide with the
- * CURRENT repo version.
- */
- public boolean isUpgradeInProgress(UpgradeEntity upgradeEntity) {
- // Exactly one CURRENT version must exist
- // We can only detect an upgrade if the Host has at least one component that advertises a version and has done so already
- // If distinct versions have been advertises, then an upgrade is in progress.
- // If exactly one version has been advertises, but it doesn't coincide with the CURRENT HostVersion, then an upgrade is in progress.
- return upgradeEntity != null;
- }
+ String versionAdvertised = hostComponentStateEntity.getVersion();
+ if (hostComponentStateEntity.getUpgradeState() == UpgradeState.IN_PROGRESS
+ || StringUtils.equals(versionAdvertised, State.UNKNOWN.name())) {
+ waitingToAdvertiseVersion.add(hostComponentStateEntity);
+ continue;
+ }
- /**
- * Determine if all of the components on that need to advertise a version have finished doing so.
- * @return Return a bool indicating if all components that can report a version have done so.
- */
- public boolean haveAllComponentsFinishedAdvertisingVersion() {
- return waitingToAdvertiseVersion.isEmpty();
+ haveAdvertisedVersion.add(hostComponentStateEntity);
+ }
}
/**
- * Checks that every component has really advertised version (in other words, we are not waiting
- * for version advertising), and that no version mismatch occurred
+ * Gets whether all hosts for a service component have reported the correct
+ * version.
*
- * @param hostComponents host components
- * @return true if components have advertised the same version, or collection is empty, false otherwise.
+ * @param repositoryVersion
+ * the version to report (not {@code null}).
+ * @return {@code true} if all hosts for this service component have reported
+ * the correct version, {@code false} othwerise.
*/
- public static boolean noComponentVersionMismatches(Collection<HostComponentStateEntity> hostComponents) {
- for (HostComponentStateEntity hostComponent : hostComponents) {
+ public boolean isVersionCorrectForAllHosts(RepositoryVersionEntity repositoryVersion) {
+ if (!waitingToAdvertiseVersion.isEmpty()) {
+ return false;
+ }
+
+ for (HostComponentStateEntity hostComponent : haveAdvertisedVersion) {
if (UpgradeState.VERSION_NON_ADVERTISED_STATES.contains(hostComponent.getUpgradeState())) {
return false;
}
+
+ ServiceComponentDesiredStateEntity desiredState = hostComponent.getServiceComponentDesiredStateEntity();
+ RepositoryVersionEntity desiredRepositoryVersion = desiredState.getDesiredRepositoryVersion();
+ if (!desiredRepositoryVersion.equals(repositoryVersion)) {
+ continue;
+ }
+
+ if (!StringUtils.equals(hostComponent.getVersion(), desiredRepositoryVersion.getVersion())) {
+ return false;
+ }
}
+
return true;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
index 359d446..a2a1ea9 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -230,7 +230,7 @@ CREATE TABLE host_version (
CONSTRAINT PK_host_version PRIMARY KEY (id),
CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id),
- CONSTRAINT UQ_host_repo UNIQUE(repo_version_id, host_id));
+ CONSTRAINT UQ_host_repo UNIQUE(host_id, repo_version_id, state));
CREATE TABLE servicedesiredstate (
cluster_id BIGINT NOT NULL,
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index d5221dc..6dcbf3d 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -250,7 +250,7 @@ CREATE TABLE host_version (
CONSTRAINT PK_host_version PRIMARY KEY (id),
CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id),
- CONSTRAINT UQ_host_repo UNIQUE(repo_version_id, host_id));
+ CONSTRAINT UQ_host_repo UNIQUE(host_id, repo_version_id));
CREATE TABLE servicedesiredstate (
cluster_id BIGINT NOT NULL,
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index d49bd95..15de29c 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -230,7 +230,7 @@ CREATE TABLE host_version (
CONSTRAINT PK_host_version PRIMARY KEY (id),
CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id),
- CONSTRAINT UQ_host_repo UNIQUE(repo_version_id, host_id));
+ CONSTRAINT UQ_host_repo UNIQUE(host_id, repo_version_id));
CREATE TABLE servicedesiredstate (
cluster_id NUMBER(19) NOT NULL,
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index 2bd5a9d..9e2f2a7 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -228,7 +228,7 @@ CREATE TABLE host_version (
CONSTRAINT PK_host_version PRIMARY KEY (id),
CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id),
- CONSTRAINT UQ_host_repo UNIQUE(repo_version_id, host_id));
+ CONSTRAINT UQ_host_repo UNIQUE(host_id, repo_version_id));
CREATE TABLE servicedesiredstate (
cluster_id BIGINT NOT NULL,
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
index 72ae04b..473e8ca 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -227,7 +227,7 @@ CREATE TABLE host_version (
CONSTRAINT PK_host_version PRIMARY KEY (id),
CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id),
- CONSTRAINT UQ_host_repo UNIQUE(repo_version_id, host_id));
+ CONSTRAINT UQ_host_repo UNIQUE(host_id, repo_version_id));
CREATE TABLE servicedesiredstate (
cluster_id NUMERIC(19) NOT NULL,
http://git-wip-us.apache.org/repos/asf/ambari/blob/a2632675/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
index 676fde2..72189aa 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -683,7 +683,7 @@ CREATE TABLE host_version (
CONSTRAINT PK_host_version PRIMARY KEY CLUSTERED (id),
CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id),
- CONSTRAINT UQ_host_repo UNIQUE(repo_version_id, host_id));
+ CONSTRAINT UQ_host_repo UNIQUE(host_id, repo_version_id));
CREATE TABLE artifact (
artifact_name VARCHAR(255) NOT NULL,
[10/50] [abbrv] ambari git commit: AMBARI-20957. Remove
cluster_version use (ncole)
Posted by jo...@apache.org.
AMBARI-20957. Remove cluster_version use (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/aaa821cc
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/aaa821cc
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/aaa821cc
Branch: refs/heads/trunk
Commit: aaa821cc2455a29b1e83caf5eab98272053d5aa5
Parents: 15c04ed
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon May 8 15:29:14 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Tue May 9 10:31:50 2017 -0400
----------------------------------------------------------------------
.../apache/ambari/annotations/Experimental.java | 5 +
.../ambari/server/StateRecoveryManager.java | 30 +-
.../ambari/server/agent/ExecutionCommand.java | 5 +
.../server/checks/AbstractCheckDescriptor.java | 4 -
.../HardcodedStackVersionPropertiesCheck.java | 55 +-
.../server/checks/InstallPackagesCheck.java | 16 +-
.../YarnTimelineServerStatePreservingCheck.java | 6 +-
.../controller/AmbariActionExecutionHelper.java | 54 +-
.../AmbariCustomCommandExecutionHelper.java | 88 +--
.../AmbariManagementControllerImpl.java | 68 +-
.../server/controller/KerberosHelperImpl.java | 4 +-
.../ClusterStackVersionResourceProvider.java | 215 +++---
.../internal/HostResourceProvider.java | 19 +-
.../HostStackVersionResourceProvider.java | 1 -
.../RepositoryVersionResourceProvider.java | 54 +-
.../internal/ServiceResourceProvider.java | 19 +-
.../internal/UpgradeResourceProvider.java | 10 +-
.../DistributeRepositoriesActionListener.java | 9 -
.../upgrade/HostVersionOutOfSyncListener.java | 91 +--
.../listeners/upgrade/StackVersionListener.java | 9 +-
.../server/orm/dao/ClusterVersionDAO.java | 233 -------
.../ambari/server/orm/dao/HostVersionDAO.java | 22 +
.../server/orm/entities/ClusterEntity.java | 17 -
.../orm/entities/ClusterVersionEntity.java | 217 ------
.../server/orm/entities/HostVersionEntity.java | 5 +-
.../orm/entities/RepositoryVersionEntity.java | 11 -
.../ServiceComponentDesiredStateEntity.java | 2 +-
.../upgrades/FinalizeUpgradeAction.java | 3 -
.../apache/ambari/server/stack/RepoUtil.java | 6 +-
.../stack/UpdateActiveRepoVersionOnStartup.java | 49 +-
.../org/apache/ambari/server/state/Cluster.java | 82 +--
.../server/state/cluster/ClusterImpl.java | 658 +------------------
.../server/state/cluster/ClustersImpl.java | 13 -
.../services/RetryUpgradeActionService.java | 7 -
.../server/upgrade/UpgradeCatalog220.java | 5 +-
.../main/resources/Ambari-DDL-Derby-CREATE.sql | 13 -
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 12 -
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 12 -
.../resources/Ambari-DDL-Postgres-CREATE.sql | 13 -
.../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 13 -
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 13 -
.../src/main/resources/META-INF/persistence.xml | 2 -
.../ambari/server/StateRecoveryManagerTest.java | 66 +-
.../server/agent/HeartbeatProcessorTest.java | 31 +-
.../server/agent/HeartbeatTestHelper.java | 4 -
.../server/agent/TestHeartbeatHandler.java | 31 +-
.../server/agent/TestHeartbeatMonitor.java | 14 +-
.../server/checks/InstallPackagesCheckTest.java | 26 +-
...duce2JobHistoryStatePreservingCheckTest.java | 7 -
...nTimelineServerStatePreservingCheckTest.java | 11 -
.../configuration/RecoveryConfigHelperTest.java | 23 +-
.../AmbariManagementControllerImplTest.java | 40 +-
.../AmbariManagementControllerTest.java | 37 --
...ClusterStackVersionResourceProviderTest.java | 136 ++--
...leRepositoryVersionResourceProviderTest.java | 3 -
.../internal/HostResourceProviderTest.java | 7 -
.../RepositoryVersionResourceProviderTest.java | 74 +--
.../internal/ServiceResourceProviderTest.java | 43 +-
.../StackDefinedPropertyProviderTest.java | 3 -
.../UpgradeResourceProviderHDP22Test.java | 318 ---------
.../internal/UpgradeResourceProviderTest.java | 8 +-
.../UpgradeSummaryResourceProviderTest.java | 2 -
.../apache/ambari/server/events/EventsTest.java | 3 -
.../HostVersionOutOfSyncListenerTest.java | 95 ++-
.../upgrade/StackVersionListenerTest.java | 6 -
.../apache/ambari/server/orm/OrmTestHelper.java | 47 +-
.../server/orm/dao/ClusterVersionDAOTest.java | 264 --------
.../server/orm/dao/HostVersionDAOTest.java | 34 +-
.../orm/dao/RepositoryVersionDAOTest.java | 35 -
.../ComponentVersionCheckActionTest.java | 60 +-
.../upgrades/ConfigureActionTest.java | 6 -
.../upgrades/UpgradeActionTest.java | 45 +-
.../UpdateActiveRepoVersionOnStartupTest.java | 60 +-
.../ambari/server/state/CheckHelperTest.java | 2 -
.../server/state/ServiceComponentTest.java | 3 -
.../ambari/server/state/UpgradeHelperTest.java | 21 +-
.../state/cluster/ClusterDeadlockTest.java | 3 -
.../cluster/ClusterEffectiveVersionTest.java | 305 ---------
.../server/state/cluster/ClusterTest.java | 514 ++-------------
.../state/cluster/ClustersDeadlockTest.java | 3 -
.../server/state/cluster/ClustersTest.java | 26 +-
.../ConcurrentServiceConfigVersionTest.java | 3 -
...omponentHostConcurrentWriteDeadlockTest.java | 2 -
.../ambari/server/state/host/HostTest.java | 6 +-
.../services/RetryUpgradeActionServiceTest.java | 4 -
.../svccomphost/ServiceComponentHostTest.java | 26 +-
.../server/upgrade/UpgradeCatalog220Test.java | 106 +--
.../server/upgrade/UpgradeCatalog242Test.java | 22 +-
88 files changed, 704 insertions(+), 4051 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/annotations/Experimental.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/annotations/Experimental.java b/ambari-server/src/main/java/org/apache/ambari/annotations/Experimental.java
index f51991c..18e5db7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/annotations/Experimental.java
+++ b/ambari-server/src/main/java/org/apache/ambari/annotations/Experimental.java
@@ -39,4 +39,9 @@ public @interface Experimental {
* @return
*/
ExperimentalFeature feature();
+
+ /**
+ * Any notes to why the annotation is used or any other action that may be useful.
+ */
+ String comment() default "";
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/StateRecoveryManager.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/StateRecoveryManager.java b/ambari-server/src/main/java/org/apache/ambari/server/StateRecoveryManager.java
index 26e5be8..5a13fb3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/StateRecoveryManager.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/StateRecoveryManager.java
@@ -20,10 +20,10 @@ package org.apache.ambari.server;
import java.util.List;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
+import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
+import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,14 +42,12 @@ public class StateRecoveryManager {
private HostVersionDAO hostVersionDAO;
@Inject
- private ClusterVersionDAO clusterVersionDAO;
-
+ private ServiceComponentDesiredStateDAO serviceComponentDAO;
public void doWork() {
checkHostAndClusterVersions();
}
-
void checkHostAndClusterVersions() {
List<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
for (HostVersionEntity hostVersion : hostVersions) {
@@ -66,18 +64,20 @@ public class StateRecoveryManager {
}
}
- List<ClusterVersionEntity> clusterVersions = clusterVersionDAO.findAll();
- for (ClusterVersionEntity clusterVersion : clusterVersions) {
- if (clusterVersion.getState().equals(RepositoryVersionState.INSTALLING)) {
- clusterVersion.setState(RepositoryVersionState.INSTALL_FAILED);
+ List<ServiceComponentDesiredStateEntity> components = serviceComponentDAO.findAll();
+ for (ServiceComponentDesiredStateEntity component : components) {
+ if (RepositoryVersionState.INSTALLING == component.getRepositoryState()) {
+ component.setRepositoryState(RepositoryVersionState.INSTALL_FAILED);
+ serviceComponentDAO.merge(component);
String msg = String.format(
- "Recovered state of cluster version %s for cluster %s from %s to %s",
- clusterVersion.getRepositoryVersion().getDisplayName(),
- clusterVersion.getClusterEntity().getClusterName(),
- RepositoryVersionState.INSTALLING,
- RepositoryVersionState.INSTALL_FAILED);
+ "Recovered state of cluster %s of component %s/%s for version %s from %s to %s",
+ component.getClusterId(),
+ component.getServiceName(),
+ component.getComponentName(),
+ component.getDesiredRepositoryVersion().getDisplayName(),
+ RepositoryVersionState.INSTALLING,
+ RepositoryVersionState.INSTALL_FAILED);
LOG.warn(msg);
- clusterVersionDAO.merge(clusterVersion);
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
index 63eb660..4ab50ea 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
@@ -502,5 +502,10 @@ public class ExecutionCommand extends AgentCommand {
@Deprecated
@Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
String REPO_VERSION_ID = "repository_version_id";
+
+ /**
+ * Put on hostLevelParams to indicate the version that the component should be.
+ */
+ String CURRENT_VERSION = "current_version";
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
index 707c756..2fc1787 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
@@ -28,7 +28,6 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
@@ -65,9 +64,6 @@ public abstract class AbstractCheckDescriptor {
Provider<Clusters> clustersProvider;
@Inject
- Provider<ClusterVersionDAO> clusterVersionDAOProvider;
-
- @Inject
Provider<HostVersionDAO> hostVersionDaoProvider;
@Inject
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java
index 314d1a7..bec7c9f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java
@@ -27,18 +27,14 @@ import java.util.regex.Pattern;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
-import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.apache.commons.lang.StringUtils;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
import com.google.inject.Singleton;
/**
@@ -53,12 +49,6 @@ import com.google.inject.Singleton;
required = { UpgradeType.ROLLING, UpgradeType.NON_ROLLING, UpgradeType.HOST_ORDERED })
public class HardcodedStackVersionPropertiesCheck extends AbstractCheckDescriptor {
- @Inject
- private Provider<Clusters> m_clusters;
-
- @Inject
- private Provider<ConfigHelper> m_config_helper_provider;
-
public HardcodedStackVersionPropertiesCheck() {
super(CheckDescription.HARDCODED_STACK_VERSION_PROPERTIES_CHECK);
}
@@ -67,18 +57,13 @@ public class HardcodedStackVersionPropertiesCheck extends AbstractCheckDescripto
public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
throws AmbariException {
- String stackName = request.getTargetStackId().getStackName();
- RepositoryVersionEntity rve = repositoryVersionDaoProvider.get().
- findByStackNameAndVersion(stackName, request.getRepositoryVersion());
-
- Cluster cluster = m_clusters.get().getCluster(request.getClusterName());
+ Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- String currentHdpVersion = cluster.getCurrentClusterVersion().getRepositoryVersion().getVersion();
-
- Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs();
+ Set<String> versions = new HashSet<>();
Set<String> failures = new HashSet<>();
+ Set<String> failedVersions = new HashSet<>();
- Pattern searchPattern = getHardcodeSearchPattern(currentHdpVersion);
+ Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs();
for (Entry<String, DesiredConfig> configEntry : desiredConfigs.entrySet()) {
String configType = configEntry.getKey();
DesiredConfig desiredConfig = configEntry.getValue();
@@ -86,23 +71,31 @@ public class HardcodedStackVersionPropertiesCheck extends AbstractCheckDescripto
Map<String, String> properties = config.getProperties();
for (Entry<String, String> property : properties.entrySet()) {
- if (stringContainsVersionHardcode(property.getValue(), searchPattern)) {
- failures.add(String.format(" %s/%s",
- configType, property.getKey()));
+
+ // !!! this code is already iterating every config property, so an extra loop for the small-ish
+ // numbers of repository versions won't add that much more overhead
+ for (String version : versions) {
+ Pattern searchPattern = getHardcodeSearchPattern(version);
+ if (stringContainsVersionHardcode(property.getValue(), searchPattern)) {
+ failedVersions.add(version);
+ failures.add(String.format("%s/%s found a hardcoded value %s",
+ configType, property.getKey(), version));
+ }
}
}
+ }
- if (failures.size() > 0) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.WARNING);
- String failReason = getFailReason(prerequisiteCheck, request);
+ if (failures.size() > 0) {
+ prerequisiteCheck.setStatus(PrereqCheckStatus.WARNING);
+ String failReason = getFailReason(prerequisiteCheck, request);
- prerequisiteCheck.setFailReason(String.format(failReason, currentHdpVersion));
- prerequisiteCheck.setFailedOn(new LinkedHashSet<>(failures));
+ prerequisiteCheck.setFailReason(String.format(failReason, StringUtils.join(failedVersions, ',')));
+ prerequisiteCheck.setFailedOn(new LinkedHashSet<>(failures));
- } else {
- prerequisiteCheck.setStatus(PrereqCheckStatus.PASS);
- }
+ } else {
+ prerequisiteCheck.setStatus(PrereqCheckStatus.PASS);
}
+
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java
index 2c20762..ac2116f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java
@@ -24,7 +24,6 @@ import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
@@ -75,8 +74,6 @@ public class InstallPackagesCheck extends AbstractCheckDescriptor {
return;
}
- final ClusterVersionEntity clusterVersion = clusterVersionDAOProvider.get().findByClusterAndStackAndVersion(
- clusterName, targetStackId, repoVersion);
final Set<String> failedHosts = new HashSet<>();
for (Host host : cluster.getHosts()) {
@@ -98,16 +95,9 @@ public class InstallPackagesCheck extends AbstractCheckDescriptor {
prerequisiteCheck.setFailedOn(new LinkedHashSet<>(failedHosts));
prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
prerequisiteCheck.setFailReason(message);
- } else if (clusterVersion.getState() == RepositoryVersionState.INSTALL_FAILED) {
- String message = MessageFormat.format("Cluster [{0},{1},{2},{3}] is in INSTALL_FAILED state because " +
- "Install Packages failed. Please re-run Install Packages even if you placed the failed hosts " +
- "in Maintenance mode.", cluster.getClusterName(), targetStackId.getStackName(),
- targetStackId.getStackVersion(), repoVersion);
- LinkedHashSet<String> failedOn = new LinkedHashSet<>();
- failedOn.add(cluster.getClusterName());
- prerequisiteCheck.setFailedOn(failedOn);
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.setFailReason(message);
+ return;
}
+
+ prerequisiteCheck.setStatus(PrereqCheckStatus.PASS);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
index 2200a45..d8dba96 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
import org.apache.ambari.server.state.stack.UpgradePack.PrerequisiteCheckConfig;
@@ -83,8 +84,9 @@ public class YarnTimelineServerStatePreservingCheck extends AbstractCheckDescrip
String minStackVersion = minStack[1];
String stackName = cluster.getCurrentStackVersion().getStackName();
if (minStackName.equals(stackName)) {
- String currentClusterRepositoryVersion = cluster.getCurrentClusterVersion().getRepositoryVersion().getVersion();
- return VersionUtils.compareVersions(currentClusterRepositoryVersion, minStackVersion) >= 0;
+ Service yarnService = cluster.getService("YARN");
+ String currentRepositoryVersion = yarnService.getDesiredRepositoryVersion().getVersion();
+ return VersionUtils.compareVersions(currentRepositoryVersion, minStackVersion) >= 0;
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
index 835d607..9fb77e8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
@@ -47,13 +47,13 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.internal.RequestResourceFilter;
import org.apache.ambari.server.customactions.ActionDefinition;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
@@ -91,8 +91,6 @@ public class AmbariActionExecutionHelper {
private MaintenanceStateHelper maintenanceStateHelper;
@Inject
private Configuration configs;
- @Inject
- private ClusterVersionDAO clusterVersionDAO;
/**
* Validates the request to execute an action.
@@ -457,7 +455,12 @@ public class AmbariActionExecutionHelper {
for (Map.Entry<String, String> previousDBConnectorName : configs.getPreviousDatabaseConnectorNames().entrySet()) {
hostLevelParams.put(previousDBConnectorName.getKey(), previousDBConnectorName.getValue());
}
- addRepoInfoToHostLevelParams(cluster, hostLevelParams, hostName);
+
+ if (StringUtils.isNotBlank(serviceName)) {
+ Service service = cluster.getService(serviceName);
+ addRepoInfoToHostLevelParams(service.getDesiredRepositoryVersion(), hostLevelParams, hostName);
+ }
+
Map<String, String> roleParams = execCmd.getRoleParams();
if (roleParams == null) {
@@ -519,38 +522,35 @@ public class AmbariActionExecutionHelper {
*
* */
- private void addRepoInfoToHostLevelParams(Cluster cluster, Map<String, String> hostLevelParams, String hostName) throws AmbariException {
- if (null == cluster) {
+ private void addRepoInfoToHostLevelParams(RepositoryVersionEntity repositoryVersion,
+ Map<String, String> hostLevelParams, String hostName) throws AmbariException {
+ if (null == repositoryVersion) {
return;
}
JsonObject rootJsonObject = new JsonObject();
JsonArray repositories = new JsonArray();
- ClusterVersionEntity clusterVersionEntity = clusterVersionDAO.findByClusterAndStateCurrent(
- cluster.getClusterName());
- if (clusterVersionEntity != null && clusterVersionEntity.getRepositoryVersion() != null) {
- String hostOsFamily = clusters.getHost(hostName).getOsFamily();
- for (OperatingSystemEntity operatingSystemEntity : clusterVersionEntity.getRepositoryVersion().getOperatingSystems()) {
- // ostype in OperatingSystemEntity it's os family. That should be fixed
- // in OperatingSystemEntity.
- if (operatingSystemEntity.getOsType().equals(hostOsFamily)) {
- for (RepositoryEntity repositoryEntity : operatingSystemEntity.getRepositories()) {
- JsonObject repositoryInfo = new JsonObject();
- repositoryInfo.addProperty("base_url", repositoryEntity.getBaseUrl());
- repositoryInfo.addProperty("repo_name", repositoryEntity.getName());
- repositoryInfo.addProperty("repo_id", repositoryEntity.getRepositoryId());
-
- repositories.add(repositoryInfo);
- }
- rootJsonObject.add("repositories", repositories);
+
+ String hostOsFamily = clusters.getHost(hostName).getOsFamily();
+ for (OperatingSystemEntity operatingSystemEntity : repositoryVersion.getOperatingSystems()) {
+ // ostype in OperatingSystemEntity it's os family. That should be fixed
+ // in OperatingSystemEntity.
+ if (operatingSystemEntity.getOsType().equals(hostOsFamily)) {
+ for (RepositoryEntity repositoryEntity : operatingSystemEntity.getRepositories()) {
+ JsonObject repositoryInfo = new JsonObject();
+ repositoryInfo.addProperty("base_url", repositoryEntity.getBaseUrl());
+ repositoryInfo.addProperty("repo_name", repositoryEntity.getName());
+ repositoryInfo.addProperty("repo_id", repositoryEntity.getRepositoryId());
+
+ repositories.add(repositoryInfo);
}
+ rootJsonObject.add("repositories", repositories);
}
}
hostLevelParams.put(REPO_INFO, rootJsonObject.toString());
- StackId stackId = cluster.getCurrentStackVersion();
- hostLevelParams.put(STACK_NAME, stackId.getStackName());
- hostLevelParams.put(STACK_VERSION, stackId.getStackVersion());
+ hostLevelParams.put(STACK_NAME, repositoryVersion.getStackName());
+ hostLevelParams.put(STACK_VERSION, repositoryVersion.getStackVersion());
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/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 1d43093..617d7c0 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
@@ -76,10 +76,7 @@ import org.apache.ambari.server.controller.internal.RequestOperationLevel;
import org.apache.ambari.server.controller.internal.RequestResourceFilter;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.metadata.ActionMetadata;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
-import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@ -96,7 +93,6 @@ import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.MaintenanceState;
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.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
@@ -178,15 +174,8 @@ public class AmbariCustomCommandExecutionHelper {
private OsFamily os_family;
@Inject
- private ClusterVersionDAO clusterVersionDAO;
-
- @Inject
private HostRoleCommandDAO hostRoleCommandDAO;
- @Inject
- private ServiceComponentDesiredStateDAO serviceComponentDAO;
-
-
private Map<String, Map<String, Map<String, String>>> configCredentialsForService = new HashMap<>();
protected static final String SERVICE_CHECK_COMMAND_NAME = "SERVICE_CHECK";
@@ -338,8 +327,6 @@ public class AmbariCustomCommandExecutionHelper {
StackInfo stackInfo = ambariMetaInfo.getStack
(stackId.getStackName(), stackId.getStackVersion());
- ClusterVersionEntity effectiveClusterVersion = cluster.getEffectiveClusterVersion();
-
CustomCommandDefinition customCommandDefinition = null;
ComponentInfo ci = serviceInfo.getComponentByName(componentName);
if(ci != null){
@@ -493,8 +480,17 @@ public class AmbariCustomCommandExecutionHelper {
commandParams.put(SERVICE_PACKAGE_FOLDER, serviceInfo.getServicePackageFolder());
commandParams.put(HOOKS_FOLDER, stackInfo.getStackHooksFolder());
- if (effectiveClusterVersion != null) {
- commandParams.put(KeyNames.VERSION, effectiveClusterVersion.getRepositoryVersion().getVersion());
+ RepositoryVersionEntity repoVersion = null;
+ if (null != component) {
+ repoVersion = component.getDesiredRepositoryVersion();
+ }
+
+ if (null == repoVersion && null != clusterService) {
+ repoVersion = clusterService.getDesiredRepositoryVersion();
+ }
+
+ if (repoVersion != null) {
+ commandParams.put(KeyNames.VERSION, repoVersion.getVersion());
}
Map<String, String> roleParams = execCmd.getRoleParams();
@@ -1370,36 +1366,15 @@ public class AmbariCustomCommandExecutionHelper {
// !!! try to find the component repo first
if (null != component) {
repositoryEntity = component.getDesiredRepositoryVersion();
- }
-
- if (null == component) {
+ } else {
LOG.info("Service component not passed in, attempt to resolve the repository for cluster {}",
cluster.getClusterName());
}
- if (null == repositoryEntity) {
-
- ClusterVersionEntity cve = cluster.getCurrentClusterVersion();
-
- if (null == cve) {
- List<ClusterVersionEntity> list = clusterVersionDAO.findByClusterAndState(cluster.getClusterName(),
- RepositoryVersionState.INIT);
+ if (null == repositoryEntity && null != component) {
+ Service service = cluster.getService(component.getServiceName());
- 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()) {
- repositoryEntity = cve.getRepositoryVersion();
- } else {
- LOG.info("Cluster {} has no specific Repository Versions. Using stack-defined values", cluster.getClusterName());
- }
+ repositoryEntity = service.getDesiredRepositoryVersion();
}
if (null == repositoryEntity) {
@@ -1429,16 +1404,18 @@ public class AmbariCustomCommandExecutionHelper {
String clusterHostInfoJson = "{}";
if (null != cluster) {
- clusterHostInfo = StageUtils.getClusterHostInfo(
- cluster);
+ clusterHostInfo = StageUtils.getClusterHostInfo(cluster);
+
// Important, because this runs during Stack Uprade, it needs to use the effective Stack Id.
- hostParamsStage = createDefaultHostParams(cluster, stackId);
+ hostParamsStage = createDefaultHostParams(cluster, null);
+
String componentName = null;
String serviceName = null;
if (actionExecContext.getOperationLevel() != null) {
componentName = actionExecContext.getOperationLevel().getHostComponentName();
serviceName = actionExecContext.getOperationLevel().getServiceName();
}
+
if (serviceName != null && componentName != null) {
ComponentInfo componentInfo = ambariMetaInfo.getComponent(
stackId.getStackName(), stackId.getStackVersion(),
@@ -1473,12 +1450,16 @@ public class AmbariCustomCommandExecutionHelper {
hostParamsStageJson);
}
- Map<String, String> createDefaultHostParams(Cluster cluster) throws AmbariException {
+ Map<String, String> createDefaultHostParams(Cluster cluster, RepositoryVersionEntity repositoryVersion) throws AmbariException {
StackId stackId = cluster.getDesiredStackVersion();
- return createDefaultHostParams(cluster, stackId);
- }
+ if (null == stackId && null != repositoryVersion) {
+ stackId = repositoryVersion.getStackId();
+ }
+
+ if (null == stackId) {
+ throw new AmbariException(String.format("Could not find desired stack id for cluster %s", cluster.getClusterName()));
+ }
- Map<String, String> createDefaultHostParams(Cluster cluster, StackId stackId) throws AmbariException{
TreeMap<String, String> hostLevelParams = new TreeMap<>();
hostLevelParams.put(JDK_LOCATION, managementController.getJdkResourceUrl());
hostLevelParams.put(JAVA_HOME, managementController.getJavaHome());
@@ -1501,14 +1482,10 @@ public class AmbariCustomCommandExecutionHelper {
String notManagedHdfsPathList = gson.toJson(notManagedHdfsPathSet);
hostLevelParams.put(NOT_MANAGED_HDFS_PATH_LIST, notManagedHdfsPathList);
- ClusterVersionEntity clusterVersionEntity = clusterVersionDAO.findByClusterAndStateCurrent(cluster.getClusterName());
- if (clusterVersionEntity == null) {
- List<ClusterVersionEntity> clusterVersionEntityList = clusterVersionDAO
- .findByClusterAndState(cluster.getClusterName(), RepositoryVersionState.INSTALLING);
- if (!clusterVersionEntityList.isEmpty()) {
- clusterVersionEntity = clusterVersionEntityList.iterator().next();
- }
+ if (null != repositoryVersion) {
+ hostLevelParams.put(KeyNames.CURRENT_VERSION, repositoryVersion.getVersion());
}
+
for (Map.Entry<String, String> dbConnectorName : configs.getDatabaseConnectorNames().entrySet()) {
hostLevelParams.put(dbConnectorName.getKey(), dbConnectorName.getValue());
}
@@ -1516,9 +1493,6 @@ public class AmbariCustomCommandExecutionHelper {
hostLevelParams.put(previousDBConnectorName.getKey(), previousDBConnectorName.getValue());
}
- if (clusterVersionEntity != null) {
- hostLevelParams.put("current_version", clusterVersionEntity.getRepositoryVersion().getVersion());
- }
return hostLevelParams;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/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 e2bd50f..ab9b879 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
@@ -110,7 +110,6 @@ import org.apache.ambari.server.metadata.ActionMetadata;
import org.apache.ambari.server.metadata.RoleCommandOrder;
import org.apache.ambari.server.metadata.RoleCommandOrderProvider;
import org.apache.ambari.server.orm.dao.ClusterDAO;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.ExtensionDAO;
import org.apache.ambari.server.orm.dao.ExtensionLinkDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
@@ -119,7 +118,6 @@ import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.dao.WidgetDAO;
import org.apache.ambari.server.orm.dao.WidgetLayoutDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.ExtensionEntity;
import org.apache.ambari.server.orm.entities.ExtensionLinkEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
@@ -171,7 +169,6 @@ 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;
@@ -303,8 +300,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
@Inject
private CredentialStoreService credentialStoreService;
@Inject
- private ClusterVersionDAO clusterVersionDAO;
- @Inject
private SettingDAO settingDAO;
private MaintenanceStateHelper maintenanceStateHelper;
@@ -495,17 +490,6 @@ 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
@@ -1719,8 +1703,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
cluster.setCurrentStackVersion(desiredVersion);
}
- // Stack Upgrade: unlike the workflow for creating a cluster, updating a cluster via the API will not
- // create any ClusterVersionEntity changes because those have to go through the Stack Upgrade process.
boolean requiresHostListUpdate =
request.getHostNames() != null && !request.getHostNames().isEmpty();
@@ -2193,7 +2175,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
Map<String, String> commandParamsInp,
ServiceComponentHostEvent event,
boolean skipFailure,
- ClusterVersionEntity effectiveClusterVersion,
+ RepositoryVersionEntity repoVersion,
boolean isUpgradeSuspended,
DatabaseType databaseType,
Map<String, DesiredConfig> clusterDesiredConfigs
@@ -2316,8 +2298,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
commandParams.put(MAX_DURATION_OF_RETRIES, Integer.toString(retryMaxTime));
commandParams.put(COMMAND_RETRY_ENABLED, Boolean.toString(retryEnabled));
- if (effectiveClusterVersion != null) {
- commandParams.put(VERSION, effectiveClusterVersion.getRepositoryVersion().getVersion());
+ if (repoVersion != null) {
+ commandParams.put(VERSION, repoVersion.getVersion());
}
if (script.getTimeout() > 0) {
scriptCommandTimeout = String.valueOf(script.getTimeout());
@@ -2369,20 +2351,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
hostParams.put(REPO_INFO, repoInfo);
hostParams.putAll(getRcaParameters());
- // use the effective cluster version here since this command might happen
- // in the context of an upgrade and we should send the repo ID which matches
- // the version being send down
- RepositoryVersionEntity repoVersion = null;
- if (null != effectiveClusterVersion) {
- repoVersion = effectiveClusterVersion.getRepositoryVersion();
- } else {
- List<ClusterVersionEntity> list = clusterVersionDAO.findByClusterAndState(cluster.getClusterName(),
- RepositoryVersionState.INIT);
- if (1 == list.size()) {
- repoVersion = list.get(0).getRepositoryVersion();
- }
- }
-
if (null != repoVersion) {
try {
VersionDefinitionXml xml = repoVersion.getRepositoryXml();
@@ -2473,6 +2441,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
execCmd.setAvailableServicesFromServiceInfoMap(ambariMetaInfo.getServices(stackId.getStackName(), stackId.getStackVersion()));
execCmd.setRepositoryFile(customCommandExecutionHelper.getCommandRepository(cluster, component, host));
+ hostParams.put(KeyNames.CURRENT_VERSION, repoVersion.getVersion());
if ((execCmd != null) && (execCmd.getConfigurationTags().containsKey("cluster-env"))) {
LOG.debug("AmbariManagementControllerImpl.createHostAction: created ExecutionCommand for host {}, role {}, roleCommand {}, and command ID {}, with cluster-env tags {}",
@@ -2598,9 +2567,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
return requestStages;
}
- // caching effective cluster version
- ClusterVersionEntity effectiveClusterVersion = cluster.getEffectiveClusterVersion();
-
// caching upgrade suspended
boolean isUpgradeSuspended = cluster.isUpgradeSuspended();
@@ -2627,7 +2593,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
String clusterHostInfoJson = StageUtils.getGson().toJson(clusterHostInfo);
String hostParamsJson = StageUtils.getGson().toJson(
- customCommandExecutionHelper.createDefaultHostParams(cluster));
+ customCommandExecutionHelper.createDefaultHostParams(cluster, null));
Stage stage = createNewStage(requestStages.getLastStageId(), cluster,
requestStages.getId(), requestProperties.get(REQUEST_CONTEXT_PROPERTY),
@@ -2924,6 +2890,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
requestParameters = new HashMap<>();
}
requestParameters.put(CLUSTER_PHASE_PROPERTY, requestProperties.get(CLUSTER_PHASE_PROPERTY));
+
}
Map<String, Map<String, String>> configurations = new TreeMap<>();
@@ -2943,8 +2910,11 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
LOG.info("Skipping create of INSTALL task for {} on {}.", scHost.getServiceComponentName(), scHost.getHostName());
scHost.setState(State.INSTALLED);
} else {
+ // !!! can never be null
+ RepositoryVersionEntity repoVersion = serviceComponent.getDesiredRepositoryVersion();
+
createHostAction(cluster, stage, scHost, configurations, configurationAttributes, configTags,
- roleCommand, requestParameters, event, skipFailure, effectiveClusterVersion, isUpgradeSuspended,
+ roleCommand, requestParameters, event, skipFailure, repoVersion, isUpgradeSuspended,
databaseType, clusterDesiredConfigs);
}
@@ -3068,7 +3038,11 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
RoleCommand roleCommand) throws AmbariException {
Map<String, Set<String>> clusterHostInfo = StageUtils.getClusterHostInfo(cluster);
String clusterHostInfoJson = StageUtils.getGson().toJson(clusterHostInfo);
- Map<String, String> hostParamsCmd = customCommandExecutionHelper.createDefaultHostParams(cluster);
+
+
+ Map<String, String> hostParamsCmd = customCommandExecutionHelper.createDefaultHostParams(
+ cluster, scHost.getServiceComponent().getDesiredRepositoryVersion());
+
Stage stage = createNewStage(0, cluster,
1, "",
clusterHostInfoJson, "{}", "");
@@ -3081,12 +3055,19 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
configurationAttributes =
new TreeMap<>();
- ClusterVersionEntity effectiveClusterVersion = cluster.getEffectiveClusterVersion();
+ RepositoryVersionEntity repoVersion = null;
+ if (null != scHost.getServiceComponent().getDesiredRepositoryVersion()) {
+ repoVersion = scHost.getServiceComponent().getDesiredRepositoryVersion();
+ } else {
+ Service service = cluster.getService(scHost.getServiceName());
+ repoVersion = service.getDesiredRepositoryVersion();
+ }
+
boolean isUpgradeSuspended = cluster.isUpgradeSuspended();
DatabaseType databaseType = configs.getDatabaseType();
Map<String, DesiredConfig> clusterDesiredConfigs = cluster.getDesiredConfigs();
createHostAction(cluster, stage, scHost, configurations, configurationAttributes, configTags,
- roleCommand, null, null, false, effectiveClusterVersion, isUpgradeSuspended, databaseType,
+ roleCommand, null, null, false, repoVersion, isUpgradeSuspended, databaseType,
clusterDesiredConfigs);
ExecutionCommand ec = stage.getExecutionCommands().get(scHost.getHostName()).get(0).getExecutionCommand();
@@ -4010,6 +3991,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
if (null != cluster) {
stackId = cluster.getDesiredStackVersion();
}
+
ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext, cluster, stackId);
String commandParamsForStage = jsons.getCommandParamsForStage();
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
index 6687942..8a5731b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
@@ -1689,7 +1689,7 @@ public class KerberosHelperImpl implements KerberosHelper {
// Gather data needed to create stages and tasks...
Map<String, Set<String>> clusterHostInfo = StageUtils.getClusterHostInfo(cluster);
String clusterHostInfoJson = StageUtils.getGson().toJson(clusterHostInfo);
- Map<String, String> hostParams = customCommandExecutionHelper.createDefaultHostParams(cluster);
+ Map<String, String> hostParams = customCommandExecutionHelper.createDefaultHostParams(cluster, null);
String hostParamsJson = StageUtils.getGson().toJson(hostParams);
String ambariServerHostname = StageUtils.getHostName();
ServiceComponentHostServerActionEvent event = new ServiceComponentHostServerActionEvent(
@@ -1889,7 +1889,7 @@ public class KerberosHelperImpl implements KerberosHelper {
// Gather data needed to create stages and tasks...
Map<String, Set<String>> clusterHostInfo = StageUtils.getClusterHostInfo(cluster);
String clusterHostInfoJson = StageUtils.getGson().toJson(clusterHostInfo);
- Map<String, String> hostParams = customCommandExecutionHelper.createDefaultHostParams(cluster);
+ Map<String, String> hostParams = customCommandExecutionHelper.createDefaultHostParams(cluster, null);
String hostParamsJson = StageUtils.getGson().toJson(hostParams);
String ambariServerHostname = StageUtils.getHostName();
ServiceComponentHostServerActionEvent event = new ServiceComponentHostServerActionEvent(
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index fd52a3f..774ba0c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -35,7 +35,6 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.Role;
import org.apache.ambari.server.StaticallyInject;
import org.apache.ambari.server.actionmanager.ActionManager;
-import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
import org.apache.ambari.server.actionmanager.RequestFactory;
import org.apache.ambari.server.actionmanager.Stage;
import org.apache.ambari.server.actionmanager.StageFactory;
@@ -56,11 +55,9 @@ import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
@@ -68,7 +65,6 @@ import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.security.authorization.RoleAuthorization;
-import org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
@@ -81,6 +77,7 @@ import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.ambari.server.utils.VersionUtils;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
@@ -88,7 +85,6 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
-import com.google.inject.Injector;
import com.google.inject.Provider;
import com.google.inject.persist.Transactional;
@@ -156,18 +152,12 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
.build();
@Inject
- private static ClusterVersionDAO clusterVersionDAO;
-
- @Inject
private static HostVersionDAO hostVersionDAO;
@Inject
private static RepositoryVersionDAO repositoryVersionDAO;
@Inject
- private static HostRoleCommandFactory hostRoleCommandFactory;
-
- @Inject
private static Provider<AmbariActionExecutionHelper> actionExecutionHelper;
@Inject
@@ -180,20 +170,15 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
private static Configuration configuration;
@Inject
- private static Injector injector;
-
- @Inject
private static HostComponentStateDAO hostComponentStateDAO;
@Inject
private static RepositoryVersionHelper repoVersionHelper;
- /**
- * We have to include such a hack here, because if we
- * make finalizeUpgradeAction field static and request injection
- * for it, there will be a circle dependency error
- */
- private FinalizeUpgradeAction finalizeUpgradeAction = injector.getInstance(FinalizeUpgradeAction.class);
+
+
+ @Inject
+ private static Provider<Clusters> clusters;
/**
* Constructor.
@@ -208,70 +193,107 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
}
@Override
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES,
+ comment = "this is a fake response until the UI no longer uses the endpoint")
public Set<Resource> getResourcesAuthorized(Request request, Predicate predicate) throws
SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
final Set<Resource> resources = new HashSet<>();
+
final Set<String> requestedIds = getRequestPropertyIds(request, predicate);
final Set<Map<String, Object>> propertyMaps = getPropertyMaps(predicate);
- List<ClusterVersionEntity> requestedEntities = new ArrayList<>();
- for (Map<String, Object> propertyMap: propertyMaps) {
- final String clusterName = propertyMap.get(CLUSTER_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID).toString();
- final Long id;
- if (propertyMap.get(CLUSTER_STACK_VERSION_ID_PROPERTY_ID) == null && propertyMaps.size() == 1) {
- requestedEntities = clusterVersionDAO.findByCluster(clusterName);
- } else {
- try {
- id = Long.parseLong(propertyMap.get(CLUSTER_STACK_VERSION_ID_PROPERTY_ID).toString());
- } catch (Exception ex) {
- throw new SystemException("Stack version should have numerical id");
- }
- final ClusterVersionEntity entity = clusterVersionDAO.findByPK(id);
- if (entity == null) {
- throw new NoSuchResourceException("There is no stack version with id " + id);
- } else {
- requestedEntities.add(entity);
- }
+ if (1 != propertyMaps.size()) {
+ throw new SystemException("Cannot request more than one resource");
+ }
+
+ Map<String, Object> propertyMap = propertyMaps.iterator().next();
+
+ String clusterName = propertyMap.get(CLUSTER_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID).toString();
+ final Cluster cluster;
+ try {
+ cluster = clusters.get().getCluster(clusterName);
+ } catch (AmbariException e) {
+ throw new SystemException(e.getMessage(), e);
+ }
+
+ Set<Long> requestedEntities = new HashSet<>();
+
+ if (propertyMap.containsKey(CLUSTER_STACK_VERSION_ID_PROPERTY_ID)) {
+ Long id = Long.parseLong(propertyMap.get(CLUSTER_STACK_VERSION_ID_PROPERTY_ID).toString());
+ requestedEntities.add(id);
+ } else {
+ cluster.getCurrentStackVersion();
+ List<RepositoryVersionEntity> entities = repositoryVersionDAO.findByStack(cluster.getCurrentStackVersion());
+
+ for (RepositoryVersionEntity entity : entities) {
+ requestedEntities.add(entity.getId());
}
}
- for (ClusterVersionEntity entity: requestedEntities) {
+ if (requestedEntities.isEmpty()) {
+ throw new SystemException("Could not find any repositories to show");
+ }
+
+
+ for (Long repositoryVersionId : requestedEntities) {
final Resource resource = new ResourceImpl(Resource.Type.ClusterStackVersion);
- final Map<String, List<String>> hostStates = new HashMap<>();
+ RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByPK(repositoryVersionId);
+
+ final Map<RepositoryVersionState, List<String>> hostStates = new HashMap<>();
for (RepositoryVersionState state: RepositoryVersionState.values()) {
- hostStates.put(state.name(), new ArrayList<String>());
+ hostStates.put(state, new ArrayList<String>());
}
- StackEntity repoVersionStackEntity = entity.getRepositoryVersion().getStack();
+ StackEntity repoVersionStackEntity = repositoryVersion.getStack();
StackId repoVersionStackId = new StackId(repoVersionStackEntity);
for (HostVersionEntity hostVersionEntity : hostVersionDAO.findByClusterStackAndVersion(
- entity.getClusterEntity().getClusterName(), repoVersionStackId,
- entity.getRepositoryVersion().getVersion())) {
+ clusterName, repoVersionStackId, repositoryVersion.getVersion())) {
- hostStates.get(hostVersionEntity.getState().name()).add(hostVersionEntity.getHostName());
+ hostStates.get(hostVersionEntity.getState()).add(hostVersionEntity.getHostName());
}
- StackId stackId = new StackId(entity.getRepositoryVersion().getStack());
- RepositoryVersionEntity repoVerEntity = repositoryVersionDAO.findByStackAndVersion(
- stackId, entity.getRepositoryVersion().getVersion());
-
- setResourceProperty(resource, CLUSTER_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID, entity.getClusterEntity().getClusterName(), requestedIds);
+ setResourceProperty(resource, CLUSTER_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID, clusterName, requestedIds);
setResourceProperty(resource, CLUSTER_STACK_VERSION_HOST_STATES_PROPERTY_ID, hostStates, requestedIds);
- setResourceProperty(resource, CLUSTER_STACK_VERSION_ID_PROPERTY_ID, entity.getId(), requestedIds);
- setResourceProperty(resource, CLUSTER_STACK_VERSION_STACK_PROPERTY_ID, stackId.getStackName(), requestedIds);
- setResourceProperty(resource, CLUSTER_STACK_VERSION_STATE_PROPERTY_ID, entity.getState().name(), requestedIds);
- setResourceProperty(resource, CLUSTER_STACK_VERSION_VERSION_PROPERTY_ID, stackId.getStackVersion(), requestedIds);
- if (repoVerEntity!=null) {
- Long repoVersionId = repoVerEntity.getId();
- setResourceProperty(resource, CLUSTER_STACK_VERSION_REPOSITORY_VERSION_PROPERTY_ID, repoVersionId, requestedIds);
+ setResourceProperty(resource, CLUSTER_STACK_VERSION_ID_PROPERTY_ID, repositoryVersion.getId(), requestedIds);
+ setResourceProperty(resource, CLUSTER_STACK_VERSION_STACK_PROPERTY_ID, repoVersionStackId.getStackName(), requestedIds);
+ setResourceProperty(resource, CLUSTER_STACK_VERSION_VERSION_PROPERTY_ID, repoVersionStackId.getStackVersion(), requestedIds);
+
+
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES,
+ comment = "this is a fake status until the UI can handle services that are on their own")
+ RepositoryVersionState finalState = null;
+
+ for (RepositoryVersionState state : EnumSet.of(RepositoryVersionState.INSTALLING,
+ RepositoryVersionState.INSTALL_FAILED, RepositoryVersionState.OUT_OF_SYNC)) {
+
+ if (CollectionUtils.isNotEmpty(hostStates.get(state))) {
+ finalState = state;
+ break;
+ }
}
+ if (null == finalState) {
+ int count = cluster.getClusterSize();
+
+ for (RepositoryVersionState state : EnumSet.of(RepositoryVersionState.INSTALLED, RepositoryVersionState.CURRENT)) {
+ if (count == CollectionUtils.size(hostStates.get(state))) {
+ finalState = state;
+ break;
+ }
+ }
+ }
+ // !!! end ExperimentalFeature
+
+ setResourceProperty(resource, CLUSTER_STACK_VERSION_STATE_PROPERTY_ID, finalState, requestedIds);
+ setResourceProperty(resource, CLUSTER_STACK_VERSION_REPOSITORY_VERSION_PROPERTY_ID, repositoryVersion.getId(), requestedIds);
+
if (predicate == null || predicate.evaluate(resource)) {
resources.add(resource);
}
}
+
return resources;
}
@@ -380,86 +402,47 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
StackId stackId, boolean forceInstalled, Map<String, Object> propertyMap)
throws AmbariException, SystemException {
- final String clusterName = cluster.getClusterName();
- final String authName = getManagementController().getAuthName();
final String desiredRepoVersion = repoVersionEntity.getVersion();
- ClusterVersionEntity clusterVersionEntity = clusterVersionDAO.findByClusterAndStackAndVersion(
- clusterName, stackId, desiredRepoVersion);
-
// get all of the hosts eligible for stack distribution
List<Host> hosts = Lists.newArrayList(cluster.getHosts());
- /*
- If there is a repository that is already ATTEMPTED to be installed and the version
- is GREATER than the one trying to install, we must fail (until we can support that via Patch Upgrades)
- For example:
+ for (Host host : hosts) {
+ for (HostVersionEntity hostVersion : host.getAllHostVersions()) {
+ RepositoryVersionEntity hostRepoVersion = hostVersion.getRepositoryVersion();
- 1. Install 2.3.0.0
- 2. Register and Install 2.5.0.0 (with or without package-version; it gets computed correctly)
- 3. Register 2.4 (without package-version)
-
- Installation of 2.4 will fail because the way agents invoke installation is to
- install by name. if the package-version is not known, then the 'newest' is ALWAYS installed.
- In this case, 2.5.0.0. 2.4 is never picked up.
- */
- for (ClusterVersionEntity clusterVersion : clusterVersionDAO.findByCluster(cluster.getClusterName())) {
- RepositoryVersionEntity clusterRepoVersion = clusterVersion.getRepositoryVersion();
-
- int compare = compareVersions(clusterRepoVersion.getVersion(), desiredRepoVersion);
+ // !!! ignore stack differences
+ if (!hostRepoVersion.getStackName().equals(repoVersionEntity.getStackName())) {
+ continue;
+ }
- // ignore earlier versions
- if (compare <= 0) {
- continue;
- }
+ int compare = compareVersions(hostRepoVersion.getVersion(), desiredRepoVersion);
- // !!! the version is greater to the one to install
+ // ignore earlier versions
+ if (compare <= 0) {
+ continue;
+ }
- // if the stacks are different, then don't fail (further check same-stack version strings)
- if (!StringUtils.equals(clusterRepoVersion.getStackName(), repoVersionEntity.getStackName())) {
- continue;
- }
+ // !!! the version is greater to the one to install
- // if there is no backing VDF for the desired version, allow the operation (legacy behavior)
- if (null == versionDefinitionXml) {
- continue;
- }
+ // if there is no backing VDF for the desired version, allow the operation (legacy behavior)
+ if (null == versionDefinitionXml) {
+ continue;
+ }
- // backing VDF does not define the package version for any of the hosts, cannot install (allows a VDF with package-version)
- for (Host host : hosts) {
if (StringUtils.isBlank(versionDefinitionXml.getPackageVersion(host.getOsFamily()))) {
String msg = String.format("Ambari cannot install version %s. Version %s is already installed.",
- desiredRepoVersion, clusterRepoVersion.getVersion());
+ desiredRepoVersion, hostRepoVersion.getVersion());
throw new IllegalArgumentException(msg);
}
}
}
- RepositoryVersionState repositoryVersionState = RepositoryVersionState.INSTALLING;
- if (forceInstalled) {
- repositoryVersionState = RepositoryVersionState.INSTALLED;
- }
-
- // if there is no cluster version entity, then create one
- if (clusterVersionEntity == null) {
- try {
- // Create/persist new cluster stack version
- clusterVersionEntity = cluster.createClusterVersion(stackId, desiredRepoVersion, authName,
- repositoryVersionState);
- } catch (AmbariException e) {
- throw new SystemException(
- String.format("Can not create cluster stack version %s for cluster %s",
- desiredRepoVersion, clusterName), e);
- }
- } else {
- // Move cluster version into the specified state (retry installation)
- cluster.transitionClusterVersion(stackId, desiredRepoVersion, repositoryVersionState);
- }
// the cluster will create/update all of the host versions to the correct state
List<Host> hostsNeedingInstallCommands = cluster.transitionHostsToInstalling(
- clusterVersionEntity, repoVersionEntity, versionDefinitionXml, forceInstalled);
+ repoVersionEntity, versionDefinitionXml, forceInstalled);
RequestStatusResponse response = null;
if (!forceInstalled) {
@@ -709,7 +692,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
hostComponentStateDAO.updateVersions(target.getVersion());
hostVersionDAO.updateVersions(target, current);
- clusterVersionDAO.updateVersions(clusterId, target, current);
+// clusterVersionDAO.updateVersions(clusterId, target, current);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
index c244107..7014f08 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
@@ -39,7 +39,6 @@ import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.ConfigurationRequest;
import org.apache.ambari.server.controller.HostRequest;
import org.apache.ambari.server.controller.HostResponse;
-import org.apache.ambari.server.controller.MaintenanceStateHelper;
import org.apache.ambari.server.controller.RequestStatusResponse;
import org.apache.ambari.server.controller.ServiceComponentHostRequest;
import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
@@ -159,9 +158,6 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
HOST_NAME_PROPERTY_ID}));
@Inject
- private MaintenanceStateHelper maintenanceStateHelper;
-
- @Inject
private OsFamily osFamily;
@Inject
@@ -525,9 +521,6 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
}
clusters.updateHostWithClusterAndAttributes(hostClustersMap, hostAttributes);
- for (String clusterName : allClusterSet) {
- clusters.getCluster(clusterName).recalculateAllClusterVersionStates();
- }
}
private void createHostResource(Clusters clusters, Set<String> duplicates,
@@ -803,12 +796,9 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
}
}
- if (clusterName != null && !clusterName.isEmpty()) {
- clusters.getCluster(clusterName).recalculateAllClusterVersionStates();
- if (rackChange) {
- // Authorization check for this update was performed before we got to this point.
- controller.registerRackChange(clusterName);
- }
+ if (StringUtils.isNotBlank(clusterName) && rackChange) {
+ // Authorization check for this update was performed before we got to this point.
+ controller.registerRackChange(clusterName);
}
//todo: if attempt was made to update a property other than those
@@ -931,9 +921,6 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
}
}
clusters.publishHostsDeletion(allClustersWithHosts, hostNames);
- for (String clustername : hostsClusters) {
- clusters.getCluster(clustername).recalculateAllClusterVersionStates();
- }
}
private void validateHostInDeleteFriendlyState(HostRequest hostRequest, Clusters clusters, boolean forceDelete) throws AmbariException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
index 71b9b6b..2e03a22 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
@@ -489,7 +489,6 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
if (!forceInstallOnNonMemberHost) {
hostVersEntity.setState(RepositoryVersionState.INSTALLING);
hostVersionDAO.merge(hostVersEntity);
- cluster.recalculateClusterVersionState(repoVersionEnt);
}
req.persist();
} catch (AmbariException e) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
index d2f3f8d..a0a3666 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
@@ -25,6 +25,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import org.apache.ambari.server.AmbariException;
@@ -43,10 +44,10 @@ import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
+import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
+import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@ -55,7 +56,6 @@ 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.state.Clusters;
import org.apache.ambari.server.state.OperatingSystemInfo;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.ServiceInfo;
@@ -64,14 +64,13 @@ import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.repository.ManifestServiceInfo;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
-import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.gson.Gson;
import com.google.inject.Inject;
-import com.google.inject.Provider;
import com.google.inject.persist.Transactional;
/**
@@ -141,23 +140,20 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc
private RepositoryVersionDAO repositoryVersionDAO;
@Inject
- private ClusterVersionDAO clusterVersionDAO;
-
- @Inject
private AmbariMetaInfo ambariMetaInfo;
@Inject
private RepositoryVersionHelper repositoryVersionHelper;
- @Inject
- private Provider<Clusters> clusters;
-
/**
* Data access object used for lookup up stacks.
*/
@Inject
private StackDAO stackDAO;
+ @Inject
+ HostVersionDAO hostVersionDAO;
+
/**
* Create a new resource provider.
*
@@ -398,22 +394,34 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc
throw new NoSuchResourceException("There is no repository version with id " + id);
}
- StackEntity stackEntity = entity.getStack();
- String stackName = stackEntity.getStackName();
- String stackVersion = stackEntity.getStackVersion();
-
- final List<ClusterVersionEntity> clusterVersionEntities = clusterVersionDAO.findByStackAndVersion(
- stackName, stackVersion, entity.getVersion());
-
- final List<RepositoryVersionState> forbiddenToDeleteStates = Lists.newArrayList(
+ final Set<RepositoryVersionState> forbiddenToDeleteStates = Sets.newHashSet(
RepositoryVersionState.CURRENT,
RepositoryVersionState.INSTALLED,
RepositoryVersionState.INSTALLING);
- for (ClusterVersionEntity clusterVersionEntity : clusterVersionEntities) {
- if (clusterVersionEntity.getRepositoryVersion().getId().equals(id) && forbiddenToDeleteStates.contains(clusterVersionEntity.getState())) {
- throw new SystemException("Repository version can't be deleted as it is " +
- clusterVersionEntity.getState().name() + " on cluster " + clusterVersionEntity.getClusterEntity().getClusterName());
+
+ List<HostVersionEntity> hostVersions = hostVersionDAO.findByRepositoryAndStates(
+ entity, forbiddenToDeleteStates);
+
+ if (CollectionUtils.isNotEmpty(hostVersions)) {
+ Map<RepositoryVersionState, Set<String>> hostsInUse = new HashMap<>();
+
+ for (HostVersionEntity hostVersion : hostVersions) {
+ if (!hostsInUse.containsKey(hostVersion.getState())) {
+ hostsInUse.put(hostVersion.getState(), new HashSet<String>());
+ }
+
+ hostsInUse.get(hostVersion.getState()).add(hostVersion.getHostName());
}
+
+ Set<String> errors = new HashSet<>();
+ for (Entry<RepositoryVersionState, Set<String>> entry : hostsInUse.entrySet()) {
+ errors.add(String.format("%s on %s", entry.getKey(), StringUtils.join(entry.getValue(), ", ")));
+ }
+
+
+ throw new SystemException(
+ String.format("Repository version can't be deleted as it is used by the following hosts: %s",
+ StringUtils.join(errors, ';')));
}
entitiesToBeRemoved.add(entity);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
index c611037..664ba42 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
@@ -74,6 +74,7 @@ import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
@@ -423,13 +424,25 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
String desiredStack = request.getDesiredStack();
String desiredRepositoryVersion = request.getDesiredRepositoryVersion();
RepositoryVersionEntity repositoryVersion = null;
- if( StringUtils.isNotBlank(desiredStack) && StringUtils.isNotBlank(desiredRepositoryVersion)){
+ if (StringUtils.isNotBlank(desiredStack) && StringUtils.isNotBlank(desiredRepositoryVersion)){
repositoryVersion = repositoryVersionDAO.findByStackAndVersion(new StackId(desiredStack),
desiredRepositoryVersion);
}
+ if (null == desiredStack) {
+ desiredStack = cluster.getDesiredStackVersion().toString();
+ }
+
+ if (null == repositoryVersion) {
+ List<RepositoryVersionEntity> allVersions = repositoryVersionDAO.findByStack(new StackId(desiredStack));
+
+ if (CollectionUtils.isNotEmpty(allVersions)) {
+ repositoryVersion = allVersions.get(0);
+ }
+ }
+
if (null == repositoryVersion) {
- repositoryVersion = cluster.getCurrentClusterVersion().getRepositoryVersion();
+ throw new AmbariException(String.format("Could not find any repositories defined by %s", desiredStack));
}
Service s = cluster.addService(request.getServiceName(), repositoryVersion);
@@ -630,7 +643,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
// Setting Maintenance state for service
if (null != request.getMaintenanceState()) {
- if(!AuthorizationHelper.isAuthorized(ResourceType.CLUSTER, cluster.getResourceId(), RoleAuthorization.SERVICE_TOGGLE_MAINTENANCE)) {
+ if (!AuthorizationHelper.isAuthorized(ResourceType.CLUSTER, cluster.getResourceId(), RoleAuthorization.SERVICE_TOGGLE_MAINTENANCE)) {
throw new AuthorizationException("The authenticated user is not authorized to toggle the maintainence state of services");
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index b49b66e..7ca6164 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -36,6 +36,8 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.Role;
import org.apache.ambari.server.RoleCommand;
@@ -755,6 +757,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
upgradeContext.setSupportedServices(supportedServices);
upgradeContext.setScope(scope);
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES,
+ comment = "Check for any other way downgrade to get set, if required")
String downgradeFromVersion = null;
if (direction.isDowngrade()) {
@@ -767,6 +771,10 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
downgradeFromVersion = lastUpgradeItemForCluster.getToVersion();
}
+ if (null == downgradeFromVersion) {
+ throw new AmbariException("When downgrading, the downgrade version must be specified");
+ }
+
upgradeContext.setDowngradeFromVersion(downgradeFromVersion);
}
@@ -919,7 +927,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
if (null != downgradeFromVersion) {
entity.setFromVersion(downgradeFromVersion);
} else {
- entity.setFromVersion(cluster.getCurrentClusterVersion().getRepositoryVersion().getVersion());
+ entity.setFromVersion("");
}
entity.setToVersion(version);
http://git-wip-us.apache.org/repos/asf/ambari/blob/aaa821cc/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
index 3fda160..5199787 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
@@ -19,7 +19,6 @@ package org.apache.ambari.server.events.listeners.upgrade;
import java.util.List;
-import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.EagerSingleton;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.bootstrap.DistributeRepositoriesStructuredOutput;
@@ -29,7 +28,6 @@ import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.StackId;
@@ -178,13 +176,6 @@ public class DistributeRepositoriesActionListener {
if (hostVersion.getState() == RepositoryVersionState.INSTALLING) {
hostVersion.setState(newHostState);
hostVersionDAO.get().merge(hostVersion);
- // Update state of a cluster stack version
- try {
- Cluster cluster = clusters.get().getClusterById(clusterId);
- cluster.recalculateClusterVersionState(hostVersion.getRepositoryVersion());
- } catch (AmbariException e) {
- LOG.error("Cannot get cluster with Id " + clusterId.toString() + " to recalculate its ClusterVersion.", e);
- }
}
}
}
[19/50] [abbrv] ambari git commit: AMBARI-21022 - Upgrades Should Be
Associated With Repositories Instead of String Versions (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
index bc178ea..4408492 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
@@ -156,6 +156,7 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
RepositoryVersionEntity repositoryVersionEntity = createNiceMock(RepositoryVersionEntity.class);
UpgradePack upgradePack = createNiceMock(UpgradePack.class);
StackEntity targetStack = createNiceMock(StackEntity.class);
+ StackId targetStackId = createNiceMock(StackId.class);
String version = "2.5.0.0-1234";
@@ -172,9 +173,12 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
EasyMock.expect(targetStack.getStackName()).andReturn("HDP").anyTimes();
EasyMock.expect(targetStack.getStackVersion()).andReturn("2.5").anyTimes();
+ EasyMock.expect(targetStackId.getStackName()).andReturn("HDP").atLeastOnce();
+ EasyMock.expect(targetStackId.getStackVersion()).andReturn("2.5").atLeastOnce();
- EasyMock.expect(repositoryVersionEntity.getStack()).andReturn(targetStack);
- EasyMock.expect(repositoryVersionEntity.getVersion()).andReturn(version);
+ EasyMock.expect(repositoryVersionEntity.getStackId()).andReturn(targetStackId).atLeastOnce();
+ EasyMock.expect(repositoryVersionEntity.getStack()).andReturn(targetStack).atLeastOnce();
+ EasyMock.expect(repositoryVersionEntity.getVersion()).andReturn(version).atLeastOnce();
EasyMock.expect(repositoryVersionDAO.findByStackNameAndVersion("HDP", version)).andReturn(
repositoryVersionEntity);
@@ -244,9 +248,8 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
EasyMock.expect(upgradeContext.getCluster()).andReturn(cluster).anyTimes();
EasyMock.expect(upgradeContext.getDirection()).andReturn(Direction.UPGRADE).anyTimes();
EasyMock.expect(upgradeContext.getUpgradePack()).andReturn(upgradePack).anyTimes();
- EasyMock.expect(upgradeContext.getTargetRepositoryVersion()).andReturn(repositoryVersionEntity).anyTimes();
- EasyMock.expect(upgradeContext.getTargetStackId()).andReturn(new StackId("HDP-2.5")).anyTimes();
- EasyMock.expect(upgradeContext.getVersion()).andReturn(version).anyTimes();
+ EasyMock.expect(upgradeContext.getRepositoryVersion()).andReturn(repositoryVersionEntity).anyTimes();
+ EasyMock.expect(upgradeContext.getTargetRepositoryVersion(EasyMock.anyString())).andReturn(repositoryVersionEntity).anyTimes();
replayAll();
UpgradeResourceProvider upgradeResourceProvider = new UpgradeResourceProvider(amc);
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index e2d9cc6..3780ea5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -291,7 +291,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_TYPE, UpgradeType.ROLLING.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_FAILURES, Boolean.TRUE.toString());
@@ -354,7 +354,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_TYPE, UpgradeType.ROLLING.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_MANUAL_VERIFICATION, Boolean.TRUE.toString());
@@ -398,7 +398,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_TYPE, UpgradeType.ROLLING.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_FAILURES, Boolean.TRUE.toString());
@@ -555,7 +555,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2111.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
@@ -606,7 +606,7 @@ public class UpgradeResourceProviderTest {
// this should get skipped
ServiceComponent component = service.getServiceComponent("ZOOKEEPER_SERVER");
ServiceComponentHost sch = component.addServiceComponentHost("h2");
- sch.setVersion("2.2.2.2");
+ sch.setVersion(repoVersionEntity2200.getVersion());
// start out with 0 (sanity check)
List<UpgradeEntity> upgrades = upgradeDao.findUpgrades(cluster.getClusterId());
@@ -623,8 +623,7 @@ public class UpgradeResourceProviderTest {
UpgradeEntity upgradeEntity = new UpgradeEntity();
upgradeEntity.setClusterId(cluster.getClusterId());
upgradeEntity.setDirection(Direction.UPGRADE);
- upgradeEntity.setFromVersion("2.1.1.1");
- upgradeEntity.setToVersion("2.2.2.2");
+ upgradeEntity.setRepositoryVersion(repoVersionEntity2200);
upgradeEntity.setUpgradePackage("upgrade_test");
upgradeEntity.setUpgradeType(UpgradeType.ROLLING);
upgradeEntity.setRequestEntity(requestEntity);
@@ -638,7 +637,6 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.1");
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.DOWNGRADE.name());
@@ -672,7 +670,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2111.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
@@ -693,7 +691,7 @@ public class UpgradeResourceProviderTest {
// create another upgrade which should fail
requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, "9999");
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null);
@@ -706,10 +704,8 @@ public class UpgradeResourceProviderTest {
// fix the properties and try again
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
- requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.1.1.0");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.DOWNGRADE.name());
Map<String, String> requestInfoProperties = new HashMap<>();
@@ -722,10 +718,15 @@ public class UpgradeResourceProviderTest {
UpgradeEntity entity = upgradeDao.findUpgrade(Long.parseLong(id));
assertNotNull(entity);
- assertEquals("2.1.1.0", entity.getFromVersion());
- assertEquals("2.2.0.0", entity.getToVersion());
assertEquals(Direction.DOWNGRADE, entity.getDirection());
+ // associated version is the FROM on DOWNGRADE
+ assertEquals(repoVersionEntity2111.getVersion(), entity.getRepositoryVersion().getVersion());
+
+ // target is by service
+ assertEquals(repoVersionEntity2110.getVersion(),
+ entity.getHistory().iterator().next().getTargetVersion());
+
StageDAO dao = injector.getInstance(StageDAO.class);
List<StageEntity> stages = dao.findByRequestId(entity.getRequestId());
@@ -757,7 +758,7 @@ public class UpgradeResourceProviderTest {
// create upgrade request
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_nonrolling_new_stack");
requestProps.put(UpgradeResourceProvider.UPGRADE_TYPE, "NON_ROLLING");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
@@ -797,14 +798,11 @@ public class UpgradeResourceProviderTest {
abortUpgrade(upgrade.getRequestId());
// create downgrade with one upgraded service
- StackId stackId = new StackId("HDP", "2.2.0");
service.setDesiredRepositoryVersion(repoVersionEntity2200);
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.0");
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_nonrolling_new_stack");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
- requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.2.0.0");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.DOWNGRADE.name());
Map<String, String> requestInfoProperties = new HashMap<>();
@@ -943,7 +941,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.2.3");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_direction");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
@@ -973,10 +971,8 @@ public class UpgradeResourceProviderTest {
requestProps.clear();
// Now perform a downgrade
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.0");
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_direction");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
- requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.2.2.3");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.DOWNGRADE.name());
request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null);
@@ -1072,7 +1068,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
@@ -1201,10 +1197,7 @@ public class UpgradeResourceProviderTest {
Map<String, UpgradePack> upgradePacks = ambariMetaInfo.getUpgradePacks("HDP", "2.1.1");
UpgradePack upgrade = upgradePacks.get("upgrade_to_new_stack");
- UpgradeContext upgradeContext = upgradeContextFactory.create(cluster, upgrade.getType(),
- Direction.UPGRADE, "2.2.0.0", new HashMap<String, Object>());
- upgradeContext.setUpgradePack(upgrade);
-
+ UpgradeContext upgradeContext = EasyMock.createNiceMock(UpgradeContext.class);
upgradeResourceProvider.applyStackAndProcessConfigurations(upgradeContext);
Map<String, Map<String, String>> expectedConfigurations = expectedConfigurationsCapture.getValue();
@@ -1248,7 +1241,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2111.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
@@ -1353,7 +1346,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_FAILURES, Boolean.TRUE.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_SC_FAILURES, Boolean.FALSE.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_REQUEST_ID, "" + entity.getRequestId());
@@ -1378,7 +1371,7 @@ public class UpgradeResourceProviderTest {
requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_FAILURES, Boolean.FALSE.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_SC_FAILURES, Boolean.TRUE.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_REQUEST_ID, "" + entity.getRequestId());
@@ -1402,7 +1395,7 @@ public class UpgradeResourceProviderTest {
requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_FAILURES, Boolean.FALSE.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_SC_FAILURES, Boolean.FALSE.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_REQUEST_ID, "" + entity.getRequestId());
@@ -1428,7 +1421,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_TYPE, UpgradeType.ROLLING.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_MANUAL_VERIFICATION, Boolean.FALSE.toString());
@@ -1466,7 +1459,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test_host_ordered");
requestProps.put(UpgradeResourceProvider.UPGRADE_TYPE, UpgradeType.HOST_ORDERED.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, Boolean.TRUE.toString());
@@ -1526,10 +1519,9 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
- requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.1.1.0");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
Map<String, String> requestInfoProperties = new HashMap<>();
@@ -1554,10 +1546,8 @@ public class UpgradeResourceProviderTest {
requestProps.clear();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.0");
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
- requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.2.0.0");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.DOWNGRADE.name());
request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), requestInfoProperties);
@@ -1607,7 +1597,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test_host_ordered");
requestProps.put(UpgradeResourceProvider.UPGRADE_TYPE, UpgradeType.HOST_ORDERED.toString());
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS,Boolean.TRUE.toString());
@@ -1627,6 +1617,11 @@ public class UpgradeResourceProviderTest {
}
}
+ @Test
+ public void testUpgradeHistory() throws Exception {
+ Assert.fail("Implement me!");
+ }
+
private String parseSingleMessage(String msgStr){
JsonParser parser = new JsonParser();
JsonArray msgArray = (JsonArray) parser.parse(msgStr);
@@ -1662,8 +1657,6 @@ public class UpgradeResourceProviderTest {
@Test
public void testTimeouts() throws Exception {
- Cluster cluster = clusters.getCluster("c1");
-
StackEntity stackEntity = stackDAO.find("HDP", "2.1.1");
RepositoryVersionEntity repoVersionEntity = new RepositoryVersionEntity();
repoVersionEntity.setDisplayName("My New Version 3");
@@ -1674,7 +1667,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.2.3");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity.getId()));
requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
index f4ac0b1..73d0e37 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
@@ -38,7 +38,6 @@ import org.apache.ambari.server.H2DatabaseCleaner;
import org.apache.ambari.server.Role;
import org.apache.ambari.server.RoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
-import org.apache.ambari.server.actionmanager.ServiceComponentHostEventWrapper;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.AmbariServer;
import org.apache.ambari.server.controller.predicate.AndPredicate;
@@ -72,12 +71,10 @@ import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
-import org.apache.ambari.server.state.ServiceComponentHostEvent;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeHelper;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
-import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpInProgressEvent;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -163,7 +160,7 @@ public class UpgradeSummaryResourceProviderTest {
clusters.addCluster(clusterName, stackId);
Cluster cluster = clusters.getCluster("c1");
- helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
+ helper.getOrCreateRepositoryVersion(stackId, "2.2.0.1-1234");
clusters.addHost("h1");
Host host = clusters.getHost("h1");
@@ -196,8 +193,6 @@ public class UpgradeSummaryResourceProviderTest {
@Transactional
void createCommands(Cluster cluster, Long upgradeRequestId, Long stageId) {
HostEntity h1 = hostDAO.findByName("h1");
- ServiceComponentHostEvent event = new ServiceComponentHostOpInProgressEvent("ZOOKEEPER_SERVER", "h1", 1L);
- ServiceComponentHostEventWrapper eventWrapper = new ServiceComponentHostEventWrapper(event);
RequestEntity requestEntity = requestDAO.findByPK(upgradeRequestId);
@@ -277,8 +272,11 @@ public class UpgradeSummaryResourceProviderTest {
upgrade.setUpgradePackage("some-name");
upgrade.setUpgradeType(UpgradeType.ROLLING);
upgrade.setDirection(Direction.UPGRADE);
- upgrade.setFromVersion("2.2.0.0");
- upgrade.setToVersion("2.2.0.1");
+
+ RepositoryVersionEntity repositoryVersion2201 = injector.getInstance(
+ RepositoryVersionDAO.class).findByStackNameAndVersion("HDP", "2.2.0.1-1234");
+
+ upgrade.setRepositoryVersion(repositoryVersion2201);
upgradeDAO.create(upgrade);
// Resource used to make assertions.
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
index 9e47e4d..baf6bba 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
@@ -33,11 +33,13 @@ import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.RequestEntity;
import org.apache.ambari.server.orm.entities.StageEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
+import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeState;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
@@ -62,6 +64,10 @@ public class UpgradeDAOTest {
private OrmTestHelper helper;
+ RepositoryVersionEntity repositoryVersion2200;
+ RepositoryVersionEntity repositoryVersion2500;
+ RepositoryVersionEntity repositoryVersion2511;
+
/**
*
*/
@@ -83,12 +89,16 @@ public class UpgradeDAOTest {
requestEntity.setStages(new ArrayList<StageEntity>());
requestDAO.create(requestEntity);
+ repositoryVersion2200 = helper.getOrCreateRepositoryVersion(new StackId("HDP", "2.2.0"), "2.2.0.0-1234");
+ repositoryVersion2500 = helper.getOrCreateRepositoryVersion(new StackId("HDP", "2.5.0"), "2.5.0.0-4567");
+ repositoryVersion2511 = helper.getOrCreateRepositoryVersion(new StackId("HDP", "2.5.0"), "2.5.1.1-4567");
+
+
// create upgrade entities
UpgradeEntity entity = new UpgradeEntity();
entity.setClusterId(clusterId.longValue());
entity.setRequestEntity(requestEntity);
- entity.setFromVersion("");
- entity.setToVersion("");
+ entity.setRepositoryVersion(repositoryVersion2200);
entity.setUpgradeType(UpgradeType.ROLLING);
entity.setUpgradePackage("test-upgrade");
entity.setDowngradeAllowed(true);
@@ -165,8 +175,7 @@ public class UpgradeDAOTest {
entity1.setClusterId(clusterId.longValue());
entity1.setDirection(Direction.UPGRADE);
entity1.setRequestEntity(requestEntity);
- entity1.setFromVersion("2.2.0.0-1234");
- entity1.setToVersion("2.3.0.0-4567");
+ entity1.setRepositoryVersion(repositoryVersion2500);
entity1.setUpgradeType(UpgradeType.ROLLING);
entity1.setUpgradePackage("test-upgrade");
entity1.setDowngradeAllowed(true);
@@ -176,8 +185,7 @@ public class UpgradeDAOTest {
entity2.setClusterId(clusterId.longValue());
entity2.setDirection(Direction.DOWNGRADE);
entity2.setRequestEntity(requestEntity);
- entity2.setFromVersion("2.3.0.0-4567");
- entity2.setToVersion("2.2.0.0-1234");
+ entity2.setRepositoryVersion(repositoryVersion2200);
entity2.setUpgradeType(UpgradeType.ROLLING);
entity2.setUpgradePackage("test-upgrade");
entity2.setDowngradeAllowed(true);
@@ -187,8 +195,7 @@ public class UpgradeDAOTest {
entity3.setClusterId(clusterId.longValue());
entity3.setDirection(Direction.UPGRADE);
entity3.setRequestEntity(requestEntity);
- entity3.setFromVersion("2.2.0.0-1234");
- entity3.setToVersion("2.3.1.1-4567");
+ entity3.setRepositoryVersion(repositoryVersion2511);
entity3.setUpgradeType(UpgradeType.ROLLING);
entity3.setUpgradePackage("test-upgrade");
entity3.setDowngradeAllowed(true);
@@ -217,8 +224,7 @@ public class UpgradeDAOTest {
upgradeEntity.setClusterId(clusterId.longValue());
upgradeEntity.setDirection(Direction.UPGRADE);
upgradeEntity.setRequestEntity(requestEntity);
- upgradeEntity.setFromVersion("2.2.0.0-1234");
- upgradeEntity.setToVersion("2.3.0.0-4567");
+ upgradeEntity.setRepositoryVersion(repositoryVersion2500);
upgradeEntity.setUpgradeType(UpgradeType.ROLLING);
upgradeEntity.setUpgradePackage("test-upgrade");
dao.create(upgradeEntity);
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
index 7301c66..738ad1f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
@@ -169,7 +169,9 @@ public class ComponentVersionCheckActionTest {
String urlInfo = "[{'repositories':["
+ "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'" + targetStack.getStackId() + "'}"
+ "], 'OperatingSystems/os_type':'redhat6'}]";
- repoVersionDAO.create(stackEntityTarget, targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
+
+ RepositoryVersionEntity toRepositoryVersion = repoVersionDAO.create(stackEntityTarget,
+ targetRepo, String.valueOf(System.currentTimeMillis()), urlInfo);
// Start upgrading the newer repo
c.setCurrentStackVersion(targetStack);
@@ -194,8 +196,7 @@ public class ComponentVersionCheckActionTest {
upgradeEntity.setClusterId(c.getClusterId());
upgradeEntity.setRequestEntity(requestEntity);
upgradeEntity.setUpgradePackage("");
- upgradeEntity.setFromVersion(sourceRepo);
- upgradeEntity.setToVersion(targetRepo);
+ upgradeEntity.setRepositoryVersion(toRepositoryVersion);
upgradeEntity.setUpgradeType(UpgradeType.NON_ROLLING);
upgradeDAO.create(upgradeEntity);
@@ -236,6 +237,10 @@ public class ComponentVersionCheckActionTest {
// Create the starting repo version
m_helper.getOrCreateRepositoryVersion(sourceStack, sourceRepo);
+ // create the new repo version
+ RepositoryVersionEntity toRepositoryVersion = m_helper.getOrCreateRepositoryVersion(targetStack,
+ targetRepo);
+
RequestEntity requestEntity = new RequestEntity();
requestEntity.setClusterId(c.getClusterId());
requestEntity.setRequestId(1L);
@@ -248,8 +253,7 @@ public class ComponentVersionCheckActionTest {
upgradeEntity.setClusterId(c.getClusterId());
upgradeEntity.setRequestEntity(requestEntity);
upgradeEntity.setUpgradePackage("");
- upgradeEntity.setFromVersion(sourceRepo);
- upgradeEntity.setToVersion(targetRepo);
+ upgradeEntity.setRepositoryVersion(toRepositoryVersion);
upgradeEntity.setUpgradeType(UpgradeType.NON_ROLLING);
upgradeDAO.create(upgradeEntity);
@@ -296,7 +300,6 @@ public class ComponentVersionCheckActionTest {
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, targetRepo);
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -365,9 +368,6 @@ public class ComponentVersionCheckActionTest {
// automatically before CURRENT
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, targetRepo);
- commandParams.put(FinalizeUpgradeAction.ORIGINAL_STACK_KEY, sourceStack.getStackId());
- commandParams.put(FinalizeUpgradeAction.TARGET_STACK_KEY, targetStack.getStackId());
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -435,9 +435,6 @@ public class ComponentVersionCheckActionTest {
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, targetRepo);
- commandParams.put(FinalizeUpgradeAction.SUPPORTED_SERVICES_KEY, "ZOOKEEPER");
- commandParams.put(FinalizeUpgradeAction.TARGET_STACK_KEY, "HDP-2.1.1");
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index 0ff0b0a..2bc2c13 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -51,13 +51,11 @@ import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.RequestDAO;
-import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.RequestEntity;
-import org.apache.ambari.server.orm.entities.ServiceComponentHistoryEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.serveraction.ServerAction;
@@ -135,8 +133,6 @@ public class UpgradeActionTest {
@Inject
private UpgradeDAO upgradeDAO;
@Inject
- private ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO;
- @Inject
private StackDAO stackDAO;
@Inject
private AmbariMetaInfo ambariMetaInfo;
@@ -145,6 +141,11 @@ public class UpgradeActionTest {
@Inject
private ConfigFactory configFactory;
+ private RepositoryVersionEntity repositoryVersion2110;
+ private RepositoryVersionEntity repositoryVersion2111;
+ private RepositoryVersionEntity repositoryVersion2201;
+ private RepositoryVersionEntity repositoryVersion2202;
+
@Before
public void setup() throws Exception {
m_injector = Guice.createInjector(new InMemoryDefaultTestModule());
@@ -159,6 +160,11 @@ public class UpgradeActionTest {
Field field = AmbariServer.class.getDeclaredField("clusterController");
field.setAccessible(true);
field.set(null, amc);
+
+ repositoryVersion2110 = m_helper.getOrCreateRepositoryVersion(HDP_21_STACK, HDP_2_1_1_0);
+ repositoryVersion2111 = m_helper.getOrCreateRepositoryVersion(HDP_21_STACK, HDP_2_1_1_1);
+ repositoryVersion2201 = m_helper.getOrCreateRepositoryVersion(HDP_22_STACK, HDP_2_2_0_1);
+ repositoryVersion2202 = m_helper.getOrCreateRepositoryVersion(HDP_22_STACK, HDP_2_2_0_2);
}
@After
@@ -394,7 +400,7 @@ public class UpgradeActionTest {
Cluster cluster = clusters.getCluster(clusterName);
- createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
+ createUpgrade(cluster, repositoryVersion2201);
// Install ZK and HDFS with some components
Service zk = installService(cluster, "ZOOKEEPER");
@@ -423,7 +429,6 @@ public class UpgradeActionTest {
commandParams.put(UpdateDesiredStackAction.COMMAND_PARAM_ORIGINAL_STACK, sourceStack.getStackId());
commandParams.put(UpdateDesiredStackAction.COMMAND_PARAM_TARGET_STACK, targetStack.getStackId());
commandParams.put(UpdateDesiredStackAction.COMMAND_PARAM_DIRECTION, Direction.UPGRADE.toString());
- commandParams.put(UpdateDesiredStackAction.COMMAND_PARAM_VERSION, targetRepo);
commandParams.put(UpdateDesiredStackAction.COMMAND_PARAM_UPGRADE_PACK, upgradePackName);
ExecutionCommand executionCommand = new ExecutionCommand();
@@ -468,13 +473,10 @@ public class UpgradeActionTest {
Cluster cluster = clusters.getCluster(clusterName);
- createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
+ createUpgrade(cluster, repositoryVersion2111);
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "downgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, sourceRepo);
- commandParams.put(FinalizeUpgradeAction.ORIGINAL_STACK_KEY, sourceStack.getStackId());
- commandParams.put(FinalizeUpgradeAction.TARGET_STACK_KEY, targetStack.getStackId());
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -522,13 +524,10 @@ public class UpgradeActionTest {
Cluster cluster = clusters.getCluster(clusterName);
- createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
+ createUpgrade(cluster, repositoryVersion2202);
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "downgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, midRepo);
- commandParams.put(FinalizeUpgradeAction.ORIGINAL_STACK_KEY, sourceStack.getStackId());
- commandParams.put(FinalizeUpgradeAction.TARGET_STACK_KEY, targetStack.getStackId());
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -559,7 +558,7 @@ public class UpgradeActionTest {
Cluster cluster = clusters.getCluster(clusterName);
- createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
+ createUpgrade(cluster, repositoryVersion2111);
RepositoryInfo repo = ambariMetaInfo.getRepository(sourceStack.getStackName(), sourceStack.getStackVersion(), "redhat6", sourceStack.getStackId());
assertEquals(HDP_211_CENTOS6_REPO_URL, repo.getBaseUrl());
@@ -567,7 +566,6 @@ public class UpgradeActionTest {
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, targetRepo);
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -618,7 +616,7 @@ public class UpgradeActionTest {
// Verify the repo before calling Finalize
Cluster cluster = clusters.getCluster(clusterName);
- createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
+ createUpgrade(cluster, repositoryVersion2111);
RepositoryInfo repo = ambariMetaInfo.getRepository(sourceStack.getStackName(),
sourceStack.getStackVersion(), "redhat6", sourceStack.getStackId());
@@ -627,7 +625,6 @@ public class UpgradeActionTest {
// Finalize the upgrade
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, targetRepo);
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -661,13 +658,10 @@ public class UpgradeActionTest {
cluster.setCurrentStackVersion(sourceStack);
cluster.setDesiredStackVersion(targetStack);
- createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
+ createUpgrade(cluster, repositoryVersion2201);
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, targetRepo);
- commandParams.put(FinalizeUpgradeAction.ORIGINAL_STACK_KEY, sourceStack.getStackId());
- commandParams.put(FinalizeUpgradeAction.TARGET_STACK_KEY, targetStack.getStackId());
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -719,7 +713,7 @@ public class UpgradeActionTest {
makeCrossStackUpgradeTargetRepo(targetStack, targetRepo, hostName);
- createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
+ createUpgrade(cluster, repositoryVersion2201);
// create some configs
createConfigs(cluster);
@@ -739,9 +733,6 @@ public class UpgradeActionTest {
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "downgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, sourceRepo);
- commandParams.put(FinalizeUpgradeAction.ORIGINAL_STACK_KEY, sourceStack.getStackId());
- commandParams.put(FinalizeUpgradeAction.TARGET_STACK_KEY, targetStack.getStackId());
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -819,7 +810,7 @@ public class UpgradeActionTest {
cluster.setCurrentStackVersion(sourceStack);
cluster.setDesiredStackVersion(targetStack);
- createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
+ createUpgrade(cluster, repositoryVersion2201);
// set the SCH versions to the new stack so that the finalize action is
// happy
@@ -842,9 +833,6 @@ public class UpgradeActionTest {
// automatically before CURRENT
Map<String, String> commandParams = new HashMap<>();
commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, targetRepo);
- commandParams.put(FinalizeUpgradeAction.ORIGINAL_STACK_KEY, sourceStack.getStackId());
- commandParams.put(FinalizeUpgradeAction.TARGET_STACK_KEY, targetStack.getStackId());
ExecutionCommand executionCommand = new ExecutionCommand();
executionCommand.setCommandParams(commandParams);
@@ -870,74 +858,6 @@ public class UpgradeActionTest {
assertEquals(targetStack, desiredStackId);
}
- @Test
- public void testUpgradeHistory() throws Exception {
- StackId sourceStack = HDP_21_STACK;
- StackId targetStack = HDP_21_STACK;
- String sourceRepo = HDP_2_1_1_0;
- String targetRepo = HDP_2_1_1_1;
- String hostName = "h1";
-
- createUpgradeClusterAndSourceRepo(sourceStack, sourceRepo, hostName);
-
- Cluster cluster = clusters.getCluster(clusterName);
-
- // install HDFS with some components
- Service service = installService(cluster, "HDFS");
- addServiceComponent(cluster, service, "NAMENODE");
- addServiceComponent(cluster, service, "DATANODE");
- ServiceComponentHost nnSCH = createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", "h1");
- ServiceComponentHost dnSCH = createNewServiceComponentHost(cluster, "HDFS", "DATANODE", "h1");
-
- RepositoryVersionEntity targetRepositoryVersion = createUpgradeClusterTargetRepo(targetStack,
- targetRepo, hostName);
-
- // fake their upgrade
- service.setDesiredRepositoryVersion(targetRepositoryVersion);
- nnSCH.setVersion(targetRepo);
- dnSCH.setVersion(targetRepo);
-
- UpgradeEntity upgrade = createUpgrade(cluster, sourceStack, sourceRepo, targetRepo);
-
- // verify that no history exist exists yet
- List<ServiceComponentHistoryEntity> historyEntites = serviceComponentDesiredStateDAO.findHistory(
- cluster.getClusterId(), nnSCH.getServiceName(),
- nnSCH.getServiceComponentName());
-
- assertEquals(0, historyEntites.size());
-
- RepositoryInfo repo = ambariMetaInfo.getRepository(sourceStack.getStackName(), sourceStack.getStackVersion(), "redhat6", sourceStack.getStackId());
- assertEquals(HDP_211_CENTOS6_REPO_URL, repo.getBaseUrl());
-// verifyBaseRepoURL(helper, cluster, null, host, HDP_211_CENTOS6_REPO_URL);
-
- // Finalize the upgrade, passing in the request ID so that history is
- // created
- Map<String, String> commandParams = new HashMap<>();
- commandParams.put(FinalizeUpgradeAction.REQUEST_ID, String.valueOf(upgrade.getRequestId()));
- commandParams.put(FinalizeUpgradeAction.UPGRADE_DIRECTION_KEY, "upgrade");
- commandParams.put(FinalizeUpgradeAction.VERSION_KEY, targetRepo);
-
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName(clusterName);
-
- HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
- hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
-
- finalizeUpgradeAction.setExecutionCommand(executionCommand);
- finalizeUpgradeAction.setHostRoleCommand(hostRoleCommand);
-
- CommandReport report = finalizeUpgradeAction.execute(null);
- assertNotNull(report);
- assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
-
- // ensure that history now exists
- historyEntites = serviceComponentDesiredStateDAO.findHistory(cluster.getClusterId(),
- nnSCH.getServiceName(), nnSCH.getServiceComponentName());
-
- assertEquals(1, historyEntites.size());
- }
-
private ServiceComponentHost createNewServiceComponentHost(Cluster cluster, String svc,
String svcComponent, String hostName) throws AmbariException {
@@ -1013,8 +933,8 @@ public class UpgradeActionTest {
* @param targetRepo
* @throws Exception
*/
- private UpgradeEntity createUpgrade(Cluster cluster, StackId sourceStack, String sourceRepo,
- String targetRepo) throws Exception {
+ private UpgradeEntity createUpgrade(Cluster cluster, RepositoryVersionEntity repositoryVersion)
+ throws Exception {
// create some entities for the finalize action to work with for patch
// history
@@ -1030,8 +950,7 @@ public class UpgradeActionTest {
upgradeEntity.setClusterId(cluster.getClusterId());
upgradeEntity.setRequestEntity(requestEntity);
upgradeEntity.setUpgradePackage("");
- upgradeEntity.setFromVersion(sourceRepo);
- upgradeEntity.setToVersion(targetRepo);
+ upgradeEntity.setRepositoryVersion(repositoryVersion);
upgradeEntity.setUpgradeType(UpgradeType.NON_ROLLING);
upgradeDAO.create(upgradeEntity);
http://git-wip-us.apache.org/repos/asf/ambari/blob/522039eb/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
index 325fc90..4c9ffcc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
@@ -23,14 +23,12 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import java.sql.SQLException;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.H2DatabaseCleaner;
-import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.controller.ServiceComponentResponse;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -39,23 +37,15 @@ import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.dao.RequestDAO;
import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
-import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.RequestEntity;
import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
-import org.apache.ambari.server.orm.entities.ServiceComponentHistoryEntity;
import org.apache.ambari.server.orm.entities.ServiceComponentVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
-import org.apache.ambari.server.orm.entities.StageEntity;
-import org.apache.ambari.server.orm.entities.UpgradeEntity;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -343,60 +333,6 @@ public class ServiceComponentTest {
}
}
- @Test
- public void testHistoryCreation() throws AmbariException {
- ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO = injector.getInstance(
- ServiceComponentDesiredStateDAO.class);
-
- String componentName = "NAMENODE";
- ServiceComponent component = serviceComponentFactory.createNew(service, componentName);
- service.addServiceComponent(component);
-
- ServiceComponent sc = service.getServiceComponent(componentName);
- Assert.assertNotNull(sc);
-
- sc.setDesiredState(State.INSTALLED);
- Assert.assertEquals(State.INSTALLED, sc.getDesiredState());
-
- StackId newStackId = new StackId("HDP-2.2.0");
- RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(newStackId,
- newStackId.getStackVersion());
-
- sc.setDesiredRepositoryVersion(repositoryVersion);
-
- StackId stackId = sc.getDesiredStackId();
- Assert.assertEquals(new StackId("HDP", "2.2.0"), stackId);
-
- Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackId().getStackId());
-
- ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName(
- cluster.getClusterId(), serviceName, componentName);
-
- Assert.assertNotNull(serviceComponentDesiredStateEntity);
-
- UpgradeEntity upgradeEntity = createUpgradeEntity("2.2.0.0", "2.2.0.1");
- ServiceComponentHistoryEntity history = new ServiceComponentHistoryEntity();
- history.setFromStack(serviceComponentDesiredStateEntity.getDesiredStack());
- history.setToStack(serviceComponentDesiredStateEntity.getDesiredStack());
- history.setUpgrade(upgradeEntity);
-
- serviceComponentDesiredStateEntity.addHistory(history);
-
- serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.merge(
- serviceComponentDesiredStateEntity);
-
- serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName(
- cluster.getClusterId(), serviceName, componentName);
-
- assertEquals(1, serviceComponentDesiredStateEntity.getHistory().size());
- ServiceComponentHistoryEntity persistedHistory = serviceComponentDesiredStateEntity.getHistory().iterator().next();
-
- assertEquals(history.getFromStack(), persistedHistory.getFromStack());
- assertEquals(history.getToStack(), persistedHistory.getFromStack());
- assertEquals(history.getUpgrade(), persistedHistory.getUpgrade());
- assertEquals(history.getServiceComponentDesiredState(), persistedHistory.getServiceComponentDesiredState());
- }
-
@Test
public void testServiceComponentRemove() throws AmbariException {
@@ -459,83 +395,6 @@ public class ServiceComponentTest {
Assert.assertNull(serviceComponentDesiredStateEntity);
}
- /**
- * Tests the CASCADE nature of removing a service component also removes the
- * history.
- *
- * @throws AmbariException
- */
- @Test
- public void testHistoryRemoval() throws AmbariException {
- ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO = injector.getInstance(
- ServiceComponentDesiredStateDAO.class);
-
- String componentName = "NAMENODE";
- ServiceComponent component = serviceComponentFactory.createNew(service, componentName);
- service.addServiceComponent(component);
-
- ServiceComponent sc = service.getServiceComponent(componentName);
- Assert.assertNotNull(sc);
-
- sc.setDesiredState(State.INSTALLED);
- Assert.assertEquals(State.INSTALLED, sc.getDesiredState());
-
- StackId newStackId = new StackId("HDP-2.2.0");
- RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(newStackId,
- newStackId.getStackVersion());
-
- sc.setDesiredRepositoryVersion(repositoryVersion);
-
- StackId stackId = sc.getDesiredStackId();
- Assert.assertEquals(new StackId("HDP", "2.2.0"), stackId);
-
- Assert.assertEquals("HDP-2.2.0", sc.getDesiredStackId().getStackId());
-
- ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName(
- cluster.getClusterId(), serviceName, componentName);
-
-
- Assert.assertNotNull(serviceComponentDesiredStateEntity);
-
- UpgradeEntity upgradeEntity = createUpgradeEntity("2.2.0.0", "2.2.0.1");
- ServiceComponentHistoryEntity history = new ServiceComponentHistoryEntity();
- history.setFromStack(serviceComponentDesiredStateEntity.getDesiredStack());
- history.setToStack(serviceComponentDesiredStateEntity.getDesiredStack());
- history.setUpgrade(upgradeEntity);
- history.setServiceComponentDesiredState(serviceComponentDesiredStateEntity);
-
- serviceComponentDesiredStateEntity.addHistory(history);
-
- serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.merge(
- serviceComponentDesiredStateEntity);
-
- serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName(
- cluster.getClusterId(), serviceName, componentName);
-
- assertEquals(1, serviceComponentDesiredStateEntity.getHistory().size());
-
- // verify that we can retrieve the history directly
- List<ServiceComponentHistoryEntity> componentHistoryList = serviceComponentDesiredStateDAO.findHistory(
- sc.getClusterId(), sc.getServiceName(), sc.getName());
-
- assertEquals(1, componentHistoryList.size());
-
- // delete the SC
- sc.delete();
-
- // verify history is gone, too
- serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByName(
- cluster.getClusterId(), serviceName, componentName);
-
- Assert.assertNull(serviceComponentDesiredStateEntity);
-
- // verify that we cannot retrieve the history directly
- componentHistoryList = serviceComponentDesiredStateDAO.findHistory(sc.getClusterId(),
- sc.getServiceName(), sc.getName());
-
- assertEquals(0, componentHistoryList.size());
- }
-
@Test
public void testVersionCreation() throws Exception {
ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO = injector.getInstance(
@@ -734,38 +593,4 @@ public class ServiceComponentTest {
entity = serviceComponentDesiredStateDAO.findByName(cluster.getClusterId(), serviceName, componentName);
assertEquals(RepositoryVersionState.CURRENT, entity.getRepositoryState());
}
-
-
- /**
- * Creates an upgrade entity, asserting it was created correctly.
- *
- * @param fromVersion
- * @param toVersion
- * @return
- */
- private UpgradeEntity createUpgradeEntity(String fromVersion, String toVersion) {
- RequestDAO requestDAO = injector.getInstance(RequestDAO.class);
- RequestEntity requestEntity = new RequestEntity();
- requestEntity.setRequestId(99L);
- requestEntity.setClusterId(cluster.getClusterId());
- requestEntity.setStatus(HostRoleStatus.PENDING);
- requestEntity.setStages(new ArrayList<StageEntity>());
- requestDAO.create(requestEntity);
-
- UpgradeDAO upgradeDao = injector.getInstance(UpgradeDAO.class);
- UpgradeEntity upgradeEntity = new UpgradeEntity();
- upgradeEntity.setClusterId(cluster.getClusterId());
- upgradeEntity.setDirection(Direction.UPGRADE);
- upgradeEntity.setFromVersion(fromVersion);
- upgradeEntity.setToVersion(toVersion);
- upgradeEntity.setUpgradePackage("upgrade_test");
- upgradeEntity.setUpgradeType(UpgradeType.ROLLING);
- upgradeEntity.setRequestEntity(requestEntity);
-
- upgradeDao.create(upgradeEntity);
- List<UpgradeEntity> upgrades = upgradeDao.findUpgrades(cluster.getClusterId());
- assertEquals(1, upgrades.size());
- return upgradeEntity;
- }
-
}
[17/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/87e8bdf1
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/87e8bdf1
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/87e8bdf1
Branch: refs/heads/trunk
Commit: 87e8bdf1a0833897c98faeccfbf268017ed27c49
Parents: 7b0ccda 8f9786b
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Fri May 12 10:32:12 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Fri May 12 10:32:12 2017 -0400
----------------------------------------------------------------------
ambari-infra/.gitignore | 6 +
ambari-infra/ambari-infra-manager/pom.xml | 17 +-
.../conf/batch/InfraManagerBatchConfig.java | 227 +++
.../infra/job/dummy/DummyItemProcessor.java | 36 +
.../ambari/infra/job/dummy/DummyItemWriter.java | 36 +
.../ambari/infra/job/dummy/DummyObject.java | 40 +
.../apache/ambari/infra/rest/JobResource.java | 43 +-
.../src/main/resources/dummy/dummy.txt | 3 +
.../src/main/resources/infra-manager.properties | 6 +-
.../alerts/AlertMaintenanceModeListener.java | 60 +-
.../apache/ambari/server/state/AlertState.java | 4 +
.../server/topology/BlueprintValidatorImpl.java | 88 +-
.../RequiredConfigPropertiesValidator.java | 188 ++
.../validators/TopologyValidatorFactory.java | 3 +-
.../server/upgrade/UpgradeCatalog250.java | 72 -
.../main/python/ambari_server/serverUpgrade.py | 31 +-
.../main/python/ambari_server/setupMpacks.py | 9 +-
.../common-services/HDFS/2.1.0.2.0/metainfo.xml | 6 +-
.../common-services/HDFS/3.0.0.3.0/metainfo.xml | 10 +-
.../package/alerts/alert_llap_app_status.py | 4 +-
.../package/scripts/hive_server_interactive.py | 3 -
.../0.12.0.2.0/package/scripts/params_linux.py | 4 +-
.../package/alerts/alert_llap_app_status.py | 4 +-
.../package/scripts/hive_server_interactive.py | 3 -
.../2.1.0.3.0/package/scripts/params_linux.py | 4 +-
.../0.10.0.3.0/configuration/kafka-broker.xml | 2 +-
.../0.10.0.3.0/package/scripts/service_check.py | 15 +-
.../RANGER/0.7.0.3.0/alerts.json | 76 +
.../0.7.0.3.0/configuration/admin-log4j.xml | 132 ++
.../configuration/admin-properties.xml | 163 ++
.../configuration/atlas-tagsync-ssl.xml | 72 +
.../configuration/ranger-admin-site.xml | 785 ++++++++
.../0.7.0.3.0/configuration/ranger-env.xml | 513 +++++
.../0.7.0.3.0/configuration/ranger-site.xml | 30 +
.../configuration/ranger-solr-configuration.xml | 59 +
.../ranger-tagsync-policymgr-ssl.xml | 72 +
.../configuration/ranger-tagsync-site.xml | 206 ++
.../configuration/ranger-ugsync-site.xml | 574 ++++++
.../tagsync-application-properties.xml | 62 +
.../0.7.0.3.0/configuration/tagsync-log4j.xml | 90 +
.../0.7.0.3.0/configuration/usersync-log4j.xml | 89 +
.../configuration/usersync-properties.xml | 32 +
.../RANGER/0.7.0.3.0/kerberos.json | 153 ++
.../RANGER/0.7.0.3.0/metainfo.xml | 189 ++
.../alerts/alert_ranger_admin_passwd_check.py | 195 ++
.../RANGER/0.7.0.3.0/package/scripts/params.py | 448 +++++
.../0.7.0.3.0/package/scripts/ranger_admin.py | 217 ++
.../0.7.0.3.0/package/scripts/ranger_service.py | 69 +
.../0.7.0.3.0/package/scripts/ranger_tagsync.py | 139 ++
.../package/scripts/ranger_usersync.py | 124 ++
.../0.7.0.3.0/package/scripts/service_check.py | 49 +
.../0.7.0.3.0/package/scripts/setup_ranger.py | 153 ++
.../package/scripts/setup_ranger_xml.py | 853 ++++++++
.../0.7.0.3.0/package/scripts/status_params.py | 39 +
.../RANGER/0.7.0.3.0/package/scripts/upgrade.py | 31 +
.../templates/input.config-ranger.json.j2 | 79 +
.../package/templates/ranger_admin_pam.j2 | 22 +
.../package/templates/ranger_remote_pam.j2 | 22 +
.../package/templates/ranger_solr_jaas_conf.j2 | 26 +
.../properties/ranger-solrconfig.xml.j2 | 1874 ++++++++++++++++++
.../RANGER/0.7.0.3.0/quicklinks/quicklinks.json | 41 +
.../RANGER/0.7.0.3.0/role_command_order.json | 9 +
.../RANGER/0.7.0.3.0/service_advisor.py | 793 ++++++++
.../0.7.0.3.0/themes/theme_version_1.json | 722 +++++++
.../0.7.0.3.0/themes/theme_version_2.json | 1470 ++++++++++++++
.../0.7.0.3.0/themes/theme_version_3.json | 692 +++++++
.../0.7.0.3.0/themes/theme_version_5.json | 48 +
.../SPARK/1.2.1/package/scripts/params.py | 2 +-
.../SPARK/2.2.0/package/scripts/params.py | 2 +-
.../SPARK2/2.0.0/package/scripts/params.py | 2 +-
.../stacks/HDP/2.5/upgrades/config-upgrade.xml | 15 +
.../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml | 12 +
.../stacks/HDP/2.5/upgrades/upgrade-2.6.xml | 2 +
.../configuration/hive-interactive-site.xml | 11 +-
.../HIVE/configuration/tez-interactive-site.xml | 13 +
.../stacks/HDP/3.0/services/RANGER/metainfo.xml | 27 +
.../AlertMaintenanceModeListenerTest.java | 4 +
.../server/topology/BlueprintImplTest.java | 13 -
.../RequiredConfigPropertiesValidatorTest.java | 302 +++
.../server/upgrade/UpgradeCatalog250Test.java | 23 +-
.../controllers/main/service/info/summary.js | 2 +-
ambari-web/app/styles/alerts.less | 19 +-
.../app/styles/theme/bootstrap-ambari.css | 55 +-
ambari-web/app/styles/top-nav.less | 2 +-
ambari-web/app/templates/main/alerts.hbs | 16 +-
.../view/hive2/resources/files/FileService.java | 8 +-
.../view/hive20/internal/dto/TableStats.java | 24 +-
.../internal/parsers/TableMetaParserImpl.java | 8 +-
88 files changed, 12620 insertions(+), 278 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/87e8bdf1/ambari-server/src/main/python/ambari_server/serverUpgrade.py
----------------------------------------------------------------------
[35/50] [abbrv] ambari git commit: AMBARI-21078 - Merging
Configurations On Service/Patch Upgrades Should Create New Configurations
Only For Included Services (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index 98f5228..24c529d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@ -42,6 +42,7 @@ import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.H2DatabaseCleaner;
+import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.ClusterRequest;
@@ -55,6 +56,7 @@ import org.apache.ambari.server.security.authorization.AuthorizationException;
import org.apache.ambari.server.stack.HostsType;
import org.apache.ambari.server.stack.MasterHostResolver;
import org.apache.ambari.server.stack.StackManagerMock;
+import org.apache.ambari.server.stageplanner.RoleGraphFactory;
import org.apache.ambari.server.state.UpgradeHelper.UpgradeGroupHolder;
import org.apache.ambari.server.state.stack.ConfigUpgradePack;
import org.apache.ambari.server.state.stack.UpgradePack;
@@ -100,6 +102,7 @@ import com.google.inject.util.Modules;
*/
public class UpgradeHelperTest {
+ private static final StackId STACK_ID_HDP_211 = new StackId("HDP-2.1.1");
private static final StackId STACK_ID_HDP_220 = new StackId("HDP-2.2.0");
private static final String UPGRADE_VERSION = "2.2.1.0-1234";
private static final String DOWNGRADE_VERSION = "2.2.0.0-1234";
@@ -113,8 +116,8 @@ public class UpgradeHelperTest {
private ConfigHelper m_configHelper;
private AmbariManagementController m_managementController;
private Gson m_gson = new Gson();
- private UpgradeContextFactory m_upgradeContextFactory;
+ private RepositoryVersionEntity repositoryVersion2110;
private RepositoryVersionEntity repositoryVersion2200;
private RepositoryVersionEntity repositoryVersion2210;
@@ -160,8 +163,8 @@ public class UpgradeHelperTest {
m_upgradeHelper = injector.getInstance(UpgradeHelper.class);
m_masterHostResolver = EasyMock.createMock(MasterHostResolver.class);
m_managementController = injector.getInstance(AmbariManagementController.class);
- m_upgradeContextFactory = injector.getInstance(UpgradeContextFactory.class);
+ repositoryVersion2110 = helper.getOrCreateRepositoryVersion(STACK_ID_HDP_211, "2.1.1.0-1234");
repositoryVersion2200 = helper.getOrCreateRepositoryVersion(STACK_ID_HDP_220, DOWNGRADE_VERSION);
repositoryVersion2210 = helper.getOrCreateRepositoryVersion(STACK_ID_HDP_220, UPGRADE_VERSION);
@@ -294,14 +297,9 @@ public class UpgradeHelperTest {
Cluster cluster = makeCluster();
Set<String> services = Collections.singleton("ZOOKEEPER");
- UpgradeContext context = EasyMock.createNiceMock(UpgradeContext.class);
- EasyMock.expect(context.getCluster()).andReturn(cluster).anyTimes();
- EasyMock.expect(context.getType()).andReturn(UpgradeType.ROLLING).anyTimes();
- EasyMock.expect(context.getDirection()).andReturn(Direction.UPGRADE).anyTimes();
- EasyMock.expect(context.getRepositoryVersion()).andReturn(repositoryVersion2210).anyTimes();
- EasyMock.expect(context.getSupportedServices()).andReturn(services).anyTimes();
- EasyMock.expect(context.getRepositoryType()).andReturn(RepositoryType.PATCH).anyTimes();
- EasyMock.replay(context);
+
+ UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING,
+ repositoryVersion2210, RepositoryType.PATCH, services);
List<Grouping> groupings = upgrade.getGroups(Direction.UPGRADE);
assertEquals(8, groupings.size());
@@ -460,7 +458,7 @@ public class UpgradeHelperTest {
UpgradeType.ROLLING, repositoryVersion2210);
// use a "real" master host resolver here so that we can actually test MM
- MasterHostResolver masterHostResolver = new MasterHostResolver(null, context);
+ MasterHostResolver masterHostResolver = new MasterHostResolver(cluster, null, context);
EasyMock.expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
replay(context);
@@ -1525,14 +1523,10 @@ public class UpgradeHelperTest {
String clusterName = "c1";
- String version = "2.1.1.0-1234";
StackId stackId = new StackId("HDP-2.1.1");
clusters.addCluster(clusterName, stackId);
Cluster c = clusters.getCluster(clusterName);
- RepositoryVersionEntity repositoryVersion211 = helper.getOrCreateRepositoryVersion(stackId,
- version);
-
for (int i = 0; i < 2; i++) {
String hostName = "h" + (i+1);
clusters.addHost(hostName);
@@ -1548,24 +1542,24 @@ public class UpgradeHelperTest {
}
// !!! add services
- c.addService(serviceFactory.createNew(c, "ZOOKEEPER", repositoryVersion211));
+ c.addService(serviceFactory.createNew(c, "ZOOKEEPER", repositoryVersion2110));
Service s = c.getService("ZOOKEEPER");
ServiceComponent sc = s.addServiceComponent("ZOOKEEPER_SERVER");
ServiceComponentHost sch1 = sc.addServiceComponentHost("h1");
- sch1.setVersion(repositoryVersion211.getVersion());
+ sch1.setVersion(repositoryVersion2110.getVersion());
ServiceComponentHost sch2 = sc.addServiceComponentHost("h2");
- sch2.setVersion(repositoryVersion211.getVersion());
+ sch2.setVersion(repositoryVersion2110.getVersion());
List<ServiceComponentHost> schs = c.getServiceComponentHosts("ZOOKEEPER", "ZOOKEEPER_SERVER");
assertEquals(2, schs.size());
UpgradeContext context = getMockUpgradeContextNoReplay(c, Direction.UPGRADE,
- UpgradeType.HOST_ORDERED, repositoryVersion211);
+ UpgradeType.HOST_ORDERED, repositoryVersion2110);
- MasterHostResolver resolver = new MasterHostResolver(m_configHelper, context);
+ MasterHostResolver resolver = new MasterHostResolver(c, m_configHelper, context);
EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
replay(context);
@@ -1639,7 +1633,7 @@ public class UpgradeHelperTest {
UpgradeType.NON_ROLLING, repositoryVersion211);
// use a "real" master host resolver here so that we can actually test MM
- MasterHostResolver mhr = new MockMasterHostResolver(m_configHelper, context);
+ MasterHostResolver mhr = new MockMasterHostResolver(c, m_configHelper, context);
EasyMock.expect(context.getResolver()).andReturn(mhr).anyTimes();
replay(context);
@@ -1708,7 +1702,7 @@ public class UpgradeHelperTest {
UpgradeType.NON_ROLLING, repositoryVersion211);
// use a "real" master host resolver here so that we can actually test MM
- MasterHostResolver mhr = new BadMasterHostResolver(m_configHelper, context);
+ MasterHostResolver mhr = new BadMasterHostResolver(c, m_configHelper, context);
EasyMock.expect(context.getResolver()).andReturn(mhr).anyTimes();
replay(context);
@@ -1846,7 +1840,7 @@ public class UpgradeHelperTest {
UpgradeType.NON_ROLLING, repoVersion220);
// use a "real" master host resolver here so that we can actually test MM
- MasterHostResolver masterHostResolver = new MasterHostResolver(m_configHelper, context);
+ MasterHostResolver masterHostResolver = new MasterHostResolver(c, m_configHelper, context);
EasyMock.expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
replay(context);
@@ -1862,7 +1856,7 @@ public class UpgradeHelperTest {
repoVersion211);
// use a "real" master host resolver here so that we can actually test MM
- masterHostResolver = new MasterHostResolver(m_configHelper, context);
+ masterHostResolver = new MasterHostResolver(c, m_configHelper, context);
EasyMock.expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
replay(context);
@@ -2129,7 +2123,7 @@ public class UpgradeHelperTest {
UpgradeContext context = getMockUpgradeContextNoReplay(c, Direction.UPGRADE,
UpgradeType.HOST_ORDERED, repoVersion220);
- MasterHostResolver resolver = new MasterHostResolver(m_configHelper, context);
+ MasterHostResolver resolver = new MasterHostResolver(c, m_configHelper, context);
EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
replay(context);
@@ -2173,7 +2167,7 @@ public class UpgradeHelperTest {
context = getMockUpgradeContextNoReplay(c, Direction.DOWNGRADE, UpgradeType.HOST_ORDERED,
repoVersion211);
- resolver = new MasterHostResolver(m_configHelper, context);
+ resolver = new MasterHostResolver(c, m_configHelper, context);
EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
replay(context);
@@ -2190,7 +2184,7 @@ public class UpgradeHelperTest {
context = getMockUpgradeContextNoReplay(c, Direction.DOWNGRADE, UpgradeType.HOST_ORDERED,
repoVersion211);
- resolver = new MasterHostResolver(m_configHelper, context);
+ resolver = new MasterHostResolver(c, m_configHelper, context);
EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
replay(context);
@@ -2281,7 +2275,7 @@ public class UpgradeHelperTest {
UpgradeType type, RepositoryVersionEntity repositoryVersion, RepositoryType repositoryType,
Set<String> services) {
return getMockUpgradeContext(cluster, direction, type, repositoryVersion,
- repositoryType, services, m_masterHostResolver);
+ repositoryType, services, m_masterHostResolver, true);
}
/**
@@ -2294,15 +2288,8 @@ public class UpgradeHelperTest {
UpgradeType type, RepositoryVersionEntity repositoryVersion) {
Set<String> allServices = cluster.getServices().keySet();
- UpgradeContext context = EasyMock.createNiceMock(UpgradeContext.class);
- EasyMock.expect(context.getCluster()).andReturn(cluster).anyTimes();
- EasyMock.expect(context.getType()).andReturn(type).anyTimes();
- EasyMock.expect(context.getDirection()).andReturn(direction).anyTimes();
- EasyMock.expect(context.getRepositoryVersion()).andReturn(repositoryVersion).anyTimes();
- EasyMock.expect(context.getSupportedServices()).andReturn(allServices).anyTimes();
- EasyMock.expect(context.getRepositoryType()).andReturn(RepositoryType.STANDARD).anyTimes();
- EasyMock.expect(context.isScoped(EasyMock.anyObject(UpgradeScope.class))).andReturn(true).anyTimes();
- return context;
+ return getMockUpgradeContext(cluster, direction, type, repositoryVersion,
+ RepositoryType.STANDARD, allServices, null, false);
}
/**
@@ -2314,8 +2301,8 @@ public class UpgradeHelperTest {
* @return
*/
private UpgradeContext getMockUpgradeContext(Cluster cluster, Direction direction,
- UpgradeType type, RepositoryVersionEntity repositoryVersion, RepositoryType repositoryType,
- Set<String> services, MasterHostResolver resolver) {
+ UpgradeType type, RepositoryVersionEntity repositoryVersion, final RepositoryType repositoryType,
+ Set<String> services, MasterHostResolver resolver, boolean replay) {
UpgradeContext context = EasyMock.createNiceMock(UpgradeContext.class);
EasyMock.expect(context.getCluster()).andReturn(cluster).anyTimes();
EasyMock.expect(context.getType()).andReturn(type).anyTimes();
@@ -2323,9 +2310,14 @@ public class UpgradeHelperTest {
EasyMock.expect(context.getRepositoryVersion()).andReturn(repositoryVersion).anyTimes();
EasyMock.expect(context.getSupportedServices()).andReturn(services).anyTimes();
EasyMock.expect(context.getRepositoryType()).andReturn(repositoryType).anyTimes();
- EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
- EasyMock.expect(context.isScoped(EasyMock.anyObject(UpgradeScope.class))).andReturn(true).anyTimes();
EasyMock.expect(context.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+ EasyMock.expect(context.getHostRoleCommandFactory()).andStubReturn(injector.getInstance(HostRoleCommandFactory.class));
+ EasyMock.expect(context.getRoleGraphFactory()).andStubReturn(injector.getInstance(RoleGraphFactory.class));
+
+ // only set this if supplied
+ if (null != resolver) {
+ EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ }
final Map<String, RepositoryVersionEntity> targetRepositoryVersions = new HashMap<>();
for( String serviceName : services ){
@@ -2353,8 +2345,6 @@ public class UpgradeHelperTest {
final Map<String, String> serviceNames = new HashMap<>();
-
-
final Capture<String> serviceDisplayNameArg1 = EasyMock.newCapture();
final Capture<String> serviceDisplayNameArg2 = EasyMock.newCapture();
@@ -2408,7 +2398,28 @@ public class UpgradeHelperTest {
}
}).anyTimes();
- replay(context);
+ final Capture<UpgradeScope> isScopedCapture = EasyMock.newCapture();
+ EasyMock.expect(context.isScoped(EasyMock.capture(isScopedCapture))).andStubAnswer(
+ new IAnswer<Boolean>() {
+ @Override
+ public Boolean answer() throws Throwable {
+ UpgradeScope scope = isScopedCapture.getValue();
+ if (scope == UpgradeScope.ANY) {
+ return true;
+ }
+
+ if (scope == UpgradeScope.PARTIAL) {
+ return repositoryType != RepositoryType.STANDARD;
+ }
+
+ return repositoryType == RepositoryType.STANDARD;
+ }
+ });
+
+ if (replay) {
+ replay(context);
+ }
+
return context;
}
@@ -2418,8 +2429,8 @@ public class UpgradeHelperTest {
*/
private class MockMasterHostResolver extends MasterHostResolver {
- public MockMasterHostResolver(ConfigHelper configHelper, UpgradeContext context) {
- super(configHelper, context);
+ public MockMasterHostResolver(Cluster cluster, ConfigHelper configHelper, UpgradeContext context) {
+ super(cluster, configHelper, context);
}
/**
@@ -2461,8 +2472,8 @@ public class UpgradeHelperTest {
private static class BadMasterHostResolver extends MasterHostResolver {
- public BadMasterHostResolver(ConfigHelper configHelper, UpgradeContext context) {
- super(configHelper, context);
+ public BadMasterHostResolver(Cluster cluster, ConfigHelper configHelper, UpgradeContext context) {
+ super(cluster, configHelper, context);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
index 38c9d1c..8c4cb93 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
@@ -1293,6 +1293,9 @@ public class ClusterTest {
public void testServiceConfigVersionsForGroups() throws Exception {
createDefaultCluster();
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
+ c1.addService("HDFS", repositoryVersion);
+
Config config1 = configFactory.createNew(c1, "hdfs-site", "version1",
new HashMap<String, String>() {{ put("a", "b"); }}, new HashMap<String, Map<String,String>>());
@@ -1310,7 +1313,7 @@ public class ClusterTest {
new HashMap<String, String>() {{ put("a", "c"); }}, new HashMap<String, Map<String,String>>());
ConfigGroup configGroup =
- configGroupFactory.createNew(c1, "test group", "HDFS", "descr", Collections.singletonMap("hdfs-site", config2),
+ configGroupFactory.createNew(c1, "HDFS", "test group", "HDFS", "descr", Collections.singletonMap("hdfs-site", config2),
Collections.<Long, Host>emptyMap());
c1.addConfigGroup(configGroup);
@@ -1362,7 +1365,7 @@ public class ClusterTest {
Collections.singletonMap("a", "b"), null);
ConfigGroup configGroup2 =
- configGroupFactory.createNew(c1, "test group 2", "HDFS", "descr",
+ configGroupFactory.createNew(c1, "HDFS", "test group 2", "HDFS", "descr",
new HashMap<>(Collections.singletonMap("hdfs-site", config4)),
Collections.<Long, Host>emptyMap());
@@ -1397,7 +1400,7 @@ public class ClusterTest {
Config hdfsSiteConfigV2 = configFactory.createNew(c1, "hdfs-site", "version2",
ImmutableMap.of("p1", "v2"), ImmutableMap.<String, Map<String,String>>of());
- ConfigGroup configGroup = configGroupFactory.createNew(c1, "configGroup1", "version1", "test description", ImmutableMap.of(hdfsSiteConfigV2.getType(), hdfsSiteConfigV2), ImmutableMap.<Long, Host>of());
+ ConfigGroup configGroup = configGroupFactory.createNew(c1, "HDFS", "configGroup1", "version1", "test description", ImmutableMap.of(hdfsSiteConfigV2.getType(), hdfsSiteConfigV2), ImmutableMap.<Long, Host>of());
c1.addConfigGroup(configGroup);
ServiceConfigVersionResponse hdfsSiteConfigResponseV2 = c1.createServiceConfigVersion("HDFS", "admin", "test note", configGroup);
@@ -1456,7 +1459,7 @@ public class ClusterTest {
Config hdfsSiteConfigV2 = configFactory.createNew(c1, "hdfs-site", "version2",
ImmutableMap.of("p1", "v2"), ImmutableMap.<String, Map<String,String>>of());
- ConfigGroup configGroup = configGroupFactory.createNew(c1, "configGroup1", "version1", "test description", ImmutableMap.of(hdfsSiteConfigV2.getType(), hdfsSiteConfigV2), ImmutableMap.<Long, Host>of());
+ ConfigGroup configGroup = configGroupFactory.createNew(c1, "HDFS", "configGroup1", "version1", "test description", ImmutableMap.of(hdfsSiteConfigV2.getType(), hdfsSiteConfigV2), ImmutableMap.<Long, Host>of());
c1.addConfigGroup(configGroup);
ServiceConfigVersionResponse hdfsSiteConfigResponseV2 = c1.createServiceConfigVersion("HDFS", "admin", "test note", configGroup);
@@ -1934,7 +1937,7 @@ public class ClusterTest {
}
}, new HashMap<String, Map<String, String>>());
- ConfigGroup configGroup = configGroupFactory.createNew(cluster, "g1", "t1", "",
+ ConfigGroup configGroup = configGroupFactory.createNew(cluster, "HDFS", "g1", "t1", "",
new HashMap<String, Config>() {
{
put("foo-site", originalConfig);
@@ -1974,25 +1977,31 @@ public class ClusterTest {
}
/**
- * Tests that {@link Cluster#applyLatestConfigurations(StackId)} sets the
+ * Tests that {@link Cluster#applyLatestConfigurations(StackId, String)} sets the
* right configs to enabled.
*
* @throws Exception
*/
@Test
public void testApplyLatestConfigurations() throws Exception {
- createDefaultCluster();
+ StackId stackId = new StackId("HDP-2.0.6");
+ StackId newStackId = new StackId("HDP-2.2.0");
+ createDefaultCluster(Sets.newHashSet("host-1"), stackId);
+
Cluster cluster = clusters.getCluster("c1");
ClusterEntity clusterEntity = clusterDAO.findByName("c1");
- StackId stackId = cluster.getCurrentStackVersion();
- StackId newStackId = new StackId("HDP-2.0.6");
+ RepositoryVersionEntity repoVersion220 = helper.getOrCreateRepositoryVersion(newStackId, "2.2.0-1234");
StackEntity currentStack = stackDAO.find(stackId.getStackName(), stackId.getStackVersion());
StackEntity newStack = stackDAO.find(newStackId.getStackName(), newStackId.getStackVersion());
- Assert.assertFalse( stackId.equals(newStackId) );
+ Assert.assertFalse(stackId.equals(newStackId));
- String configType = "foo-type";
+ // add a service
+ String serviceName = "ZOOKEEPER";
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
+ Service service = cluster.addService(serviceName, repositoryVersion);
+ String configType = "zoo.cfg";
ClusterConfigEntity clusterConfig1 = new ClusterConfigEntity();
clusterConfig1.setClusterEntity(clusterEntity);
@@ -2009,6 +2018,8 @@ public class ClusterTest {
clusterEntity.getClusterConfigEntities().add(clusterConfig1);
clusterEntity = clusterDAO.merge(clusterEntity);
+ cluster.createServiceConfigVersion(serviceName, "", "version-1", null);
+
ClusterConfigEntity clusterConfig2 = new ClusterConfigEntity();
clusterConfig2.setClusterEntity(clusterEntity);
clusterConfig2.setConfigId(2L);
@@ -2024,6 +2035,11 @@ public class ClusterTest {
clusterEntity.getClusterConfigEntities().add(clusterConfig2);
clusterEntity = clusterDAO.merge(clusterEntity);
+ // before creating the new service config version, we need to push the
+ // service's desired repository forward
+ service.setDesiredRepositoryVersion(repoVersion220);
+ cluster.createServiceConfigVersion(serviceName, "", "version-2", null);
+
// check that the original config is enabled
Collection<ClusterConfigEntity> clusterConfigs = clusterEntity.getClusterConfigEntities();
Assert.assertEquals(2, clusterConfigs.size());
@@ -2035,7 +2051,7 @@ public class ClusterTest {
}
}
- cluster.applyLatestConfigurations(newStackId);
+ cluster.applyLatestConfigurations(newStackId, serviceName);
clusterEntity = clusterDAO.findByName("c1");
// now check that the new config is enabled
@@ -2059,18 +2075,24 @@ public class ClusterTest {
*/
@Test
public void testApplyLatestConfigurationsToPreviousStack() throws Exception {
- createDefaultCluster();
+ StackId stackId = new StackId("HDP-2.0.6");
+ StackId newStackId = new StackId("HDP-2.2.0");
+ createDefaultCluster(Sets.newHashSet("host-1"), stackId);
+
Cluster cluster = clusters.getCluster("c1");
ClusterEntity clusterEntity = clusterDAO.findByName("c1");
- StackId stackId = cluster.getCurrentStackVersion();
- StackId newStackId = new StackId("HDP-2.0.6");
+ RepositoryVersionEntity repoVersion220 = helper.getOrCreateRepositoryVersion(newStackId, "2.2.0-1234");
StackEntity currentStack = stackDAO.find(stackId.getStackName(), stackId.getStackVersion());
StackEntity newStack = stackDAO.find(newStackId.getStackName(), newStackId.getStackVersion());
Assert.assertFalse(stackId.equals(newStackId));
- String configType = "foo-type";
+ // add a service
+ String serviceName = "ZOOKEEPER";
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
+ Service service = cluster.addService(serviceName, repositoryVersion);
+ String configType = "zoo.cfg";
// create 5 configurations in the current stack
for (int i = 1; i <= 5; i++) {
@@ -2100,6 +2122,9 @@ public class ClusterTest {
// save them all
clusterEntity = clusterDAO.merge(clusterEntity);
+ // create a service configuration for them
+ cluster.createServiceConfigVersion(serviceName, "", "version-1", null);
+
// create a new configuration in the new stack and enable it
ClusterConfigEntity clusterConfigNewStack = new ClusterConfigEntity();
clusterConfigNewStack.setClusterEntity(clusterEntity);
@@ -2116,6 +2141,11 @@ public class ClusterTest {
clusterEntity.getClusterConfigEntities().add(clusterConfigNewStack);
clusterEntity = clusterDAO.merge(clusterEntity);
+ // before creating the new service config version, we need to push the
+ // service's desired repository forward
+ service.setDesiredRepositoryVersion(repoVersion220);
+ cluster.createServiceConfigVersion(serviceName, "", "version-2", null);
+
// check that only the newest configuration is enabled
ClusterConfigEntity clusterConfig = clusterDAO.findEnabledConfigByType(
clusterEntity.getClusterId(), configType);
@@ -2123,7 +2153,7 @@ public class ClusterTest {
Assert.assertEquals(clusterConfigNewStack.getTag(), clusterConfig.getTag());
// move back to the original stack
- cluster.applyLatestConfigurations(stackId);
+ cluster.applyLatestConfigurations(stackId, serviceName);
clusterEntity = clusterDAO.findByName("c1");
// now check that latest config from the original stack is enabled
@@ -2138,65 +2168,73 @@ public class ClusterTest {
*/
@Test
public void testDesiredConfigurationsAfterApplyingLatestForStack() throws Exception {
- createDefaultCluster();
- Cluster cluster = clusters.getCluster("c1");
- StackId stackId = cluster.getCurrentStackVersion();
+ StackId stackId = new StackId("HDP-2.0.6");
StackId newStackId = new StackId("HDP-2.2.0");
+ createDefaultCluster(Sets.newHashSet("host-1"), stackId);
+
+ Cluster cluster = clusters.getCluster("c1");
+ RepositoryVersionEntity repoVersion220 = helper.getOrCreateRepositoryVersion(newStackId, "2.2.0-1234");
ConfigHelper configHelper = injector.getInstance(ConfigHelper.class);
// make sure the stacks are different
Assert.assertFalse(stackId.equals(newStackId));
+ // add a service
+ String serviceName = "ZOOKEEPER";
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
+ Service service = cluster.addService(serviceName, repositoryVersion);
+ String configType = "zoo.cfg";
+
Map<String, String> properties = new HashMap<>();
Map<String, Map<String, String>> propertiesAttributes = new HashMap<>();
- // foo-type for v1 on current stack
+ // config for v1 on current stack
properties.put("foo-property-1", "foo-value-1");
- Config c1 = configFactory.createNew(cluster, "foo-type", "version-1", properties, propertiesAttributes);
+ Config c1 = configFactory.createNew(stackId, cluster, configType, "version-1", properties, propertiesAttributes);
// make v1 "current"
cluster.addDesiredConfig("admin", Sets.newHashSet(c1), "note-1");
- // bump the stack
- cluster.setDesiredStackVersion(newStackId);
+ // bump the repo version
+ service.setDesiredRepositoryVersion(repoVersion220);
// save v2
- // foo-type for v2 on new stack
+ // config for v2 on new stack
properties.put("foo-property-2", "foo-value-2");
- Config c2 = configFactory.createNew(cluster, "foo-type", "version-2", properties, propertiesAttributes);
+ Config c2 = configFactory.createNew(newStackId, cluster, configType, "version-2", properties, propertiesAttributes);
// make v2 "current"
cluster.addDesiredConfig("admin", Sets.newHashSet(c2), "note-2");
// check desired config
Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs();
- DesiredConfig desiredConfig = desiredConfigs.get("foo-type");
- desiredConfig = desiredConfigs.get("foo-type");
+ DesiredConfig desiredConfig = desiredConfigs.get(configType);
+ desiredConfig = desiredConfigs.get(configType);
assertNotNull(desiredConfig);
assertEquals(Long.valueOf(2), desiredConfig.getVersion());
assertEquals("version-2", desiredConfig.getTag());
String hostName = cluster.getHosts().iterator().next().getHostName();
- // {foo-type={tag=version-2}}
+ // {config-type={tag=version-2}}
Map<String, Map<String, String>> effectiveDesiredTags = configHelper.getEffectiveDesiredTags(
cluster, hostName);
- assertEquals("version-2", effectiveDesiredTags.get("foo-type").get("tag"));
+ assertEquals("version-2", effectiveDesiredTags.get(configType).get("tag"));
- // move the stack back to the old stack
- cluster.setDesiredStackVersion(stackId);
+ // move the service back to the old repo version / stack
+ service.setDesiredRepositoryVersion(repositoryVersion);
// apply the configs for the old stack
- cluster.applyLatestConfigurations(stackId);
+ cluster.applyLatestConfigurations(stackId, serviceName);
- // {foo-type={tag=version-1}}
+ // {config-type={tag=version-1}}
effectiveDesiredTags = configHelper.getEffectiveDesiredTags(cluster, hostName);
- assertEquals("version-1", effectiveDesiredTags.get("foo-type").get("tag"));
+ assertEquals("version-1", effectiveDesiredTags.get(configType).get("tag"));
desiredConfigs = cluster.getDesiredConfigs();
- desiredConfig = desiredConfigs.get("foo-type");
+ desiredConfig = desiredConfigs.get(configType);
assertNotNull(desiredConfig);
assertEquals(Long.valueOf(1), desiredConfig.getVersion());
assertEquals("version-1", desiredConfig.getTag());
@@ -2209,18 +2247,24 @@ public class ClusterTest {
*/
@Test
public void testRemoveConfigurations() throws Exception {
- createDefaultCluster();
+ StackId stackId = new StackId("HDP-2.0.6");
+ StackId newStackId = new StackId("HDP-2.2.0");
+ createDefaultCluster(Sets.newHashSet("host-1"), stackId);
+
Cluster cluster = clusters.getCluster("c1");
ClusterEntity clusterEntity = clusterDAO.findByName("c1");
- StackId stackId = cluster.getCurrentStackVersion();
- StackId newStackId = new StackId("HDP-2.0.6");
+ RepositoryVersionEntity repoVersion220 = helper.getOrCreateRepositoryVersion(newStackId, "2.2.0-1234");
StackEntity currentStack = stackDAO.find(stackId.getStackName(), stackId.getStackVersion());
StackEntity newStack = stackDAO.find(newStackId.getStackName(), newStackId.getStackVersion());
Assert.assertFalse(stackId.equals(newStackId));
- String configType = "foo-type";
+ // add a service
+ String serviceName = "ZOOKEEPER";
+ RepositoryVersionEntity repositoryVersion = helper.getOrCreateRepositoryVersion(c1);
+ Service service = cluster.addService(serviceName, repositoryVersion);
+ String configType = "zoo.cfg";
ClusterConfigEntity clusterConfig = new ClusterConfigEntity();
clusterConfig.setClusterEntity(clusterEntity);
@@ -2237,6 +2281,13 @@ public class ClusterTest {
clusterEntity.getClusterConfigEntities().add(clusterConfig);
clusterEntity = clusterDAO.merge(clusterEntity);
+ // create the service version association
+ cluster.createServiceConfigVersion(serviceName, "", "version-1", null);
+
+ // now un-select it and create a new config
+ clusterConfig.setSelected(false);
+ clusterConfig = clusterDAO.merge(clusterConfig);
+
ClusterConfigEntity newClusterConfig = new ClusterConfigEntity();
newClusterConfig.setClusterEntity(clusterEntity);
newClusterConfig.setConfigId(2L);
@@ -2246,12 +2297,19 @@ public class ClusterTest {
newClusterConfig.setType(configType);
newClusterConfig.setTimestamp(2L);
newClusterConfig.setVersion(2L);
- newClusterConfig.setSelected(false);
+ newClusterConfig.setSelected(true);
clusterDAO.createConfig(newClusterConfig);
clusterEntity.getClusterConfigEntities().add(newClusterConfig);
clusterEntity = clusterDAO.merge(clusterEntity);
+ // before creating the new service config version, we need to push the
+ // service's desired repository forward
+ service.setDesiredRepositoryVersion(repoVersion220);
+ cluster.createServiceConfigVersion(serviceName, "", "version-2", null);
+
+ cluster.applyLatestConfigurations(newStackId, serviceName);
+
// get back the cluster configs for the new stack
List<ClusterConfigEntity> clusterConfigs = clusterDAO.getAllConfigurations(
cluster.getClusterId(), newStackId);
@@ -2259,7 +2317,7 @@ public class ClusterTest {
Assert.assertEquals(1, clusterConfigs.size());
// remove the configs
- cluster.removeConfigurations(newStackId);
+ cluster.removeConfigurations(newStackId, serviceName);
clusterConfigs = clusterDAO.getAllConfigurations(cluster.getClusterId(), newStackId);
Assert.assertEquals(0, clusterConfigs.size());
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
index b8c0e7c..c851419 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
@@ -545,7 +545,7 @@ public class ServiceComponentHostTest {
Cluster cluster = clusters.getCluster(clusterName);
- final ConfigGroup configGroup = configGroupFactory.createNew(cluster,
+ final ConfigGroup configGroup = configGroupFactory.createNew(cluster, "HDFS",
"cg1", "t1", "", new HashMap<String, Config>(), new HashMap<Long, Host>());
cluster.addConfigGroup(configGroup);
@@ -799,7 +799,7 @@ public class ServiceComponentHostTest {
new HashMap<String, Map<String,String>>());
host.addDesiredConfig(cluster.getClusterId(), true, "user", c);
- ConfigGroup configGroup = configGroupFactory.createNew(cluster, "g1",
+ ConfigGroup configGroup = configGroupFactory.createNew(cluster, "HDFS", "g1",
"t1", "", new HashMap<String, Config>() {{ put("hdfs-site", c); }},
new HashMap<Long, Host>() {{ put(hostEntity.getHostId(), host); }});
cluster.addConfigGroup(configGroup);
@@ -855,7 +855,7 @@ public class ServiceComponentHostTest {
final Config c1 = configFactory.createNew(cluster, "core-site", "version2",
new HashMap<String, String>() {{ put("fs.trash.interval", "400"); }},
new HashMap<String, Map<String,String>>());
- configGroup = configGroupFactory.createNew(cluster, "g2",
+ configGroup = configGroupFactory.createNew(cluster, "HDFS", "g2",
"t2", "", new HashMap<String, Config>() {{ put("core-site", c1); }},
new HashMap<Long, Host>() {{ put(hostEntity.getHostId(), host); }});
cluster.addConfigGroup(configGroup);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java
index 26df0d2..066ec34 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalogTest.java
@@ -131,7 +131,7 @@ public class AbstractUpgradeCatalogTest {
mergedProperties.put("prop1", "v1-old");
mergedProperties.put("prop4", "v4");
- expect(amc.createConfig(anyObject(StackId.class), eq(cluster), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
+ expect(amc.createConfig(eq(cluster), anyObject(StackId.class), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
replay(injector, configHelper, amc, cluster, clusters, serviceInfo, oldConfig);
@@ -153,7 +153,7 @@ public class AbstractUpgradeCatalogTest {
mergedProperties.put("prop2", "v2");
mergedProperties.put("prop3", "v3-old");
- expect(amc.createConfig(anyObject(StackId.class), eq(cluster), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
+ expect(amc.createConfig(eq(cluster), anyObject(StackId.class), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
replay(injector, configHelper, amc, cluster, clusters, serviceInfo, oldConfig);
@@ -172,7 +172,7 @@ public class AbstractUpgradeCatalogTest {
Map<String, String> mergedProperties = new HashMap<>();
mergedProperties.put("prop1", "v1-old");
- expect(amc.createConfig(anyObject(StackId.class), eq(cluster), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
+ expect(amc.createConfig(eq(cluster), anyObject(StackId.class), eq("hdfs-site"), eq(mergedProperties), anyString(), eq(tags))).andReturn(null);
replay(injector, configHelper, amc, cluster, clusters, serviceInfo, oldConfig);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
index a8f5f62..7218578 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
@@ -517,7 +517,7 @@ public class UpgradeCatalog210Test {
expect(mockClusterExpected.getDesiredConfigByType("hive-site")).andReturn(mockHiveSite).atLeastOnce();
expect(mockHiveSite.getProperties()).andReturn(propertiesExpectedHiveSite).anyTimes();
expect(mockClusterExpected.getServices()).andReturn(servicesExpected).atLeastOnce();
- expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), (Cluster)anyObject(),
+ expect(mockAmbariManagementController.createConfig((Cluster)anyObject(), anyObject(StackId.class),
anyString(),
capture(configCreation),
anyString(),
@@ -601,7 +601,7 @@ public class UpgradeCatalog210Test {
expect(mockHiveSite.getProperties()).andReturn(propertiesExpectedHiveSite).anyTimes();
expect(mockHivePluginProperies.getProperties()).andReturn(propertiesExpectedPluginProperies).anyTimes();
expect(mockClusterExpected.getServices()).andReturn(servicesExpected).atLeastOnce();
- expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), (Cluster) anyObject(),
+ expect(mockAmbariManagementController.createConfig((Cluster) anyObject(), anyObject(StackId.class),
anyString(),
capture(configCreation),
anyString(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java
index f2e9974..14fb598 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog211Test.java
@@ -269,7 +269,7 @@ public class UpgradeCatalog211Test extends EasyMockSupport {
Capture<Map<String, Map<String, String>>> attributesCapture = newCapture();
- expect(controller.createConfig(anyObject(StackId.class), capture(clusterCapture), capture(typeCapture),
+ expect(controller.createConfig(capture(clusterCapture), anyObject(StackId.class),capture(typeCapture),
capture(propertiesCapture), capture(tagCapture), capture(attributesCapture) ))
.andReturn(createNiceMock(Config.class))
.once();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
index 4c9f661..1c3d34b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
@@ -605,7 +605,7 @@ public class UpgradeCatalog220Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -666,7 +666,7 @@ public class UpgradeCatalog220Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java
index 102c629..ff859f0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog221Test.java
@@ -455,7 +455,7 @@ public class UpgradeCatalog221Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).anyTimes();
replay(controller, injector2);
@@ -511,7 +511,7 @@ public class UpgradeCatalog221Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
index ba2cf79..9611334 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
@@ -553,7 +553,7 @@ public class UpgradeCatalog222Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -612,7 +612,7 @@ public class UpgradeCatalog222Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
index f4903fe..46ce2d5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
@@ -765,9 +765,9 @@ public class UpgradeCatalog240Test {
Capture<Map<String, String>> oozieCapture = newCapture();
Capture<Map<String, String>> hiveCapture = newCapture();
- expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("oozie-env"),
+ expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), anyObject(StackId.class), eq("oozie-env"),
capture(oozieCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
- expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("hive-env"),
+ expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), anyObject(StackId.class), eq("hive-env"),
capture(hiveCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
easyMockSupport.replayAll();
@@ -849,15 +849,15 @@ public class UpgradeCatalog240Test {
expect(falconStartupConfig.getProperties()).andReturn(falconStartupConfigProperties).anyTimes();
Capture<Map<String, String>> falconCapture = newCapture();
- expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("falcon-env"),
+ expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), anyObject(StackId.class), eq("falcon-env"),
capture(falconCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
Capture<Map<String, String>> falconCapture2 = newCapture();
- expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("falcon-env"),
+ expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), anyObject(StackId.class), eq("falcon-env"),
capture(falconCapture2), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
Capture<Map<String, String>> falconStartupCapture = newCapture();
- expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockClusterExpected), eq("falcon-startup.properties"),
+ expect(mockAmbariManagementController.createConfig(eq(mockClusterExpected), anyObject(StackId.class), eq("falcon-startup.properties"),
capture(falconStartupCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
easyMockSupport.replayAll();
@@ -939,7 +939,7 @@ public class UpgradeCatalog240Test {
Capture<Map<String, String>> hbaseCapture = newCapture();
- expect(mockAmbariManagementController.createConfig(anyObject(StackId.class), eq(mockCluster), eq("hbase-site"),
+ expect(mockAmbariManagementController.createConfig(eq(mockCluster), anyObject(StackId.class), eq("hbase-site"),
capture(hbaseCapture), anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(null).once();
easyMockSupport.replayAll();
@@ -1025,7 +1025,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1101,9 +1101,9 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("hdfs-site"), capture(propertiesCaptureHdfsSite), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), eq("hdfs-site"), capture(propertiesCaptureHdfsSite), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("hadoop-env"), capture(propertiesCaptureHadoopEnv), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), eq("hadoop-env"), capture(propertiesCaptureHadoopEnv), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1169,7 +1169,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1301,9 +1301,9 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("spark-defaults"), capture(propertiesSparkDefaultsCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), eq("spark-defaults"), capture(propertiesSparkDefaultsCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("spark-javaopts-properties"), capture(propertiesSparkJavaOptsCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), eq("spark-javaopts-properties"), capture(propertiesSparkJavaOptsCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1362,7 +1362,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1421,7 +1421,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1478,7 +1478,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
@@ -1583,7 +1583,7 @@ public class UpgradeCatalog240Test {
Capture<String> tagCapture = newCapture(CaptureType.ALL);
Capture<Map<String, Map<String, String>>> attributesCapture = newCapture(CaptureType.ALL);
- expect(controller.createConfig(anyObject(StackId.class), capture(clusterCapture), capture(typeCapture),
+ expect(controller.createConfig(capture(clusterCapture), anyObject(StackId.class), capture(typeCapture),
capture(propertiesCapture), capture(tagCapture), capture(attributesCapture) ))
.andReturn(createNiceMock(Config.class))
.anyTimes();
@@ -1739,7 +1739,7 @@ public class UpgradeCatalog240Test {
Capture<String> tagCapture = newCapture(CaptureType.ALL);
Capture<Map<String, Map<String, String>>> attributesCapture = newCapture(CaptureType.ALL);
- expect(controller.createConfig(anyObject(StackId.class), capture(clusterCapture), capture(typeCapture),
+ expect(controller.createConfig(capture(clusterCapture), anyObject(StackId.class), capture(typeCapture),
capture(propertiesCapture), capture(tagCapture), capture(attributesCapture)))
.andReturn(createNiceMock(Config.class))
.anyTimes();
@@ -2586,7 +2586,7 @@ public class UpgradeCatalog240Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(createNiceMock(Config.class)).once();
replay(controller, injector2);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
index 118d5f1..0663049 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
@@ -737,7 +737,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
@@ -824,7 +824,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
@@ -905,7 +905,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).times(2);
replay(controller, injector2);
@@ -959,7 +959,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
@@ -1064,7 +1064,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("ams-log4j")).andReturn(mockAmsLog4j).atLeastOnce();
expect(mockAmsLog4j.getProperties()).andReturn(oldAmsLog4j).anyTimes();
Capture<Map<String, String>> AmsLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(AmsLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(AmsLog4jCapture), anyString(),
anyObject(Map.class))).andReturn(config).once();
Map<String, String> oldAmsHbaseLog4j = ImmutableMap.of(
@@ -1299,7 +1299,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("ams-hbase-log4j")).andReturn(mockAmsHbaseLog4j).atLeastOnce();
expect(mockAmsHbaseLog4j.getProperties()).andReturn(oldAmsHbaseLog4j).anyTimes();
Capture<Map<String, String>> AmsHbaseLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(AmsHbaseLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(AmsHbaseLog4jCapture), anyString(),
anyObject(Map.class))).andReturn(config).once();
replay(clusters, cluster);
@@ -1348,7 +1348,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logsearch-properties")).andReturn(mockLogSearchProperties).atLeastOnce();
expect(mockLogSearchProperties.getProperties()).andReturn(oldLogSearchProperties).anyTimes();
Capture<Map<String, String>> logSearchPropertiesCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logSearchPropertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(logSearchPropertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldLogFeederEnv = ImmutableMap.of(
@@ -1361,7 +1361,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logfeeder-env")).andReturn(mockLogFeederEnv).atLeastOnce();
expect(mockLogFeederEnv.getProperties()).andReturn(oldLogFeederEnv).anyTimes();
Capture<Map<String, String>> logFeederEnvCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logFeederEnvCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(logFeederEnvCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldLogSearchEnv = new HashMap<>();
@@ -1383,7 +1383,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logsearch-env")).andReturn(mockLogSearchEnv).atLeastOnce();
expect(mockLogSearchEnv.getProperties()).andReturn(oldLogSearchEnv).anyTimes();
Capture<Map<String, String>> logSearchEnvCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logSearchEnvCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(logSearchEnvCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldLogFeederLog4j = ImmutableMap.of(
@@ -1436,7 +1436,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logfeeder-log4j")).andReturn(mockLogFeederLog4j).atLeastOnce();
expect(mockLogFeederLog4j.getProperties()).andReturn(oldLogFeederLog4j).anyTimes();
Capture<Map<String, String>> logFeederLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logFeederLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(logFeederLog4jCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldLogSearchLog4j = ImmutableMap.of(
@@ -1554,7 +1554,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("logsearch-log4j")).andReturn(mockLogSearchLog4j).atLeastOnce();
expect(mockLogSearchLog4j.getProperties()).andReturn(oldLogSearchLog4j).anyTimes();
Capture<Map<String, String>> logSearchLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logSearchLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(logSearchLog4jCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(clusters, cluster);
@@ -1613,7 +1613,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("infra-solr-env")).andReturn(mockInfraSolrEnv).atLeastOnce();
expect(mockInfraSolrEnv.getProperties()).andReturn(oldInfraSolrEnv).anyTimes();
Capture<Map<String, String>> infraSolrEnvCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(infraSolrEnvCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(infraSolrEnvCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldInfraSolrLog4j = ImmutableMap.of(
@@ -1630,7 +1630,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("infra-solr-log4j")).andReturn(mockInfraSolrLog4j).atLeastOnce();
expect(mockInfraSolrLog4j.getProperties()).andReturn(oldInfraSolrLog4j).anyTimes();
Capture<Map<String, String>> infraSolrLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(infraSolrLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(infraSolrLog4jCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Map<String, String> oldInfraSolrClientLog4j = ImmutableMap.of(
@@ -1649,7 +1649,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("infra-solr-client-log4j")).andReturn(mockInfraSolrClientLog4j).atLeastOnce();
expect(mockInfraSolrClientLog4j.getProperties()).andReturn(oldInfraSolrClientLog4j).anyTimes();
Capture<Map<String, String>> infraSolrClientLog4jCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(infraSolrClientLog4jCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(infraSolrClientLog4jCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(clusters, cluster);
@@ -1708,7 +1708,7 @@ public class UpgradeCatalog250Test {
expect(cluster.getDesiredConfigByType("hive-interactive-env")).andReturn(mockHsiEnv).atLeastOnce();
expect(mockHsiEnv.getProperties()).andReturn(oldHsiEnv).anyTimes();
Capture<Map<String, String>> hsiEnvCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(hsiEnvCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(hsiEnvCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(clusters, cluster);
@@ -1789,7 +1789,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
@@ -2076,7 +2076,7 @@ public class UpgradeCatalog250Test {
expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
expect(controller.getClusters()).andReturn(clusters).anyTimes();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(propertiesCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(controller, injector2);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c4148d80/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
index b5f0e09..43707dd 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog300Test.java
@@ -300,7 +300,7 @@ public class UpgradeCatalog300Test {
expect(confLogSearchConf1.getProperties()).andReturn(oldLogSearchConf).once();
expect(confLogSearchConf2.getProperties()).andReturn(oldLogSearchConf).once();
Capture<Map<String, String>> logSearchConfCapture = EasyMock.newCapture(CaptureType.ALL);
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), anyString(), capture(logSearchConfCapture), anyString(),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), anyString(), capture(logSearchConfCapture), anyString(),
EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).times(2);
Map<String, String> oldLogSearchProperties = ImmutableMap.of(
@@ -315,14 +315,14 @@ public class UpgradeCatalog300Test {
expect(cluster.getDesiredConfigByType("logfeeder-properties")).andReturn(logFeederPropertiesConf).times(2);
expect(logFeederPropertiesConf.getProperties()).andReturn(Collections.<String, String> emptyMap()).once();
Capture<Map<String, String>> logFeederPropertiesCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("logfeeder-properties"), capture(logFeederPropertiesCapture),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), eq("logfeeder-properties"), capture(logFeederPropertiesCapture),
anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
Config logSearchPropertiesConf = easyMockSupport.createNiceMock(Config.class);
expect(cluster.getDesiredConfigByType("logsearch-properties")).andReturn(logSearchPropertiesConf).times(2);
expect(logSearchPropertiesConf.getProperties()).andReturn(oldLogSearchProperties).times(2);
Capture<Map<String, String>> logSearchPropertiesCapture = EasyMock.newCapture();
- expect(controller.createConfig(anyObject(StackId.class), anyObject(Cluster.class), eq("logsearch-properties"), capture(logSearchPropertiesCapture),
+ expect(controller.createConfig(anyObject(Cluster.class), anyObject(StackId.class), eq("logsearch-properties"), capture(logSearchPropertiesCapture),
anyString(), EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
replay(clusters, cluster);
[42/50] [abbrv] ambari git commit: AMBARI-21114 - Fix Unit Test
Failures From Prior Patch/Service Upgrade Commits (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/770c519a/ambari-server/docs/api/generated/swagger.json
----------------------------------------------------------------------
diff --git a/ambari-server/docs/api/generated/swagger.json b/ambari-server/docs/api/generated/swagger.json
index f7dbb6b..d7d54a5 100644
--- a/ambari-server/docs/api/generated/swagger.json
+++ b/ambari-server/docs/api/generated/swagger.json
@@ -11,37 +11,65 @@
},
"basePath" : "/api/v1",
"tags" : [ {
+ "name" : "Actions",
+ "description" : "Endpoint for action definition specific operations"
+ }, {
+ "name" : "Blueprints",
+ "description" : "Endpoint for blueprint specific operations"
+ }, {
"name" : "Groups",
"description" : "Endpoint for group specific operations"
}, {
+ "name" : "Requests",
+ "description" : "Endpoint for request specific operations"
+ }, {
+ "name" : "Services",
+ "description" : "Endpoint for service specific operations"
+ }, {
+ "name" : "Stacks",
+ "description" : "Endpoint for stack specific operations"
+ }, {
"name" : "Users",
"description" : "Endpoint for user specific operations"
}, {
- "name" : "Views"
+ "name" : "Views",
+ "description" : "Endpoint for view specific operations"
+ }, {
+ "name" : "clusters",
+ "description" : "Endpoint for cluster-specific operations"
+ }, {
+ "name" : "hosts",
+ "description" : "Endpoint for host-specific operations"
+ }, {
+ "name" : "services",
+ "description" : "Endpoint for querying root-level services, ie. Ambari Server and Ambari Agents"
+ }, {
+ "name" : "settings",
+ "description" : "Endpoint for settings-specific operations"
} ],
"schemes" : [ "http", "https" ],
"paths" : {
- "/groups" : {
+ "/actions" : {
"get" : {
- "tags" : [ "Groups" ],
- "summary" : "Get all groups",
- "description" : "Returns details of all groups.",
- "operationId" : "GroupService#getGroups",
+ "tags" : [ "Actions" ],
+ "summary" : "Get all action definitions",
+ "description" : "",
+ "operationId" : "ActionService#getActionDefinitions",
"produces" : [ "text/plain" ],
"parameters" : [ {
"name" : "fields",
"in" : "query",
- "description" : "Filter group details",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
"type" : "string",
- "default" : "Groups/*"
+ "default" : "Actions/action_name"
}, {
"name" : "sortBy",
"in" : "query",
- "description" : "Sort groups (asc | desc)",
+ "description" : "Sort resources in result by (asc | desc)",
"required" : false,
"type" : "string",
- "default" : "Groups/group_name.asc"
+ "default" : "Actions/action_name.asc"
}, {
"name" : "page_size",
"in" : "query",
@@ -52,134 +80,191 @@
}, {
"name" : "from",
"in" : "query",
- "description" : "The starting page resource (inclusive). Valid values are :offset | \"start\"",
+ "description" : "The starting page resource (inclusive). \"start\" is also accepted.",
"required" : false,
"type" : "string",
"default" : "0"
}, {
"name" : "to",
"in" : "query",
- "description" : "The ending page resource (inclusive). Valid values are :offset | \"end\"",
+ "description" : "The ending page resource (inclusive). \"end\" is also accepted.",
"required" : false,
"type" : "string"
} ],
"responses" : {
"200" : {
- "description" : "Successful retrieval of all group entries",
+ "description" : "Successful operation",
"schema" : {
"type" : "array",
"items" : {
- "$ref" : "#/definitions/GroupResponse"
+ "$ref" : "#/definitions/ActionResponseSwagger"
}
}
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "500" : {
+ "description" : "Internal server error"
+ }
+ }
+ }
+ },
+ "/actions/{actionName}" : {
+ "get" : {
+ "tags" : [ "Actions" ],
+ "summary" : "Get the details of an action definition",
+ "description" : "",
+ "operationId" : "ActionService#getActionDefinition",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "actionName",
+ "in" : "path",
+ "required" : true,
+ "type" : "string"
+ }, {
+ "name" : "fields",
+ "in" : "query",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
+ "required" : false,
+ "type" : "string",
+ "default" : "Actions/*"
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation",
+ "schema" : {
+ "$ref" : "#/definitions/ActionResponseSwagger"
+ }
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
},
"post" : {
- "tags" : [ "Groups" ],
- "summary" : "Create new group",
- "description" : "Creates group resource.",
- "operationId" : "GroupService#createGroup",
+ "tags" : [ "Actions" ],
+ "summary" : "Creates an action definition - Currently Not Supported",
+ "description" : "",
+ "operationId" : "ActionService#createActionDefinition",
"produces" : [ "text/plain" ],
"parameters" : [ {
+ "name" : "actionName",
+ "in" : "path",
+ "required" : true,
+ "type" : "string"
+ }, {
"in" : "body",
"name" : "body",
- "description" : "input parameters in json form",
- "required" : true,
+ "required" : false,
"schema" : {
- "$ref" : "#/definitions/GroupRequest"
+ "$ref" : "#/definitions/ActionRequestSwagger"
}
} ],
"responses" : {
- "200" : {
- "description" : "successful operation"
+ "400" : {
+ "description" : "Invalid request"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
},
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
- }
- },
- "/groups/{groupName}" : {
- "get" : {
- "tags" : [ "Groups" ],
- "summary" : "Get group",
- "description" : "Returns group details.",
- "operationId" : "GroupService#getGroup",
+ },
+ "put" : {
+ "tags" : [ "Actions" ],
+ "summary" : "Updates an action definition - Currently Not Supported",
+ "description" : "",
+ "operationId" : "ActionService#updateActionDefinition",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "groupName",
+ "name" : "actionName",
"in" : "path",
- "description" : "group name",
"required" : true,
"type" : "string"
}, {
- "name" : "fields",
- "in" : "query",
- "description" : "Filter group details",
+ "in" : "body",
+ "name" : "body",
"required" : false,
- "type" : "string",
- "default" : "Groups"
+ "schema" : {
+ "$ref" : "#/definitions/ActionRequestSwagger"
+ }
} ],
"responses" : {
- "200" : {
- "description" : "Successful retrieval of group resource",
- "schema" : {
- "$ref" : "#/definitions/GroupResponse"
- }
+ "400" : {
+ "description" : "Invalid request"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
},
"delete" : {
- "tags" : [ "Groups" ],
- "summary" : "Delete group",
- "description" : "Delete group resource.",
- "operationId" : "GroupService#deleteGroup",
+ "tags" : [ "Actions" ],
+ "summary" : "Deletes an action definition - Currently Not Supported",
+ "description" : "",
+ "operationId" : "ActionService#deleteActionDefinition",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "groupName",
+ "name" : "actionName",
"in" : "path",
- "description" : "group name",
"required" : true,
"type" : "string"
} ],
"responses" : {
- "200" : {
- "description" : "Successful operation"
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
},
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
}
},
- "/groups/{groupName}/members" : {
+ "/blueprints" : {
"get" : {
- "tags" : [ "Groups" ],
- "summary" : "Get all group members",
- "description" : "Returns details of all members.",
- "operationId" : "MemberService#getMembers",
+ "tags" : [ "Blueprints" ],
+ "summary" : "Get all blueprints",
+ "description" : "",
+ "operationId" : "BlueprintService#getBlueprints",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "groupName",
- "in" : "path",
- "description" : "group name",
- "required" : true,
- "type" : "string"
- }, {
"name" : "fields",
"in" : "query",
- "description" : "Filter member details",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
"type" : "string",
- "default" : "MemberInfo/*"
+ "default" : "Blueprints/blueprint_name"
}, {
"name" : "sortBy",
"in" : "query",
- "description" : "Sort members (asc | desc)",
+ "description" : "Sort resources in result by (asc | desc)",
"required" : false,
"type" : "string",
- "default" : "MemberInfo/user_name.asc"
+ "default" : "Blueprints/blueprint_name.asc"
}, {
"name" : "page_size",
"in" : "query",
@@ -190,14 +275,14 @@
}, {
"name" : "from",
"in" : "query",
- "description" : "The starting page resource (inclusive). Valid values are :offset | \"start\"",
+ "description" : "The starting page resource (inclusive). \"start\" is also accepted.",
"required" : false,
"type" : "string",
"default" : "0"
}, {
"name" : "to",
"in" : "query",
- "description" : "The ending page resource (inclusive). Valid values are :offset | \"end\"",
+ "description" : "The ending page resource (inclusive). \"end\" is also accepted.",
"required" : false,
"type" : "string"
} ],
@@ -207,95 +292,139 @@
"schema" : {
"type" : "array",
"items" : {
- "$ref" : "#/definitions/MemberResponse"
+ "$ref" : "#/definitions/BlueprintSwagger"
}
}
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
},
- "put" : {
- "tags" : [ "Groups" ],
- "summary" : "Update group members",
- "description" : "Updates group member resources.",
- "operationId" : "MemberService#updateMembers",
+ "delete" : {
+ "tags" : [ "Blueprints" ],
+ "summary" : "Deletes multiple blueprints that match the predicate. Omitting the predicate will delete all blueprints.",
+ "description" : "",
+ "operationId" : "BlueprintService#deleteBlueprints",
"produces" : [ "text/plain" ],
- "parameters" : [ {
- "name" : "groupName",
- "in" : "path",
- "description" : "group name",
- "required" : true,
- "type" : "string"
- }, {
- "in" : "body",
- "name" : "body",
- "description" : "input parameters in json form",
- "required" : true,
- "schema" : {
- "$ref" : "#/definitions/MemberRequest"
- }
- } ],
"responses" : {
"200" : {
"description" : "Successful operation"
},
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
}
},
- "/groups/{groupName}/members/{userName}" : {
+ "/blueprints/{blueprintName}" : {
"get" : {
- "tags" : [ "Groups" ],
- "summary" : "Get group member",
- "description" : "Returns member details.",
- "operationId" : "MemberService#getMember",
+ "tags" : [ "Blueprints" ],
+ "summary" : "Get the details of a blueprint",
+ "description" : "",
+ "operationId" : "BlueprintService#getBlueprint",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "groupName",
- "in" : "path",
- "description" : "group name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "userName",
+ "name" : "blueprintName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
}, {
"name" : "fields",
"in" : "query",
- "description" : "Filter member details",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
"type" : "string",
- "default" : "MemberInfo"
+ "default" : "Blueprints/*"
} ],
"responses" : {
"200" : {
"description" : "Successful operation",
"schema" : {
- "$ref" : "#/definitions/MemberResponse"
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/BlueprintSwagger"
+ }
}
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
},
- "delete" : {
- "tags" : [ "Groups" ],
- "summary" : "Delete group member",
- "description" : "Delete member resource.",
- "operationId" : "MemberService#deleteMember",
+ "post" : {
+ "tags" : [ "Blueprints" ],
+ "summary" : "Creates a blueprint",
+ "description" : "",
+ "operationId" : "BlueprintService#createBlueprint",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "groupName",
+ "name" : "blueprintName",
"in" : "path",
- "description" : "group name",
"required" : true,
"type" : "string"
}, {
- "name" : "userName",
+ "in" : "body",
+ "name" : "body",
+ "required" : false,
+ "schema" : {
+ "$ref" : "#/definitions/BlueprintSwagger"
+ }
+ } ],
+ "responses" : {
+ "201" : {
+ "description" : "Successful operation"
+ },
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "409" : {
+ "description" : "The requested resource already exists."
+ },
+ "500" : {
+ "description" : "Internal server error"
+ }
+ }
+ },
+ "delete" : {
+ "tags" : [ "Blueprints" ],
+ "summary" : "Deletes a blueprint",
+ "description" : "",
+ "operationId" : "BlueprintService#deleteBlueprint",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "blueprintName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
} ],
@@ -303,39 +432,41 @@
"200" : {
"description" : "Successful operation"
},
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
}
},
- "/groups/{groupName}/privileges" : {
+ "/clusters" : {
"get" : {
- "tags" : [ "Groups" ],
- "summary" : "Get all privileges",
- "description" : "Returns all privileges for group.",
- "operationId" : "GroupPrivilegeService#getPrivileges",
+ "tags" : [ "clusters" ],
+ "summary" : "Returns all clusters",
+ "description" : "",
+ "operationId" : "getClusters",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "groupName",
- "in" : "path",
- "description" : "group name",
- "required" : true,
- "type" : "string"
- }, {
"name" : "fields",
"in" : "query",
- "description" : "Filter user privileges",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
"type" : "string",
- "default" : "PrivilegeInfo/*"
+ "default" : "cluster_name"
}, {
"name" : "sortBy",
"in" : "query",
- "description" : "Sort user privileges (asc | desc)",
+ "description" : "Sort resources in result by (asc | desc)",
"required" : false,
- "type" : "string",
- "default" : "PrivilegeInfo/user_name.asc"
+ "type" : "string"
}, {
"name" : "page_size",
"in" : "query",
@@ -346,223 +477,180 @@
}, {
"name" : "from",
"in" : "query",
- "description" : "The starting page resource (inclusive). Valid values are :offset | \"start\"",
+ "description" : "The starting page resource (inclusive). \"start\" is also accepted.",
"required" : false,
- "type" : "string",
- "default" : "0"
+ "type" : "integer",
+ "default" : 0,
+ "minimum" : 0.0
}, {
"name" : "to",
"in" : "query",
- "description" : "The ending page resource (inclusive). Valid values are :offset | \"end\"",
+ "description" : "The ending page resource (inclusive). \"end\" is also accepted.",
"required" : false,
- "type" : "string"
+ "type" : "integer",
+ "minimum" : 1.0
} ],
"responses" : {
"200" : {
- "description" : "successful operation",
+ "description" : "Successful operation",
"schema" : {
"type" : "array",
"items" : {
- "$ref" : "#/definitions/GroupPrivilegeResponse"
+ "$ref" : "#/definitions/ClusterResponseWrapper"
}
}
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
}
},
- "/groups/{groupName}/privileges/{privilegeId}" : {
+ "/clusters/{clusterName}" : {
"get" : {
- "tags" : [ "Groups" ],
- "summary" : "Get group privilege",
- "description" : "Returns group privilege details.",
- "operationId" : "GroupPrivilegeService#getPrivilege",
+ "tags" : [ "clusters" ],
+ "summary" : "Returns information about a specific cluster",
+ "description" : "",
+ "operationId" : "getCluster",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "groupName",
+ "name" : "clusterName",
"in" : "path",
- "description" : "group name",
"required" : true,
"type" : "string"
}, {
- "name" : "privilegeId",
- "in" : "path",
- "description" : "privilege id",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "fields",
- "in" : "query",
- "description" : "Filter group privilege details",
- "required" : false,
- "type" : "string",
- "default" : "PrivilegeInfo/*"
- } ],
- "responses" : {
- "200" : {
- "description" : "Successful operation",
- "schema" : {
- "$ref" : "#/definitions/PrivilegeResponse"
- }
- }
- }
- }
- },
- "/users" : {
- "get" : {
- "tags" : [ "Users" ],
- "summary" : "Get all users",
- "description" : "Returns details of all users.",
- "operationId" : "UserService#getUsers",
- "produces" : [ "text/plain" ],
- "parameters" : [ {
- "name" : "fields",
- "in" : "query",
- "description" : "Filter user details",
- "required" : false,
- "type" : "string",
- "default" : "Users/*"
- }, {
- "name" : "sortBy",
- "in" : "query",
- "description" : "Sort users (asc | desc)",
- "required" : false,
- "type" : "string",
- "default" : "Users/user_name.desc"
- }, {
- "name" : "page_size",
- "in" : "query",
- "description" : "The number of resources to be returned for the paged response.",
- "required" : false,
- "type" : "integer",
- "default" : 10
- }, {
- "name" : "from",
- "in" : "query",
- "description" : "The starting page resource (inclusive). Valid values are :offset | \"start\"",
- "required" : false,
- "type" : "string",
- "default" : "0"
- }, {
- "name" : "to",
- "in" : "query",
- "description" : "The ending page resource (inclusive). Valid values are :offset | \"end\"",
- "required" : false,
- "type" : "string"
- } ],
- "responses" : {
- "200" : {
- "description" : "Successful operation",
- "schema" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/definitions/UserResponse"
- }
- }
- }
- }
- }
- },
- "/users/{userName}" : {
- "get" : {
- "tags" : [ "Users" ],
- "summary" : "Get single user",
- "description" : "Returns user details.",
- "operationId" : "UserService#getUser",
- "produces" : [ "text/plain" ],
- "parameters" : [ {
- "name" : "userName",
- "in" : "path",
- "description" : "user name",
- "required" : true,
- "type" : "string",
- "default" : "admin"
- }, {
"name" : "fields",
"in" : "query",
- "description" : "Filter user details",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
"type" : "string",
- "default" : "Users"
+ "default" : "Clusters/*"
} ],
"responses" : {
"200" : {
"description" : "Successful operation",
"schema" : {
- "$ref" : "#/definitions/UserResponse"
+ "$ref" : "#/definitions/ClusterResponseWrapper"
}
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
},
"post" : {
- "tags" : [ "Users" ],
- "summary" : "Create new user",
- "description" : "Creates user resource.",
- "operationId" : "UserService#createUser",
+ "tags" : [ "clusters" ],
+ "summary" : "Creates a cluster",
+ "description" : "",
+ "operationId" : "createCluster",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "userName",
+ "name" : "clusterName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
}, {
"in" : "body",
"name" : "body",
- "description" : "input parameters in json form",
- "required" : true,
+ "required" : false,
"schema" : {
- "$ref" : "#/definitions/UserRequest"
+ "$ref" : "#/definitions/ClusterRequestSwagger"
}
} ],
"responses" : {
- "200" : {
+ "201" : {
"description" : "Successful operation"
},
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "409" : {
+ "description" : "The requested resource already exists."
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
},
"put" : {
- "tags" : [ "Users" ],
- "summary" : "Update user detail",
- "description" : "Updates user resource.",
- "operationId" : "UserService#updateUser",
+ "tags" : [ "clusters" ],
+ "summary" : "Updates a cluster",
+ "description" : "",
+ "operationId" : "updateCluster",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "userName",
+ "name" : "clusterName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
}, {
"in" : "body",
"name" : "body",
- "description" : "input parameters in json form",
- "required" : true,
+ "required" : false,
"schema" : {
- "$ref" : "#/definitions/UserRequest"
+ "$ref" : "#/definitions/ClusterRequestSwagger"
}
} ],
"responses" : {
"200" : {
"description" : "Successful operation"
},
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
},
"delete" : {
- "tags" : [ "Users" ],
- "summary" : "Delete single user",
- "description" : "Delete user resource.",
- "operationId" : "UserService#deleteUser",
+ "tags" : [ "clusters" ],
+ "summary" : "Deletes a cluster",
+ "description" : "",
+ "operationId" : "deleteCluster",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "userName",
+ "name" : "clusterName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
} ],
@@ -570,39 +658,45 @@
"200" : {
"description" : "Successful operation"
},
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
}
},
- "/users/{userName}/activeWidgetLayouts" : {
+ "/clusters/{clusterName}/artifacts" : {
"get" : {
- "tags" : [ "Users" ],
- "summary" : "Get user widget layouts",
- "description" : "Returns all active widget layouts for user.",
- "operationId" : "ActiveWidgetLayoutService#getServices",
+ "tags" : [ "clusters" ],
+ "summary" : "Returns all artifacts associated with the cluster",
+ "description" : "",
+ "operationId" : "getClusterArtifacts",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "userName",
+ "name" : "clusterName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
}, {
"name" : "fields",
"in" : "query",
- "description" : "Filter user layout details",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
- "type" : "string",
- "default" : "WidgetLayoutInfo/*"
+ "type" : "string"
}, {
"name" : "sortBy",
"in" : "query",
- "description" : "Sort layouts (asc | desc)",
+ "description" : "Sort resources in result by (asc | desc)",
"required" : false,
- "type" : "string",
- "default" : "WidgetLayoutInfo/user_name.asc"
+ "type" : "string"
}, {
"name" : "page_size",
"in" : "query",
@@ -613,87 +707,146 @@
}, {
"name" : "from",
"in" : "query",
- "description" : "The starting page resource (inclusive). Valid values are :offset | \"start\"",
+ "description" : "The starting page resource (inclusive). \"start\" is also accepted.",
"required" : false,
- "type" : "string",
- "default" : "0"
+ "type" : "integer",
+ "default" : 0,
+ "minimum" : 0.0
}, {
"name" : "to",
"in" : "query",
- "description" : "The ending page resource (inclusive). Valid values are :offset | \"end\"",
+ "description" : "The ending page resource (inclusive). \"end\" is also accepted.",
"required" : false,
- "type" : "string"
+ "type" : "integer",
+ "minimum" : 1.0
} ],
"responses" : {
"200" : {
- "description" : "successful operation",
+ "description" : "Successful operation",
"schema" : {
"type" : "array",
"items" : {
- "$ref" : "#/definitions/ActiveWidgetLayoutResponse"
+ "$ref" : "#/definitions/ClusterArtifactResponse"
}
}
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
},
"put" : {
- "tags" : [ "Users" ],
- "summary" : "Update user widget layouts",
- "description" : "Updates user widget layout.",
- "operationId" : "ActiveWidgetLayoutService#updateServices",
+ "tags" : [ "clusters" ],
+ "summary" : "Updates multiple artifacts",
+ "description" : "",
+ "operationId" : "updateClusterArtifacts",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "userName",
+ "name" : "clusterName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
}, {
"in" : "body",
"name" : "body",
- "description" : "input parameters in json form",
- "required" : true,
+ "required" : false,
"schema" : {
- "$ref" : "#/definitions/ActiveWidgetLayoutRequest"
+ "$ref" : "#/definitions/ClusterArtifactRequest"
}
} ],
"responses" : {
"200" : {
"description" : "Successful operation"
},
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
+ }
+ }
+ },
+ "delete" : {
+ "tags" : [ "clusters" ],
+ "summary" : "Deletes all artifacts of a cluster that match the provided predicate",
+ "description" : "",
+ "operationId" : "deleteClusterArtifacts",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "clusterName",
+ "in" : "path",
+ "required" : true,
+ "type" : "string"
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
}
},
- "/users/{userName}/authorizations" : {
+ "/clusters/{clusterName}/artifacts/{artifactName}" : {
"get" : {
- "tags" : [ "Users" ],
- "summary" : "Get all authorizations",
- "description" : "Returns all authorization for user.",
- "operationId" : "UserAuthorizationService#getAuthorizations",
+ "tags" : [ "clusters" ],
+ "summary" : "Get the details of a cluster artifact",
+ "description" : "",
+ "operationId" : "getClusterArtifact",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "userName",
+ "name" : "clusterName",
+ "in" : "path",
+ "required" : true,
+ "type" : "string"
+ }, {
+ "name" : "artifactName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
}, {
"name" : "fields",
"in" : "query",
- "description" : "Filter user authorization details",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
- "type" : "string",
- "default" : "AuthorizationInfo/*"
+ "type" : "string"
}, {
"name" : "sortBy",
"in" : "query",
- "description" : "Sort user authorizations (asc | desc)",
+ "description" : "Sort resources in result by (asc | desc)",
"required" : false,
- "type" : "string",
- "default" : "AuthorizationInfo/user_name.asc"
+ "type" : "string"
}, {
"name" : "page_size",
"in" : "query",
@@ -704,187 +857,188 @@
}, {
"name" : "from",
"in" : "query",
- "description" : "The starting page resource (inclusive). Valid values are :offset | \"start\"",
+ "description" : "The starting page resource (inclusive). \"start\" is also accepted.",
"required" : false,
"type" : "string",
"default" : "0"
}, {
"name" : "to",
"in" : "query",
- "description" : "The ending page resource (inclusive). Valid values are :offset | \"end\"",
+ "description" : "The ending page resource (inclusive). \"end\" is also accepted.",
"required" : false,
"type" : "string"
} ],
"responses" : {
"200" : {
- "description" : "successful operation",
+ "description" : "Successful operation",
"schema" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/definitions/UserAuthorizationResponse"
- }
+ "$ref" : "#/definitions/ClusterArtifactResponse"
}
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
- }
- },
- "/users/{userName}/authorizations/{authorization_id}" : {
- "get" : {
- "tags" : [ "Users" ],
- "summary" : "Get user authorization",
- "description" : "Returns user authorization details.",
- "operationId" : "UserAuthorizationService#getAuthorization",
+ },
+ "post" : {
+ "tags" : [ "clusters" ],
+ "summary" : "Creates a cluster artifact",
+ "description" : "",
+ "operationId" : "createClusterArtifact",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "userName",
+ "name" : "clusterName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
}, {
- "name" : "authorization_id",
+ "name" : "artifactName",
"in" : "path",
- "description" : "Authorization Id",
"required" : true,
"type" : "string"
}, {
- "name" : "fields",
- "in" : "query",
- "description" : "Filter user authorization details",
+ "in" : "body",
+ "name" : "body",
"required" : false,
- "type" : "string",
- "default" : "AuthorizationInfo/*"
- } ],
+ "schema" : {
+ "$ref" : "#/definitions/ClusterArtifactRequest"
+ }
+ } ],
"responses" : {
- "200" : {
- "description" : "Successful operation",
- "schema" : {
- "$ref" : "#/definitions/UserAuthorizationResponse"
- }
+ "201" : {
+ "description" : "Successful operation"
+ },
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "409" : {
+ "description" : "The requested resource already exists."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
- }
- },
- "/users/{userName}/privileges" : {
- "get" : {
- "tags" : [ "Users" ],
- "summary" : "Get all privileges",
- "description" : "Returns all privileges for user.",
- "operationId" : "UserPrivilegeService#getPrivileges",
+ },
+ "put" : {
+ "tags" : [ "clusters" ],
+ "summary" : "Updates a single artifact",
+ "description" : "",
+ "operationId" : "updateClusterArtifact",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "userName",
+ "name" : "clusterName",
"in" : "path",
- "description" : "user name",
"required" : true,
- "type" : "string",
- "default" : "admin"
- }, {
- "name" : "fields",
- "in" : "query",
- "description" : "Filter user privileges",
- "required" : false,
- "type" : "string",
- "default" : "PrivilegeInfo/*"
- }, {
- "name" : "sortBy",
- "in" : "query",
- "description" : "Sort user privileges (asc | desc)",
- "required" : false,
- "type" : "string",
- "default" : "PrivilegeInfo/user_name.asc"
- }, {
- "name" : "page_size",
- "in" : "query",
- "description" : "The number of resources to be returned for the paged response.",
- "required" : false,
- "type" : "integer",
- "default" : 10
+ "type" : "string"
}, {
- "name" : "from",
- "in" : "query",
- "description" : "The starting page resource (inclusive). Valid values are :offset | \"start\"",
- "required" : false,
- "type" : "string",
- "default" : "0"
+ "name" : "artifactName",
+ "in" : "path",
+ "required" : true,
+ "type" : "string"
}, {
- "name" : "to",
- "in" : "query",
- "description" : "The ending page resource (inclusive). Valid values are :offset | \"end\"",
+ "in" : "body",
+ "name" : "body",
"required" : false,
- "type" : "string"
+ "schema" : {
+ "$ref" : "#/definitions/ClusterArtifactRequest"
+ }
} ],
"responses" : {
"200" : {
- "description" : "successful operation",
- "schema" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/definitions/UserPrivilegeResponse"
- }
- }
+ "description" : "Successful operation"
+ },
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
- }
- },
- "/users/{userName}/privileges/{privilegeId}" : {
- "get" : {
- "tags" : [ "Users" ],
- "summary" : "Get user privilege",
- "description" : "Returns user privilege details.",
- "operationId" : "UserPrivilegeService#getPrivilege",
+ },
+ "delete" : {
+ "tags" : [ "clusters" ],
+ "summary" : "Deletes a single artifact",
+ "description" : "",
+ "operationId" : "deleteClusterArtifact",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "userName",
+ "name" : "clusterName",
"in" : "path",
- "description" : "user name",
"required" : true,
"type" : "string"
}, {
- "name" : "privilegeId",
+ "name" : "artifactName",
"in" : "path",
- "description" : "privilege id",
"required" : true,
"type" : "string"
- }, {
- "name" : "fields",
- "in" : "query",
- "description" : "Filter user privilege details",
- "required" : false,
- "type" : "string",
- "default" : "PrivilegeInfo/*"
} ],
"responses" : {
"200" : {
- "description" : "Successful operation",
- "schema" : {
- "$ref" : "#/definitions/UserPrivilegeResponse"
- }
+ "description" : "Successful operation"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
}
},
- "/views" : {
+ "/groups" : {
"get" : {
- "tags" : [ "Views" ],
- "summary" : "Get all views",
- "description" : "Returns details of all views.",
- "operationId" : "ViewService#getViews",
+ "tags" : [ "Groups" ],
+ "summary" : "Get all groups",
+ "description" : "Returns details of all groups.",
+ "operationId" : "GroupService#getGroups",
"produces" : [ "text/plain" ],
"parameters" : [ {
"name" : "fields",
"in" : "query",
- "description" : "Filter view details",
+ "description" : "Filter group details",
"required" : false,
"type" : "string",
- "default" : "ViewInfo/*"
+ "default" : "Groups/*"
}, {
"name" : "sortBy",
"in" : "query",
- "description" : "Sort users (asc | desc)",
+ "description" : "Sort groups (asc | desc)",
"required" : false,
"type" : "string",
- "default" : "ViewInfo/view_name.asc"
+ "default" : "Groups/group_name.asc"
}, {
"name" : "page_size",
"in" : "query",
@@ -908,75 +1062,121 @@
} ],
"responses" : {
"200" : {
- "description" : "Successful operation",
+ "description" : "Successful retrieval of all group entries",
"schema" : {
"type" : "array",
"items" : {
- "$ref" : "#/definitions/ViewResponse"
+ "$ref" : "#/definitions/GroupResponse"
}
}
}
}
+ },
+ "post" : {
+ "tags" : [ "Groups" ],
+ "summary" : "Create new group",
+ "description" : "Creates group resource.",
+ "operationId" : "GroupService#createGroup",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "in" : "body",
+ "name" : "body",
+ "description" : "input parameters in json form",
+ "required" : true,
+ "schema" : {
+ "$ref" : "#/definitions/GroupRequest"
+ }
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "successful operation"
+ },
+ "500" : {
+ "description" : "Server Error"
+ }
+ }
}
},
- "/views/{viewName}" : {
+ "/groups/{groupName}" : {
"get" : {
- "tags" : [ "Views" ],
- "summary" : "Get single view",
- "description" : "Returns view details.",
- "operationId" : "ViewService#getView",
+ "tags" : [ "Groups" ],
+ "summary" : "Get group",
+ "description" : "Returns group details.",
+ "operationId" : "GroupService#getGroup",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
+ "name" : "groupName",
"in" : "path",
- "description" : "view name",
+ "description" : "group name",
"required" : true,
"type" : "string"
}, {
"name" : "fields",
"in" : "query",
- "description" : "Filter view details",
+ "description" : "Filter group details",
"required" : false,
"type" : "string",
- "default" : "ViewInfo"
+ "default" : "Groups"
} ],
"responses" : {
"200" : {
- "description" : "Successful operation",
+ "description" : "Successful retrieval of group resource",
"schema" : {
- "$ref" : "#/definitions/ViewResponse"
+ "$ref" : "#/definitions/GroupResponse"
}
}
}
+ },
+ "delete" : {
+ "tags" : [ "Groups" ],
+ "summary" : "Delete group",
+ "description" : "Delete group resource.",
+ "operationId" : "GroupService#deleteGroup",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "groupName",
+ "in" : "path",
+ "description" : "group name",
+ "required" : true,
+ "type" : "string"
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation"
+ },
+ "500" : {
+ "description" : "Server Error"
+ }
+ }
}
},
- "/views/{viewName}/versions" : {
+ "/groups/{groupName}/members" : {
"get" : {
- "tags" : [ "Views" ],
- "summary" : "Get all versions for a view",
- "description" : "Returns details of all versions for a view.",
- "operationId" : "ViewVersionService#getVersions",
+ "tags" : [ "Groups" ],
+ "summary" : "Get all group members",
+ "description" : "Returns details of all members.",
+ "operationId" : "MemberService#getMembers",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
+ "name" : "groupName",
"in" : "path",
- "description" : "view name",
+ "description" : "group name",
"required" : true,
"type" : "string"
}, {
"name" : "fields",
"in" : "query",
- "description" : "Filter view version details",
+ "description" : "Filter member details",
"required" : false,
"type" : "string",
- "default" : "ViewVersionInfo/*"
+ "default" : "MemberInfo/*"
}, {
"name" : "sortBy",
"in" : "query",
- "description" : "Sort users (asc | desc)",
+ "description" : "Sort members (asc | desc)",
"required" : false,
"type" : "string",
- "default" : "ViewVersionInfo/version.desc"
+ "default" : "MemberInfo/user_name.asc"
}, {
"name" : "page_size",
"in" : "query",
@@ -1004,80 +1204,135 @@
"schema" : {
"type" : "array",
"items" : {
- "$ref" : "#/definitions/ViewVersionResponse"
+ "$ref" : "#/definitions/MemberResponse"
}
}
}
}
- }
- },
- "/views/{viewName}/versions/{version}" : {
- "get" : {
- "tags" : [ "Views" ],
- "summary" : "Get single view version",
- "description" : "Returns view details.",
- "operationId" : "ViewVersionService#getVersion",
+ },
+ "put" : {
+ "tags" : [ "Groups" ],
+ "summary" : "Update group members",
+ "description" : "Updates group member resources.",
+ "operationId" : "MemberService#updateMembers",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
+ "name" : "groupName",
"in" : "path",
- "description" : "view name",
+ "description" : "group name",
"required" : true,
"type" : "string"
}, {
- "name" : "version",
- "in" : "path",
+ "in" : "body",
+ "name" : "body",
+ "description" : "input parameters in json form",
"required" : true,
- "type" : "string"
- }, {
- "name" : "fields",
+ "schema" : {
+ "$ref" : "#/definitions/MemberRequest"
+ }
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation"
+ },
+ "500" : {
+ "description" : "Server Error"
+ }
+ }
+ }
+ },
+ "/groups/{groupName}/members/{userName}" : {
+ "get" : {
+ "tags" : [ "Groups" ],
+ "summary" : "Get group member",
+ "description" : "Returns member details.",
+ "operationId" : "MemberService#getMember",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "groupName",
+ "in" : "path",
+ "description" : "group name",
+ "required" : true,
+ "type" : "string"
+ }, {
+ "name" : "userName",
+ "in" : "path",
+ "description" : "user name",
+ "required" : true,
+ "type" : "string"
+ }, {
+ "name" : "fields",
"in" : "query",
- "description" : "Filter view details",
+ "description" : "Filter member details",
"required" : false,
"type" : "string",
- "default" : "ViewVersionInfo"
+ "default" : "MemberInfo"
} ],
"responses" : {
"200" : {
"description" : "Successful operation",
"schema" : {
- "$ref" : "#/definitions/ViewVersionResponse"
+ "$ref" : "#/definitions/MemberResponse"
}
}
}
- }
- },
- "/views/{viewName}/versions/{version}/instances" : {
- "get" : {
- "tags" : [ "Views" ],
- "summary" : "Get all view instances",
- "description" : "Returns all instances for a view version.",
- "operationId" : "ViewInstanceService#getServices",
+ },
+ "delete" : {
+ "tags" : [ "Groups" ],
+ "summary" : "Delete group member",
+ "description" : "Delete member resource.",
+ "operationId" : "MemberService#deleteMember",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
+ "name" : "groupName",
"in" : "path",
+ "description" : "group name",
"required" : true,
"type" : "string"
}, {
- "name" : "version",
+ "name" : "userName",
+ "in" : "path",
+ "description" : "user name",
+ "required" : true,
+ "type" : "string"
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation"
+ },
+ "500" : {
+ "description" : "Server Error"
+ }
+ }
+ }
+ },
+ "/groups/{groupName}/privileges" : {
+ "get" : {
+ "tags" : [ "Groups" ],
+ "summary" : "Get all privileges",
+ "description" : "Returns all privileges for group.",
+ "operationId" : "GroupPrivilegeService#getPrivileges",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "groupName",
"in" : "path",
+ "description" : "group name",
"required" : true,
"type" : "string"
}, {
"name" : "fields",
"in" : "query",
- "description" : "Filter view instance details",
+ "description" : "Filter user privileges",
"required" : false,
"type" : "string",
- "default" : "ViewInstanceInfo/*"
+ "default" : "PrivilegeInfo/*"
}, {
"name" : "sortBy",
"in" : "query",
- "description" : "Sort users (asc | desc)",
+ "description" : "Sort user privileges (asc | desc)",
"required" : false,
"type" : "string",
- "default" : "ViewInstanceInfo/instance_name.desc"
+ "default" : "PrivilegeInfo/user_name.asc"
}, {
"name" : "page_size",
"in" : "query",
@@ -1101,208 +1356,376 @@
} ],
"responses" : {
"200" : {
- "description" : "Successful operation",
+ "description" : "successful operation",
"schema" : {
"type" : "array",
"items" : {
- "$ref" : "#/definitions/ViewInstanceResponse"
+ "$ref" : "#/definitions/GroupPrivilegeResponse"
}
}
}
}
}
},
- "/views/{viewName}/versions/{version}/instances/{instanceName}" : {
+ "/groups/{groupName}/privileges/{privilegeId}" : {
"get" : {
- "tags" : [ "Views" ],
- "summary" : "Get single view instance",
- "description" : "Returns view instance details.",
- "operationId" : "ViewInstanceService#getService",
+ "tags" : [ "Groups" ],
+ "summary" : "Get group privilege",
+ "description" : "Returns group privilege details.",
+ "operationId" : "GroupPrivilegeService#getPrivilege",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
- "in" : "path",
- "description" : "view name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "version",
+ "name" : "groupName",
"in" : "path",
+ "description" : "group name",
"required" : true,
"type" : "string"
}, {
- "name" : "instanceName",
+ "name" : "privilegeId",
"in" : "path",
- "description" : "instance name",
+ "description" : "privilege id",
"required" : true,
"type" : "string"
}, {
"name" : "fields",
"in" : "query",
- "description" : "Filter view instance details",
+ "description" : "Filter group privilege details",
"required" : false,
"type" : "string",
- "default" : "ViewInstanceInfo"
+ "default" : "PrivilegeInfo/*"
} ],
"responses" : {
"200" : {
"description" : "Successful operation",
"schema" : {
- "$ref" : "#/definitions/ViewInstanceResponse"
+ "$ref" : "#/definitions/PrivilegeResponse"
}
}
}
- },
- "post" : {
- "tags" : [ "Views" ],
- "summary" : "Create view instance",
- "description" : "Creates view instance resource.",
- "operationId" : "ViewInstanceService#createService",
+ }
+ },
+ "/hosts" : {
+ "get" : {
+ "tags" : [ "hosts" ],
+ "summary" : "Returns a collection of all hosts",
+ "description" : "",
+ "operationId" : "getHosts",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
- "in" : "path",
- "description" : "view name",
- "required" : true,
- "type" : "string"
+ "name" : "fields",
+ "in" : "query",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
+ "required" : false,
+ "type" : "string",
+ "default" : "Hosts/*"
}, {
- "name" : "version",
- "in" : "path",
- "required" : true,
- "type" : "string"
+ "name" : "sortBy",
+ "in" : "query",
+ "description" : "Sort resources in result by (asc | desc)",
+ "required" : false,
+ "type" : "string",
+ "default" : "Hosts/host_name.asc"
}, {
- "name" : "instanceName",
- "in" : "path",
- "description" : "instance name",
- "required" : true,
- "type" : "string"
+ "name" : "page_size",
+ "in" : "query",
+ "description" : "The number of resources to be returned for the paged response.",
+ "required" : false,
+ "type" : "integer",
+ "default" : 10
+ }, {
+ "name" : "from",
+ "in" : "query",
+ "description" : "The starting page resource (inclusive). \"start\" is also accepted.",
+ "required" : false,
+ "type" : "integer",
+ "default" : 0,
+ "minimum" : 0.0
}, {
+ "name" : "to",
+ "in" : "query",
+ "description" : "The ending page resource (inclusive). \"end\" is also accepted.",
+ "required" : false,
+ "type" : "integer",
+ "minimum" : 1.0
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation",
+ "schema" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Wrapper"
+ }
+ }
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "Cluster not found"
+ },
+ "500" : {
+ "description" : "Internal server error"
+ }
+ }
+ },
+ "post" : {
+ "tags" : [ "hosts" ],
+ "summary" : "Creates multiple hosts in a single request",
+ "description" : "",
+ "operationId" : "createHosts",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
"in" : "body",
"name" : "body",
- "description" : "input parameters in json form",
- "required" : true,
+ "required" : false,
"schema" : {
- "$ref" : "#/definitions/ViewInstanceRequest"
+ "$ref" : "#/definitions/HostRequest"
}
} ],
"responses" : {
- "200" : {
+ "201" : {
"description" : "Successful operation"
},
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Attempt to add hosts that have not been registered"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "Cluster not found"
+ },
+ "409" : {
+ "description" : "Attempt to create a host which already exists"
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
},
"put" : {
- "tags" : [ "Views" ],
- "summary" : "Update view instance detail",
- "description" : "Updates view instance resource.",
- "operationId" : "ViewInstanceService#updateService",
+ "tags" : [ "hosts" ],
+ "summary" : "Updates multiple hosts in a single request",
+ "description" : "",
+ "operationId" : "updateHosts",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
- "in" : "path",
- "description" : "view name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "version",
- "in" : "path",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "instanceName",
- "in" : "path",
- "description" : "instance name",
- "required" : true,
- "type" : "string"
- }, {
"in" : "body",
"name" : "body",
- "description" : "input parameters in json form",
- "required" : true,
+ "required" : false,
"schema" : {
- "$ref" : "#/definitions/ViewInstanceRequest"
+ "$ref" : "#/definitions/HostRequest"
}
} ],
"responses" : {
"200" : {
"description" : "Successful operation"
},
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "Cluster or host not found"
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
},
"delete" : {
- "tags" : [ "Views" ],
- "summary" : "Delete view instance",
- "description" : "Delete view resource.",
- "operationId" : "ViewInstanceService#deleteService",
+ "tags" : [ "hosts" ],
+ "summary" : "Deletes multiple hosts in a single request",
+ "description" : "",
+ "operationId" : "deleteHosts",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
- "in" : "path",
- "description" : "view name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "version",
- "in" : "path",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "instanceName",
- "in" : "path",
- "description" : "instance name",
- "required" : true,
- "type" : "string"
- } ],
+ "in" : "body",
+ "name" : "body",
+ "required" : false,
+ "schema" : {
+ "$ref" : "#/definitions/HostRequest"
+ }
+ } ],
"responses" : {
"200" : {
"description" : "Successful operation"
},
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "Cluster or host not found"
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
}
},
- "/views/{viewName}/versions/{version}/instances/{instanceName}/migrate/{originVersion}/{originInstanceName}" : {
- "put" : {
- "tags" : [ "Views" ],
- "summary" : "Migrate view instance data",
- "description" : "Migrates view instance persistence data from origin view instance specified in the path params.",
- "operationId" : "ViewDataMigrationService#migrateData",
+ "/hosts/{hostName}" : {
+ "get" : {
+ "tags" : [ "hosts" ],
+ "summary" : "Returns information about a single host",
+ "description" : "",
+ "operationId" : "getHost",
+ "produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
+ "name" : "hostName",
"in" : "path",
- "description" : "view name",
+ "description" : "host name",
"required" : true,
"type" : "string"
}, {
- "name" : "version",
- "in" : "path",
- "description" : "view version",
- "required" : true,
+ "name" : "fields",
+ "in" : "query",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
+ "required" : false,
"type" : "string"
- }, {
- "name" : "instanceName",
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation",
+ "schema" : {
+ "$ref" : "#/definitions/Wrapper"
+ }
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "Cluster or host not found"
+ },
+ "500" : {
+ "description" : "Internal server error"
+ }
+ }
+ },
+ "post" : {
+ "tags" : [ "hosts" ],
+ "summary" : "Creates a host",
+ "description" : "",
+ "operationId" : "createHost",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "hostName",
"in" : "path",
- "description" : "instance name",
+ "description" : "host name",
"required" : true,
"type" : "string"
}, {
- "name" : "originVersion",
+ "in" : "body",
+ "name" : "body",
+ "required" : false,
+ "schema" : {
+ "$ref" : "#/definitions/HostRequest"
+ }
+ } ],
+ "responses" : {
+ "201" : {
+ "description" : "Successful operation"
+ },
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "Cluster not found"
+ },
+ "409" : {
+ "description" : "Attempt to create a host which already exists"
+ },
+ "500" : {
+ "description" : "Internal server error"
+ }
+ }
+ },
+ "put" : {
+ "tags" : [ "hosts" ],
+ "summary" : "Updates a host",
+ "description" : "",
+ "operationId" : "updateHost",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "hostName",
"in" : "path",
- "description" : "origin version",
+ "description" : "host name",
"required" : true,
"type" : "string"
}, {
- "name" : "originInstanceName",
+ "in" : "body",
+ "name" : "body",
+ "required" : false,
+ "schema" : {
+ "$ref" : "#/definitions/HostRequest"
+ }
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation"
+ },
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "Cluster or host not found"
+ },
+ "500" : {
+ "description" : "Internal server error"
+ }
+ }
+ },
+ "delete" : {
+ "tags" : [ "hosts" ],
+ "summary" : "Deletes a host",
+ "description" : "",
+ "operationId" : "deleteHost",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "hostName",
"in" : "path",
- "description" : "origin instance name",
+ "description" : "host name",
"required" : true,
"type" : "string"
} ],
@@ -1310,51 +1733,42 @@
"200" : {
"description" : "Successful operation"
},
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "Cluster or host not found"
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
}
},
- "/views/{viewName}/versions/{version}/instances/{instanceName}/privileges" : {
+ "/requests" : {
"get" : {
- "tags" : [ "Views" ],
- "summary" : "Get all view instance privileges",
- "description" : "Returns all privileges for the resource.",
- "operationId" : "ViewPrivilegeService#getPrivileges",
+ "tags" : [ "Requests" ],
+ "summary" : "Get all requests. A predicate can be given to filter results.",
+ "description" : "",
+ "operationId" : "RequestService#getRequests",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
- "in" : "path",
- "description" : "view name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "version",
- "in" : "path",
- "description" : "view version",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "instanceName",
- "in" : "path",
- "description" : "instance name",
- "required" : true,
- "type" : "string"
- }, {
"name" : "fields",
"in" : "query",
- "description" : "Filter privileges",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
"type" : "string",
- "default" : "PrivilegeInfo/*"
+ "default" : "Requests/id"
}, {
"name" : "sortBy",
"in" : "query",
- "description" : "Sort privileges (asc | desc)",
+ "description" : "Sort resources in result by (asc | desc)",
"required" : false,
"type" : "string",
- "default" : "PrivilegeInfo/user_name.asc"
+ "default" : "Requests/id.asc"
}, {
"name" : "page_size",
"in" : "query",
@@ -1365,207 +1779,262 @@
}, {
"name" : "from",
"in" : "query",
- "description" : "The starting page resource (inclusive). Valid values are :offset | \"start\"",
+ "description" : "The starting page resource (inclusive). \"start\" is also accepted.",
"required" : false,
"type" : "string",
"default" : "0"
}, {
"name" : "to",
"in" : "query",
- "description" : "The ending page resource (inclusive). Valid values are :offset | \"end\"",
+ "description" : "The ending page resource (inclusive). \"end\" is also accepted.",
"required" : false,
"type" : "string"
} ],
"responses" : {
"200" : {
- "description" : "successful operation",
+ "description" : "Successful operation",
"schema" : {
"type" : "array",
"items" : {
- "$ref" : "#/definitions/ViewPrivilegeResponse"
+ "$ref" : "#/definitions/RequestResponse"
}
}
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
},
"post" : {
- "tags" : [ "Views" ],
- "summary" : "Create view instance privilege",
- "description" : "Create privilege resource for view instance.",
- "operationId" : "ViewPrivilegeService#createPrivilege",
+ "tags" : [ "Requests" ],
+ "summary" : "Creates one or more Requests",
+ "description" : "",
+ "operationId" : "RequestService#createRequests",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
- "in" : "path",
- "description" : "view name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "version",
- "in" : "path",
- "description" : "view version",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "instanceName",
- "in" : "path",
- "description" : "instance name",
- "required" : true,
- "type" : "string"
- }, {
"in" : "body",
"name" : "body",
- "description" : "input parameters in json form",
- "required" : true,
+ "required" : false,
"schema" : {
- "$ref" : "#/definitions/ViewPrivilegeRequest"
+ "$ref" : "#/definitions/RequestPostRequest"
}
} ],
"responses" : {
- "200" : {
+ "201" : {
"description" : "Successful operation"
},
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet",
+ "schema" : {
+ "$ref" : "#/definitions/RequestPostResponse"
+ }
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "409" : {
+ "description" : "The requested resource already exists."
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
}
},
- "/views/{viewName}/versions/{version}/instances/{instanceName}/privileges/{privilegeId}" : {
+ "/requests/{requestId}" : {
"get" : {
- "tags" : [ "Views" ],
- "summary" : "Get single view instance privilege",
- "description" : "Returns privilege details.",
- "operationId" : "ViewPrivilegeService#getPrivilege",
+ "tags" : [ "Requests" ],
+ "summary" : "Get the details of a request",
+ "description" : "",
+ "operationId" : "RequestService#getRequest",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
- "in" : "path",
- "description" : "view name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "version",
- "in" : "path",
- "description" : "view version",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "instanceName",
- "in" : "path",
- "description" : "instance name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "privilegeId",
+ "name" : "requestId",
"in" : "path",
- "description" : "privilege id",
"required" : true,
"type" : "string"
}, {
"name" : "fields",
"in" : "query",
- "description" : "Filter privilege details",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
"type" : "string",
- "default" : "PrivilegeInfo"
+ "default" : "Requests/*"
} ],
"responses" : {
"200" : {
"description" : "Successful operation",
"schema" : {
- "$ref" : "#/definitions/ViewPrivilegeResponse"
+ "$ref" : "#/definitions/RequestResponse"
}
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
}
}
},
- "delete" : {
- "tags" : [ "Views" ],
- "summary" : "Delete view instance privilege",
- "description" : "Delete view instance privilege resource.",
- "operationId" : "ViewPrivilegeService#deletePrivilege",
+ "put" : {
+ "tags" : [ "Requests" ],
+ "summary" : "Updates a request, usually used to cancel running requests.",
+ "description" : "Changes the state of an existing request. Usually used to cancel running requests.",
+ "operationId" : "RequestService#updateRequests",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
- "in" : "path",
- "description" : "view name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "version",
- "in" : "path",
- "description" : "view version",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "instanceName",
+ "name" : "requestId",
"in" : "path",
- "description" : "instance name",
"required" : true,
"type" : "string"
}, {
- "name" : "privilegeId",
- "in" : "path",
- "description" : "privilege id",
- "required" : true,
- "type" : "string"
+ "in" : "body",
+ "name" : "body",
+ "required" : false,
+ "schema" : {
+ "$ref" : "#/definitions/RequestPutRequest"
+ }
} ],
"responses" : {
"200" : {
"description" : "Successful operation"
},
+ "202" : {
+ "description" : "Request is accepted, but not completely processed yet"
+ },
+ "400" : {
+ "description" : "Invalid arguments"
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
"500" : {
- "description" : "Server Error"
+ "description" : "Internal server error"
}
}
}
},
- "/views/{viewName}/versions/{version}/permissions" : {
+ "/services" : {
"get" : {
- "tags" : [ "Views" ],
- "summary" : "Get all permissions for a view",
- "description" : "Returns all permission details for the version of a view.",
- "operationId" : "ViewPermissionService#getPermissions",
+ "tags" : [ "services" ],
+ "summary" : "Returns the list of root-level services",
+ "description" : "",
+ "operationId" : "getRootServices",
"produces" : [ "text/plain" ],
"parameters" : [ {
- "name" : "viewName",
- "in" : "path",
- "description" : "view name",
- "required" : true,
- "type" : "string"
- }, {
- "name" : "version",
- "in" : "path",
- "description" : "view version",
- "required" : true,
- "type" : "string"
- }, {
"name" : "fields",
"in" : "query",
- "description" : "Filter privileges",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
"type" : "string",
- "default" : "PermissionInfo/*"
- }, {
- "name" : "page_size",
- "in" : "query",
- "description" : "The number of resources to be returned for the paged response.",
- "required" : false,
- "type" : "integer",
- "default" : 10
+ "default" : "RootService/service_name"
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation",
+ "schema" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/RootServiceResponseWrapper"
+ }
+ }
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "500" : {
+ "description" : "Internal server error"
+ }
+ }
+ }
+ },
+ "/services/{serviceName}" : {
+ "get" : {
+ "tags" : [ "services" ],
+ "summary" : "Returns information about the given root-level service, including a list of its components",
+ "description" : "",
+ "operationId" : "getRootService",
+ "produces" : [ "text/plain" ],
+ "parameters" : [ {
+ "name" : "serviceName",
+ "in" : "path",
+ "description" : "service name",
+ "required" : true,
+ "type" : "string"
}, {
- "name" : "from",
+ "name" : "fields",
"in" : "query",
- "description" : "The starting page resource (inclusive). Valid values are :offset | \"start\"",
+ "description" : "Filter fields in the response (identifier fields are mandatory)",
"required" : false,
"type" : "string",
- "default" : "0"
+ "default" : "RootService/service_name, components/RootServiceComponents/component_name, components/RootServiceComponents/service_name"
+ } ],
+ "responses" : {
+ "200" : {
+ "description" : "Successful operation",
+ "schema" : {
+ "$ref" : "#/definitions/RootServiceResponseWithComponentList"
+ }
+ },
+ "401" : {
+ "description" : "Not authenticated"
+ },
+ "403" : {
+ "description" : "Not permitted to perform the operation"
+ },
+ "404" : {
+ "description" : "The requested resource doesn't exist."
+ },
+ "500" : {
+ "description" : "Internal server error"
+ }
+ }
+ }
+ },
+ "/services/{serviceName}/components" : {
+ "get" : {
+ "tags" : [ "services" ],
+ "summary" : "Returns the list of components for the given root-level service",
+ "description" : "",
+ "operationId" : "getRootServiceComponents",
+ "produces" : [ "text/plain" ],
+
<TRUNCATED>
[14/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8938ea21
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8938ea21
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8938ea21
Branch: refs/heads/trunk
Commit: 8938ea219436d78c31934faeeb2c03bdd9f6f415
Parents: b1f704d 80ef772
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed May 10 09:36:26 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed May 10 09:36:26 2017 -0400
----------------------------------------------------------------------
ambari-agent/conf/unix/install-helper.sh | 2 +-
.../main/python/ambari_agent/AmbariConfig.py | 67 +-
.../ambari_agent/CustomServiceOrchestrator.py | 3 +-
.../src/main/python/ambari_agent/NetUtil.py | 5 +-
.../python/ambari_agent/alerts/web_alert.py | 5 +-
.../main/python/ambari_commons/inet_utils.py | 43 +-
.../libraries/functions/curl_krb_request.py | 17 +-
.../libraries/script/script.py | 18 +-
ambari-logsearch/README.md | 8 +-
ambari-logsearch/ambari-logsearch-it/pom.xml | 173 +++-
.../logsearch/domain/StoryDataRegistry.java | 10 +
.../logsearch/steps/AbstractLogSearchSteps.java | 162 ++++
.../logsearch/steps/LogSearchDockerSteps.java | 116 +--
.../logsearch/steps/LogSearchUISteps.java | 212 +++++
.../logsearch/story/LogSearchApiQueryStory.java | 22 -
.../story/LogSearchBackendStories.java | 84 ++
.../ambari/logsearch/story/LogSearchStory.java | 60 --
.../logsearch/story/LogSearchUIStories.java | 93 ++
.../logsearch/story/LogfeederParsingStory.java | 22 -
.../ambari/logsearch/web/AbstractPage.java | 63 ++
.../org/apache/ambari/logsearch/web/Home.java | 39 +
.../story/log_search_api_query_story.story | 17 -
.../story/logfeeder_parsing_story.story | 20 -
.../backend/log_search_api_query_story.story | 17 +
.../backend/logfeeder_parsing_story.story | 20 +
.../resources/stories/selenium/login.ui.story | 20 +
ambari-logsearch/docker/Dockerfile | 17 +-
ambari-logsearch/docker/bin/start.sh | 8 +
ambari-logsearch/docker/logsearch-docker.sh | 10 +-
ambari-server/conf/unix/install-helper.sh | 2 +-
.../AmbariManagementControllerImpl.java | 67 +-
.../controller/AmbariManagementHelper.java | 175 ++++
.../ambari/server/orm/dao/ExtensionLinkDAO.java | 36 +-
.../orm/entities/ExtensionLinkEntity.java | 1 +
.../server/orm/entities/PrivilegeEntity.java | 10 +
.../ambari/server/orm/entities/ViewEntity.java | 9 +
.../server/orm/entities/ViewInstanceEntity.java | 9 +
.../ambari/server/stack/ExtensionModule.java | 2 +
.../stack/QuickLinksConfigurationModule.java | 2 +-
.../ambari/server/stack/StackManager.java | 79 +-
.../apache/ambari/server/stack/StackModule.java | 4 +-
.../apache/ambari/server/stack/ThemeModule.java | 2 +-
.../ambari/server/state/ExtensionInfo.java | 26 +-
.../apache/ambari/server/state/StackInfo.java | 27 +-
.../state/stack/ExtensionMetainfoXml.java | 11 +
.../server/upgrade/UpgradeCatalog250.java | 28 +-
.../view/ViewInstanceOperationHandler.java | 96 +++
.../apache/ambari/server/view/ViewRegistry.java | 55 +-
.../python/ambari_server/resourceFilesKeeper.py | 11 +-
.../main/python/ambari_server/setupMpacks.py | 39 +-
.../common-services/ATLAS/0.7.0.3.0/alerts.json | 39 +
.../configuration/application-properties.xml | 546 ++++++++++++
.../ATLAS/0.7.0.3.0/configuration/atlas-env.xml | 182 ++++
.../0.7.0.3.0/configuration/atlas-log4j.xml | 170 ++++
.../configuration/atlas-solrconfig.xml | 641 ++++++++++++++
.../configuration/ranger-atlas-audit.xml | 141 ++++
.../ranger-atlas-plugin-properties.xml | 132 +++
.../ranger-atlas-policymgr-ssl.xml | 73 ++
.../configuration/ranger-atlas-security.xml | 77 ++
.../ATLAS/0.7.0.3.0/kerberos.json | 100 +++
.../ATLAS/0.7.0.3.0/metainfo.xml | 190 +++++
.../0.7.0.3.0/package/scripts/atlas_client.py | 57 ++
.../ATLAS/0.7.0.3.0/package/scripts/metadata.py | 243 ++++++
.../package/scripts/metadata_server.py | 187 ++++
.../ATLAS/0.7.0.3.0/package/scripts/params.py | 417 +++++++++
.../0.7.0.3.0/package/scripts/service_check.py | 55 ++
.../package/scripts/setup_ranger_atlas.py | 70 ++
.../0.7.0.3.0/package/scripts/status_params.py | 60 ++
.../package/templates/atlas_hbase_setup.rb.j2 | 42 +
.../package/templates/atlas_jaas.conf.j2 | 26 +
.../package/templates/atlas_kafka_acl.sh.j2 | 41 +
.../templates/input.config-atlas.json.j2 | 48 ++
.../package/templates/kafka_jaas.conf.j2 | 41 +
.../ATLAS/0.7.0.3.0/quicklinks/quicklinks.json | 36 +
.../ATLAS/0.7.0.3.0/role_command_order.json | 7 +
.../ATLAS/0.7.0.3.0/service_advisor.py | 441 ++++++++++
.../ATLAS/0.7.0.3.0/themes/theme.json | 619 ++++++++++++++
.../ATLAS/0.7.0.3.0/themes/theme_version_2.json | 845 +++++++++++++++++++
.../HDFS/2.1.0.2.0/package/scripts/utils.py | 5 +-
.../package/alerts/alert_llap_app_status.py | 4 +-
.../package/scripts/hive_server_interactive.py | 7 +-
.../0.8.1/package/scripts/service_check.py | 15 +-
.../KAFKA/0.9.0/configuration/kafka-broker.xml | 2 +-
.../HDP/2.0.6/properties/stack_features.json | 10 +
.../stacks/HDP/3.0/services/ATLAS/metainfo.xml | 27 +
.../QuickLinksConfigurationModuleTest.java | 10 +
.../stack/StackManagerCommonServicesTest.java | 4 +-
.../server/stack/StackManagerExtensionTest.java | 73 +-
.../server/stack/StackManagerMiscTest.java | 13 +-
.../ambari/server/stack/StackManagerMock.java | 5 +-
.../ambari/server/stack/StackManagerTest.java | 13 +-
.../ambari/server/stack/ThemeModuleTest.java | 12 +-
.../server/upgrade/UpgradeCatalog250Test.java | 4 +-
.../view/ViewInstanceOperationHandlerTest.java | 105 +++
.../ambari/server/view/ViewRegistryTest.java | 38 +-
ambari-server/src/test/python/TestMpacks.py | 17 +-
.../src/test/python/TestResourceFilesKeeper.py | 29 +-
.../resources/extensions/EXT/0.1/metainfo.xml | 2 +-
.../resources/extensions/EXT/0.2/metainfo.xml | 3 +-
.../resources/extensions/EXT/0.3/metainfo.xml | 32 +
.../EXT/0.3/services/OOZIE2/metainfo.xml | 118 +++
.../services/OOZIE2/themes/broken_theme.json | 3 +
.../stacks_with_extensions/HDP/0.3/metainfo.xml | 22 +
.../HDP/0.3/repos/repoinfo.xml | 63 ++
.../HDP/0.3/services/HBASE/metainfo.xml | 26 +
.../0.3/services/HDFS/configuration/global.xml | 145 ++++
.../services/HDFS/configuration/hadoop-env.xml | 223 +++++
.../services/HDFS/configuration/hbase-site.xml | 137 +++
.../services/HDFS/configuration/hdfs-log4j.xml | 199 +++++
.../services/HDFS/configuration/hdfs-site.xml | 396 +++++++++
.../HDP/0.3/services/HDFS/metainfo.xml | 30 +
.../0.3/services/HDFS/package/dummy-script.py | 20 +
.../HDP/0.3/services/HIVE/metainfo.xml | 26 +
.../HDP/0.3/services/MAPREDUCE/metainfo.xml | 23 +
.../HDP/0.3/services/ZOOKEEPER/metainfo.xml | 26 +
.../global/background_operations_controller.js | 12 +-
ambari-web/app/utils/ajax/ajax.js | 4 +-
ambari-web/app/views/main/service/item.js | 6 +-
.../global/background_operations_test.js | 179 +---
.../view/hive2/resources/jobs/JobService.java | 9 +-
.../ui/hive-web/app/controllers/index.js | 2 +-
.../view/hive20/resources/jobs/JobService.java | 16 +-
.../src/main/resources/ui/app/adapters/job.js | 2 +-
.../ui/app/utils/hive-explainer/processor.js | 12 +-
.../ui/app/utils/hive-explainer/renderer.js | 18 +-
.../ui/app/utils/hive-explainer/transformer.js | 11 +-
126 files changed, 8944 insertions(+), 784 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/8938ea21/ambari-common/src/main/python/resource_management/libraries/script/script.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/8938ea21/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index ab9b879,f9375aa..882f583
--- 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
@@@ -118,7 -119,7 +118,6 @@@ import org.apache.ambari.server.orm.dao
import org.apache.ambari.server.orm.dao.WidgetDAO;
import org.apache.ambari.server.orm.dao.WidgetLayoutDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
- import org.apache.ambari.server.orm.entities.ExtensionEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.ExtensionLinkEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
[43/50] [abbrv] ambari git commit: AMBARI-21114 - Fix Unit Test
Failures From Prior Patch/Service Upgrade Commits (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/770c519a/ambari-server/docs/api/generated/index.html
----------------------------------------------------------------------
diff --git a/ambari-server/docs/api/generated/index.html b/ambari-server/docs/api/generated/index.html
index 1771346..7ea4297 100644
--- a/ambari-server/docs/api/generated/index.html
+++ b/ambari-server/docs/api/generated/index.html
@@ -710,6 +710,80 @@ margin-bottom: 20px;
<script>
// Script section to load models into a JS Var
var defs = {}
+ defs.ActionRequest = {
+ "type" : "object",
+ "properties" : {
+ "action_name" : {
+ "type" : "string"
+ },
+ "action_type" : {
+ "type" : "string"
+ },
+ "inputs" : {
+ "type" : "string"
+ },
+ "target_service" : {
+ "type" : "string"
+ },
+ "target_component" : {
+ "type" : "string"
+ },
+ "description" : {
+ "type" : "string"
+ },
+ "target_type" : {
+ "type" : "string"
+ },
+ "default_timeout" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ActionRequestSwagger = {
+ "type" : "object",
+ "properties" : {
+ "Actions" : {
+ "$ref" : "#/definitions/ActionRequest"
+ }
+ }
+};
+ defs.ActionResponse = {
+ "type" : "object",
+ "properties" : {
+ "action_name" : {
+ "type" : "string"
+ },
+ "action_type" : {
+ "type" : "string"
+ },
+ "inputs" : {
+ "type" : "string"
+ },
+ "target_service" : {
+ "type" : "string"
+ },
+ "target_component" : {
+ "type" : "string"
+ },
+ "description" : {
+ "type" : "string"
+ },
+ "target_type" : {
+ "type" : "string"
+ },
+ "default_timeout" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ActionResponseSwagger = {
+ "type" : "object",
+ "properties" : {
+ "Actions" : {
+ "$ref" : "#/definitions/ActionResponse"
+ }
+ }
+};
defs.ActiveWidgetLayoutRequest = {
"type" : "object",
"properties" : {
@@ -753,489 +827,728 @@ margin-bottom: 20px;
}
}
};
- defs.GroupPrivilegeResponse = {
+ defs.AgentEnv = {
"type" : "object",
- "required" : [ "PrivilegeInfo/group_name" ],
"properties" : {
- "PrivilegeInfo/permission_label" : {
- "type" : "string"
+ "stackFoldersAndFiles" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Directory"
+ }
},
- "PrivilegeInfo/privilege_id" : {
+ "alternatives" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Alternative"
+ }
+ },
+ "existingUsers" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ExistingUser"
+ }
+ },
+ "existingRepos" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "installedPackages" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/PackageDetail"
+ }
+ },
+ "hostHealth" : {
+ "$ref" : "#/definitions/HostHealth"
+ },
+ "umask" : {
"type" : "integer",
"format" : "int32"
},
- "PrivilegeInfo/permission_name" : {
+ "transparentHugePage" : {
"type" : "string"
},
- "PrivilegeInfo/principal_type" : {
- "type" : "string",
- "enum" : [ "USER", "GROUP", "ROLE" ]
+ "firewallRunning" : {
+ "type" : "boolean",
+ "default" : false
},
- "PrivilegeInfo/principal_name" : {
+ "firewallName" : {
"type" : "string"
},
- "PrivilegeInfo/type" : {
- "type" : "string",
- "enum" : [ "AMBARI", "CLUSTER", "VIEW" ]
+ "hasUnlimitedJcePolicy" : {
+ "type" : "boolean",
+ "default" : false
},
- "PrivilegeInfo/cluster_name" : {
+ "reverseLookup" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.Alternative = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
"type" : "string"
},
- "PrivilegeInfo/view_name" : {
+ "target" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.Artifacts = {
+ "type" : "object",
+ "properties" : {
+ "stack_name" : {
"type" : "string"
},
- "PrivilegeInfo/version" : {
+ "stack_version" : {
"type" : "string"
},
- "PrivilegeInfo/instance_name" : {
+ "artifact_name" : {
"type" : "string"
},
- "PrivilegeInfo/group_name" : {
+ "service_name" : {
"type" : "string"
}
}
};
- defs.GroupRequest = {
+ defs.BlueprintInfo = {
"type" : "object",
- "required" : [ "Groups/group_name" ],
"properties" : {
- "Groups/group_name" : {
+ "security" : {
+ "$ref" : "#/definitions/SecurityInfo"
+ },
+ "stack_name" : {
+ "type" : "string"
+ },
+ "stack_version" : {
+ "type" : "string"
+ },
+ "blueprint_name" : {
"type" : "string"
}
}
};
- defs.GroupResponse = {
+ defs.BlueprintSwagger = {
"type" : "object",
"properties" : {
- "Groups/group_name" : {
- "type" : "string"
+ "configurations" : {
+ "type" : "array",
+ "items" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
+ }
+ }
},
- "Groups/ldap_group" : {
- "type" : "boolean",
- "default" : false
+ "Blueprints" : {
+ "$ref" : "#/definitions/BlueprintInfo"
},
- "Groups/group_type" : {
- "type" : "string",
- "enum" : [ "LOCAL", "LDAP", "JWT", "PAM" ]
+ "host_groups" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/HostGroupInfo"
+ }
}
}
};
- defs.MemberRequest = {
+ defs.Body = {
"type" : "object",
- "required" : [ "MemberInfo/group_name", "MemberInfo/user_name" ],
"properties" : {
- "MemberInfo/group_name" : {
- "type" : "string"
- },
- "MemberInfo/user_name" : {
- "type" : "string"
+ "Requests" : {
+ "$ref" : "#/definitions/Request"
}
}
};
- defs.MemberResponse = {
+ defs.Check = {
"type" : "object",
"properties" : {
- "MemberInfo/group_name" : {
+ "property" : {
"type" : "string"
},
- "MemberInfo/user_name" : {
+ "desired" : {
+ "type" : "string"
+ },
+ "site" : {
"type" : "string"
}
}
};
- defs.ParameterConfig = {
+ defs.ClusterArtifactRequest = {
"type" : "object",
"properties" : {
- "name" : {
- "type" : "string"
+ "Artifacts" : {
+ "$ref" : "#/definitions/ClusterArtifactRequestInfo"
},
- "description" : {
+ "artifact_data" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
+ }
+ }
+ }
+};
+ defs.ClusterArtifactRequestInfo = {
+ "type" : "object",
+ "properties" : {
+ "artifact_name" : {
"type" : "string"
+ }
+ }
+};
+ defs.ClusterArtifactResponse = {
+ "type" : "object",
+ "properties" : {
+ "Artifacts" : {
+ "$ref" : "#/definitions/ClusterArtifactResponseInfo"
},
- "label" : {
+ "artifact_data" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
+ }
+ }
+ }
+};
+ defs.ClusterArtifactResponseInfo = {
+ "type" : "object",
+ "properties" : {
+ "cluster_name" : {
"type" : "string"
},
- "placeholder" : {
+ "artifact_name" : {
"type" : "string"
- },
- "defaultValue" : {
- "type" : "string",
- "xml" : {
- "name" : "default-value"
- }
- },
- "clusterConfig" : {
- "type" : "string",
- "xml" : {
- "name" : "cluster-config"
- }
- },
- "required" : {
- "type" : "boolean",
- "default" : false
- },
- "masked" : {
- "type" : "boolean",
- "default" : false
}
}
};
- defs.PrivilegeResponse = {
+ defs.ClusterHealthReport = {
"type" : "object",
"properties" : {
- "PrivilegeInfo/permission_label" : {
- "type" : "string"
+ "Host/stale_config" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "PrivilegeInfo/privilege_id" : {
+ "Host/maintenance_state" : {
"type" : "integer",
"format" : "int32"
},
- "PrivilegeInfo/permission_name" : {
- "type" : "string"
+ "Host/host_state/HEALTHY" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "PrivilegeInfo/principal_type" : {
- "type" : "string",
- "enum" : [ "USER", "GROUP", "ROLE" ]
+ "Host/host_state/UNHEALTHY" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "PrivilegeInfo/principal_name" : {
- "type" : "string"
+ "Host/host_state/HEARTBEAT_LOST" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "PrivilegeInfo/type" : {
- "type" : "string",
- "enum" : [ "AMBARI", "CLUSTER", "VIEW" ]
+ "Host/host_state/INIT" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "PrivilegeInfo/cluster_name" : {
- "type" : "string"
+ "Host/host_status/HEALTHY" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "PrivilegeInfo/view_name" : {
- "type" : "string"
+ "Host/host_status/UNHEALTHY" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "PrivilegeInfo/version" : {
- "type" : "string"
+ "Host/host_status/UNKNOWN" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "PrivilegeInfo/instance_name" : {
- "type" : "string"
+ "Host/host_status/ALERT" : {
+ "type" : "integer",
+ "format" : "int32"
}
}
};
- defs.UserAuthorizationResponse = {
+ defs.ClusterRequest = {
"type" : "object",
- "required" : [ "AuthorizationInfo/user_name" ],
"properties" : {
- "AuthorizationInfo/authorization_id" : {
- "type" : "string"
+ "cluster_id" : {
+ "type" : "integer",
+ "format" : "int64"
},
- "AuthorizationInfo/authorization_name" : {
+ "cluster_name" : {
"type" : "string"
},
- "AuthorizationInfo/resource_type" : {
+ "version" : {
"type" : "string"
},
- "AuthorizationInfo/user_name" : {
+ "provisioning_state" : {
"type" : "string"
},
- "AuthorizationInfo/cluster_name" : {
- "type" : "string"
+ "security_type" : {
+ "type" : "string",
+ "enum" : [ "NONE", "KERBEROS" ]
},
- "AuthorizationInfo/view_name" : {
- "type" : "string"
+ "desired_service_config_versions" : {
+ "$ref" : "#/definitions/ServiceConfigVersionRequest"
},
- "AuthorizationInfo/view_version" : {
+ "repository_version" : {
"type" : "string"
},
- "AuthorizationInfo/view_instance_name" : {
- "type" : "string"
- }
- }
+ "desired_configs" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ConfigurationRequest"
+ }
+ }
+ }
};
- defs.UserPrivilegeResponse = {
+ defs.ClusterRequestSwagger = {
"type" : "object",
- "required" : [ "PrivilegeInfo/user_name" ],
"properties" : {
- "PrivilegeInfo/permission_label" : {
- "type" : "string"
- },
- "PrivilegeInfo/privilege_id" : {
+ "Clusters" : {
+ "$ref" : "#/definitions/ClusterRequest"
+ }
+ }
+};
+ defs.ClusterResponse = {
+ "type" : "object",
+ "properties" : {
+ "cluster_id" : {
"type" : "integer",
- "format" : "int32"
+ "format" : "int64"
},
- "PrivilegeInfo/permission_name" : {
+ "cluster_name" : {
"type" : "string"
},
- "PrivilegeInfo/principal_type" : {
- "type" : "string",
- "enum" : [ "USER", "GROUP", "ROLE" ]
- },
- "PrivilegeInfo/principal_name" : {
+ "version" : {
"type" : "string"
},
- "PrivilegeInfo/type" : {
+ "provisioning_state" : {
"type" : "string",
- "enum" : [ "AMBARI", "CLUSTER", "VIEW" ]
+ "enum" : [ "INIT", "INSTALLING", "INSTALL_FAILED", "INSTALLED", "STARTING", "STARTED", "STOPPING", "UNINSTALLING", "UNINSTALLED", "WIPING_OUT", "UPGRADING", "DISABLED", "UNKNOWN" ]
},
- "PrivilegeInfo/cluster_name" : {
- "type" : "string"
+ "security_type" : {
+ "type" : "string",
+ "enum" : [ "NONE", "KERBEROS" ]
},
- "PrivilegeInfo/view_name" : {
- "type" : "string"
+ "total_hosts" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "PrivilegeInfo/version" : {
- "type" : "string"
+ "desired_configs" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "$ref" : "#/definitions/DesiredConfig"
+ }
},
- "PrivilegeInfo/instance_name" : {
- "type" : "string"
+ "desired_service_config_versions" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ServiceConfigVersionResponse"
+ }
+ }
},
- "PrivilegeInfo/user_name" : {
- "type" : "string"
+ "health_report" : {
+ "$ref" : "#/definitions/ClusterHealthReport"
+ },
+ "credential_store_properties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
}
}
};
- defs.UserRequest = {
+ defs.ClusterResponseWrapper = {
"type" : "object",
"properties" : {
- "Users/password" : {
- "type" : "string"
- },
- "Users/old_password" : {
- "type" : "string"
- },
- "Users/active" : {
- "type" : "boolean",
- "default" : false
- },
- "Users/admin" : {
- "type" : "boolean",
- "default" : false
+ "Clusters" : {
+ "$ref" : "#/definitions/ClusterResponse"
}
}
};
- defs.UserResponse = {
+ defs.ClusterServiceArtifactRequest = {
"type" : "object",
- "required" : [ "Users/user_name" ],
"properties" : {
- "Users/user_type" : {
- "type" : "string",
- "enum" : [ "LOCAL", "LDAP", "JWT", "PAM" ]
+ "Artifacts" : {
+ "$ref" : "#/definitions/ClusterServiceArtifactRequestInfo"
},
- "Users/groups" : {
- "type" : "array",
- "uniqueItems" : true,
- "items" : {
- "type" : "string"
+ "artifact_data" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
}
- },
- "Users/user_name" : {
+ }
+ }
+};
+ defs.ClusterServiceArtifactRequestInfo = {
+ "type" : "object",
+ "properties" : {
+ "artifact_name" : {
"type" : "string"
- },
- "Users/active" : {
- "type" : "boolean",
- "default" : false
- },
- "Users/admin" : {
- "type" : "boolean",
- "default" : false
- },
- "Users/ldap_user" : {
- "type" : "boolean",
- "default" : false
}
}
};
- defs.ValidationResult = {
+ defs.ClusterServiceArtifactResponse = {
"type" : "object",
"properties" : {
- "valid" : {
- "type" : "boolean",
- "default" : false
+ "Artifacts" : {
+ "$ref" : "#/definitions/ClusterServiceArtifactResponseInfo"
},
- "detail" : {
- "type" : "string"
+ "artifact_data" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
+ }
}
}
};
- defs.ViewInfo = {
+ defs.ClusterServiceArtifactResponseInfo = {
"type" : "object",
"properties" : {
- "view_name" : {
+ "cluster_name" : {
+ "type" : "string"
+ },
+ "artifact_name" : {
+ "type" : "string"
+ },
+ "service_name" : {
"type" : "string"
}
}
};
- defs.ViewInstanceRequest = {
+ defs.ComponentDependencyResponse = {
"type" : "object",
"properties" : {
- "ViewInstanceInfo" : {
- "$ref" : "#/definitions/ViewInstanceRequestInfo"
+ "Dependencies" : {
+ "$ref" : "#/definitions/ComponentDependencyResponseInfo"
}
}
};
- defs.ViewInstanceRequestInfo = {
+ defs.ComponentDependencyResponseInfo = {
"type" : "object",
"properties" : {
- "label" : {
+ "scope" : {
"type" : "string"
},
- "description" : {
+ "component_name" : {
"type" : "string"
},
- "visible" : {
- "type" : "boolean",
- "default" : false
+ "stack_name" : {
+ "type" : "string"
},
- "icon_path" : {
+ "stack_version" : {
"type" : "string"
},
- "icon64_path" : {
+ "service_name" : {
"type" : "string"
},
- "properties" : {
- "type" : "object",
- "additionalProperties" : {
- "type" : "string"
+ "conditions" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/DependencyConditionInfo"
}
},
- "instance_data" : {
- "type" : "object",
- "additionalProperties" : {
- "type" : "string"
- }
+ "dependent_component_name" : {
+ "type" : "string"
},
- "cluster_handle" : {
- "type" : "integer",
- "format" : "int32"
+ "dependent_service_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ComponentInfo = {
+ "type" : "object",
+ "properties" : {
+ "provision_action" : {
+ "type" : "string"
},
- "cluster_type" : {
- "type" : "string",
- "enum" : [ "LOCAL_AMBARI", "REMOTE_AMBARI", "NONE" ]
+ "name" : {
+ "type" : "string"
}
}
};
- defs.ViewInstanceResponse = {
+ defs.ComponentRecoveryReport = {
"type" : "object",
"properties" : {
- "ViewInstanceInfo" : {
- "$ref" : "#/definitions/ViewInstanceResponseInfo"
+ "name" : {
+ "type" : "string"
+ },
+ "numAttempts" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "limitReached" : {
+ "type" : "boolean",
+ "default" : false
}
}
};
- defs.ViewInstanceResponseInfo = {
+ defs.ConfigCondition = {
"type" : "object",
"properties" : {
- "view_name" : {
+ "configs" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "resource" : {
"type" : "string"
},
- "version" : {
+ "if" : {
"type" : "string"
},
- "instance_name" : {
+ "then" : {
+ "$ref" : "#/definitions/ConfigConditionResult"
+ },
+ "else" : {
+ "$ref" : "#/definitions/ConfigConditionResult"
+ }
+ }
+};
+ defs.ConfigConditionResult = {
+ "type" : "object",
+ "properties" : {
+ "property_value_attributes" : {
+ "$ref" : "#/definitions/ValueAttributesInfo"
+ }
+ }
+};
+ defs.ConfigPlacement = {
+ "type" : "object",
+ "properties" : {
+ "config" : {
"type" : "string"
},
- "label" : {
+ "subsection-name" : {
"type" : "string"
},
- "description" : {
+ "subsection-tab-name" : {
"type" : "string"
},
- "visible" : {
+ "property_value_attributes" : {
+ "$ref" : "#/definitions/ValueAttributesInfo"
+ },
+ "depends-on" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ConfigCondition"
+ }
+ },
+ "removed" : {
"type" : "boolean",
"default" : false
- },
- "icon_path" : {
+ }
+ }
+};
+ defs.ConfigurationRequest = {
+ "type" : "object",
+ "properties" : {
+ "clusterName" : {
"type" : "string"
},
- "icon64_path" : {
+ "type" : {
"type" : "string"
},
- "properties" : {
- "type" : "object",
- "additionalProperties" : {
- "type" : "string"
- }
- },
- "instance_data" : {
- "type" : "object",
- "additionalProperties" : {
- "type" : "string"
- }
- },
- "cluster_handle" : {
+ "version" : {
"type" : "integer",
- "format" : "int32"
- },
- "cluster_type" : {
- "type" : "string",
- "enum" : [ "LOCAL_AMBARI", "REMOTE_AMBARI", "NONE" ]
+ "format" : "int64"
},
- "context_path" : {
+ "serviceConfigVersionNote" : {
"type" : "string"
},
- "static" : {
+ "selected" : {
"type" : "boolean",
"default" : false
},
- "short_url" : {
- "type" : "string"
+ "properties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
},
- "short_url_name" : {
+ "versionTag" : {
"type" : "string"
},
- "validation_result" : {
- "$ref" : "#/definitions/ValidationResult"
- },
- "property_validation_results" : {
+ "propertiesAttributes" : {
"type" : "object",
"additionalProperties" : {
- "$ref" : "#/definitions/ValidationResult"
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
}
}
}
};
- defs.ViewPermissionInfo = {
+ defs.ConfigurationResponse = {
"type" : "object",
"properties" : {
- "view_name" : {
+ "clusterName" : {
"type" : "string"
},
- "version" : {
+ "stackId" : {
+ "$ref" : "#/definitions/StackId"
+ },
+ "type" : {
"type" : "string"
},
- "permission_id" : {
+ "versionTag" : {
+ "type" : "string"
+ },
+ "version" : {
"type" : "integer",
- "format" : "int32"
+ "format" : "int64"
},
- "permission_name" : {
- "type" : "string"
+ "serviceConfigVersions" : {
+ "type" : "array",
+ "items" : {
+ "type" : "integer",
+ "format" : "int64"
+ }
},
- "resource_name" : {
+ "configs" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ },
+ "configAttributes" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ }
+ },
+ "propertiesTypes" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "array",
+ "uniqueItems" : true,
+ "items" : {
+ "type" : "string"
+ }
+ }
+ }
+ }
+};
+ defs.DependencyConditionInfo = {
+ "type" : "object"
+};
+ defs.DesiredConfig = {
+ "type" : "object",
+ "properties" : {
+ "tag" : {
+ "type" : "string"
+ },
+ "serviceName" : {
"type" : "string"
+ },
+ "version" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "hostOverrides" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/HostOverride"
+ }
}
}
};
- defs.ViewPermissionResponse = {
+ defs.Directory = {
"type" : "object",
"properties" : {
- "ViewPermissionInfo" : {
- "$ref" : "#/definitions/ViewPermissionInfo"
+ "name" : {
+ "type" : "string"
+ },
+ "type" : {
+ "type" : "string"
}
}
};
- defs.ViewPrivilegeRequest = {
+ defs.DiskInfo = {
"type" : "object",
"properties" : {
- "PrivilegeInfo/permission_name" : {
+ "available" : {
"type" : "string"
},
- "PrivilegeInfo/principal_type" : {
- "type" : "string",
- "enum" : [ "USER", "GROUP", "ROLE" ]
+ "device" : {
+ "type" : "string"
},
- "PrivilegeInfo/principal_name" : {
+ "used" : {
+ "type" : "string"
+ },
+ "percent" : {
+ "type" : "string"
+ },
+ "size" : {
+ "type" : "string"
+ },
+ "type" : {
+ "type" : "string"
+ },
+ "mountPoint" : {
"type" : "string"
}
}
};
- defs.ViewPrivilegeResponse = {
+ defs.ExistingUser = {
+ "type" : "object",
+ "properties" : {
+ "userName" : {
+ "type" : "string"
+ },
+ "userHomeDir" : {
+ "type" : "string"
+ },
+ "userStatus" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ExtensionLinkResponse = {
+ "type" : "object",
+ "properties" : {
+ "ExtensionLink" : {
+ "$ref" : "#/definitions/ExtensionLinkResponseInfo"
+ }
+ }
+};
+ defs.ExtensionLinkResponseInfo = {
+ "type" : "object",
+ "properties" : {
+ "link_id" : {
+ "type" : "string"
+ },
+ "stack_name" : {
+ "type" : "string"
+ },
+ "stack_version" : {
+ "type" : "string"
+ },
+ "extension_name" : {
+ "type" : "string"
+ },
+ "extension_version" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.GroupPrivilegeResponse = {
"type" : "object",
+ "required" : [ "PrivilegeInfo/group_name" ],
"properties" : {
"PrivilegeInfo/permission_label" : {
"type" : "string"
@@ -1254,6 +1567,13 @@ margin-bottom: 20px;
"PrivilegeInfo/principal_name" : {
"type" : "string"
},
+ "PrivilegeInfo/type" : {
+ "type" : "string",
+ "enum" : [ "AMBARI", "CLUSTER", "VIEW" ]
+ },
+ "PrivilegeInfo/cluster_name" : {
+ "type" : "string"
+ },
"PrivilegeInfo/view_name" : {
"type" : "string"
},
@@ -1262,379 +1582,37835 @@ margin-bottom: 20px;
},
"PrivilegeInfo/instance_name" : {
"type" : "string"
+ },
+ "PrivilegeInfo/group_name" : {
+ "type" : "string"
}
}
};
- defs.ViewResponse = {
+ defs.GroupRequest = {
"type" : "object",
+ "required" : [ "Groups/group_name" ],
"properties" : {
- "ViewInfo" : {
- "$ref" : "#/definitions/ViewInfo"
+ "Groups/group_name" : {
+ "type" : "string"
}
}
};
- defs.ViewVersionInfo = {
+ defs.GroupResponse = {
"type" : "object",
"properties" : {
- "archive" : {
- "type" : "string"
- },
- "build_number" : {
+ "Groups/group_name" : {
"type" : "string"
},
- "cluster_configurable" : {
+ "Groups/ldap_group" : {
"type" : "boolean",
"default" : false
},
- "description" : {
- "type" : "string"
- },
- "label" : {
- "type" : "string"
- },
- "masker_class" : {
- "type" : "string"
- },
- "max_ambari_version" : {
- "type" : "string"
+ "Groups/group_type" : {
+ "type" : "string",
+ "enum" : [ "LOCAL", "LDAP", "JWT", "PAM" ]
+ }
+ }
+};
+ defs.HostConfig = {
+ "type" : "object",
+ "properties" : {
+ "configGroupOverrides" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
},
- "min_ambari_version" : {
+ "defaultVersionTag" : {
"type" : "string"
+ }
+ }
+};
+ defs.HostGroupInfo = {
+ "type" : "object",
+ "properties" : {
+ "components" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ComponentInfo"
+ }
},
- "parameters" : {
+ "configurations" : {
"type" : "array",
"items" : {
- "$ref" : "#/definitions/ParameterConfig"
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
+ }
}
},
- "status" : {
- "type" : "string",
- "enum" : [ "PENDING", "DEPLOYING", "DEPLOYED", "ERROR" ]
+ "cardinality" : {
+ "type" : "integer",
+ "format" : "int32"
},
- "status_detail" : {
+ "name" : {
"type" : "string"
+ }
+ }
+};
+ defs.HostHealth = {
+ "type" : "object",
+ "properties" : {
+ "activeJavaProcs" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/JavaProc"
+ }
},
- "system" : {
- "type" : "boolean",
- "default" : false
+ "agentTimeStampAtReporting" : {
+ "type" : "integer",
+ "format" : "int64"
},
- "version" : {
- "type" : "string"
+ "serverTimeStampAtReporting" : {
+ "type" : "integer",
+ "format" : "int64"
},
- "view_name" : {
- "type" : "string"
+ "liveServices" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/LiveService"
+ }
}
}
};
- defs.ViewVersionResponse = {
+ defs.HostOverride = {
"type" : "object",
"properties" : {
- "ViewVersionInfo" : {
- "$ref" : "#/definitions/ViewVersionInfo"
+ "name" : {
+ "type" : "string"
+ },
+ "versionTag" : {
+ "type" : "string"
}
}
};
- defs.WidgetLayoutIdWrapper = {
+ defs.HostRequest = {
"type" : "object",
"properties" : {
- "id" : {
- "type" : "integer",
- "format" : "int64"
+ "host_name" : {
+ "type" : "string"
+ },
+ "rack_info" : {
+ "type" : "string"
+ },
+ "desired_configs" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ConfigurationRequest"
+ }
+ },
+ "maintenance_state" : {
+ "type" : "string"
+ },
+ "public_host_name" : {
+ "type" : "string"
+ },
+ "blueprint" : {
+ "type" : "string"
+ },
+ "host_group" : {
+ "type" : "string"
}
}
};
- defs.WidgetResponse = {
+ defs.HostResponse = {
"type" : "object",
"properties" : {
- "id" : {
+ "host_name" : {
+ "type" : "string"
+ },
+ "cluster_name" : {
+ "type" : "string"
+ },
+ "ip" : {
+ "type" : "string"
+ },
+ "cpu_count" : {
"type" : "integer",
"format" : "int64"
},
- "widgetName" : {
+ "ph_cpu_count" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "os_arch" : {
"type" : "string"
},
- "widgetType" : {
+ "os_family" : {
"type" : "string"
},
- "metrics" : {
+ "os_type" : {
"type" : "string"
},
- "timeCreated" : {
+ "total_mem" : {
"type" : "integer",
"format" : "int64"
},
- "author" : {
- "type" : "string"
+ "disk_info" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/DiskInfo"
+ }
},
- "description" : {
- "type" : "string"
+ "last_heartbeat_time" : {
+ "type" : "integer",
+ "format" : "int64"
},
- "displayName" : {
+ "last_agent_env" : {
+ "$ref" : "#/definitions/AgentEnv"
+ },
+ "last_registration_time" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "rack_info" : {
"type" : "string"
},
- "scope" : {
+ "recovery_report" : {
+ "$ref" : "#/definitions/RecoveryReport"
+ },
+ "recovery_summary" : {
"type" : "string"
},
- "widgetValues" : {
+ "host_state" : {
+ "type" : "string",
+ "enum" : [ "INIT", "WAITING_FOR_HOST_STATUS_UPDATES", "HEALTHY", "HEARTBEAT_LOST", "UNHEALTHY" ]
+ },
+ "desired_configs" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "$ref" : "#/definitions/HostConfig"
+ }
+ },
+ "host_status" : {
"type" : "string"
},
- "properties" : {
+ "maintenance_state" : {
+ "type" : "string",
+ "enum" : [ "OFF", "ON", "IMPLIED_FROM_SERVICE", "IMPLIED_FROM_HOST", "IMPLIED_FROM_SERVICE_AND_HOST" ]
+ },
+ "host_health_report" : {
"type" : "string"
},
- "clusterName" : {
+ "public_host_name" : {
"type" : "string"
}
}
};
- </script>
-
- <div class="container-fluid">
- <div class="row-fluid">
- <div id="sidenav" class="span2">
- <nav id="scrollingNav">
- <ul class="sidenav nav nav-list">
- <!-- Logo Area -->
- <!--<div style="width: 80%; background-color: #4c8eca; color: white; padding: 20px; text-align: center; margin-bottom: 20px; ">
+ defs.JavaProc = {
+ "type" : "object",
+ "properties" : {
+ "user" : {
+ "type" : "string"
+ },
+ "pid" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "command" : {
+ "type" : "string"
+ },
+ "hadoop" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.Layout = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type" : "string"
+ },
+ "tabs" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Tab"
+ }
+ }
+ }
+};
+ defs.Link = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type" : "string"
+ },
+ "label" : {
+ "type" : "string"
+ },
+ "componentName" : {
+ "type" : "string"
+ },
+ "requiresUserName" : {
+ "type" : "string"
+ },
+ "url" : {
+ "type" : "string"
+ },
+ "port" : {
+ "$ref" : "#/definitions/Port"
+ },
+ "protocol" : {
+ "$ref" : "#/definitions/Protocol"
+ },
+ "attributes" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "visible" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "removed" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.LiveService = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type" : "string"
+ },
+ "status" : {
+ "type" : "string"
+ },
+ "desc" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.MemberRequest = {
+ "type" : "object",
+ "required" : [ "MemberInfo/group_name", "MemberInfo/user_name" ],
+ "properties" : {
+ "MemberInfo/group_name" : {
+ "type" : "string"
+ },
+ "MemberInfo/user_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.MemberResponse = {
+ "type" : "object",
+ "properties" : {
+ "MemberInfo/group_name" : {
+ "type" : "string"
+ },
+ "MemberInfo/user_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.OperatingSystemEntity = {
+ "type" : "object",
+ "properties" : {
+ "osType" : {
+ "type" : "string"
+ },
+ "repositories" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/RepositoryEntity"
+ }
+ },
+ "ambariManagedRepos" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.OperationLevel = {
+ "type" : "object",
+ "properties" : {
+ "level" : {
+ "type" : "string"
+ },
+ "cluster_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.Os = {
+ "type" : "object",
+ "properties" : {
+ "family" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "packageVersion" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "package-version"
+ }
+ },
+ "repos" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "repo"
+ },
+ "items" : {
+ "$ref" : "#/definitions/Repo"
+ }
+ }
+ }
+};
+ defs.PackageDetail = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type" : "string"
+ },
+ "version" : {
+ "type" : "string"
+ },
+ "repoName" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ParameterConfig = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type" : "string"
+ },
+ "description" : {
+ "type" : "string"
+ },
+ "label" : {
+ "type" : "string"
+ },
+ "placeholder" : {
+ "type" : "string"
+ },
+ "defaultValue" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "default-value"
+ }
+ },
+ "clusterConfig" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "cluster-config"
+ }
+ },
+ "required" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "masked" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.Placement = {
+ "type" : "object",
+ "properties" : {
+ "configs" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ConfigPlacement"
+ }
+ },
+ "configurationLayout" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.Port = {
+ "type" : "object",
+ "properties" : {
+ "httpProperty" : {
+ "type" : "string"
+ },
+ "httpDefaultPort" : {
+ "type" : "string"
+ },
+ "httpsProperty" : {
+ "type" : "string"
+ },
+ "httpsDefaultPort" : {
+ "type" : "string"
+ },
+ "regex" : {
+ "type" : "string"
+ },
+ "site" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.PrivilegeResponse = {
+ "type" : "object",
+ "properties" : {
+ "PrivilegeInfo/permission_label" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/privilege_id" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "PrivilegeInfo/permission_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/principal_type" : {
+ "type" : "string",
+ "enum" : [ "USER", "GROUP", "ROLE" ]
+ },
+ "PrivilegeInfo/principal_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/type" : {
+ "type" : "string",
+ "enum" : [ "AMBARI", "CLUSTER", "VIEW" ]
+ },
+ "PrivilegeInfo/cluster_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/view_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/version" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/instance_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.PropertyDependencyInfo = {
+ "type" : "object",
+ "properties" : {
+ "type" : {
+ "type" : "string"
+ },
+ "name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.Protocol = {
+ "type" : "object",
+ "properties" : {
+ "type" : {
+ "type" : "string"
+ },
+ "checks" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Check"
+ }
+ }
+ }
+};
+ defs.QuickLinksConfiguration = {
+ "type" : "object",
+ "properties" : {
+ "protocol" : {
+ "$ref" : "#/definitions/Protocol"
+ },
+ "links" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Link"
+ }
+ }
+ }
+};
+ defs.QuickLinksResponse = {
+ "type" : "object",
+ "properties" : {
+ "QuickLinkInfo" : {
+ "$ref" : "#/definitions/QuickLinksResponseInfo"
+ }
+ }
+};
+ defs.QuickLinksResponseInfo = {
+ "type" : "object",
+ "properties" : {
+ "file_name" : {
+ "type" : "string"
+ },
+ "default" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "stack_name" : {
+ "type" : "string"
+ },
+ "stack_version" : {
+ "type" : "string"
+ },
+ "quicklink_data" : {
+ "$ref" : "#/definitions/QuickLinksConfiguration"
+ },
+ "service_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.RecoveryReport = {
+ "type" : "object",
+ "properties" : {
+ "summary" : {
+ "type" : "string"
+ },
+ "componentReports" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ComponentRecoveryReport"
+ }
+ }
+ }
+};
+ defs.Release = {
+ "type" : "object",
+ "properties" : {
+ "repositoryType" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "type"
+ },
+ "enum" : [ "STANDARD", "PATCH", "SERVICE" ]
+ },
+ "stackId" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "stack-id"
+ }
+ },
+ "version" : {
+ "type" : "string"
+ },
+ "build" : {
+ "type" : "string"
+ },
+ "compatibleWith" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "compatible-with"
+ }
+ },
+ "releaseNotes" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "release-notes"
+ }
+ },
+ "display" : {
+ "type" : "string"
+ },
+ "fullVersion" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.Repo = {
+ "type" : "object",
+ "properties" : {
+ "unique" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "baseUrl" : {
+ "type" : "string"
+ },
+ "mirrorsList" : {
+ "type" : "string"
+ },
+ "repoId" : {
+ "type" : "string"
+ },
+ "latestUri" : {
+ "type" : "string"
+ },
+ "repoName" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.RepositoryEntity = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type" : "string"
+ },
+ "baseUrl" : {
+ "type" : "string"
+ },
+ "repositoryId" : {
+ "type" : "string"
+ },
+ "mirrorsList" : {
+ "type" : "string"
+ },
+ "unique" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.RepositoryInfo = {
+ "type" : "object",
+ "properties" : {
+ "baseUrl" : {
+ "type" : "string"
+ },
+ "osType" : {
+ "type" : "string"
+ },
+ "repoId" : {
+ "type" : "string"
+ },
+ "repoName" : {
+ "type" : "string"
+ },
+ "mirrorsList" : {
+ "type" : "string"
+ },
+ "defaultBaseUrl" : {
+ "type" : "string"
+ },
+ "latestBaseUrl" : {
+ "type" : "string"
+ },
+ "repoSaved" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "unique" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "ambariManagedRepositories" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.RepositoryVersionEntity = {
+ "type" : "object",
+ "properties" : {
+ "id" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "stack" : {
+ "$ref" : "#/definitions/StackEntity"
+ },
+ "version" : {
+ "type" : "string"
+ },
+ "displayName" : {
+ "type" : "string"
+ },
+ "operatingSystems" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/OperatingSystemEntity"
+ }
+ },
+ "type" : {
+ "type" : "string",
+ "enum" : [ "STANDARD", "PATCH", "SERVICE" ]
+ },
+ "versionXml" : {
+ "type" : "string"
+ },
+ "versionUrl" : {
+ "type" : "string"
+ },
+ "versionXsd" : {
+ "type" : "string"
+ },
+ "children" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/RepositoryVersionEntity"
+ }
+ },
+ "stackId" : {
+ "$ref" : "#/definitions/StackId"
+ },
+ "stackName" : {
+ "type" : "string"
+ },
+ "stackVersion" : {
+ "type" : "string"
+ },
+ "operatingSystemsJson" : {
+ "type" : "string"
+ },
+ "repositoryXml" : {
+ "$ref" : "#/definitions/VersionDefinitionXml"
+ },
+ "parentId" : {
+ "type" : "integer",
+ "format" : "int64"
+ }
+ }
+};
+ defs.RepositoryXml = {
+ "type" : "object",
+ "properties" : {
+ "oses" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "os"
+ },
+ "items" : {
+ "$ref" : "#/definitions/Os"
+ }
+ },
+ "valid" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "repositories" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/RepositoryInfo"
+ }
+ },
+ "errors" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "latestURI" : {
+ "type" : "string"
+ }
+ },
+ "xml" : {
+ "name" : "reposinfo"
+ }
+};
+ defs.Request = {
+ "type" : "object",
+ "properties" : {
+ "exclusive" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "resource_filters" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/RequestResourceFilter"
+ }
+ },
+ "cluster_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.RequestInfo = {
+ "type" : "object",
+ "properties" : {
+ "parameters" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
+ }
+ },
+ "command" : {
+ "type" : "string"
+ },
+ "operation_level" : {
+ "$ref" : "#/definitions/OperationLevel"
+ },
+ "action" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.RequestPostRequest = {
+ "type" : "object",
+ "properties" : {
+ "Body" : {
+ "$ref" : "#/definitions/Body"
+ },
+ "RequestInfo" : {
+ "$ref" : "#/definitions/RequestInfo"
+ }
+ }
+};
+ defs.RequestPostResponse = {
+ "type" : "object",
+ "properties" : {
+ "Requests" : {
+ "$ref" : "#/definitions/ShortRequestInfo"
+ }
+ }
+};
+ defs.RequestPutRequest = {
+ "type" : "object",
+ "properties" : {
+ "Requests" : {
+ "$ref" : "#/definitions/RequestRequest"
+ }
+ }
+};
+ defs.RequestRequest = {
+ "type" : "object",
+ "properties" : {
+ "cluster_name" : {
+ "type" : "string"
+ },
+ "id" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "request_status" : {
+ "type" : "string",
+ "enum" : [ "PENDING", "QUEUED", "IN_PROGRESS", "HOLDING", "COMPLETED", "FAILED", "HOLDING_FAILED", "TIMEDOUT", "HOLDING_TIMEDOUT", "ABORTED", "SKIPPED_FAILED" ]
+ },
+ "abort_reason" : {
+ "type" : "string"
+ },
+ "removePendingHostRequests" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.RequestResourceFilter = {
+ "type" : "object",
+ "properties" : {
+ "component_name" : {
+ "type" : "string"
+ },
+ "hosts_predicate" : {
+ "type" : "string"
+ },
+ "hosts" : {
+ "type" : "string"
+ },
+ "service_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.RequestResponse = {
+ "type" : "object",
+ "properties" : {
+ "Requests" : {
+ "$ref" : "#/definitions/RequestStatusInfo"
+ }
+ }
+};
+ defs.RequestStatusInfo = {
+ "type" : "object",
+ "properties" : {
+ "type" : {
+ "type" : "string"
+ },
+ "start_time" : {
+ "type" : "string"
+ },
+ "request_status" : {
+ "type" : "string"
+ },
+ "request_context" : {
+ "type" : "string"
+ },
+ "request_schedule" : {
+ "type" : "string"
+ },
+ "create_time" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "id" : {
+ "type" : "string"
+ },
+ "aborted_task_count" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "end_time" : {
+ "type" : "string"
+ },
+ "exclusive" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "failed_task_count" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "inputs" : {
+ "type" : "string"
+ },
+ "operation_level" : {
+ "type" : "string"
+ },
+ "progress_percent" : {
+ "type" : "number",
+ "format" : "double"
+ },
+ "queued_task_count" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "request_schedule_id" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "resource_filters" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/RequestResourceFilter"
+ }
+ },
+ "cluster_name" : {
+ "type" : "string"
+ },
+ "task_count" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "completed_task_count" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.RootServiceComponentResponse = {
+ "type" : "object",
+ "properties" : {
+ "service_name" : {
+ "type" : "string"
+ },
+ "component_name" : {
+ "type" : "string"
+ },
+ "properties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ },
+ "component_version" : {
+ "type" : "string"
+ },
+ "server_clock" : {
+ "type" : "integer",
+ "format" : "int64"
+ }
+ }
+};
+ defs.RootServiceComponentResponseWrapper = {
+ "type" : "object",
+ "properties" : {
+ "RootServiceComponents" : {
+ "$ref" : "#/definitions/RootServiceComponentResponse"
+ }
+ }
+};
+ defs.RootServiceComponentWithHostComponentList = {
+ "type" : "object",
+ "properties" : {
+ "hostComponents" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/RootServiceHostComponentResponseWrapper"
+ }
+ },
+ "RootServiceComponents" : {
+ "$ref" : "#/definitions/RootServiceComponentResponse"
+ }
+ }
+};
+ defs.RootServiceHostComponentResponse = {
+ "type" : "object",
+ "properties" : {
+ "service_name" : {
+ "type" : "string"
+ },
+ "host_name" : {
+ "type" : "string"
+ },
+ "component_name" : {
+ "type" : "string"
+ },
+ "component_state" : {
+ "type" : "string"
+ },
+ "component_version" : {
+ "type" : "string"
+ },
+ "properties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ }
+ }
+};
+ defs.RootServiceHostComponentResponseWrapper = {
+ "type" : "object",
+ "properties" : {
+ "RootServiceHostComponents" : {
+ "$ref" : "#/definitions/RootServiceHostComponentResponse"
+ }
+ }
+};
+ defs.RootServiceResponse = {
+ "type" : "object",
+ "properties" : {
+ "service_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.RootServiceResponseWithComponentList = {
+ "type" : "object",
+ "properties" : {
+ "components" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/RootServiceComponentResponseWrapper"
+ }
+ },
+ "RootService" : {
+ "$ref" : "#/definitions/RootServiceResponse"
+ }
+ }
+};
+ defs.RootServiceResponseWrapper = {
+ "type" : "object",
+ "properties" : {
+ "RootService" : {
+ "$ref" : "#/definitions/RootServiceResponse"
+ }
+ }
+};
+ defs.Section = {
+ "type" : "object",
+ "properties" : {
+ "subsections" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Subsection"
+ }
+ },
+ "display-name" : {
+ "type" : "string"
+ },
+ "row-index" : {
+ "type" : "string"
+ },
+ "section-rows" : {
+ "type" : "string"
+ },
+ "name" : {
+ "type" : "string"
+ },
+ "column-span" : {
+ "type" : "string"
+ },
+ "section-columns" : {
+ "type" : "string"
+ },
+ "column-index" : {
+ "type" : "string"
+ },
+ "row-span" : {
+ "type" : "string"
+ },
+ "removed" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.SecurityInfo = {
+ "type" : "object",
+ "properties" : {
+ "kerberos_descriptor_reference" : {
+ "type" : "string"
+ },
+ "kerberos_descriptor" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
+ }
+ },
+ "security_type" : {
+ "type" : "string",
+ "enum" : [ "NONE", "KERBEROS" ]
+ }
+ }
+};
+ defs.ServiceConfigVersionRequest = {
+ "type" : "object",
+ "properties" : {
+ "clusterName" : {
+ "type" : "string"
+ },
+ "serviceName" : {
+ "type" : "string"
+ },
+ "version" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "createTime" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "applyTime" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "userName" : {
+ "type" : "string"
+ },
+ "note" : {
+ "type" : "string"
+ },
+ "isCurrent" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.ServiceConfigVersionResponse = {
+ "type" : "object",
+ "properties" : {
+ "clusterName" : {
+ "type" : "string"
+ },
+ "serviceName" : {
+ "type" : "string"
+ },
+ "version" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "createTime" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "groupId" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "groupName" : {
+ "type" : "string"
+ },
+ "userName" : {
+ "type" : "string"
+ },
+ "note" : {
+ "type" : "string"
+ },
+ "stackId" : {
+ "type" : "string"
+ },
+ "isCurrent" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "configurations" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ConfigurationResponse"
+ }
+ },
+ "hosts" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "compatibleWithCurrentStack" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.ServiceRequest = {
+ "type" : "object",
+ "properties" : {
+ "cluster_name" : {
+ "type" : "string"
+ },
+ "service_name" : {
+ "type" : "string"
+ },
+ "state" : {
+ "type" : "string"
+ },
+ "maintenance_state" : {
+ "type" : "string"
+ },
+ "credential_store_enabled" : {
+ "type" : "string"
+ },
+ "credential_store_supporteds" : {
+ "type" : "string"
+ },
+ "desiredStack" : {
+ "type" : "string"
+ },
+ "desiredRepositoryVersion" : {
+ "type" : "string"
+ },
+ "resolvedRepository" : {
+ "$ref" : "#/definitions/RepositoryVersionEntity"
+ }
+ }
+};
+ defs.ServiceRequestSwagger = {
+ "type" : "object",
+ "properties" : {
+ "ServiceInfo" : {
+ "$ref" : "#/definitions/ServiceRequest"
+ }
+ }
+};
+ defs.ServiceResponse = {
+ "type" : "object",
+ "properties" : {
+ "cluster_name" : {
+ "type" : "string"
+ },
+ "service_name" : {
+ "type" : "string"
+ },
+ "desiredRepositoryVersion" : {
+ "type" : "string"
+ },
+ "repositoryVersionState" : {
+ "type" : "string",
+ "enum" : [ "INIT", "NOT_REQUIRED", "INSTALLING", "INSTALLED", "INSTALL_FAILED", "OUT_OF_SYNC", "CURRENT" ]
+ },
+ "state" : {
+ "type" : "string"
+ },
+ "maintenance_state" : {
+ "type" : "string"
+ },
+ "credential_store_supported" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "credential_store_enabled" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.ServiceResponseSwagger = {
+ "type" : "object",
+ "properties" : {
+ "ServiceInfo" : {
+ "$ref" : "#/definitions/ServiceResponse"
+ }
+ }
+};
+ defs.SettingRequest = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type" : "string"
+ },
+ "setting_type" : {
+ "type" : "string"
+ },
+ "content" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.SettingRequestSwagger = {
+ "type" : "object",
+ "properties" : {
+ "Settings" : {
+ "$ref" : "#/definitions/SettingRequest"
+ }
+ }
+};
+ defs.SettingResponse = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type" : "string"
+ },
+ "setting_type" : {
+ "type" : "string"
+ },
+ "content" : {
+ "type" : "string"
+ },
+ "updated_by" : {
+ "type" : "string"
+ },
+ "update_timestamp" : {
+ "type" : "integer",
+ "format" : "int64"
+ }
+ }
+};
+ defs.SettingResponseWrapper = {
+ "type" : "object",
+ "properties" : {
+ "Settings" : {
+ "$ref" : "#/definitions/SettingResponse"
+ }
+ }
+};
+ defs.ShortRequestInfo = {
+ "type" : "object",
+ "properties" : {
+ "id" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "status" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.StackArtifactResponse = {
+ "type" : "object",
+ "properties" : {
+ "Artifacts" : {
+ "$ref" : "#/definitions/Artifacts"
+ },
+ "artifact_data" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
+ }
+ }
+ }
+};
+ defs.StackConfigurationDependencyResponse = {
+ "type" : "object",
+ "properties" : {
+ "stack_name" : {
+ "type" : "string"
+ },
+ "stack_version" : {
+ "type" : "string"
+ },
+ "service_name" : {
+ "type" : "string"
+ },
+ "property_name" : {
+ "type" : "string"
+ },
+ "dependency_name" : {
+ "type" : "string"
+ },
+ "dependency_type" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.StackConfigurationDependencyResponseSwagger = {
+ "type" : "object",
+ "properties" : {
+ "StackConfigurationDependency" : {
+ "$ref" : "#/definitions/StackConfigurationDependencyResponse"
+ }
+ }
+};
+ defs.StackConfigurationResponse = {
+ "type" : "object",
+ "properties" : {
+ "stack_name" : {
+ "type" : "string"
+ },
+ "stack_version" : {
+ "type" : "string"
+ },
+ "service_name" : {
+ "type" : "string"
+ },
+ "property_name" : {
+ "type" : "string"
+ },
+ "property_value" : {
+ "type" : "string"
+ },
+ "property_description" : {
+ "type" : "string"
+ },
+ "property_display_name" : {
+ "type" : "string"
+ },
+ "type" : {
+ "type" : "string"
+ },
+ "property_value_attributes" : {
+ "$ref" : "#/definitions/ValueAttributesInfo"
+ },
+ "dependencies" : {
+ "type" : "array",
+ "uniqueItems" : true,
+ "items" : {
+ "$ref" : "#/definitions/PropertyDependencyInfo"
+ }
+ },
+ "property_type" : {
+ "type" : "array",
+ "uniqueItems" : true,
+ "items" : {
+ "type" : "string",
+ "enum" : [ "PASSWORD", "USER", "GROUP", "TEXT", "ADDITIONAL_USER_PROPERTY", "NOT_MANAGED_HDFS_PATH", "VALUE_FROM_PROPERTY_FILE", "KERBEROS_PRINCIPAL" ]
+ }
+ }
+ }
+};
+ defs.StackConfigurationResponseSwagger = {
+ "type" : "object",
+ "properties" : {
+ "StackConfigurations" : {
+ "$ref" : "#/definitions/StackConfigurationResponse"
+ }
+ }
+};
+ defs.StackEntity = {
+ "type" : "object",
+ "properties" : {
+ "stackId" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "stackName" : {
+ "type" : "string"
+ },
+ "stackVersion" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.StackId = {
+ "type" : "object",
+ "properties" : {
+ "stackName" : {
+ "type" : "string"
+ },
+ "stackVersion" : {
+ "type" : "string"
+ },
+ "stackId" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.StackResponse = {
+ "type" : "object",
+ "properties" : {
+ "stack_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.StackResponseSwagger = {
+ "type" : "object",
+ "properties" : {
+ "Stacks" : {
+ "$ref" : "#/definitions/StackResponse"
+ }
+ }
+};
+ defs.StackServiceArtifactResponse = {
+ "type" : "object",
+ "properties" : {
+ "Artifacts" : {
+ "$ref" : "#/definitions/Artifacts"
+ },
+ "artifact_data" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "properties" : { }
+ }
+ }
+ }
+};
+ defs.StackServiceComponentResponse = {
+ "type" : "object",
+ "properties" : {
+ "stack_name" : {
+ "type" : "string"
+ },
+ "stack_version" : {
+ "type" : "string"
+ },
+ "service_name" : {
+ "type" : "string"
+ },
+ "component_name" : {
+ "type" : "string"
+ },
+ "display_name" : {
+ "type" : "string"
+ },
+ "component_category" : {
+ "type" : "string"
+ },
+ "cardinality" : {
+ "type" : "string"
+ },
+ "advertise_version" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "custom_commands" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "recovery_enabled" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "bulkCommandsDisplayName" : {
+ "type" : "string"
+ },
+ "is_master" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "bulk_commands_master_component_namen" : {
+ "type" : "string"
+ },
+ "is_client" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "decommission_allowed" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "reassign_allowed" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.StackServiceComponentResponseSwagger = {
+ "type" : "object",
+ "properties" : {
+ "StackServiceComponents" : {
+ "$ref" : "#/definitions/StackServiceComponentResponse"
+ }
+ }
+};
+ defs.StackServiceResponse = {
+ "type" : "object",
+ "properties" : {
+ "stack_name" : {
+ "type" : "string"
+ },
+ "stack_version" : {
+ "type" : "string"
+ },
+ "service_name" : {
+ "type" : "string"
+ },
+ "service_type" : {
+ "type" : "string"
+ },
+ "display_name" : {
+ "type" : "string"
+ },
+ "user_name" : {
+ "type" : "string"
+ },
+ "comments" : {
+ "type" : "string"
+ },
+ "service_version" : {
+ "type" : "string"
+ },
+ "selection" : {
+ "type" : "string",
+ "enum" : [ "DEFAULT", "TECH_PREVIEW", "MANDATORY", "DEPRECATED" ]
+ },
+ "service_check_supported" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "custom_commands" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "config_types" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ }
+ }
+ },
+ "required_services" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "properties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ },
+ "credential_store_supported" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "credential_store_enabled" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "credential_store_required" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.StackServiceResponseSwagger = {
+ "type" : "object",
+ "properties" : {
+ "StackServices" : {
+ "$ref" : "#/definitions/StackServiceResponse"
+ }
+ }
+};
+ defs.StackVersionResponse = {
+ "type" : "object",
+ "properties" : {
+ "min_jdk" : {
+ "type" : "string"
+ },
+ "max_jdk" : {
+ "type" : "string"
+ },
+ "stack_name" : {
+ "type" : "string"
+ },
+ "stack_version" : {
+ "type" : "string"
+ },
+ "min_upgrade_version" : {
+ "type" : "string"
+ },
+ "active" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "valid" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "parent_stack_version" : {
+ "type" : "string"
+ },
+ "config_types" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ }
+ }
+ },
+ "upgrade_packs" : {
+ "type" : "array",
+ "uniqueItems" : true,
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "stack-errors" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string"
+ }
+ }
+ }
+};
+ defs.StackVersionResponseSwagger = {
+ "type" : "object",
+ "properties" : {
+ "Versions" : {
+ "$ref" : "#/definitions/StackVersionResponse"
+ }
+ }
+};
+ defs.Subsection = {
+ "type" : "object",
+ "properties" : {
+ "row-index" : {
+ "type" : "string"
+ },
+ "name" : {
+ "type" : "string"
+ },
+ "display-name" : {
+ "type" : "string"
+ },
+ "column-span" : {
+ "type" : "string"
+ },
+ "row-span" : {
+ "type" : "string"
+ },
+ "column-index" : {
+ "type" : "string"
+ },
+ "border" : {
+ "type" : "string"
+ },
+ "left-vertical-splitter" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "depends-on" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ConfigCondition"
+ }
+ },
+ "subsection-tab" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/SubsectionTab"
+ }
+ },
+ "removed" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.SubsectionTab = {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type" : "string"
+ },
+ "displayName" : {
+ "type" : "string"
+ },
+ "dependsOn" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ConfigCondition"
+ }
+ }
+ }
+};
+ defs.Tab = {
+ "type" : "object",
+ "properties" : {
+ "display-name" : {
+ "type" : "string"
+ },
+ "name" : {
+ "type" : "string"
+ },
+ "layout" : {
+ "$ref" : "#/definitions/TabLayout"
+ }
+ }
+};
+ defs.TabLayout = {
+ "type" : "object",
+ "properties" : {
+ "tab-rows" : {
+ "type" : "string"
+ },
+ "sections" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Section"
+ }
+ },
+ "tab-columns" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.Theme = {
+ "type" : "object",
+ "properties" : {
+ "description" : {
+ "type" : "string"
+ },
+ "name" : {
+ "type" : "string"
+ },
+ "configuration" : {
+ "$ref" : "#/definitions/ThemeConfiguration"
+ }
+ }
+};
+ defs.ThemeConfiguration = {
+ "type" : "object",
+ "properties" : {
+ "placement" : {
+ "$ref" : "#/definitions/Placement"
+ },
+ "widgets" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/WidgetEntry"
+ }
+ },
+ "layouts" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Layout"
+ }
+ }
+ }
+};
+ defs.ThemeInfoResponse = {
+ "type" : "object",
+ "properties" : {
+ "file_name" : {
+ "type" : "string"
+ },
+ "default" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "stack_name" : {
+ "type" : "string"
+ },
+ "stack_version" : {
+ "type" : "string"
+ },
+ "theme_data" : {
+ "$ref" : "#/definitions/Theme"
+ },
+ "service_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ThemeResponse = {
+ "type" : "object",
+ "properties" : {
+ "ThemeInfo" : {
+ "$ref" : "#/definitions/ThemeInfoResponse"
+ }
+ }
+};
+ defs.Unit = {
+ "type" : "object",
+ "properties" : {
+ "unit-name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.UserAuthorizationResponse = {
+ "type" : "object",
+ "required" : [ "AuthorizationInfo/user_name" ],
+ "properties" : {
+ "AuthorizationInfo/authorization_id" : {
+ "type" : "string"
+ },
+ "AuthorizationInfo/authorization_name" : {
+ "type" : "string"
+ },
+ "AuthorizationInfo/resource_type" : {
+ "type" : "string"
+ },
+ "AuthorizationInfo/user_name" : {
+ "type" : "string"
+ },
+ "AuthorizationInfo/cluster_name" : {
+ "type" : "string"
+ },
+ "AuthorizationInfo/view_name" : {
+ "type" : "string"
+ },
+ "AuthorizationInfo/view_version" : {
+ "type" : "string"
+ },
+ "AuthorizationInfo/view_instance_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.UserGroupInfo = {
+ "type" : "object",
+ "properties" : {
+ "type" : {
+ "type" : "string"
+ },
+ "name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.UserPrivilegeResponse = {
+ "type" : "object",
+ "required" : [ "PrivilegeInfo/user_name" ],
+ "properties" : {
+ "PrivilegeInfo/permission_label" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/privilege_id" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "PrivilegeInfo/permission_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/principal_type" : {
+ "type" : "string",
+ "enum" : [ "USER", "GROUP", "ROLE" ]
+ },
+ "PrivilegeInfo/principal_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/type" : {
+ "type" : "string",
+ "enum" : [ "AMBARI", "CLUSTER", "VIEW" ]
+ },
+ "PrivilegeInfo/cluster_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/view_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/version" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/instance_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/user_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.UserRequest = {
+ "type" : "object",
+ "properties" : {
+ "Users/password" : {
+ "type" : "string"
+ },
+ "Users/old_password" : {
+ "type" : "string"
+ },
+ "Users/active" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "Users/admin" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.UserResponse = {
+ "type" : "object",
+ "required" : [ "Users/user_name" ],
+ "properties" : {
+ "Users/user_type" : {
+ "type" : "string",
+ "enum" : [ "LOCAL", "LDAP", "JWT", "PAM" ]
+ },
+ "Users/groups" : {
+ "type" : "array",
+ "uniqueItems" : true,
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "Users/user_name" : {
+ "type" : "string"
+ },
+ "Users/active" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "Users/ldap_user" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "Users/admin" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.ValidationResult = {
+ "type" : "object",
+ "properties" : {
+ "detail" : {
+ "type" : "string"
+ },
+ "valid" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.ValueAttributesInfo = {
+ "type" : "object",
+ "properties" : {
+ "type" : {
+ "type" : "string"
+ },
+ "maximum" : {
+ "type" : "string"
+ },
+ "minimum" : {
+ "type" : "string"
+ },
+ "unit" : {
+ "type" : "string"
+ },
+ "delete" : {
+ "type" : "string"
+ },
+ "visible" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "overridable" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "copy" : {
+ "type" : "string"
+ },
+ "empty_value_valid" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "empty-value-valid"
+ },
+ "default" : false
+ },
+ "ui_only_property" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "ui-only-property"
+ },
+ "default" : false
+ },
+ "read_only" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "read-only"
+ },
+ "default" : false
+ },
+ "editable_only_at_install" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "editable-only-at-install"
+ },
+ "default" : false
+ },
+ "show_property_name" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "show-property-name"
+ },
+ "default" : false
+ },
+ "increment_step" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "increment-step"
+ }
+ },
+ "entries" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "entries",
+ "wrapped" : true
+ },
+ "items" : {
+ "$ref" : "#/definitions/ValueEntryInfo"
+ }
+ },
+ "hidden" : {
+ "type" : "string"
+ },
+ "entries_editable" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "selection_cardinality" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "selection-cardinality"
+ }
+ },
+ "property-file-name" : {
+ "type" : "string"
+ },
+ "property-file-type" : {
+ "type" : "string"
+ },
+ "user-group-entries" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "user-groups",
+ "wrapped" : true
+ },
+ "items" : {
+ "$ref" : "#/definitions/UserGroupInfo"
+ }
+ },
+ "keystore" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ }
+};
+ defs.ValueEntryInfo = {
+ "type" : "object",
+ "properties" : {
+ "value" : {
+ "type" : "string"
+ },
+ "label" : {
+ "type" : "string"
+ },
+ "description" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.VersionDefinitionXml = {
+ "type" : "object",
+ "properties" : {
+ "release" : {
+ "$ref" : "#/definitions/Release"
+ },
+ "repositoryInfo" : {
+ "xml" : {
+ "name" : "repository-info"
+ },
+ "$ref" : "#/definitions/RepositoryXml"
+ },
+ "xsdLocation" : {
+ "type" : "string"
+ },
+ "availableServiceNames" : {
+ "type" : "array",
+ "uniqueItems" : true,
+ "items" : {
+ "type" : "string"
+ }
+ },
+ "stackDefault" : {
+ "type" : "boolean",
+ "default" : false
+ }
+ },
+ "xml" : {
+ "name" : "repository-version"
+ }
+};
+ defs.ViewInfo = {
+ "type" : "object",
+ "properties" : {
+ "view_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ViewInstanceRequest = {
+ "type" : "object",
+ "properties" : {
+ "ViewInstanceInfo" : {
+ "$ref" : "#/definitions/ViewInstanceRequestInfo"
+ }
+ }
+};
+ defs.ViewInstanceRequestInfo = {
+ "type" : "object",
+ "properties" : {
+ "label" : {
+ "type" : "string"
+ },
+ "description" : {
+ "type" : "string"
+ },
+ "visible" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "icon_path" : {
+ "type" : "string"
+ },
+ "icon64_path" : {
+ "type" : "string"
+ },
+ "properties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ },
+ "instance_data" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ },
+ "cluster_handle" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "cluster_type" : {
+ "type" : "string",
+ "enum" : [ "LOCAL_AMBARI", "REMOTE_AMBARI", "NONE" ]
+ }
+ }
+};
+ defs.ViewInstanceResponse = {
+ "type" : "object",
+ "properties" : {
+ "ViewInstanceInfo" : {
+ "$ref" : "#/definitions/ViewInstanceResponseInfo"
+ }
+ }
+};
+ defs.ViewInstanceResponseInfo = {
+ "type" : "object",
+ "properties" : {
+ "view_name" : {
+ "type" : "string"
+ },
+ "version" : {
+ "type" : "string"
+ },
+ "instance_name" : {
+ "type" : "string"
+ },
+ "label" : {
+ "type" : "string"
+ },
+ "description" : {
+ "type" : "string"
+ },
+ "visible" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "icon_path" : {
+ "type" : "string"
+ },
+ "icon64_path" : {
+ "type" : "string"
+ },
+ "properties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ },
+ "instance_data" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ },
+ "cluster_handle" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "cluster_type" : {
+ "type" : "string",
+ "enum" : [ "LOCAL_AMBARI", "REMOTE_AMBARI", "NONE" ]
+ },
+ "context_path" : {
+ "type" : "string"
+ },
+ "static" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "short_url" : {
+ "type" : "string"
+ },
+ "short_url_name" : {
+ "type" : "string"
+ },
+ "validation_result" : {
+ "$ref" : "#/definitions/ValidationResult"
+ },
+ "property_validation_results" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "$ref" : "#/definitions/ValidationResult"
+ }
+ }
+ }
+};
+ defs.ViewPermissionInfo = {
+ "type" : "object",
+ "properties" : {
+ "view_name" : {
+ "type" : "string"
+ },
+ "version" : {
+ "type" : "string"
+ },
+ "permission_id" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "permission_name" : {
+ "type" : "string"
+ },
+ "resource_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ViewPermissionResponse = {
+ "type" : "object",
+ "properties" : {
+ "ViewPermissionInfo" : {
+ "$ref" : "#/definitions/ViewPermissionInfo"
+ }
+ }
+};
+ defs.ViewPrivilegeRequest = {
+ "type" : "object",
+ "properties" : {
+ "PrivilegeInfo/permission_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/principal_type" : {
+ "type" : "string",
+ "enum" : [ "USER", "GROUP", "ROLE" ]
+ },
+ "PrivilegeInfo/principal_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ViewPrivilegeResponse = {
+ "type" : "object",
+ "properties" : {
+ "PrivilegeInfo/permission_label" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/privilege_id" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "PrivilegeInfo/permission_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/principal_type" : {
+ "type" : "string",
+ "enum" : [ "USER", "GROUP", "ROLE" ]
+ },
+ "PrivilegeInfo/principal_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/view_name" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/version" : {
+ "type" : "string"
+ },
+ "PrivilegeInfo/instance_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ViewResponse = {
+ "type" : "object",
+ "properties" : {
+ "ViewInfo" : {
+ "$ref" : "#/definitions/ViewInfo"
+ }
+ }
+};
+ defs.ViewVersionInfo = {
+ "type" : "object",
+ "properties" : {
+ "archive" : {
+ "type" : "string"
+ },
+ "build_number" : {
+ "type" : "string"
+ },
+ "cluster_configurable" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "description" : {
+ "type" : "string"
+ },
+ "label" : {
+ "type" : "string"
+ },
+ "masker_class" : {
+ "type" : "string"
+ },
+ "max_ambari_version" : {
+ "type" : "string"
+ },
+ "min_ambari_version" : {
+ "type" : "string"
+ },
+ "parameters" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/ParameterConfig"
+ }
+ },
+ "status" : {
+ "type" : "string",
+ "enum" : [ "PENDING", "DEPLOYING", "DEPLOYED", "ERROR" ]
+ },
+ "status_detail" : {
+ "type" : "string"
+ },
+ "system" : {
+ "type" : "boolean",
+ "default" : false
+ },
+ "version" : {
+ "type" : "string"
+ },
+ "view_name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.ViewVersionResponse = {
+ "type" : "object",
+ "properties" : {
+ "ViewVersionInfo" : {
+ "$ref" : "#/definitions/ViewVersionInfo"
+ }
+ }
+};
+ defs.Widget = {
+ "type" : "object",
+ "properties" : {
+ "type" : {
+ "type" : "string"
+ },
+ "units" : {
+ "type" : "array",
+ "items" : {
+ "$ref" : "#/definitions/Unit"
+ }
+ },
+ "required-properties" : {
+ "type" : "object",
+ "additionalProperties" : {
+ "type" : "string"
+ }
+ },
+ "display-name" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.WidgetEntry = {
+ "type" : "object",
+ "properties" : {
+ "config" : {
+ "type" : "string"
+ },
+ "widget" : {
+ "$ref" : "#/definitions/Widget"
+ }
+ }
+};
+ defs.WidgetLayoutIdWrapper = {
+ "type" : "object",
+ "properties" : {
+ "id" : {
+ "type" : "integer",
+ "format" : "int64"
+ }
+ }
+};
+ defs.WidgetResponse = {
+ "type" : "object",
+ "properties" : {
+ "id" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "widgetName" : {
+ "type" : "string"
+ },
+ "widgetType" : {
+ "type" : "string"
+ },
+ "metrics" : {
+ "type" : "string"
+ },
+ "timeCreated" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "author" : {
+ "type" : "string"
+ },
+ "description" : {
+ "type" : "string"
+ },
+ "displayName" : {
+ "type" : "string"
+ },
+ "scope" : {
+ "type" : "string"
+ },
+ "widgetValues" : {
+ "type" : "string"
+ },
+ "properties" : {
+ "type" : "string"
+ },
+ "clusterName" : {
+ "type" : "string"
+ }
+ }
+};
+ defs.Wrapper = {
+ "type" : "object",
+ "properties" : {
+ "Hosts" : {
+ "$ref" : "#/definitions/HostResponse"
+ }
+ }
+};
+ </script>
+
+ <div class="container-fluid">
+ <div class="row-fluid">
+ <div id="sidenav" class="span2">
+ <nav id="scrollingNav">
+ <ul class="sidenav nav nav-list">
+ <!-- Logo Area -->
+ <!--<div style="width: 80%; background-color: #4c8eca; color: white; padding: 20px; text-align: center; margin-bottom: 20px; ">
+
+ API Docs 2
+
+ </div>
+ -->
+ <li class="nav-fixed nav-header active" data-group="_"><a href="#api-_">API Summary</a></li>
+
+ <li class="nav-header" data-group="Actions"><a href="#api-Actions">API Methods - Actions</a></li>
+ <li data-group="Actions" data-name="actionServiceCreateActionDefinition" class="">
+ <a href="#api-Actions-actionServiceCreateActionDefinition">actionServiceCreateActionDefinition</a>
+ </li>
+ <li data-group="Actions" data-name="actionServiceDeleteActionDefinition" class="">
+ <a href="#api-Actions-actionServiceDeleteActionDefinition">actionServiceDeleteActionDefinition</a>
+ </li>
+ <li data-group="Actions" data-name="actionServiceGetActionDefinition" class="">
+ <a href="#api-Actions-actionServiceGetActionDefinition">actionServiceGetActionDefinition</a>
+ </li>
+ <li data-group="Actions" data-name="actionServiceGetActionDefinitions" class="">
+ <a href="#api-Actions-actionServiceGetActionDefinitions">actionServiceGetActionDefinitions</a>
+ </li>
+ <li data-group="Actions" data-name="actionServiceUpdateActionDefinition" class="">
+ <a href="#api-Actions-actionServiceUpdateActionDefinition">actionServiceUpdateActionDefinition</a>
+ </li>
+ <li class="nav-header" data-group="Blueprints"><a href="#api-Blueprints">API Methods - Blueprints</a></li>
+ <li data-group="Blueprints" data-name="blueprintServiceCreateBlueprint" class="">
+ <a href="#api-Blueprints-blueprintServiceCreateBlueprint">blueprintServiceCreateBlueprint</a>
+ </li>
+ <li data-group="Blueprints" data-name="blueprintServiceDeleteBlueprint" class="">
+ <a href="#api-Blueprints-blueprintServiceDeleteBlueprint">blueprintServiceDeleteBlueprint</a>
+ </li>
+ <li data-group="Blueprints" data-name="blueprintServiceDeleteBlueprints" class="">
+ <a href="#api-Blueprints-blueprintServiceDeleteBlueprints">blueprintServiceDeleteBlueprints</a>
+ </li>
+ <li data-group="Blueprints" data-name="blueprintServiceGetBlueprint" class="">
+ <a href="#api-Blueprints-blueprintServiceGetBlueprint">blueprintServiceGetBlueprint</a>
+ </li>
+ <li data-group="Blueprints" data-name="blueprintServiceGetBlueprints" class="">
+ <a href="#api-Blueprints-blueprintServiceGetBlueprints">blueprintServiceGetBlueprints</a>
+ </li>
+ <li class="nav-header" data-group="Clusters"><a href="#api-Clusters">API Methods - Clusters</a></li>
+ <li data-group="Clusters" data-name="createCluster" class="">
+ <a href="#api-Clusters-createCluster">createCluster</a>
+ </li>
+ <li data-group="Clusters" data-name="createClusterArtifact" class="">
+ <a href="#api-Clusters-createClusterArtifact">createClusterArtifact</a>
+ </li>
+ <li data-group="Clusters" data-name="deleteCluster" class="">
+ <a href="#api-Clusters-deleteCluster">deleteCluster</a>
+ </li>
+ <li data-group="Clusters" data-name="deleteClusterArtifact" class="">
+ <a href="#api-Clusters-deleteClusterArtifact">deleteClusterArtifact</a>
+ </li>
+ <li data-group="Clusters" data-name="deleteClusterArtifacts" class="">
+ <a href="#api-Clusters-deleteClusterArtifacts">deleteClusterArtifacts</a>
+ </li>
+ <li data-group="Clusters" data-name="getCluster" class="">
+ <a href="#api-Clusters-getCluster">getCluster</a>
+ </li>
+ <li data-group="Clusters" data-name="getClusterArtifact" class="">
+ <a href="#api-Clusters-getClusterArtifact">getClusterArtifact</a>
+ </li>
+ <li data-group="Clusters" data-name="getClusterArtifacts" class="">
+ <a href="#api-Clusters-getClusterArtifacts">getClusterArtifacts</a>
+ </li>
+ <li data-group="Clusters" data-name="getClusters" class="">
+ <a href="#api-Clusters-getClusters">getClusters</a>
+ </li>
+ <li data-group="Clusters" data-name="updateCluster" class="">
+ <a href="#api-Clusters-updateCluster">updateCluster</a>
+ </li>
+ <li data-group="Clusters" data-name="updateClusterArtifact" class="">
+ <a href="#api-Clusters-updateClusterArtifact">updateClusterArtifact</a>
+ </li>
+ <li data-group="Clusters" data-name="updateClusterArtifacts" class="">
+ <a href="#api-Clusters-updateClusterArtifacts">updateClusterArtifacts</a>
+ </li>
+ <li class="nav-header" data-group="Groups"><a href="#api-Groups">API Methods - Groups</a></li>
+ <li data-group="Groups" data-name="groupPrivilegeServiceGetPrivilege" class="">
+ <a href="#api-Groups-groupPrivilegeServiceGetPrivilege">groupPrivilegeServiceGetPrivilege</a>
+ </li>
+ <li data-group="Groups" data-name="groupPrivilegeServiceGetPrivileges" class="">
+ <a href="#api-Groups-groupPrivilegeServiceGetPrivileges">groupPrivilegeServiceGetPrivileges</a>
+ </li>
+ <li data-group="Groups" data-name="groupServiceCreateGroup" class="">
+ <a href="#api-Groups-groupServiceCreateGroup">groupServiceCreateGroup</a>
+ </li>
+ <li data-group="Groups" data-name="groupServiceDeleteGroup" class="">
+ <a href="#api-Groups-groupServiceDeleteGroup">groupServiceDeleteGroup</a>
+ </li>
+ <li data-group="Groups" data-name="groupServiceGetGroup" class="">
+ <a href="#api-Groups-groupServiceGetGroup">groupServiceGetGroup</a>
+ </li>
+ <li data-group="Groups" data-name="groupServiceGetGroups" class="">
+ <a href="#api-Groups-groupServiceGetGroups">groupServiceGetGroups</a>
+ </li>
+ <li data-group="Groups" data-name="memberServiceDeleteMember" class="">
+ <a href="#api-Groups-memberServiceDeleteMember">memberServiceDeleteMember</a>
+ </li>
+ <li data-group="Groups" data-name="memberServiceGetMember" class="">
+ <a href="#api-Groups-memberServiceGetMember">memberServiceGetMember</a>
+ </li>
+ <li data-group="Groups" data-name="memberServiceGetMembers" class="">
+ <a href="#api-Groups-memberServiceGetMembers">memberServiceGetMembers</a>
+ </li>
+ <li data-group="Groups" data-name="memberServiceUpdateMembers" class="">
+ <a href="#api-Groups-memberServiceUpdateMembers">memberServiceUpdateMembers</a>
+ </li>
+ <li class="nav-header" data-group="Hosts"><a href="#api-Hosts">API Methods - Hosts</a></li>
+ <li data-group="Hosts" data-name="createHost" class="">
+ <a href="#api-Hosts-createHost">createHost</a>
+ </li>
+ <li data-group="Hosts" data-name="createHosts" class="">
+ <a href="#api-Hosts-createHosts">createHosts</a>
+ </li>
+ <li data-group="Hosts" data-name="deleteHost" class="">
+ <a href="#api-Hosts-deleteHost">deleteHost</a>
+ </li>
+ <li data-group="Hosts" data-name="deleteHosts" class="">
+ <a href="#api-Hosts-deleteHosts">deleteHosts</a>
+ </li>
+ <li data-group="Hosts" data-name="getHost" class="">
+ <a href="#api-Hosts-getHost">getHost</a>
+ </li>
+ <li data-group="Hosts" data-name="getHosts" class="">
+ <a href="#api-Hosts-getHosts">getHosts</a>
+ </li>
+ <li data-group="Hosts" data-name="updateHost" class="">
+ <a href="#api-Hosts-updateHost">updateHost</a>
+
<TRUNCATED>
[23/50] [abbrv] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1427d818
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1427d818
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1427d818
Branch: refs/heads/trunk
Commit: 1427d818b41a987767c3261e586368e47c43822c
Parents: 522039e 47b845f
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue May 16 13:14:41 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue May 16 13:14:41 2017 -0400
----------------------------------------------------------------------
ambari-infra/ambari-infra-assembly/pom.xml | 89 +++
.../src/main/package/deb/manager/control | 22 +
.../src/main/package/deb/manager/postinst | 15 +
.../src/main/package/deb/manager/postrm | 15 +
.../src/main/package/deb/manager/preinst | 15 +
.../src/main/package/deb/manager/prerm | 15 +
ambari-infra/ambari-infra-manager/build.xml | 53 ++
ambari-infra/ambari-infra-manager/pom.xml | 43 +-
.../org/apache/ambari/infra/InfraManager.java | 1 -
.../conf/batch/InfraManagerBatchConfig.java | 2 +-
.../src/main/resources/infraManager.sh | 20 +
ambari-logsearch/README.md | 3 +-
ambari-logsearch/ambari-logsearch-it/pom.xml | 10 +
.../logsearch/steps/AbstractLogSearchSteps.java | 3 +-
.../story/LogSearchBackendStories.java | 19 +-
.../logsearch/story/LogSearchStoryLocator.java | 97 +++
.../logsearch/story/LogSearchUIStories.java | 15 +-
.../backend/log_search_api_query_story.story | 17 -
.../stories/backend/log_search_api_tests.story | 17 +
.../backend/logfeeder_parsing_story.story | 20 -
.../backend/logfeeder_parsing_tests.story | 20 +
ambari-server/pom.xml | 1 -
.../gsinstaller/ClusterDefinition.java | 434 ------------
.../gsinstaller/GSInstallerClusterProvider.java | 71 --
.../GSInstallerComponentProvider.java | 88 ---
.../GSInstallerHostComponentProvider.java | 99 ---
.../gsinstaller/GSInstallerHostProvider.java | 86 ---
.../gsinstaller/GSInstallerNoOpProvider.java | 60 --
.../gsinstaller/GSInstallerProviderModule.java | 93 ---
.../GSInstallerResourceProvider.java | 234 -------
.../gsinstaller/GSInstallerServiceProvider.java | 82 ---
.../gsinstaller/GSInstallerStateProvider.java | 35 -
.../internal/StageResourceProvider.java | 81 +--
.../RANGER_KMS/0.5.0.3.0/alerts.json | 32 +
.../0.5.0.3.0/configuration/dbks-site.xml | 206 ++++++
.../0.5.0.3.0/configuration/kms-env.xml | 116 ++++
.../0.5.0.3.0/configuration/kms-log4j.xml | 120 ++++
.../0.5.0.3.0/configuration/kms-properties.xml | 166 +++++
.../0.5.0.3.0/configuration/kms-site.xml | 133 ++++
.../configuration/ranger-kms-audit.xml | 124 ++++
.../configuration/ranger-kms-policymgr-ssl.xml | 68 ++
.../configuration/ranger-kms-security.xml | 64 ++
.../0.5.0.3.0/configuration/ranger-kms-site.xml | 104 +++
.../RANGER_KMS/0.5.0.3.0/kerberos.json | 84 +++
.../RANGER_KMS/0.5.0.3.0/metainfo.xml | 115 ++++
.../RANGER_KMS/0.5.0.3.0/package/scripts/kms.py | 677 +++++++++++++++++++
.../0.5.0.3.0/package/scripts/kms_server.py | 117 ++++
.../0.5.0.3.0/package/scripts/kms_service.py | 58 ++
.../0.5.0.3.0/package/scripts/params.py | 331 +++++++++
.../0.5.0.3.0/package/scripts/service_check.py | 41 ++
.../0.5.0.3.0/package/scripts/status_params.py | 36 +
.../0.5.0.3.0/package/scripts/upgrade.py | 30 +
.../templates/input.config-ranger-kms.json.j2 | 48 ++
.../0.5.0.3.0/role_command_order.json | 7 +
.../RANGER_KMS/0.5.0.3.0/service_advisor.py | 281 ++++++++
.../0.5.0.3.0/themes/theme_version_1.json | 303 +++++++++
.../0.5.0.3.0/themes/theme_version_2.json | 124 ++++
.../SPARK/1.2.1/quicklinks/quicklinks.json | 1 +
.../0.9.1/package/templates/storm_jaas.conf.j2 | 8 +
.../custom_actions/scripts/ru_execute_tasks.py | 2 +
.../stacks/HDP/2.3/upgrades/config-upgrade.xml | 8 +
.../HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml | 6 +
.../stacks/HDP/2.3/upgrades/upgrade-2.6.xml | 1 +
.../stacks/HDP/2.4/upgrades/config-upgrade.xml | 6 +-
.../HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml | 6 +
.../stacks/HDP/2.4/upgrades/upgrade-2.6.xml | 1 +
.../stacks/HDP/2.5/upgrades/config-upgrade.xml | 12 +-
.../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml | 6 +
.../stacks/HDP/2.5/upgrades/upgrade-2.6.xml | 4 +
.../HIVE/configuration/tez-interactive-site.xml | 12 +
.../services/YARN/configuration/yarn-site.xml | 9 +
.../stacks/HDP/2.6/upgrades/config-upgrade.xml | 8 +
.../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml | 7 +
.../stacks/HDP/2.6/upgrades/upgrade-2.6.xml | 4 +
.../HDP/3.0/services/RANGER_KMS/metainfo.xml | 27 +
.../GSInstallerClusterProviderTest.java | 104 ---
.../GSInstallerComponentProviderTest.java | 102 ---
.../GSInstallerHostComponentProviderTest.java | 149 ----
.../GSInstallerHostProviderTest.java | 153 -----
.../GSInstallerNoOpProviderTest.java | 46 --
.../GSInstallerServiceProviderTest.java | 166 -----
.../TestGSInstallerStateProvider.java | 36 -
.../admin/stack_upgrade/upgrade_version_box.hbs | 3 +
.../stack_upgrade/upgrade_version_box_view.js | 2 +
.../step7/assign_master_controller_test.js | 40 +-
ambari-web/test/utils/helper_test.js | 6 +-
86 files changed, 4001 insertions(+), 2194 deletions(-)
----------------------------------------------------------------------
[33/50] [abbrv] ambari git commit: AMBARI-21059. Reduce Dependency on
Cluster Desired Stack ID (ncole)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
index 664ba42..e6c50fb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
@@ -29,6 +29,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ClusterNotFoundException;
import org.apache.ambari.server.DuplicateResourceException;
@@ -420,29 +422,14 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
for (ServiceRequest request : requests) {
Cluster cluster = clusters.getCluster(request.getClusterName());
-
String desiredStack = request.getDesiredStack();
- String desiredRepositoryVersion = request.getDesiredRepositoryVersion();
- RepositoryVersionEntity repositoryVersion = null;
- if (StringUtils.isNotBlank(desiredStack) && StringUtils.isNotBlank(desiredRepositoryVersion)){
- repositoryVersion = repositoryVersionDAO.findByStackAndVersion(new StackId(desiredStack),
- desiredRepositoryVersion);
- }
-
- if (null == desiredStack) {
- desiredStack = cluster.getDesiredStackVersion().toString();
- }
- if (null == repositoryVersion) {
- List<RepositoryVersionEntity> allVersions = repositoryVersionDAO.findByStack(new StackId(desiredStack));
-
- if (CollectionUtils.isNotEmpty(allVersions)) {
- repositoryVersion = allVersions.get(0);
- }
- }
+ RepositoryVersionEntity repositoryVersion = request.getResolvedRepository();
if (null == repositoryVersion) {
throw new AmbariException(String.format("Could not find any repositories defined by %s", desiredStack));
+ } else {
+ desiredStack = repositoryVersion.getStackId().toString();
}
Service s = cluster.addService(request.getServiceName(), repositoryVersion);
@@ -451,7 +438,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
* Get the credential_store_supported field only from the stack definition.
* Not possible to update the value through a request.
*/
- StackId stackId = cluster.getDesiredStackVersion();
+ StackId stackId = repositoryVersion.getStackId();
AmbariMetaInfo ambariMetaInfo = getManagementController().getAmbariMetaInfo();
ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(),
stackId.getStackVersion(), request.getServiceName());
@@ -621,6 +608,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
if (!serviceNames.containsKey(request.getClusterName())) {
serviceNames.put(request.getClusterName(), new HashSet<String>());
}
+
if (serviceNames.get(request.getClusterName())
.contains(request.getServiceName())) {
// TODO throw single exception
@@ -746,6 +734,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
}
}
}
+
for (Service service : depServices) {
updateServiceComponents(requestStages, changedComps, changedScHosts,
ignoredScHosts, reqOpLvl, service, State.STARTED);
@@ -767,6 +756,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
service.setCredentialStoreEnabled(credentialStoreEnabled);
}
+
Cluster cluster = clusters.getCluster(clusterNames.iterator().next());
return controller.addStages(requestStages, cluster, requestProperties,
@@ -877,7 +867,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
+ ", hostname=" + sch.getHostName()
+ ", currentState=" + oldSchState
+ ", newDesiredState=" + newState;
- StackId sid = cluster.getDesiredStackVersion();
+ StackId sid = service.getDesiredStackId();
if ( ambariMetaInfo.getComponent(
sid.getStackName(), sid.getStackVersion(), sc.getServiceName(),
@@ -1050,6 +1040,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
AmbariMetaInfo ambariMetaInfo = getManagementController().getAmbariMetaInfo();
Map<String, Set<String>> serviceNames = new HashMap<>();
Set<String> duplicates = new HashSet<>();
+
for (ServiceRequest request : requests) {
final String clusterName = request.getClusterName();
final String serviceName = request.getServiceName();
@@ -1102,7 +1093,38 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
// Expected
}
- StackId stackId = cluster.getDesiredStackVersion();
+ @Experimental(feature = ExperimentalFeature.MULTI_SERVICE,
+ comment = "the desired stack should not come from the cluster. this is a placeholder until the UI sends correct information")
+ String desiredStack = request.getDesiredStack();
+ StackId stackId = new StackId(desiredStack);
+
+ String desiredRepositoryVersion = request.getDesiredRepositoryVersion();
+ RepositoryVersionEntity repositoryVersion = null;
+ if (StringUtils.isNotBlank(desiredRepositoryVersion)){
+ repositoryVersion = repositoryVersionDAO.findByVersion(desiredRepositoryVersion);
+ }
+
+ if (null == repositoryVersion) {
+ // !!! FIXME hack until the UI always sends the repository
+ if (null == desiredStack) {
+ desiredStack = cluster.getDesiredStackVersion().toString();
+ }
+
+ List<RepositoryVersionEntity> allVersions = repositoryVersionDAO.findByStack(new StackId(desiredStack));
+
+ if (CollectionUtils.isNotEmpty(allVersions)) {
+ repositoryVersion = allVersions.get(0);
+ }
+ }
+
+ if (null == repositoryVersion) {
+ throw new AmbariException(String.format("Could not find any repositories defined by %s", desiredStack));
+ } else {
+ stackId = repositoryVersion.getStackId();
+ }
+
+ request.setResolvedRepository(repositoryVersion);
+
if (!ambariMetaInfo.isValidService(stackId.getStackName(),
stackId.getStackVersion(), request.getServiceName())) {
throw new IllegalArgumentException("Unsupported or invalid service in stack, clusterName=" + clusterName
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java
index 8972ca2..e9682fb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java
@@ -27,6 +27,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import org.apache.ambari.server.ServiceNotFoundException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.ComponentSSLConfiguration;
import org.apache.ambari.server.controller.jmx.JMXHostProvider;
@@ -46,6 +47,7 @@ import org.apache.ambari.server.controller.utilities.StreamProvider;
import org.apache.ambari.server.security.authorization.AuthorizationException;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.Metric;
import org.apache.ambari.server.state.stack.MetricDefinition;
@@ -160,12 +162,19 @@ public class StackDefinedPropertyProvider implements PropertyProvider {
String componentName = r.getPropertyValue(componentNamePropertyId).toString();
Cluster cluster = clusters.getCluster(clusterName);
- StackId stack = cluster.getDesiredStackVersion();
- String svc = metaInfo.getComponentToService(stack.getStackName(),
- stack.getStackVersion(), componentName);
+ Service service = null;
+
+ try {
+ service = cluster.getServiceByComponentName(componentName);
+ } catch (ServiceNotFoundException e) {
+ LOG.debug("Could not load component {}", componentName);
+ continue;
+ }
+
+ StackId stack = service.getDesiredStackId();
List<MetricDefinition> defs = metaInfo.getMetrics(
- stack.getStackName(), stack.getStackVersion(), svc, componentName, type.name());
+ stack.getStackName(), stack.getStackVersion(), service.getName(), componentName, type.name());
if (null == defs || 0 == defs.size()) {
continue;
@@ -227,6 +236,7 @@ public class StackDefinedPropertyProvider implements PropertyProvider {
// Need to rethrow the catched 'AuthorizationException'.
throw e;
} catch (Exception e) {
+ e.printStackTrace();
LOG.error("Error loading deferred resources", e);
throw new SystemException("Error loading deferred resources", e);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index 6027ce7..115a043 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -1456,7 +1456,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
actionContext.setMaintenanceModeHostExcluded(true);
ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext,
- cluster, null);
+ cluster, context.getRepositoryVersion());
Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari",
cluster.getClusterName(), cluster.getClusterId(), stageText, jsons.getClusterHostInfo(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
index c69d00b..3cf119c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
@@ -41,6 +41,7 @@ import org.apache.ambari.server.security.authorization.RoleAuthorization;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.LogDefinition;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -71,7 +72,7 @@ public class LoggingSearchPropertyProvider implements PropertyProvider {
@Inject
private LoggingRequestHelperFactory loggingRequestHelperFactory;
-
+
@Override
public Set<Resource> populateResources(Set<Resource> resources, Request request, Predicate predicate) throws SystemException {
Map<String, Boolean> isLogSearchRunning = new HashMap<>();
@@ -186,12 +187,13 @@ public class LoggingSearchPropertyProvider implements PropertyProvider {
private String getMappedComponentNameForSearch(String clusterName, String componentName, AmbariManagementController controller) {
try {
AmbariMetaInfo metaInfo = controller.getAmbariMetaInfo();
- StackId stackId =
- controller.getClusters().getCluster(clusterName).getCurrentStackVersion();
+ Cluster cluster = controller.getClusters().getCluster(clusterName);
+ String serviceName = controller.findServiceName(cluster, componentName);
+ Service service = cluster.getService(serviceName);
+ StackId stackId = service.getDesiredStackId();
+
final String stackName = stackId.getStackName();
final String stackVersion = stackId.getStackVersion();
- final String serviceName =
- metaInfo.getComponentToService(stackName, stackVersion, componentName);
ComponentInfo componentInfo =
metaInfo.getComponent(stackName, stackVersion, serviceName, componentName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java
index c4c2ddc..f77d47a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java
@@ -59,6 +59,8 @@ import org.apache.ambari.server.controller.spi.TemporalInfo;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.events.MetricsCollectorHostDownEvent;
import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
@@ -308,12 +310,15 @@ public abstract class AMSPropertyProvider extends MetricsPropertyProvider {
StackId stackId;
try {
AmbariManagementController managementController = AmbariServer.getController();
- stackId = managementController.getClusters().getCluster(clusterName).getCurrentStackVersion();
+ Cluster cluster = managementController.getClusters().getCluster(clusterName);
+ Service service = cluster.getServiceByComponentName(componentName);
+ stackId = service.getDesiredStackId();
+
if (stackId != null) {
String stackName = stackId.getStackName();
String version = stackId.getStackVersion();
AmbariMetaInfo ambariMetaInfo = managementController.getAmbariMetaInfo();
- String serviceName = ambariMetaInfo.getComponentToService(stackName, version, componentName);
+ String serviceName = service.getName();
String timeLineAppId = ambariMetaInfo.getComponent(stackName, version, serviceName, componentName).getTimelineAppid();
if (timeLineAppId != null){
timelineAppIdCache.put(componentName, timeLineAppId);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/DefaultServiceCalculatedState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/DefaultServiceCalculatedState.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/DefaultServiceCalculatedState.java
index 264ba03..7cd2624 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/DefaultServiceCalculatedState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/DefaultServiceCalculatedState.java
@@ -32,6 +32,7 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.MaintenanceState;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.slf4j.Logger;
@@ -78,12 +79,14 @@ public class DefaultServiceCalculatedState implements ServiceCalculatedState {
return null;
}
+ @Override
public State getState(String clusterName, String serviceName) {
try {
Cluster cluster = getCluster(clusterName);
if (cluster != null && managementControllerProvider != null) {
+ Service service = cluster.getService(serviceName);
AmbariMetaInfo ambariMetaInfo = managementControllerProvider.get().getAmbariMetaInfo();
- StackId stackId = cluster.getDesiredStackVersion();
+ StackId stackId = service.getDesiredStackId();
ServiceComponentHostRequest request = new ServiceComponentHostRequest(clusterName,
serviceName, null, null, null);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HBaseServiceCalculatedState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HBaseServiceCalculatedState.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HBaseServiceCalculatedState.java
index d44515c..d953156 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HBaseServiceCalculatedState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HBaseServiceCalculatedState.java
@@ -29,6 +29,7 @@ import org.apache.ambari.server.controller.ServiceComponentHostRequest;
import org.apache.ambari.server.controller.ServiceComponentHostResponse;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
@@ -45,7 +46,8 @@ public final class HBaseServiceCalculatedState extends DefaultServiceCalculatedS
Cluster cluster = getCluster(clusterName);
if (cluster != null && managementControllerProvider != null) {
AmbariMetaInfo ambariMetaInfo = managementControllerProvider.get().getAmbariMetaInfo();
- StackId stackId = cluster.getDesiredStackVersion();
+ Service service = cluster.getService(serviceName);
+ StackId stackId = service.getDesiredStackId();
ServiceComponentHostRequest request = new ServiceComponentHostRequest(clusterName,
serviceName, null, null, null);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HDFSServiceCalculatedState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HDFSServiceCalculatedState.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HDFSServiceCalculatedState.java
index 89d4004..20f5fc7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HDFSServiceCalculatedState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HDFSServiceCalculatedState.java
@@ -29,6 +29,7 @@ import org.apache.ambari.server.controller.ServiceComponentHostRequest;
import org.apache.ambari.server.controller.ServiceComponentHostResponse;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
@@ -45,7 +46,8 @@ public final class HDFSServiceCalculatedState extends DefaultServiceCalculatedSt
Cluster cluster = getCluster(clusterName);
if (cluster != null && managementControllerProvider != null) {
AmbariMetaInfo ambariMetaInfo = managementControllerProvider.get().getAmbariMetaInfo();
- StackId stackId = cluster.getDesiredStackVersion();
+ Service service = cluster.getService(serviceName);
+ StackId stackId = service.getDesiredStackId();
ServiceComponentHostRequest request = new ServiceComponentHostRequest(clusterName,
serviceName, null, null, null);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HiveServiceCalculatedState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HiveServiceCalculatedState.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HiveServiceCalculatedState.java
index 0643c94..69ecddd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HiveServiceCalculatedState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HiveServiceCalculatedState.java
@@ -29,6 +29,7 @@ import org.apache.ambari.server.controller.ServiceComponentHostRequest;
import org.apache.ambari.server.controller.ServiceComponentHostResponse;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
@@ -45,7 +46,9 @@ public final class HiveServiceCalculatedState extends DefaultServiceCalculatedSt
Cluster cluster = getCluster(clusterName);
if (cluster != null && managementControllerProvider != null) {
AmbariMetaInfo ambariMetaInfo = managementControllerProvider.get().getAmbariMetaInfo();
- StackId stackId = cluster.getDesiredStackVersion();
+ Service service = cluster.getService(serviceName);
+ StackId stackId = service.getDesiredStackId();
+
ServiceComponentHostRequest request = new ServiceComponentHostRequest(clusterName,
serviceName, null, null, null);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/OozieServiceCalculatedState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/OozieServiceCalculatedState.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/OozieServiceCalculatedState.java
index 4d0cf92..76f047b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/OozieServiceCalculatedState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/OozieServiceCalculatedState.java
@@ -29,6 +29,7 @@ import org.apache.ambari.server.controller.ServiceComponentHostRequest;
import org.apache.ambari.server.controller.ServiceComponentHostResponse;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
@@ -45,7 +46,9 @@ public final class OozieServiceCalculatedState extends DefaultServiceCalculatedS
Cluster cluster = getCluster(clusterName);
if (cluster != null && managementControllerProvider != null) {
AmbariMetaInfo ambariMetaInfo = managementControllerProvider.get().getAmbariMetaInfo();
- StackId stackId = cluster.getDesiredStackVersion();
+ Service service = cluster.getService(serviceName);
+ StackId stackId = service.getDesiredStackId();
+
ServiceComponentHostRequest request = new ServiceComponentHostRequest(clusterName,
serviceName, null, null, null);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/YARNServiceCalculatedState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/YARNServiceCalculatedState.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/YARNServiceCalculatedState.java
index 24c4602..e73f6b4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/YARNServiceCalculatedState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/YARNServiceCalculatedState.java
@@ -29,6 +29,7 @@ import org.apache.ambari.server.controller.ServiceComponentHostRequest;
import org.apache.ambari.server.controller.ServiceComponentHostResponse;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
@@ -45,7 +46,9 @@ public final class YARNServiceCalculatedState extends DefaultServiceCalculatedSt
Cluster cluster = getCluster(clusterName);
if (cluster != null && managementControllerProvider != null) {
AmbariMetaInfo ambariMetaInfo = managementControllerProvider.get().getAmbariMetaInfo();
- StackId stackId = cluster.getDesiredStackVersion();
+ Service service = cluster.getService(serviceName);
+ StackId stackId = service.getDesiredStackId();
+
ServiceComponentHostRequest request = new ServiceComponentHostRequest(clusterName,
serviceName, null, null, null);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java b/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java
index 40ec0a1..b217b45 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java
@@ -133,25 +133,31 @@ public class RoleCommandOrder implements Cloneable {
this.sectionKeys = sectionKeys;
dependencies.clear();
- StackId stackId = cluster.getCurrentStackVersion();
- StackInfo stack = null;
- try {
- stack = ambariMetaInfo.getStack(stackId.getStackName(),
- stackId.getStackVersion());
- } catch (AmbariException ignored) {
- // initialize() will fail with NPE
+ Set<StackId> stackIds = new HashSet<>();
+ for (Service service : cluster.getServices().values()) {
+ stackIds.add(service.getDesiredStackId());
}
- Map<String,Object> userData = stack.getRoleCommandOrder().getContent();
- Map<String,Object> generalSection =
- (Map<String, Object>) userData.get(GENERAL_DEPS_KEY);
+ for (StackId stackId : stackIds) {
+ StackInfo stack = null;
+ try {
+ stack = ambariMetaInfo.getStack(stackId.getStackName(),
+ stackId.getStackVersion());
+ } catch (AmbariException ignored) {
+ // initialize() will fail with NPE
+ }
+
+ Map<String,Object> userData = stack.getRoleCommandOrder().getContent();
+ Map<String,Object> generalSection =
+ (Map<String, Object>) userData.get(GENERAL_DEPS_KEY);
- addDependencies(generalSection);
+ addDependencies(generalSection);
- for (String sectionKey : sectionKeys) {
- Map<String, Object> section = (Map<String, Object>) userData.get(sectionKey);
+ for (String sectionKey : sectionKeys) {
+ Map<String, Object> section = (Map<String, Object>) userData.get(sectionKey);
- addDependencies(section);
+ addDependencies(section);
+ }
}
extendTransitiveDependency();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
index 3817570..f0a99e2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
@@ -348,7 +348,7 @@ public class ClusterDAO {
@Transactional
public void remove(ClusterEntity clusterEntity) {
- entityManagerProvider.get().remove(merge(clusterEntity));
+ entityManagerProvider.get().remove(clusterEntity);
}
@Transactional
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
index a2472b6..f94e45d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAO.java
@@ -211,4 +211,18 @@ public class RepositoryVersionDAO extends CrudDAO<RepositoryVersionEntity, Long>
"repositoryVersionsFromDefinition", RepositoryVersionEntity.class);
return daoUtils.selectList(query);
}
+
+
+ /**
+ * @param repositoryVersion
+ * @return
+ */
+ @RequiresSession
+ public RepositoryVersionEntity findByVersion(String repositoryVersion) {
+ TypedQuery<RepositoryVersionEntity> query = entityManagerProvider.get().createNamedQuery("repositoryVersionByVersion", RepositoryVersionEntity.class);
+
+ query.setParameter("version", repositoryVersion);
+
+ return daoUtils.selectOne(query);
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
index 47abde4..513325f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
@@ -75,8 +75,10 @@ import com.google.inject.Provider;
@NamedQueries({
@NamedQuery(name = "repositoryVersionByDisplayName", query = "SELECT repoversion FROM RepositoryVersionEntity repoversion WHERE repoversion.displayName=:displayname"),
@NamedQuery(name = "repositoryVersionByStack", query = "SELECT repoversion FROM RepositoryVersionEntity repoversion WHERE repoversion.stack.stackName=:stackName AND repoversion.stack.stackVersion=:stackVersion"),
+ @NamedQuery(name = "repositoryVersionByVersion", query = "SELECT repoversion FROM RepositoryVersionEntity repoversion WHERE repoversion.version=:version"),
@NamedQuery(name = "repositoryVersionByStackNameAndVersion", query = "SELECT repoversion FROM RepositoryVersionEntity repoversion WHERE repoversion.stack.stackName=:stackName AND repoversion.version=:version"),
@NamedQuery(name = "repositoryVersionsFromDefinition", query = "SELECT repoversion FROM RepositoryVersionEntity repoversion WHERE repoversion.versionXsd IS NOT NULL")
+
})
@StaticallyInject
public class RepositoryVersionEntity {
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryAction.java
index 7a99f09..743e5c8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryAction.java
@@ -34,7 +34,6 @@ import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.actionmanager.ServiceComponentHostEventWrapper;
import org.apache.ambari.server.agent.CommandReport;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.metadata.ActionMetadata;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
@@ -45,7 +44,6 @@ import org.apache.ambari.server.serveraction.AbstractServerAction;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ServiceComponentHostEvent;
-import org.apache.ambari.server.state.StackId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -102,9 +100,6 @@ public class AutoSkipFailedSummaryAction extends AbstractServerAction {
private ActionMetadata actionMetadata;
@Inject
- private AmbariMetaInfo ambariMetaInfo;
-
- @Inject
private Clusters clusters;
/**
@@ -125,7 +120,6 @@ public class AutoSkipFailedSummaryAction extends AbstractServerAction {
String clusterName = hostRoleCommand.getExecutionCommandWrapper().getExecutionCommand().getClusterName();
Cluster cluster = clusters.getCluster(clusterName);
- StackId stackId = cluster.getDesiredStackVersion();
// use the host role command to get to the parent upgrade group
UpgradeItemEntity upgradeItem = m_upgradeDAO.findUpgradeItemByRequestAndStage(requestId,stageId);
@@ -197,8 +191,8 @@ public class AutoSkipFailedSummaryAction extends AbstractServerAction {
Role role = skippedTask.getRole();
if (! publishedHostComponentsOnHost.contains(role)) {
HashMap<String, String> details = new HashMap<>();
- String service = ambariMetaInfo.getComponentToService(
- stackId.getStackName(), stackId.getStackVersion(), role.toString());
+
+ String service = cluster.getServiceByComponentName(role.toString()).getName();
details.put("service", service);
details.put("component", role.toString());
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/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 cf2844b..4d943f4 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
@@ -74,6 +74,14 @@ public interface Cluster {
Service getService(String serviceName) throws AmbariException;
/**
+ * Gets a service from the given component name.
+ * @param componentName
+ * @return
+ * @throws AmbariException
+ */
+ Service getServiceByComponentName(String componentName) throws AmbariException;
+
+ /**
* Get all services
* @return
*/
@@ -199,34 +207,6 @@ public interface Cluster {
VersionDefinitionXml versionDefinitionXml, boolean forceInstalled) throws AmbariException;
/**
-
- * Update state of a cluster stack version for cluster based on states of host versions and stackids.
- * @param repositoryVersion the repository version entity whose version is a value like 2.2.1.0-100)
- * @throws AmbariException
- */
-// void recalculateClusterVersionState(RepositoryVersionEntity repositoryVersion) throws AmbariException;
-
- /**
- * Update state of all cluster stack versions for cluster based on states of host versions.
- * @throws AmbariException
- */
-// void recalculateAllClusterVersionStates() throws AmbariException;
-
- /**
- * Transition an existing cluster version from one state to another.
- *
- * @param stackId
- * Stack ID
- * @param version
- * Stack version
- * @param state
- * Desired state
- * @throws AmbariException
- */
-// void transitionClusterVersion(StackId stackId, String version,
-// RepositoryVersionState state) throws AmbariException;
-
- /**
* Gets whether the cluster is still initializing or has finished with its
* deployment requests.
*
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/Clusters.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Clusters.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Clusters.java
index aa53564..88e0cb8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/Clusters.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Clusters.java
@@ -209,15 +209,6 @@ public interface Clusters {
throws AmbariException;
/**
- * Sets the current stack version for the cluster
- * @param clusterName The name of the cluster
- * @param stackId The identifier for the stack
- * @throws AmbariException
- */
- void setCurrentStackVersion(String clusterName, StackId stackId)
- throws AmbariException;
-
- /**
* Update the host set for clusters and the host attributes associated with the hosts
* @param hostsClusters
* @param hostAttributes
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java
index d6cd997..78f10cd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigFactory.java
@@ -19,6 +19,8 @@ package org.apache.ambari.server.state;
import java.util.Map;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
import com.google.inject.assistedinject.Assisted;
@@ -38,9 +40,25 @@ public interface ConfigFactory {
* @param mapAttributes
* @return
*/
+ @Experimental(feature = ExperimentalFeature.MULTI_SERVICE,
+ comment = "This constructor is only used for test compatibility and should be removed")
Config createNew(Cluster cluster, @Assisted("type") String type, @Assisted("tag") String tag,
Map<String, String> map, Map<String, Map<String, String>> mapAttributes);
+
+ /**
+ * Creates a new {@link Config} object using provided values.
+ *
+ * @param cluster
+ * @param type
+ * @param tag
+ * @param map
+ * @param mapAttributes
+ * @return
+ */
+ Config createNew(StackId stackId, Cluster cluster, @Assisted("type") String type, @Assisted("tag") String tag,
+ Map<String, String> map, Map<String, Map<String, String>> mapAttributes);
+
/**
* Creates a new {@link Config} object using provided entity
*
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
index 05b50ab..96c2dd0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
@@ -17,14 +17,12 @@
*/
package org.apache.ambari.server.state;
-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.LinkedHashMap;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -775,23 +773,31 @@ public class ConfigHelper {
* @throws AmbariException
*/
public String getPropertyValueFromStackDefinitions(Cluster cluster, String configType, String propertyName) throws AmbariException {
- StackId stackId = cluster.getCurrentStackVersion();
- StackInfo stack = ambariMetaInfo.getStack(stackId.getStackName(),
- stackId.getStackVersion());
- for (ServiceInfo serviceInfo : stack.getServices()) {
- Set<PropertyInfo> serviceProperties = ambariMetaInfo.getServiceProperties(stack.getName(), stack.getVersion(), serviceInfo.getName());
- Set<PropertyInfo> stackProperties = ambariMetaInfo.getStackProperties(stack.getName(), stack.getVersion());
- serviceProperties.addAll(stackProperties);
+ Set<StackId> stackIds = new HashSet<>();
- for (PropertyInfo stackProperty : serviceProperties) {
- String stackPropertyConfigType = fileNameToConfigType(stackProperty.getFilename());
+ for (Service service : cluster.getServices().values()) {
+ stackIds.add(service.getDesiredStackId());
+ }
+
+ for (StackId stackId : stackIds) {
- if (stackProperty.getName().equals(propertyName) && stackPropertyConfigType.equals(configType)) {
- return stackProperty.getValue();
+ StackInfo stack = ambariMetaInfo.getStack(stackId.getStackName(),
+ stackId.getStackVersion());
+
+ for (ServiceInfo serviceInfo : stack.getServices()) {
+ Set<PropertyInfo> serviceProperties = ambariMetaInfo.getServiceProperties(stack.getName(), stack.getVersion(), serviceInfo.getName());
+ Set<PropertyInfo> stackProperties = ambariMetaInfo.getStackProperties(stack.getName(), stack.getVersion());
+ serviceProperties.addAll(stackProperties);
+
+ for (PropertyInfo stackProperty : serviceProperties) {
+ String stackPropertyConfigType = fileNameToConfigType(stackProperty.getFilename());
+
+ if (stackProperty.getName().equals(propertyName) && stackPropertyConfigType.equals(configType)) {
+ return stackProperty.getValue();
+ }
}
}
-
}
return null;
@@ -850,20 +856,22 @@ public class ConfigHelper {
}
public ServiceInfo getPropertyOwnerService(Cluster cluster, String configType, String propertyName) throws AmbariException {
- StackId stackId = cluster.getCurrentStackVersion();
- StackInfo stack = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
- for (ServiceInfo serviceInfo : stack.getServices()) {
- Set<PropertyInfo> serviceProperties = ambariMetaInfo.getServiceProperties(stack.getName(), stack.getVersion(), serviceInfo.getName());
+ for (Service service : cluster.getServices().values()) {
+ StackId stackId = service.getDesiredStackId();
+ StackInfo stack = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
- for (PropertyInfo stackProperty : serviceProperties) {
- String stackPropertyConfigType = fileNameToConfigType(stackProperty.getFilename());
+ for (ServiceInfo serviceInfo : stack.getServices()) {
+ Set<PropertyInfo> serviceProperties = ambariMetaInfo.getServiceProperties(stack.getName(), stack.getVersion(), serviceInfo.getName());
- if (stackProperty.getName().equals(propertyName) && stackPropertyConfigType.equals(configType)) {
- return serviceInfo;
+ for (PropertyInfo stackProperty : serviceProperties) {
+ String stackPropertyConfigType = fileNameToConfigType(stackProperty.getFilename());
+
+ if (stackProperty.getName().equals(propertyName) && stackPropertyConfigType.equals(configType)) {
+ return serviceInfo;
+ }
}
}
-
}
return null;
@@ -873,7 +881,9 @@ public class ConfigHelper {
// The original implementation of this method is to return all properties regardless of whether
// they should be excluded or not. By setting removeExcluded to false in the method invocation
// below, no attempt will be made to remove properties that exist in excluded types.
- return getServiceProperties(cluster.getCurrentStackVersion(), serviceName, false);
+ Service service = cluster.getService(serviceName);
+
+ return getServiceProperties(service.getDesiredStackId(), serviceName, false);
}
/**
@@ -922,10 +932,20 @@ public class ConfigHelper {
}
public Set<PropertyInfo> getStackProperties(Cluster cluster) throws AmbariException {
- StackId stackId = cluster.getCurrentStackVersion();
- StackInfo stack = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
- return ambariMetaInfo.getStackProperties(stack.getName(), stack.getVersion());
+ Set<StackId> stackIds = new HashSet<>();
+ for (Service service : cluster.getServices().values()) {
+ stackIds.add(service.getDesiredStackId());
+ }
+
+ Set<PropertyInfo> propertySets = new HashSet<>();
+
+ for (StackId stackId : stackIds) {
+ StackInfo stack = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
+ propertySets.addAll(ambariMetaInfo.getStackProperties(stack.getName(), stack.getVersion()));
+ }
+
+ return propertySets;
}
/**
@@ -1138,7 +1158,7 @@ public class ConfigHelper {
}
}
- return controller.createConfig(cluster, type, properties, tag, propertyAttributes);
+ return controller.createConfig(cluster.getDesiredStackVersion(), cluster, type, properties, tag, propertyAttributes);
}
/**
@@ -1197,28 +1217,6 @@ public class ConfigHelper {
return defaultPropertiesByType;
}
- /**
- * Gets whether configurations are stale for a given service host component.
- *
- * @param sch
- * the SCH to calcualte config staleness for (not {@code null}).
- * @param desiredConfigs
- * the desired configurations for the cluster. Obtaining these can be
- * expensive and since this method operates on SCH's, it could be
- * called 10,000's of times when generating cluster/host responses.
- * Therefore, the caller should build these once and pass them in. If
- * {@code null}, then this method will retrieve them at runtime,
- * incurring a performance penality.
- * @return
- * @throws AmbariException
- */
- private boolean calculateIsStaleConfigs(ServiceComponentHost sch,
- Map<String, DesiredConfig> desiredConfigs) throws AmbariException {
-
- HostComponentDesiredStateEntity hostComponentDesiredStateEntity = sch.getDesiredStateEntity();
- return calculateIsStaleConfigs(sch, desiredConfigs, hostComponentDesiredStateEntity);
- }
-
private boolean calculateIsStaleConfigs(ServiceComponentHost sch, Map<String, DesiredConfig> desiredConfigs,
HostComponentDesiredStateEntity hostComponentDesiredStateEntity) throws AmbariException {
@@ -1252,7 +1250,7 @@ public class ConfigHelper {
stale = false;
- StackId stackId = cluster.getDesiredStackVersion();
+ StackId stackId = sch.getServiceComponent().getDesiredStackId();
ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(),
stackId.getStackVersion(), sch.getServiceName());
@@ -1326,64 +1324,6 @@ public class ConfigHelper {
}
/**
- * @return <code>true</code> if any service on the stack defines a property
- * for the type.
- */
- private boolean hasPropertyFor(StackId stack, String type,
- Collection<String> keys) throws AmbariException {
-
- for (ServiceInfo svc : ambariMetaInfo.getServices(stack.getStackName(),
- stack.getStackVersion()).values()) {
-
- if (svc.hasDependencyAndPropertyFor(type, keys)) {
- return true;
- }
-
- }
-
- return false;
- }
-
- /**
- * @return the keys that have changed values
- */
- private Collection<String> findChangedKeys(Cluster cluster, String type,
- Collection<String> desiredTags, Collection<String> actualTags) {
-
- Map<String, String> desiredValues = new HashMap<>();
- Map<String, String> actualValues = new HashMap<>();
-
- for (String tag : desiredTags) {
- Config config = cluster.getConfig(type, tag);
- if (null != config) {
- desiredValues.putAll(config.getProperties());
- }
- }
-
- for (String tag : actualTags) {
- Config config = cluster.getConfig(type, tag);
- if (null != config) {
- actualValues.putAll(config.getProperties());
- }
- }
-
- List<String> keys = new ArrayList<>();
-
- for (Entry<String, String> entry : desiredValues.entrySet()) {
- String key = entry.getKey();
- String value = entry.getValue();
-
- if (!actualValues.containsKey(key)) {
- keys.add(key);
- } else if (!actualValues.get(key).equals(value)) {
- keys.add(key);
- }
- }
-
- return keys;
- }
-
- /**
* @return the map of tags for a desired config
*/
private Map<String, String> buildTags(HostConfig hc) {
@@ -1419,23 +1359,6 @@ public class ConfigHelper {
return !desiredSet.equals(actualSet);
}
- /**
- * @return the list of combined config property names
- */
- private Collection<String> mergeKeyNames(Cluster cluster, String type, Collection<String> tags) {
- Set<String> names = new HashSet<>();
-
- for (String tag : tags) {
- Config config = cluster.getConfig(type, tag);
- if (null != config) {
- names.addAll(config.getProperties().keySet());
- }
- }
-
- return names;
- }
-
-
public static String fileNameToConfigType(String filename) {
int extIndex = filename.indexOf(AmbariMetaInfo.SERVICE_CONFIG_FILE_NAME_POSTFIX);
return filename.substring(0, extIndex);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
index 0e40254..0adf1bd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
@@ -101,6 +101,17 @@ public class ConfigImpl implements Config {
@Assisted Map<String, String> properties,
@Assisted @Nullable Map<String, Map<String, String>> propertiesAttributes, ClusterDAO clusterDAO,
Gson gson, AmbariEventPublisher eventPublisher, LockFactory lockFactory) {
+ this(cluster.getDesiredStackVersion(), cluster, type, tag, properties, propertiesAttributes,
+ clusterDAO, gson, eventPublisher, lockFactory);
+ }
+
+
+ @AssistedInject
+ ConfigImpl(@Assisted @Nullable StackId stackId, @Assisted Cluster cluster, @Assisted("type") String type,
+ @Assisted("tag") @Nullable String tag,
+ @Assisted Map<String, String> properties,
+ @Assisted @Nullable Map<String, Map<String, String>> propertiesAttributes, ClusterDAO clusterDAO,
+ Gson gson, AmbariEventPublisher eventPublisher, LockFactory lockFactory) {
propertyLock = lockFactory.newReadWriteLock(PROPERTY_LOCK_LABEL);
@@ -139,7 +150,7 @@ public class ConfigImpl implements Config {
// when creating a brand new config without a backing entity, use the
// cluster's desired stack as the config's stack
- stackId = cluster.getDesiredStackVersion();
+ this.stackId = stackId;
propertiesTypes = cluster.getConfigPropertiesTypes(type);
persist(entity);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
index 9a35bcc..632298d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
@@ -254,4 +254,11 @@ public interface ServiceComponentHost {
*/
HostVersionEntity recalculateHostVersionState() throws AmbariException;
+ /**
+ * Convenience method to get the desired stack id from the service component
+ *
+ * @return the desired stack id
+ */
+ StackId getDesiredStackId();
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
index 3c8ef35..ca73f17 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
@@ -40,7 +40,6 @@ import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
import org.apache.ambari.server.orm.entities.ClusterServiceEntityPK;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
@@ -92,11 +91,6 @@ public class ServiceComponentImpl implements ServiceComponent {
*/
private final long desiredStateEntityId;
- /**
- * Data access object used for lookup up stacks.
- */
- private final StackDAO stackDAO;
-
@Inject
private RepositoryVersionDAO repoVersionDAO;
@@ -108,7 +102,7 @@ public class ServiceComponentImpl implements ServiceComponent {
AmbariMetaInfo ambariMetaInfo,
ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO,
ClusterServiceDAO clusterServiceDAO, ServiceComponentHostFactory serviceComponentHostFactory,
- StackDAO stackDAO, AmbariEventPublisher eventPublisher)
+ AmbariEventPublisher eventPublisher)
throws AmbariException {
this.ambariMetaInfo = ambariMetaInfo;
@@ -117,7 +111,6 @@ public class ServiceComponentImpl implements ServiceComponent {
this.serviceComponentDesiredStateDAO = serviceComponentDesiredStateDAO;
this.clusterServiceDAO = clusterServiceDAO;
this.serviceComponentHostFactory = serviceComponentHostFactory;
- this.stackDAO = stackDAO;
this.eventPublisher = eventPublisher;
ServiceComponentDesiredStateEntity desiredStateEntity = new ServiceComponentDesiredStateEntity();
@@ -161,14 +154,13 @@ public class ServiceComponentImpl implements ServiceComponent {
ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO,
ClusterServiceDAO clusterServiceDAO,
HostComponentDesiredStateDAO hostComponentDesiredStateDAO,
- ServiceComponentHostFactory serviceComponentHostFactory, StackDAO stackDAO,
+ ServiceComponentHostFactory serviceComponentHostFactory,
AmbariEventPublisher eventPublisher)
throws AmbariException {
this.service = service;
this.serviceComponentDesiredStateDAO = serviceComponentDesiredStateDAO;
this.clusterServiceDAO = clusterServiceDAO;
this.serviceComponentHostFactory = serviceComponentHostFactory;
- this.stackDAO = stackDAO;
this.eventPublisher = eventPublisher;
this.ambariMetaInfo = ambariMetaInfo;
@@ -191,7 +183,7 @@ public class ServiceComponentImpl implements ServiceComponent {
serviceComponentHostFactory.createExisting(this,
hostComponentStateEntity, hostComponentDesiredStateEntity));
} catch(ProvisionException ex) {
- StackId currentStackId = service.getCluster().getCurrentStackVersion();
+ StackId currentStackId = getDesiredStackId();
LOG.error(String.format("Can not get host component info: stackName=%s, stackVersion=%s, serviceName=%s, componentName=%s, hostname=%s",
currentStackId.getStackName(), currentStackId.getStackVersion(),
service.getName(),serviceComponentDesiredStateEntity.getComponentName(), hostComponentStateEntity.getHostName()));
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
index 6bb0ffb..6c7c238 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
@@ -161,7 +161,7 @@ public class ServiceImpl implements Service {
serviceComponentFactory.createExisting(this,
serviceComponentDesiredStateEntity));
} catch(ProvisionException ex) {
- StackId stackId = cluster.getCurrentStackVersion();
+ StackId stackId = new StackId(serviceComponentDesiredStateEntity.getDesiredStack());
LOG.error(String.format("Can not get component info: stackName=%s, stackVersion=%s, serviceName=%s, componentName=%s",
stackId.getStackName(), stackId.getStackVersion(),
serviceEntity.getServiceName(),serviceComponentDesiredStateEntity.getComponentName()));
@@ -186,8 +186,8 @@ public class ServiceImpl implements Service {
@Override
public void updateServiceInfo() throws AmbariException {
try {
- ServiceInfo serviceInfo = ambariMetaInfo.getService(cluster.getDesiredStackVersion().getStackName(),
- cluster.getDesiredStackVersion().getStackVersion(), getName());
+ ServiceInfo serviceInfo = ambariMetaInfo.getService(this);
+
isClientOnlyService = serviceInfo.isClientOnlyService();
isCredentialStoreSupported = serviceInfo.isCredentialStoreSupported();
isCredentialStoreRequired = serviceInfo.isCredentialStoreRequired();
@@ -197,7 +197,7 @@ public class ServiceImpl implements Service {
+ " not recognized in stack info"
+ ", clusterName=" + cluster.getClusterName()
+ ", serviceName=" + getName()
- + ", stackInfo=" + cluster.getDesiredStackVersion().getStackName());
+ + ", stackInfo=" + getDesiredStackId().getStackName());
}
}
@@ -308,8 +308,13 @@ public class ServiceImpl implements Service {
@Override
public StackId getDesiredStackId() {
ServiceDesiredStateEntity serviceDesiredStateEntity = getServiceDesiredStateEntity();
- StackEntity desiredStackEntity = serviceDesiredStateEntity.getDesiredStack();
- return new StackId(desiredStackEntity);
+
+ if (null == serviceDesiredStateEntity) {
+ return null;
+ } else {
+ StackEntity desiredStackEntity = serviceDesiredStateEntity.getDesiredStack();
+ return new StackId(desiredStackEntity);
+ }
}
/**
@@ -470,7 +475,7 @@ public class ServiceImpl implements Service {
persistEntities(serviceEntity);
// publish the service installed event
- StackId stackId = cluster.getDesiredStackVersion();
+ StackId stackId = getDesiredStackId();
cluster.addService(this);
ServiceInstalledEvent event = new ServiceInstalledEvent(getClusterId(), stackId.getStackName(),
@@ -595,10 +600,14 @@ public class ServiceImpl implements Service {
deleteAllComponents();
deleteAllServiceConfigs();
+ StackId stackId = getDesiredStackId();
+
removeEntities();
// publish the service removed event
- StackId stackId = cluster.getDesiredStackVersion();
+ if (null == stackId) {
+ return;
+ }
ServiceRemovedEvent event = new ServiceRemovedEvent(getClusterId(), stackId.getStackName(),
stackId.getStackVersion(), getName());
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/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 e4ac23e..23b6db1 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
@@ -34,7 +34,6 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import javax.annotation.Nullable;
@@ -195,9 +194,6 @@ public class ClusterImpl implements Cluster {
private final ReadWriteLock clusterGlobalLock;
- // This is a lock for operations that do not need to be cluster global
- private final Lock hostTransitionStateWriteLock;
-
/**
* The unique ID of the {@link @ClusterEntity}.
*/
@@ -315,7 +311,6 @@ public class ClusterImpl implements Cluster {
injector.injectMembers(this);
clusterGlobalLock = lockFactory.newReadWriteLock("clusterGlobalLock");
- hostTransitionStateWriteLock = lockFactory.newLock("hostTransitionStateLock");
loadStackVersion();
loadServices();
@@ -876,6 +871,20 @@ public class ClusterImpl implements Cluster {
}
@Override
+ public Service getServiceByComponentName(String componentName) throws AmbariException {
+ for (Service service : services.values()) {
+ for (ServiceComponent component : service.getServiceComponents().values()) {
+ if (component.getName().equals(componentName)) {
+ return service;
+ }
+ }
+ }
+
+ throw new ServiceNotFoundException(getClusterName(), "component: " + componentName);
+ }
+
+
+ @Override
public StackId getDesiredStackVersion() {
return desiredStackVersion;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
index bdc4f90..3700c9f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
@@ -37,7 +37,6 @@ import org.apache.ambari.server.ClusterNotFoundException;
import org.apache.ambari.server.DuplicateResourceException;
import org.apache.ambari.server.HostNotFoundException;
import org.apache.ambari.server.agent.DiskInfo;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.events.HostRegisteredEvent;
import org.apache.ambari.server.events.HostsAddedEvent;
import org.apache.ambari.server.events.HostsRemovedEvent;
@@ -78,7 +77,6 @@ import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostHealthStatus;
import org.apache.ambari.server.state.HostHealthStatus.HealthStatus;
import org.apache.ambari.server.state.HostState;
-import org.apache.ambari.server.state.RepositoryInfo;
import org.apache.ambari.server.state.SecurityType;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.configgroup.ConfigGroup;
@@ -128,8 +126,6 @@ public class ClustersImpl implements Clusters {
@Inject
private HostFactory hostFactory;
@Inject
- private AmbariMetaInfo ambariMetaInfo;
- @Inject
private SecurityHelper securityHelper;
@Inject
private TopologyLogicalTaskDAO topologyLogicalTaskDAO;
@@ -297,25 +293,6 @@ public class ClustersImpl implements Clusters {
}
@Override
- public void setCurrentStackVersion(String clusterName, StackId stackId)
- throws AmbariException{
-
- if(stackId == null || clusterName == null || clusterName.isEmpty()){
- LOG.warn("Unable to set version for cluster " + clusterName);
- throw new AmbariException("Unable to set"
- + " version=" + stackId
- + " for cluster " + clusterName);
- }
-
- Cluster cluster = clusters.get(clusterName);
- if (null == cluster) {
- throw new ClusterNotFoundException(clusterName);
- }
-
- cluster.setCurrentStackVersion(stackId);
- }
-
- @Override
public List<Host> getHosts() {
return new ArrayList<>(hosts.values());
}
@@ -428,13 +405,6 @@ public class ClustersImpl implements Clusters {
eventPublisher.publish(event);
}
- private boolean isOsSupportedByClusterStack(Cluster c, Host h) throws AmbariException {
- Map<String, List<RepositoryInfo>> repos =
- ambariMetaInfo.getRepository(c.getDesiredStackVersion().getStackName(),
- c.getDesiredStackVersion().getStackVersion());
- return !(repos == null || repos.isEmpty()) && repos.containsKey(h.getOsFamily());
- }
-
@Override
public void updateHostWithClusterAndAttributes(
Map<String, Set<String>> hostClusters,
@@ -527,11 +497,9 @@ public class ClustersImpl implements Clusters {
@Override
public void mapHostToCluster(String hostname, String clusterName)
throws AmbariException {
- Host host = null;
- Cluster cluster = null;
- host = getHost(hostname);
- cluster = getCluster(clusterName);
+ Host host = getHost(hostname);
+ Cluster cluster = getCluster(clusterName);
// check to ensure there are no duplicates
for (Cluster c : hostClusterMap.get(hostname)) {
@@ -541,15 +509,6 @@ public class ClustersImpl implements Clusters {
}
}
- if (!isOsSupportedByClusterStack(cluster, host)) {
- String message = "Trying to map host to cluster where stack does not"
- + " support host's os type" + ", clusterName=" + clusterName
- + ", clusterStackId=" + cluster.getDesiredStackVersion().getStackId()
- + ", hostname=" + hostname + ", hostOsFamily=" + host.getOsFamily();
- LOG.error(message);
- throw new AmbariException(message);
- }
-
long clusterId = cluster.getClusterId();
if (LOG.isDebugEnabled()) {
LOG.debug("Mapping host {} to cluster {} (id={})", hostname, clusterName,
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
index a74e2a2..a04df3c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
@@ -409,7 +409,7 @@ public class ConfigGroupImpl implements ConfigGroup {
(cluster.getClusterId(), config.getType(), config.getTag());
if (clusterConfigEntity == null) {
- config = configFactory.createNew(cluster, config.getType(), config.getTag(),
+ config = configFactory.createNew(null, cluster, config.getType(), config.getTag(),
config.getProperties(), config.getPropertiesAttributes());
entry.setValue(config);
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java
index dbfce48..e07b822 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java
@@ -180,7 +180,7 @@ public class ServiceCheckGrouping extends Grouping {
Service svc = clusterServices.get(service);
if (null != svc) {
// Services that only have clients such as Pig can still have service check scripts.
- StackId stackId = m_cluster.getDesiredStackVersion();
+ StackId stackId = svc.getDesiredStackId();
try {
ServiceInfo si = m_metaInfo.getService(stackId.getStackName(), stackId.getStackVersion(), service);
CommandScriptDefinition script = si.getCommandScript();
@@ -201,6 +201,7 @@ public class ServiceCheckGrouping extends Grouping {
* Attempts to merge all the service check groupings. This merges the excluded list and
* the priorities. The priorities are merged in an order specific manner.
*/
+ @Override
public void merge(Iterator<Grouping> iterator) throws AmbariException {
List<String> priorities = new ArrayList<>();
priorities.addAll(getPriorities());
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
index e08b1f9..1b84f46 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
@@ -1567,4 +1567,13 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
public ServiceComponent getServiceComponent() {
return serviceComponent;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public StackId getDesiredStackId() {
+ return serviceComponent.getDesiredStackId();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
index cb12959..5939fca 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
@@ -42,6 +42,8 @@ import javax.persistence.EntityManager;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
@@ -67,6 +69,7 @@ import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.PropertyInfo;
import org.apache.ambari.server.state.PropertyUpgradeBehavior;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
@@ -584,7 +587,7 @@ public abstract class AbstractUpgradeCatalog implements UpgradeCatalog {
propertiesAttributes = Collections.emptyMap();
}
- controller.createConfig(cluster, configType, mergedProperties, newTag, propertiesAttributes);
+ controller.createConfig(cluster.getDesiredStackVersion(), cluster, configType, mergedProperties, newTag, propertiesAttributes);
Config baseConfig = cluster.getConfig(configType, newTag);
if (baseConfig != null) {
@@ -772,7 +775,13 @@ public abstract class AbstractUpgradeCatalog implements UpgradeCatalog {
protected KerberosDescriptor getKerberosDescriptor(Cluster cluster) throws AmbariException {
// Get the Stack-defined Kerberos Descriptor (aka default Kerberos Descriptor)
AmbariMetaInfo ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
- StackId stackId = cluster.getCurrentStackVersion();
+
+
+ // !!! FIXME
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES,
+ comment = "can only take the first stack we find until we can support multiple with Kerberos")
+ StackId stackId = getStackId(cluster);
+
KerberosDescriptor defaultDescriptor = ambariMetaInfo.getKerberosDescriptor(stackId.getStackName(), stackId.getStackVersion());
// Get the User-set Kerberos Descriptor
@@ -1065,7 +1074,13 @@ public abstract class AbstractUpgradeCatalog implements UpgradeCatalog {
for (final Cluster cluster : clusterMap.values()) {
long clusterID = cluster.getClusterId();
- StackId stackId = cluster.getDesiredStackVersion();
+ Service service = cluster.getServices().get(serviceName);
+ if (null == service) {
+ continue;
+ }
+
+ StackId stackId = service.getDesiredStackId();
+
Map<String, Object> widgetDescriptor = null;
StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
ServiceInfo serviceInfo = stackInfo.getService(serviceName);
@@ -1133,4 +1148,10 @@ public abstract class AbstractUpgradeCatalog implements UpgradeCatalog {
}
}
}
+
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES,
+ comment = "can only take the first stack we find until we can support multiple with Kerberos")
+ private StackId getStackId(Cluster cluster) throws AmbariException {
+ return cluster.getServices().values().iterator().next().getDesiredStackId();
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java
index 38ad5ba..9418489 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java
@@ -20,8 +20,10 @@ package org.apache.ambari.server.upgrade;
import java.sql.SQLException;
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.api.services.AmbariMetaInfo;
@@ -30,6 +32,7 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.PropertyInfo;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.utils.VersionUtils;
@@ -91,17 +94,24 @@ public class FinalUpgradeCatalog extends AbstractUpgradeCatalog {
Clusters clusters = ambariManagementController.getClusters();
Map<String, Cluster> clusterMap = getCheckedClusterMap(clusters);
for (final Cluster cluster : clusterMap.values()) {
- Map<String, String> propertyMap = new HashMap<>();
- StackId stackId = cluster.getCurrentStackVersion();
- StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
- List<PropertyInfo> properties = stackInfo.getProperties();
- for(PropertyInfo property : properties) {
- if(property.getName().equals(ConfigHelper.CLUSTER_ENV_STACK_FEATURES_PROPERTY) ||
- property.getName().equals(ConfigHelper.CLUSTER_ENV_STACK_TOOLS_PROPERTY)) {
- propertyMap.put(property.getName(), property.getValue());
+
+ Set<StackId> stackIds = new HashSet<>();
+ for (Service service : cluster.getServices().values()) {
+ stackIds.add(service.getDesiredStackId());
+ }
+
+ for (StackId stackId : stackIds) {
+ Map<String, String> propertyMap = new HashMap<>();
+ StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion());
+ List<PropertyInfo> properties = stackInfo.getProperties();
+ for(PropertyInfo property : properties) {
+ if(property.getName().equals(ConfigHelper.CLUSTER_ENV_STACK_FEATURES_PROPERTY) ||
+ property.getName().equals(ConfigHelper.CLUSTER_ENV_STACK_TOOLS_PROPERTY)) {
+ propertyMap.put(property.getName(), property.getValue());
+ }
}
+ updateConfigurationPropertiesForCluster(cluster, ConfigHelper.CLUSTER_ENV, propertyMap, true, true);
}
- updateConfigurationPropertiesForCluster(cluster, ConfigHelper.CLUSTER_ENV, propertyMap, true, true);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
index edf107a..b7a2e78 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
@@ -27,8 +27,9 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.orm.DBAccessor;
import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
@@ -36,7 +37,6 @@ import org.apache.ambari.server.orm.dao.ClusterDAO;
import org.apache.ambari.server.orm.dao.ClusterServiceDAO;
import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
-import org.apache.ambari.server.orm.dao.MetainfoDAO;
import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.ServiceDesiredStateDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
@@ -50,12 +50,10 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
-import org.apache.ambari.server.state.OperatingSystemInfo;
import org.apache.ambari.server.state.PropertyInfo;
import org.apache.ambari.server.state.RepositoryInfo;
import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.SecurityType;
-import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -331,7 +329,10 @@ public class UpgradeCatalog200 extends AbstractUpgradeCatalog {
updateClusterEnvConfiguration();
}
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES,
+ comment = "the metainfo table of storing the latest repo will be removed")
protected void persistHDPRepo() throws AmbariException{
+ /*
AmbariManagementController amc = injector.getInstance(
AmbariManagementController.class);
AmbariMetaInfo ambariMetaInfo = amc.getAmbariMetaInfo();
@@ -369,7 +370,7 @@ public class UpgradeCatalog200 extends AbstractUpgradeCatalog {
cluster.getClusterName());
System.out.println(repositoryTable(ambariMetaInfo.getStack(stackName, stackVersion).getRepositories()));
}
-
+ */
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
index 7b7681c..5c04b79 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
@@ -1072,18 +1072,23 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
if (clusters != null) {
Map<String, Cluster> clusterMap = clusters.getClusters();
for (final Cluster cluster : clusterMap.values()) {
- StackId stackId = cluster.getCurrentStackVersion();
- if (stackId != null && stackId.getStackName().equals("HDP") &&
+
+ ServiceComponentDesiredStateDAO dao = injector.getInstance(ServiceComponentDesiredStateDAO.class);
+ ServiceComponentDesiredStateEntity entity = dao.findByName(cluster.getClusterId(),
+ "STORM", "STORM_REST_API");
+
+ if (null == entity) {
+ continue;
+ }
+
+ StackId stackId = new StackId(entity.getDesiredStack());
+
+ if (stackId.getStackName().equals("HDP") &&
VersionUtils.compareVersions(stackId.getStackVersion(), "2.2") >= 0) {
executeInTransaction(new Runnable() {
@Override
public void run() {
- ServiceComponentDesiredStateDAO dao = injector.getInstance(ServiceComponentDesiredStateDAO.class);
- ServiceComponentDesiredStateEntity entity = dao.findByName(cluster.getClusterId(),
- "STORM", "STORM_REST_API");
-
- if (entity != null) {
EntityManager em = getEntityManagerProvider().get();
CriteriaBuilder cb = em.getCriteriaBuilder();
@@ -1114,7 +1119,6 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
"delete from servicecomponentdesiredstate where component_name='STORM_REST_API';\n", e);
}
}
- }
});
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a45f5427/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java
index 90854dd..8eb2654 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java
@@ -35,6 +35,7 @@ import org.apache.ambari.server.orm.dao.DaoUtils;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.utils.VersionUtils;
import org.slf4j.Logger;
@@ -305,9 +306,16 @@ public class UpgradeCatalog212 extends AbstractUpgradeCatalog {
if (clusterMap != null && !clusterMap.isEmpty()) {
for (final Cluster cluster : clusterMap.values()) {
+ Service service = cluster.getServices().get("HIVE");
+
+ if (null == service) {
+ continue;
+ }
+
+ StackId stackId = service.getDesiredStackId();
+
String content = null;
Boolean isHiveSitePresent = cluster.getDesiredConfigByType(HIVE_SITE) != null;
- StackId stackId = cluster.getCurrentStackVersion();
Boolean isStackNotLess22 = (stackId != null && stackId.getStackName().equals("HDP") &&
VersionUtils.compareVersions(stackId.getStackVersion(), "2.2") >= 0);
[41/50] [abbrv] ambari git commit: AMBARI-21114 - Fix Unit Test
Failures From Prior Patch/Service Upgrade Commits (jonathanhurley)
Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/770c519a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index b228988..cfb7726 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -182,7 +182,7 @@ public class UpgradeHelper {
* {@link StageWrapperBuilder} has finished building out all of the stages.
*/
@Inject
- private Provider<ConfigHelper> m_configHelperProvider;
+ Provider<ConfigHelper> m_configHelperProvider;
@Inject
private Provider<AmbariMetaInfo> m_ambariMetaInfoProvider;
@@ -203,7 +203,7 @@ public class UpgradeHelper {
* Used to get configurations by service name.
*/
@Inject
- private ServiceConfigDAO m_serviceConfigDAO;
+ ServiceConfigDAO m_serviceConfigDAO;
/**
* Get right Upgrade Pack, depends on stack, direction and upgrade type
http://git-wip-us.apache.org/repos/asf/ambari/blob/770c519a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
index f79b1c2..a631448 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
@@ -17,8 +17,13 @@
*/
package org.apache.ambari.server.controller.internal;
-import java.util.ArrayList;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.junit.Assert.assertEquals;
+
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
@@ -28,7 +33,6 @@ import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
import org.apache.ambari.server.actionmanager.HostRoleCommandFactoryImpl;
import org.apache.ambari.server.actionmanager.RequestFactory;
import org.apache.ambari.server.actionmanager.StageFactory;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.controller.AbstractRootServiceResponseFactory;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.KerberosHelper;
@@ -38,8 +42,10 @@ import org.apache.ambari.server.hooks.HookService;
import org.apache.ambari.server.orm.DBAccessor;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
+import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
import org.apache.ambari.server.scheduler.ExecutionScheduler;
import org.apache.ambari.server.security.authorization.Users;
import org.apache.ambari.server.stack.StackManagerFactory;
@@ -50,10 +56,12 @@ import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.RepositoryType;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentFactory;
import org.apache.ambari.server.state.ServiceComponentHostFactory;
import org.apache.ambari.server.state.ServiceFactory;
-import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.UpgradeContextFactory;
@@ -63,7 +71,7 @@ import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
import org.apache.ambari.server.state.stack.OsFamily;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.state.stack.upgrade.Grouping;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.easymock.EasyMockSupport;
@@ -73,14 +81,14 @@ import org.junit.Before;
import org.junit.Test;
import org.springframework.security.crypto.password.PasswordEncoder;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.assistedinject.FactoryModuleBuilder;
-import junit.framework.Assert;
-
/**
* Tests that
* {@link UpgradeResourceProvider#applyStackAndProcessConfigurations(String, Cluster, String, Direction, UpgradePack, String)}
@@ -88,19 +96,13 @@ import junit.framework.Assert;
*/
public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
- private static final StackId s_currentStackId = new StackId("HDP-2.4");
- private static final StackId s_targetStackId = new StackId("HDP-2.5");
-
private Injector m_injector;
- private AmbariMetaInfo m_ambariMetaInfoMock;
/**
* @throws Exception
*/
@Before
public void before() throws Exception {
- m_ambariMetaInfoMock = createNiceMock(AmbariMetaInfo.class);
-
MockModule mockModule = new MockModule();
// create an injector which will inject the mocks
@@ -120,14 +122,14 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
* accidentally.
* <p/>
*
- * HDP 2.4 defaults
+ * HDP 2.1 defaults
* <ul>
* <li>foo-site/foo-property-1</li>
* <li>foo-site/foo-property-2</li>
* <li>bar-site/bar-property-1</li>
* </ul>
*
- * HDP 2.5 defaults
+ * HDP 2.2 defaults
* <ul>
* <li>foo-site/foo-property-1</li>
* <li>foo-site/foo-property-2</li>
@@ -135,7 +137,7 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
* <li>bar-site/bar-property-2</li>
* </ul>
*
- * CURRENT 2.4 configs
+ * CURRENT 2.1 configs
* <ul>
* <li>foo-site/foo-property-1</li>
* <li>foo-site/foo-property-99</li>
@@ -146,132 +148,144 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
*
* The final merged configurations should detect that {{foo-property-2}}
* exists in both stacks but is not in the current configs and was therefore
- * purposefully removed. It shoudl also detect that {{bar-property-20}} was
+ * purposefully removed. It shoudl also detect that {{bar-property-2}} was
* added in the new stack and should be added in.
*
* @throws Exception
*/
@Test
public void testMergedConfigurationsDoNotAddExplicitelyRemovedProperties() throws Exception {
- Cluster cluster = createNiceMock(Cluster.class);
- RepositoryVersionEntity repositoryVersionEntity = createNiceMock(RepositoryVersionEntity.class);
- UpgradePack upgradePack = createNiceMock(UpgradePack.class);
- StackEntity targetStack = createNiceMock(StackEntity.class);
- StackId targetStackId = createNiceMock(StackId.class);
+ RepositoryVersionEntity repoVersion211 = createNiceMock(RepositoryVersionEntity.class);
+ RepositoryVersionEntity repoVersion220 = createNiceMock(RepositoryVersionEntity.class);
+
+ StackId stack211 = new StackId("HDP-2.1.1");
+ StackId stack220 = new StackId("HDP-2.2.0");
+
+ String version211 = "2.1.1.0-1234";
+ String version220 = "2.2.0.0-1234";
+
+ expect(repoVersion211.getStackId()).andReturn(stack211).atLeastOnce();
+ expect(repoVersion211.getVersion()).andReturn(version211).atLeastOnce();
+
+ expect(repoVersion220.getStackId()).andReturn(stack220).atLeastOnce();
+ expect(repoVersion220.getVersion()).andReturn(version220).atLeastOnce();
+
+ Map<String, Map<String, String>> stack211Configs = new HashMap<>();
+ Map<String, String> stack211FooType = new HashMap<>();
+ Map<String, String> stack211BarType = new HashMap<>();
+ stack211Configs.put("foo-site", stack211FooType);
+ stack211Configs.put("bar-site", stack211BarType);
+ stack211FooType.put("foo-property-1", "stack-211-original");
+ stack211FooType.put("foo-property-2", "stack-211-original");
+ stack211BarType.put("bar-property-1", "stack-211-original");
+
+ Map<String, Map<String, String>> stack220Configs = new HashMap<>();
+ Map<String, String> stack220FooType = new HashMap<>();
+ Map<String, String> stack220BarType = new HashMap<>();
+ stack220Configs.put("foo-site", stack220FooType);
+ stack220Configs.put("bar-site", stack220BarType);
+ stack220FooType.put("foo-property-1", "stack-220-original");
+ stack220FooType.put("foo-property-2", "stack-220-original");
+ stack220BarType.put("bar-property-1", "stack-220-original");
+ stack220BarType.put("bar-property-2", "stack-220-original");
+
+ Map<String, String> existingFooType = new HashMap<>();
+ Map<String, String> existingBarType = new HashMap<>();
+
+ ClusterConfigEntity fooConfigEntity = createNiceMock(ClusterConfigEntity.class);
+ ClusterConfigEntity barConfigEntity = createNiceMock(ClusterConfigEntity.class);
+
+ expect(fooConfigEntity.getType()).andReturn("foo-site");
+ expect(barConfigEntity.getType()).andReturn("bar-site");
+
+ Config fooConfig = createNiceMock(Config.class);
+ Config barConfig = createNiceMock(Config.class);
+
+ existingFooType.put("foo-property-1", "my-foo-property-1");
+ existingBarType.put("bar-property-1", "stack-211-original");
+
+ expect(fooConfig.getType()).andReturn("foo-site").atLeastOnce();
+ expect(barConfig.getType()).andReturn("bar-site").atLeastOnce();
+ expect(fooConfig.getProperties()).andReturn(existingFooType);
+ expect(barConfig.getProperties()).andReturn(existingBarType);
+
+ Map<String, DesiredConfig> desiredConfigurations = new HashMap<>();
+ desiredConfigurations.put("foo-site", null);
+ desiredConfigurations.put("bar-site", null);
+
+ Service zookeeper = createNiceMock(Service.class);
+ expect(zookeeper.getName()).andReturn("ZOOKEEPER").atLeastOnce();
+ expect(zookeeper.getServiceComponents()).andReturn(
+ new HashMap<String, ServiceComponent>()).once();
+ zookeeper.setDesiredRepositoryVersion(repoVersion220);
+ expectLastCall().once();
- String version = "2.5.0.0-1234";
+ Cluster cluster = createNiceMock(Cluster.class);
+ expect(cluster.getCurrentStackVersion()).andReturn(stack211).atLeastOnce();
+ expect(cluster.getDesiredStackVersion()).andReturn(stack220);
+ expect(cluster.getDesiredConfigs()).andReturn(desiredConfigurations);
+ expect(cluster.getDesiredConfigByType("foo-site")).andReturn(fooConfig);
+ expect(cluster.getDesiredConfigByType("bar-site")).andReturn(barConfig);
+ expect(cluster.getService("ZOOKEEPER")).andReturn(zookeeper);
+ expect(cluster.getDesiredConfigByType("foo-type")).andReturn(fooConfig);
+ expect(cluster.getDesiredConfigByType("bar-type")).andReturn(barConfig);
- // mocks which were bound previously
- AmbariManagementController amc = m_injector.getInstance(AmbariManagementController.class);
- AmbariMetaInfo ambariMetaInfo = m_injector.getInstance(AmbariMetaInfo.class);
ConfigHelper configHelper = m_injector.getInstance(ConfigHelper.class);
- RepositoryVersionDAO repositoryVersionDAO = m_injector.getInstance(RepositoryVersionDAO.class);
-
- EasyMock.expect(amc.getConfigHelper()).andReturn(configHelper);
-
- EasyMock.expect(cluster.getCurrentStackVersion()).andReturn(s_currentStackId);
- EasyMock.expect(cluster.getDesiredStackVersion()).andReturn(s_targetStackId);
-
- EasyMock.expect(targetStack.getStackName()).andReturn("HDP").anyTimes();
- EasyMock.expect(targetStack.getStackVersion()).andReturn("2.5").anyTimes();
- EasyMock.expect(targetStackId.getStackName()).andReturn("HDP").atLeastOnce();
- EasyMock.expect(targetStackId.getStackVersion()).andReturn("2.5").atLeastOnce();
-
- EasyMock.expect(repositoryVersionEntity.getStackId()).andReturn(targetStackId).atLeastOnce();
- EasyMock.expect(repositoryVersionEntity.getStack()).andReturn(targetStack).atLeastOnce();
- EasyMock.expect(repositoryVersionEntity.getVersion()).andReturn(version).atLeastOnce();
- EasyMock.expect(repositoryVersionDAO.findByStackNameAndVersion("HDP", version)).andReturn(
- repositoryVersionEntity);
-
- EasyMock.expect(upgradePack.getGroups(Direction.UPGRADE)).andReturn(new ArrayList<Grouping>());
-
- EasyMock.expect(ambariMetaInfo.getServices("HDP", "2.5")).andReturn(
- new HashMap<String, ServiceInfo>());
-
- // config helper mocks (the heart of this test)
- Map<String, Map<String, String>> oldStackDefaultConfigurationsByType = new HashMap<>();
- oldStackDefaultConfigurationsByType.put("foo-type", new HashMap<String, String>());
- oldStackDefaultConfigurationsByType.get("foo-type").put("foo-property-1", "foo-value-1");
- oldStackDefaultConfigurationsByType.get("foo-type").put("foo-property-2", "foo-value-2");
- oldStackDefaultConfigurationsByType.put("bar-type", new HashMap<String, String>());
- oldStackDefaultConfigurationsByType.get("bar-type").put("bar-property-1", "bar-value-1");
-
- Map<String, Map<String, String>> newConfigurationsByType = new HashMap<>();
- newConfigurationsByType.put("foo-type", new HashMap<String, String>());
- newConfigurationsByType.get("foo-type").put("foo-property-1", "foo-value-1");
- newConfigurationsByType.get("foo-type").put("foo-property-2", "foo-value-2");
- newConfigurationsByType.put("bar-type", new HashMap<String, String>());
- newConfigurationsByType.get("bar-type").put("bar-property-1", "bar-value-1");
- newConfigurationsByType.get("bar-type").put("bar-property-20", "bar-value-20");
-
- // HDP 2.4 configs
- EasyMock.expect(configHelper.getDefaultProperties(EasyMock.eq(s_currentStackId),
- EasyMock.anyString())).andReturn(oldStackDefaultConfigurationsByType);
-
- // HDP 2.5 configs
- EasyMock.expect(configHelper.getDefaultProperties(EasyMock.eq(s_targetStackId),
- EasyMock.anyString())).andReturn(newConfigurationsByType);
-
- // CURRENT HDP 2.4 configs
- Config currentClusterConfigFoo = createNiceMock(Config.class);
- Config currentClusterConfigBar = createNiceMock(Config.class);
-
- Map<String, String> existingPropertiesFoo = new HashMap<>();
- existingPropertiesFoo.put("foo-property-1", "foo-value-1");
- existingPropertiesFoo.put("foo-property-99", "foo-value-99");
- EasyMock.expect(currentClusterConfigFoo.getProperties()).andReturn(existingPropertiesFoo);
-
- Map<String, String> existingPropertiesBar = new HashMap<>();
- existingPropertiesBar.put("bar-property-1", "bar-value-1");
- existingPropertiesBar.put("bar-property-99", "bar-value-99");
- EasyMock.expect(currentClusterConfigBar.getProperties()).andReturn(existingPropertiesBar);
-
- EasyMock.expect(cluster.getDesiredConfigByType("foo-type")).andReturn(currentClusterConfigFoo);
- EasyMock.expect(cluster.getDesiredConfigByType("bar-type")).andReturn(currentClusterConfigBar);
-
- // desired configs
- Map<String, DesiredConfig> existingDesiredConfigurationsByType = new HashMap<>();
- existingDesiredConfigurationsByType.put("foo-type", null);
- existingDesiredConfigurationsByType.put("bar-type", null);
- EasyMock.expect(cluster.getDesiredConfigs()).andReturn(existingDesiredConfigurationsByType);
-
- // we need to know what configs are being created, so capture them
- Capture<Map<String, Map<String, String>>> capturedArgument = EasyMock.newCapture();
+
+ expect(configHelper.getDefaultProperties(stack211, "ZOOKEEPER")).andReturn(
+ stack211Configs).anyTimes();
+
+ expect(configHelper.getDefaultProperties(stack220, "ZOOKEEPER")).andReturn(
+ stack220Configs).anyTimes();
+
+ Capture<Map<String, Map<String, String>>> expectedConfigurationsCapture = EasyMock.newCapture();
+
configHelper.createConfigTypes(EasyMock.anyObject(Cluster.class),
- EasyMock.anyObject(AmbariManagementController.class),
- EasyMock.anyObject(StackId.class),
- EasyMock.capture(capturedArgument),
- EasyMock.anyString(), EasyMock.anyString());
-
- EasyMock.expectLastCall();
-
- UpgradeContext upgradeContext = createNiceMock(UpgradeContext.class);
- EasyMock.expect(upgradeContext.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
- EasyMock.expect(upgradeContext.getCluster()).andReturn(cluster).anyTimes();
- EasyMock.expect(upgradeContext.getDirection()).andReturn(Direction.UPGRADE).anyTimes();
- EasyMock.expect(upgradeContext.getUpgradePack()).andReturn(upgradePack).anyTimes();
- EasyMock.expect(upgradeContext.getRepositoryVersion()).andReturn(repositoryVersionEntity).anyTimes();
- EasyMock.expect(upgradeContext.getTargetRepositoryVersion(EasyMock.anyString())).andReturn(repositoryVersionEntity).anyTimes();
+ EasyMock.anyObject(AmbariManagementController.class), EasyMock.anyObject(StackId.class),
+ EasyMock.capture(expectedConfigurationsCapture), EasyMock.anyObject(String.class),
+ EasyMock.anyObject(String.class));
+
+ expectLastCall().once();
+
+ // mock the service config DAO and replay it
+ ServiceConfigEntity zookeeperServiceConfig = createNiceMock(ServiceConfigEntity.class);
+ expect(zookeeperServiceConfig.getClusterConfigEntities()).andReturn(
+ Lists.newArrayList(fooConfigEntity, barConfigEntity));
+
+ ServiceConfigDAO serviceConfigDAOMock = m_injector.getInstance(ServiceConfigDAO.class);
+ List<ServiceConfigEntity> latestServiceConfigs = Lists.newArrayList(zookeeperServiceConfig);
+ expect(serviceConfigDAOMock.getLastServiceConfigsForService(EasyMock.anyLong(),
+ eq("ZOOKEEPER"))).andReturn(latestServiceConfigs).once();
+
+ UpgradeContext context = createNiceMock(UpgradeContext.class);
+ expect(context.getCluster()).andReturn(cluster).atLeastOnce();
+ expect(context.getType()).andReturn(UpgradeType.ROLLING).atLeastOnce();
+ expect(context.getDirection()).andReturn(Direction.UPGRADE).atLeastOnce();
+ expect(context.getRepositoryVersion()).andReturn(repoVersion220).anyTimes();
+ expect(context.getSupportedServices()).andReturn(Sets.newHashSet("ZOOKEEPER")).atLeastOnce();
+ expect(context.getSourceRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion211).atLeastOnce();
+ expect(context.getTargetRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion220).atLeastOnce();
+ expect(context.getRepositoryType()).andReturn(RepositoryType.STANDARD).anyTimes();
+ expect(context.getHostRoleCommandFactory()).andStubReturn(m_injector.getInstance(HostRoleCommandFactory.class));
+ expect(context.getRoleGraphFactory()).andStubReturn(m_injector.getInstance(RoleGraphFactory.class));
+
replayAll();
UpgradeHelper upgradeHelper = m_injector.getInstance(UpgradeHelper.class);
- upgradeHelper.updateDesiredRepositoriesAndConfigs(upgradeContext);
-
- // assertion time!
- Map<String, Map<String, String>> mergedConfigurations = capturedArgument.getValue();
- Map<String, String> mergedFooSite = mergedConfigurations.get("foo-type");
- Map<String, String> mergedBarSite = mergedConfigurations.get("bar-type");
-
- // foo-site validation
- Assert.assertEquals("foo-value-1", mergedFooSite.get("foo-property-1"));
- Assert.assertEquals("foo-value-99", mergedFooSite.get("foo-property-99"));
- Assert.assertFalse(mergedFooSite.containsKey("foo-property-2"));
-
- // bar-site validation
- Assert.assertEquals("bar-value-1", mergedBarSite.get("bar-property-1"));
- Assert.assertEquals("bar-value-20", mergedBarSite.get("bar-property-20"));
- Assert.assertEquals("bar-value-99", mergedBarSite.get("bar-property-99"));
- Assert.assertEquals(3, mergedBarSite.size());
+ upgradeHelper.updateDesiredRepositoriesAndConfigs(context);
+
+ Map<String, Map<String, String>> expectedConfigurations = expectedConfigurationsCapture.getValue();
+ Map<String, String> expectedFooType = expectedConfigurations.get("foo-site");
+ Map<String, String> expectedBarType = expectedConfigurations.get("bar-site");
+
+ // As the upgrade pack did not have any Flume updates, its configs should
+ // not be updated.
+ assertEquals(2, expectedConfigurations.size());
+
+ assertEquals("my-foo-property-1", expectedFooType.get("foo-property-1"));
+ assertEquals(null, expectedFooType.get("foo-property-2"));
+ assertEquals("stack-220-original", expectedBarType.get("bar-property-1"));
+ assertEquals("stack-220-original", expectedBarType.get("bar-property-2"));
}
@@ -282,7 +296,6 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
*/
@Override
public void configure(Binder binder) {
- binder.bind(AmbariMetaInfo.class).toInstance(m_ambariMetaInfoMock);
binder.bind(Clusters.class).toInstance(createNiceMock(Clusters.class));
binder.bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
binder.bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class));
@@ -311,6 +324,7 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
binder.bind(RepositoryVersionDAO.class).toInstance(createNiceMock(RepositoryVersionDAO.class));
binder.bind(HookContextFactory.class).toInstance(createMock(HookContextFactory.class));
binder.bind(HookService.class).toInstance(createMock(HookService.class));
+ binder.bind(ServiceConfigDAO.class).toInstance(createNiceMock(ServiceConfigDAO.class));
binder.install(new FactoryModuleBuilder().build(UpgradeContextFactory.class));
binder.bind(HostRoleCommandFactory.class).to(HostRoleCommandFactoryImpl.class);
http://git-wip-us.apache.org/repos/asf/ambari/blob/770c519a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 04773bc..f63f706 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -17,7 +17,6 @@
*/
package org.apache.ambari.server.controller.internal;
-import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
@@ -47,7 +46,6 @@ import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.actionmanager.Stage;
import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.audit.AuditLogger;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariManagementController;
@@ -87,7 +85,6 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.ConfigHelper;
-import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.Service;
@@ -97,14 +94,13 @@ import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.UpgradeHelper;
import org.apache.ambari.server.state.UpgradeState;
-import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.topology.TopologyManager;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.ambari.server.view.ViewRegistry;
-import org.easymock.Capture;
import org.easymock.EasyMock;
+import org.easymock.EasyMockSupport;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -125,7 +121,7 @@ import com.google.inject.util.Modules;
/**
* UpgradeResourceDefinition tests.
*/
-public class UpgradeResourceProviderTest {
+public class UpgradeResourceProviderTest extends EasyMockSupport {
private UpgradeDAO upgradeDao = null;
private RequestDAO requestDao = null;
@@ -135,7 +131,6 @@ public class UpgradeResourceProviderTest {
private AmbariManagementController amc;
private ConfigHelper configHelper;
private StackDAO stackDAO;
- private AmbariMetaInfo ambariMetaInfo;
private TopologyManager topologyManager;
private ConfigFactory configFactory;
private HostRoleCommandDAO hrcDAO;
@@ -144,6 +139,12 @@ public class UpgradeResourceProviderTest {
RepositoryVersionEntity repoVersionEntity2111;
RepositoryVersionEntity repoVersionEntity2200;
+ /**
+ * Creates a single host cluster with ZOOKEEPER_SERVER and ZOOKEEPER_CLIENT on
+ * {@link #repoVersionEntity2110}.
+ *
+ * @throws Exception
+ */
@Before
public void before() throws Exception {
SecurityContextHolder.getContext().setAuthentication(
@@ -162,19 +163,18 @@ public class UpgradeResourceProviderTest {
EasyMock.anyString())).andReturn(
new HashMap<String, Map<String, String>>()).anyTimes();
-
- EasyMock.replay(configHelper);
+ replay(configHelper);
InMemoryDefaultTestModule module = new InMemoryDefaultTestModule();
// create an injector which will inject the mocks
- injector = Guice.createInjector(Modules.override(module).with(new MockModule()));
+ injector = Guice.createInjector(
+ Modules.override(module).with(new MockModule()));
H2DatabaseCleaner.resetSequences(injector);
injector.getInstance(GuiceJpaInitializer.class);
amc = injector.getInstance(AmbariManagementController.class);
- ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
configFactory = injector.getInstance(ConfigFactory.class);
Field field = AmbariServer.class.getDeclaredField("clusterController");
@@ -187,7 +187,7 @@ public class UpgradeResourceProviderTest {
repoVersionDao = injector.getInstance(RepositoryVersionDAO.class);
hrcDAO = injector.getInstance(HostRoleCommandDAO.class);
- AmbariEventPublisher publisher = createNiceMock(AmbariEventPublisher.class);
+ AmbariEventPublisher publisher = EasyMock.createNiceMock(AmbariEventPublisher.class);
replay(publisher);
ViewRegistry.initInstance(new ViewRegistry(publisher));
@@ -591,11 +591,6 @@ public class UpgradeResourceProviderTest {
Cluster cluster = clusters.getCluster("c1");
Service service = cluster.getService("ZOOKEEPER");
- // this should get skipped
- ServiceComponent component = service.getServiceComponent("ZOOKEEPER_SERVER");
- ServiceComponentHost sch = component.addServiceComponentHost("h2");
- sch.setVersion(repoVersionEntity2200.getVersion());
-
// start out with 0 (sanity check)
List<UpgradeEntity> upgrades = upgradeDao.findUpgrades(cluster.getClusterId());
assertEquals(0, upgrades.size());
@@ -616,10 +611,32 @@ public class UpgradeResourceProviderTest {
upgradeEntity.setUpgradeType(UpgradeType.ROLLING);
upgradeEntity.setRequestEntity(requestEntity);
+ UpgradeHistoryEntity history = new UpgradeHistoryEntity();
+ history.setUpgrade(upgradeEntity);
+ history.setFromRepositoryVersion(service.getDesiredRepositoryVersion());
+ history.setTargetRepositoryVersion(repoVersionEntity2200);
+ history.setServiceName(service.getName());
+ history.setComponentName("ZOKKEEPER_SERVER");
+ upgradeEntity.addHistory(history);
+
+ history = new UpgradeHistoryEntity();
+ history.setUpgrade(upgradeEntity);
+ history.setFromRepositoryVersion(service.getDesiredRepositoryVersion());
+ history.setTargetRepositoryVersion(repoVersionEntity2200);
+ history.setServiceName(service.getName());
+ history.setComponentName("ZOKKEEPER_CLIENT");
+ upgradeEntity.addHistory(history);
+
upgradeDao.create(upgradeEntity);
upgrades = upgradeDao.findUpgrades(cluster.getClusterId());
assertEquals(1, upgrades.size());
+ // push a ZK server foward to the new repo version, leaving the old one on
+ // the old version
+ ServiceComponent component = service.getServiceComponent("ZOOKEEPER_SERVER");
+ ServiceComponentHost sch = component.addServiceComponentHost("h2");
+ sch.setVersion(repoVersionEntity2200.getVersion());
+
UpgradeEntity lastUpgrade = upgradeDao.findLastUpgradeForCluster(cluster.getClusterId(), Direction.UPGRADE);
assertNotNull(lastUpgrade);
@@ -645,10 +662,11 @@ public class UpgradeResourceProviderTest {
List<UpgradeGroupEntity> upgradeGroups = downgrade.getUpgradeGroups();
assertEquals(3, upgradeGroups.size());
+ // the ZK restart group should only have 3 entries since the ZK server on h1
+ // didn't get upgraded
UpgradeGroupEntity group = upgradeGroups.get(1);
assertEquals("ZOOKEEPER", group.getName());
- assertEquals(4, group.getItems().size());
-
+ assertEquals(3, group.getItems().size());
}
@@ -1036,7 +1054,7 @@ public class UpgradeResourceProviderTest {
@Test
public void testCreateCrossStackUpgrade() throws Exception {
Cluster cluster = clusters.getCluster("c1");
- StackId oldStack = cluster.getDesiredStackVersion();
+ StackId oldStack = repoVersionEntity2110.getStackId();
for (Service s : cluster.getServices().values()) {
assertEquals(oldStack, s.getDesiredStackId());
@@ -1054,6 +1072,7 @@ public class UpgradeResourceProviderTest {
Config config = configFactory.createNew(cluster, "zoo.cfg", "abcdefg", Collections.singletonMap("a", "b"), null);
cluster.addDesiredConfig("admin", Collections.singleton(config));
+ // create the upgrade across major versions
Map<String, Object> requestProps = new HashMap<>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId()));
@@ -1062,7 +1081,6 @@ public class UpgradeResourceProviderTest {
requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
ResourceProvider upgradeResourceProvider = createProvider(amc);
-
Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null);
upgradeResourceProvider.createResources(request);
@@ -1080,10 +1098,6 @@ public class UpgradeResourceProviderTest {
assertTrue(cluster.getDesiredConfigs().containsKey("zoo.cfg"));
- StackId newStack = cluster.getDesiredStackVersion();
-
- assertFalse(oldStack.equals(newStack));
-
for (Service s : cluster.getServices().values()) {
assertEquals(repoVersionEntity2200, s.getDesiredRepositoryVersion());
@@ -1094,135 +1108,6 @@ public class UpgradeResourceProviderTest {
}
/**
- * Tests merging configurations between existing and new stack values on
- * upgrade.
- *
- * @throws Exception
- */
- @Test
- public void testMergeConfigurations() throws Exception {
- RepositoryVersionEntity repoVersion211 = createNiceMock(RepositoryVersionEntity.class);
- RepositoryVersionEntity repoVersion220 = createNiceMock(RepositoryVersionEntity.class);
-
- StackId stack211 = new StackId("HDP-2.1.1");
- StackId stack220 = new StackId("HDP-2.2.0");
-
- String version211 = "2.1.1.0-1234";
- String version220 = "2.2.0.0-1234";
-
- EasyMock.expect(repoVersion211.getStackId()).andReturn(stack211).atLeastOnce();
- EasyMock.expect(repoVersion211.getVersion()).andReturn(version211).atLeastOnce();
-
- EasyMock.expect(repoVersion220.getStackId()).andReturn(stack220).atLeastOnce();
- EasyMock.expect(repoVersion220.getVersion()).andReturn(version220).atLeastOnce();
-
- Map<String, Map<String, String>> stack211Configs = new HashMap<>();
- Map<String, String> stack211FooType = new HashMap<>();
- Map<String, String> stack211BarType = new HashMap<>();
- Map<String, String> stack211BazType = new HashMap<>();
- stack211Configs.put("foo-site", stack211FooType);
- stack211Configs.put("bar-site", stack211BarType);
- stack211Configs.put("baz-site", stack211BazType);
- stack211FooType.put("1", "one");
- stack211FooType.put("11", "one-one");
- stack211BarType.put("2", "two");
- stack211BazType.put("3", "three");
-
- Map<String, Map<String, String>> stack220Configs = new HashMap<>();
- Map<String, String> stack220FooType = new HashMap<>();
- Map<String, String> stack220BazType = new HashMap<>();
- Map<String, String> stack220FlumeEnvType = new HashMap<>();
- stack220Configs.put("foo-site", stack220FooType);
- stack220Configs.put("baz-site", stack220BazType);
- stack220Configs.put("flume-env", stack220FlumeEnvType);
- stack220FooType.put("1", "one-new");
- stack220FooType.put("111", "one-one-one");
- stack220BazType.put("3", "three-new");
- stack220FlumeEnvType.put("flume_env_key", "flume-env-value");
-
- Map<String, String> clusterFooType = new HashMap<>();
- Map<String, String> clusterBarType = new HashMap<>();
- Map<String, String> clusterBazType = new HashMap<>();
-
- Config fooConfig = EasyMock.createNiceMock(Config.class);
- Config barConfig = EasyMock.createNiceMock(Config.class);
- Config bazConfig = EasyMock.createNiceMock(Config.class);
-
- clusterFooType.put("1", "one");
- clusterFooType.put("11", "one-one");
- clusterBarType.put("2", "two");
- clusterBazType.put("3", "three-changed");
-
- expect(fooConfig.getProperties()).andReturn(clusterFooType);
- expect(barConfig.getProperties()).andReturn(clusterBarType);
- expect(bazConfig.getProperties()).andReturn(clusterBazType);
-
- Map<String, DesiredConfig> desiredConfigurations = new HashMap<>();
- desiredConfigurations.put("foo-site", null);
- desiredConfigurations.put("bar-site", null);
- desiredConfigurations.put("baz-site", null);
-
- Cluster cluster = EasyMock.createNiceMock(Cluster.class);
- expect(cluster.getCurrentStackVersion()).andReturn(stack211).atLeastOnce();
- expect(cluster.getDesiredStackVersion()).andReturn(stack220);
- expect(cluster.getDesiredConfigs()).andReturn(desiredConfigurations);
- expect(cluster.getDesiredConfigByType("foo-site")).andReturn(fooConfig);
- expect(cluster.getDesiredConfigByType("bar-site")).andReturn(barConfig);
- expect(cluster.getDesiredConfigByType("baz-site")).andReturn(bazConfig);
-
- // setup the config helper for placeholder resolution
- EasyMock.reset(configHelper);
-
- expect(
- configHelper.getDefaultProperties(EasyMock.eq(stack211), EasyMock.anyString())).andReturn(
- stack211Configs).anyTimes();
-
- expect(
- configHelper.getDefaultProperties(EasyMock.eq(stack220), EasyMock.anyString())).andReturn(
- stack220Configs).anyTimes();
-
- Capture<Map<String, Map<String, String>>> expectedConfigurationsCapture = EasyMock.newCapture();
-
- configHelper.createConfigTypes(EasyMock.anyObject(Cluster.class),
- EasyMock.anyObject(AmbariManagementController.class),
- EasyMock.anyObject(StackId.class),
- EasyMock.capture(expectedConfigurationsCapture),
- EasyMock.anyObject(String.class), EasyMock.anyObject(String.class));
-
- EasyMock.expectLastCall().once();
-
- EasyMock.replay(configHelper, cluster, fooConfig, barConfig, bazConfig);
-
- Map<String, UpgradePack> upgradePacks = ambariMetaInfo.getUpgradePacks("HDP", "2.1.1");
- UpgradePack upgradePack = upgradePacks.get("upgrade_to_new_stack");
-
- UpgradeContext upgradeContext = EasyMock.createNiceMock(UpgradeContext.class);
- EasyMock.expect(upgradeContext.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
- EasyMock.expect(upgradeContext.getCluster()).andReturn(cluster).anyTimes();
- EasyMock.expect(upgradeContext.getDirection()).andReturn(Direction.UPGRADE).anyTimes();
- EasyMock.expect(upgradeContext.getUpgradePack()).andReturn(upgradePack).anyTimes();
- EasyMock.expect(upgradeContext.getRepositoryVersion()).andReturn(repoVersion211).anyTimes();
- EasyMock.expect(upgradeContext.getTargetRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion220).anyTimes();
-
- Map<String, Map<String, String>> expectedConfigurations = expectedConfigurationsCapture.getValue();
- Map<String, String> expectedFooType = expectedConfigurations.get("foo-site");
- Map<String, String> expectedBarType = expectedConfigurations.get("bar-site");
- Map<String, String> expectedBazType = expectedConfigurations.get("baz-site");
-
- // As the upgrade pack did not have any Flume updates, its configs should not be updated.
- assertFalse(expectedConfigurations.containsKey("flume-env"));
-
- // the really important values are one-new and three-changed; one-new
- // indicates that the new stack value is changed since it was not customized
- // while three-changed represents that the customized value was preserved
- // even though the stack value changed
- assertEquals("one-new", expectedFooType.get("1"));
- assertEquals("one-one", expectedFooType.get("11"));
- assertEquals("two", expectedBarType.get("2"));
- assertEquals("three-changed", expectedBazType.get("3"));
- }
-
- /**
* @param amc
* @return the provider
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/770c519a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index f306d69..54b16a9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -18,7 +18,6 @@
package org.apache.ambari.server.serveraction.upgrades;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -47,12 +46,14 @@ import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
+import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.dao.RequestDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
+import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.RequestEntity;
@@ -74,6 +75,7 @@ import org.apache.ambari.server.state.ServiceComponentHostFactory;
import org.apache.ambari.server.state.ServiceFactory;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
+import org.apache.ambari.server.state.UpgradeState;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.utils.EventBusSynchronizer;
@@ -139,6 +141,9 @@ public class UpgradeActionTest {
@Inject
private ConfigFactory configFactory;
+ @Inject
+ private HostComponentStateDAO hostComponentStateDAO;
+
private RepositoryVersionEntity repositoryVersion2110;
private RepositoryVersionEntity repositoryVersion2111;
private RepositoryVersionEntity repositoryVersion2201;
@@ -417,9 +422,29 @@ public class UpgradeActionTest {
finalizeUpgradeAction.setExecutionCommand(executionCommand);
finalizeUpgradeAction.setHostRoleCommand(hostRoleCommand);
+ // this should fail since the host versions have not moved to current
CommandReport report = finalizeUpgradeAction.execute(null);
- assertNotNull(report);
+ assertEquals(HostRoleStatus.FAILED.name(), report.getStatus());
+
+ List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository(
+ cluster.getClusterId(), repositoryVersion2111);
+
+ for (HostVersionEntity hostVersion : hostVersions) {
+ hostVersion.setState(RepositoryVersionState.CURRENT);
+ }
+
+ report = finalizeUpgradeAction.execute(null);
assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
+
+ hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository(cluster.getClusterId(),
+ repositoryVersion2111);
+
+ for (HostVersionEntity hostVersion : hostVersions) {
+ Collection<HostComponentStateEntity> hostComponentStates = hostComponentStateDAO.findByHost(hostVersion.getHostName());
+ for (HostComponentStateEntity hostComponentStateEntity: hostComponentStates) {
+ assertEquals(UpgradeState.NONE, hostComponentStateEntity.getUpgradeState());
+ }
+ }
}
/**
@@ -472,218 +497,6 @@ public class UpgradeActionTest {
assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
}
- @Test
- public void testFinalizeUpgradeAcrossStacks() throws Exception {
- StackId sourceStack = HDP_21_STACK;
- StackId targetStack = HDP_22_STACK;
- String sourceRepo = HDP_2_1_1_0;
- String targetRepo = HDP_2_2_0_1;
- String hostName = "h1";
-
- makeCrossStackUpgradeClusterAndSourceRepo(sourceStack, sourceRepo, hostName);
- makeCrossStackUpgradeTargetRepo(targetStack, targetRepo, hostName);
-
- Cluster cluster = clusters.getCluster(clusterName);
-
- // setup the cluster for the upgrade across stacks
- cluster.setCurrentStackVersion(sourceStack);
- cluster.setDesiredStackVersion(targetStack);
-
- createUpgrade(cluster, repositoryVersion2201);
-
- Map<String, String> commandParams = new HashMap<>();
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName(clusterName);
-
- HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
-
- hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
-
- finalizeUpgradeAction.setExecutionCommand(executionCommand);
- finalizeUpgradeAction.setHostRoleCommand(hostRoleCommand);
-
- CommandReport report = finalizeUpgradeAction.execute(null);
- assertNotNull(report);
- assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
-
- StackId currentStackId = cluster.getCurrentStackVersion();
- StackId desiredStackId = cluster.getDesiredStackVersion();
-
- // verify current/desired stacks are updated to the new stack
- assertEquals(desiredStackId, currentStackId);
- assertEquals(targetStack, currentStackId);
- assertEquals(targetStack, desiredStackId);
- }
-
- /**
- * Tests some of the action items are completed when finalizing downgrade
- * across stacks (HDP 2.2 -> HDP 2.3).
- *
- * @throws Exception
- */
- @Test
- public void testFinalizeDowngradeAcrossStacks() throws Exception {
- StackId sourceStack = HDP_21_STACK;
- StackId targetStack = HDP_22_STACK;
- String sourceRepo = HDP_2_1_1_0;
- String targetRepo = HDP_2_2_0_1;
- String hostName = "h1";
-
- makeCrossStackUpgradeClusterAndSourceRepo(sourceStack, sourceRepo, hostName);
- Cluster cluster = clusters.getCluster(clusterName);
-
- // install HDFS with some components
- Service service = installService(cluster, "HDFS");
- addServiceComponent(cluster, service, "NAMENODE");
- addServiceComponent(cluster, service, "DATANODE");
- createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", "h1");
- createNewServiceComponentHost(cluster, "HDFS", "DATANODE", "h1");
-
- makeCrossStackUpgradeTargetRepo(targetStack, targetRepo, hostName);
-
- createUpgrade(cluster, repositoryVersion2201);
-
- // create some configs
- createConfigs(cluster);
-
- // setup the cluster for the upgrade across stacks
- cluster.setCurrentStackVersion(sourceStack);
- cluster.setDesiredStackVersion(targetStack);
-
- // now that the desired version is set, we can create some new configs in
- // the new stack version
- createConfigs(cluster);
-
- // verify we have configs in both HDP stacks
- cluster = clusters.getCluster(clusterName);
- Collection<Config> configs = cluster.getAllConfigs();
- assertEquals(8, configs.size());
-
- Map<String, String> commandParams = new HashMap<>();
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName(clusterName);
-
- HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
-
- hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
-
- HostVersionDAO dao = m_injector.getInstance(HostVersionDAO.class);
-
- List<HostVersionEntity> hosts = dao.findByClusterStackAndVersion(clusterName, targetStack, targetRepo);
- assertFalse(hosts.isEmpty());
- for (HostVersionEntity hve : hosts) {
- assertTrue(hve.getState() == RepositoryVersionState.INSTALLED);
- }
-
- finalizeUpgradeAction.setExecutionCommand(executionCommand);
- finalizeUpgradeAction.setHostRoleCommand(hostRoleCommand);
-
- CommandReport report = finalizeUpgradeAction.execute(null);
- assertNotNull(report);
- assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
-
- StackId currentStackId = cluster.getCurrentStackVersion();
- StackId desiredStackId = cluster.getDesiredStackVersion();
-
- // verify current/desired stacks are back to normal
- assertEquals(desiredStackId, currentStackId);
- assertEquals(sourceStack, currentStackId);
- assertEquals(sourceStack, desiredStackId);
-
- // verify we have configs in only 1 stack
- cluster = clusters.getCluster(clusterName);
- configs = cluster.getAllConfigs();
- assertEquals(4, configs.size());
-
- hosts = dao.findByClusterStackAndVersion(clusterName, targetStack, targetRepo);
- assertFalse(hosts.isEmpty());
- for (HostVersionEntity hve : hosts) {
- assertTrue(hve.getState() == RepositoryVersionState.INSTALLED);
- }
- }
-
- /**
- * Tests that finalization can occur when the cluster state is
- * {@link RepositoryVersionState#UPGRADING} if all of the hosts and components
- * are reporting correct versions and states.
- *
- * @throws Exception
- */
- @Test
- public void testFinalizeUpgradeWithClusterStateInconsistencies() throws Exception {
- StackId sourceStack = HDP_21_STACK;
- StackId targetStack = HDP_22_STACK;
- String sourceRepo = HDP_2_1_1_0;
- String targetRepo = HDP_2_2_0_1;
- String hostName = "h1";
-
- makeCrossStackUpgradeClusterAndSourceRepo(sourceStack, sourceRepo, hostName);
-
- Cluster cluster = clusters.getCluster(clusterName);
-
- Service service = installService(cluster, "HDFS");
- addServiceComponent(cluster, service, "NAMENODE");
- addServiceComponent(cluster, service, "DATANODE");
- createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", "h1");
- createNewServiceComponentHost(cluster, "HDFS", "DATANODE", "h1");
-
- makeCrossStackUpgradeTargetRepo(targetStack, targetRepo, hostName);
- // create some configs
- createConfigs(cluster);
-
- // setup the cluster for the upgrade across stacks
- cluster.setCurrentStackVersion(sourceStack);
- cluster.setDesiredStackVersion(targetStack);
-
- createUpgrade(cluster, repositoryVersion2201);
-
- // set the SCH versions to the new stack so that the finalize action is
- // happy
- cluster.getServiceComponentHosts("HDFS", "NAMENODE").get(0).setVersion(targetRepo);
- cluster.getServiceComponentHosts("HDFS", "DATANODE").get(0).setVersion(targetRepo);
-
- // inject an unhappy path where the cluster repo version is still UPGRADING
- // even though all of the hosts are UPGRADED
-
-
- // verify the conditions for the test are met properly
- List<HostVersionEntity> hostVersions = hostVersionDAO.findByClusterStackAndVersion(clusterName, HDP_22_STACK, targetRepo);
-
- assertTrue(hostVersions.size() > 0);
- for (HostVersionEntity hostVersion : hostVersions) {
- assertEquals(RepositoryVersionState.INSTALLED, hostVersion.getState());
- }
-
- // now finalize and ensure we can transition from UPGRADING to UPGRADED
- // automatically before CURRENT
- Map<String, String> commandParams = new HashMap<>();
- ExecutionCommand executionCommand = new ExecutionCommand();
- executionCommand.setCommandParams(commandParams);
- executionCommand.setClusterName(clusterName);
-
- HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
-
- hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
-
- finalizeUpgradeAction.setExecutionCommand(executionCommand);
- finalizeUpgradeAction.setHostRoleCommand(hostRoleCommand);
-
- CommandReport report = finalizeUpgradeAction.execute(null);
- assertNotNull(report);
- assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
-
- StackId currentStackId = cluster.getCurrentStackVersion();
- StackId desiredStackId = cluster.getDesiredStackVersion();
-
- // verify current/desired stacks are updated to the new stack
- assertEquals(desiredStackId, currentStackId);
- assertEquals(targetStack, currentStackId);
- assertEquals(targetStack, desiredStackId);
- }
-
-
private ServiceComponentHost createNewServiceComponentHost(Cluster cluster, String svc,
String svcComponent, String hostName) throws AmbariException {
Assert.assertNotNull(cluster.getConfigGroups());
http://git-wip-us.apache.org/repos/asf/ambari/blob/770c519a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index 24c529d..cab1c8d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@ -17,7 +17,9 @@
*/
package org.apache.ambari.server.state;
+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.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -50,7 +52,10 @@ import org.apache.ambari.server.controller.ConfigurationRequest;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.OrmTestHelper;
+import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
+import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
import org.apache.ambari.server.security.TestAuthenticationFactory;
import org.apache.ambari.server.security.authorization.AuthorizationException;
import org.apache.ambari.server.stack.HostsType;
@@ -80,6 +85,7 @@ import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.utils.EventBusSynchronizer;
import org.easymock.Capture;
import org.easymock.EasyMock;
+import org.easymock.EasyMockSupport;
import org.easymock.IAnswer;
import org.junit.After;
import org.junit.Before;
@@ -94,13 +100,14 @@ import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
+import com.google.inject.Provider;
import com.google.inject.assistedinject.FactoryModuleBuilder;
import com.google.inject.util.Modules;
/**
* Tests the {@link UpgradeHelper} class
*/
-public class UpgradeHelperTest {
+public class UpgradeHelperTest extends EasyMockSupport {
private static final StackId STACK_ID_HDP_211 = new StackId("HDP-2.1.1");
private static final StackId STACK_ID_HDP_220 = new StackId("HDP-2.2.0");
@@ -460,7 +467,7 @@ public class UpgradeHelperTest {
// use a "real" master host resolver here so that we can actually test MM
MasterHostResolver masterHostResolver = new MasterHostResolver(cluster, null, context);
- EasyMock.expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
+ expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
replay(context);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
@@ -1560,7 +1567,7 @@ public class UpgradeHelperTest {
UpgradeType.HOST_ORDERED, repositoryVersion2110);
MasterHostResolver resolver = new MasterHostResolver(c, m_configHelper, context);
- EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ expect(context.getResolver()).andReturn(resolver).anyTimes();
replay(context);
HostsType ht = resolver.getMasterAndHosts("ZOOKEEPER", "ZOOKEEPER_SERVER");
@@ -1635,7 +1642,7 @@ public class UpgradeHelperTest {
// use a "real" master host resolver here so that we can actually test MM
MasterHostResolver mhr = new MockMasterHostResolver(c, m_configHelper, context);
- EasyMock.expect(context.getResolver()).andReturn(mhr).anyTimes();
+ expect(context.getResolver()).andReturn(mhr).anyTimes();
replay(context);
@@ -1704,7 +1711,7 @@ public class UpgradeHelperTest {
// use a "real" master host resolver here so that we can actually test MM
MasterHostResolver mhr = new BadMasterHostResolver(c, m_configHelper, context);
- EasyMock.expect(context.getResolver()).andReturn(mhr).anyTimes();
+ expect(context.getResolver()).andReturn(mhr).anyTimes();
replay(context);
HostsType ht = mhr.getMasterAndHosts("HDFS", "NAMENODE");
@@ -1842,7 +1849,7 @@ public class UpgradeHelperTest {
// use a "real" master host resolver here so that we can actually test MM
MasterHostResolver masterHostResolver = new MasterHostResolver(c, m_configHelper, context);
- EasyMock.expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
+ expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
replay(context);
List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgradePack, context);
@@ -1858,7 +1865,7 @@ public class UpgradeHelperTest {
// use a "real" master host resolver here so that we can actually test MM
masterHostResolver = new MasterHostResolver(c, m_configHelper, context);
- EasyMock.expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
+ expect(context.getResolver()).andReturn(masterHostResolver).anyTimes();
replay(context);
groups = m_upgradeHelper.createSequence(upgradePack, context);
@@ -2124,7 +2131,7 @@ public class UpgradeHelperTest {
UpgradeType.HOST_ORDERED, repoVersion220);
MasterHostResolver resolver = new MasterHostResolver(c, m_configHelper, context);
- EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ expect(context.getResolver()).andReturn(resolver).anyTimes();
replay(context);
@@ -2168,7 +2175,7 @@ public class UpgradeHelperTest {
repoVersion211);
resolver = new MasterHostResolver(c, m_configHelper, context);
- EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ expect(context.getResolver()).andReturn(resolver).anyTimes();
replay(context);
groups = m_upgradeHelper.createSequence(upgradePack, context);
@@ -2185,7 +2192,7 @@ public class UpgradeHelperTest {
repoVersion211);
resolver = new MasterHostResolver(c, m_configHelper, context);
- EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ expect(context.getResolver()).andReturn(resolver).anyTimes();
replay(context);
groups = m_upgradeHelper.createSequence(upgradePack, context);
@@ -2243,6 +2250,182 @@ public class UpgradeHelperTest {
}
/**
+ * Tests merging configurations between existing and new stack values on
+ * upgrade.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testMergeConfigurations() throws Exception {
+ RepositoryVersionEntity repoVersion211 = createNiceMock(RepositoryVersionEntity.class);
+ RepositoryVersionEntity repoVersion220 = createNiceMock(RepositoryVersionEntity.class);
+
+ StackId stack211 = new StackId("HDP-2.1.1");
+ StackId stack220 = new StackId("HDP-2.2.0");
+
+ String version211 = "2.1.1.0-1234";
+ String version220 = "2.2.0.0-1234";
+
+ expect(repoVersion211.getStackId()).andReturn(stack211).atLeastOnce();
+ expect(repoVersion211.getVersion()).andReturn(version211).atLeastOnce();
+
+ expect(repoVersion220.getStackId()).andReturn(stack220).atLeastOnce();
+ expect(repoVersion220.getVersion()).andReturn(version220).atLeastOnce();
+
+ Map<String, Map<String, String>> stack211Configs = new HashMap<>();
+ Map<String, String> stack211FooType = new HashMap<>();
+ Map<String, String> stack211BarType = new HashMap<>();
+ Map<String, String> stack211BazType = new HashMap<>();
+ stack211Configs.put("foo-site", stack211FooType);
+ stack211Configs.put("bar-site", stack211BarType);
+ stack211Configs.put("baz-site", stack211BazType);
+ stack211FooType.put("1", "one");
+ stack211FooType.put("1A", "one-A");
+ stack211BarType.put("2", "two");
+ stack211BazType.put("3", "three");
+
+ Map<String, Map<String, String>> stack220Configs = new HashMap<>();
+ Map<String, String> stack220FooType = new HashMap<>();
+ Map<String, String> stack220BazType = new HashMap<>();
+ stack220Configs.put("foo-site", stack220FooType);
+ stack220Configs.put("baz-site", stack220BazType);
+ stack220FooType.put("1", "one-new");
+ stack220FooType.put("1A1", "one-A-one");
+ stack220BazType.put("3", "three-new");
+
+ Map<String, String> existingFooType = new HashMap<>();
+ Map<String, String> existingBarType = new HashMap<>();
+ Map<String, String> existingBazType = new HashMap<>();
+
+ ClusterConfigEntity fooConfigEntity = createNiceMock(ClusterConfigEntity.class);
+ ClusterConfigEntity barConfigEntity = createNiceMock(ClusterConfigEntity.class);
+ ClusterConfigEntity bazConfigEntity = createNiceMock(ClusterConfigEntity.class);
+
+ expect(fooConfigEntity.getType()).andReturn("foo-site");
+ expect(barConfigEntity.getType()).andReturn("bar-site");
+ expect(bazConfigEntity.getType()).andReturn("baz-site");
+
+ Config fooConfig = createNiceMock(Config.class);
+ Config barConfig = createNiceMock(Config.class);
+ Config bazConfig = createNiceMock(Config.class);
+
+ existingFooType.put("1", "one");
+ existingFooType.put("1A", "one-A");
+ existingBarType.put("2", "two");
+ existingBazType.put("3", "three-changed");
+
+ expect(fooConfig.getType()).andReturn("foo-site").atLeastOnce();
+ expect(barConfig.getType()).andReturn("bar-site").atLeastOnce();
+ expect(bazConfig.getType()).andReturn("baz-site").atLeastOnce();
+ expect(fooConfig.getProperties()).andReturn(existingFooType);
+ expect(barConfig.getProperties()).andReturn(existingBarType);
+ expect(bazConfig.getProperties()).andReturn(existingBazType);
+
+ Map<String, DesiredConfig> desiredConfigurations = new HashMap<>();
+ desiredConfigurations.put("foo-site", null);
+ desiredConfigurations.put("bar-site", null);
+ desiredConfigurations.put("baz-site", null);
+
+ Service zookeeper = createNiceMock(Service.class);
+ expect(zookeeper.getName()).andReturn("ZOOKEEPER").atLeastOnce();
+ expect(zookeeper.getServiceComponents()).andReturn(
+ new HashMap<String, ServiceComponent>()).once();
+ zookeeper.setDesiredRepositoryVersion(repoVersion220);
+ expectLastCall().once();
+
+ Cluster cluster = createNiceMock(Cluster.class);
+ expect(cluster.getCurrentStackVersion()).andReturn(stack211).atLeastOnce();
+ expect(cluster.getDesiredStackVersion()).andReturn(stack220);
+ expect(cluster.getDesiredConfigs()).andReturn(desiredConfigurations);
+ expect(cluster.getDesiredConfigByType("foo-site")).andReturn(fooConfig);
+ expect(cluster.getDesiredConfigByType("bar-site")).andReturn(barConfig);
+ expect(cluster.getDesiredConfigByType("baz-site")).andReturn(bazConfig);
+ expect(cluster.getService("ZOOKEEPER")).andReturn(zookeeper);
+ expect(cluster.getDesiredConfigByType("foo-type")).andReturn(fooConfig);
+ expect(cluster.getDesiredConfigByType("bar-type")).andReturn(barConfig);
+ expect(cluster.getDesiredConfigByType("baz-type")).andReturn(bazConfig);
+
+ // setup the config helper for placeholder resolution
+ @SuppressWarnings("unchecked")
+ Provider<ConfigHelper> configHelperProvider = EasyMock.createNiceMock(Provider.class);
+ ConfigHelper configHelper = EasyMock.createNiceMock(ConfigHelper.class);
+
+ expect(configHelperProvider.get()).andStubReturn(configHelper);
+
+ expect(configHelper.getDefaultProperties(stack211, "ZOOKEEPER")).andReturn(
+ stack211Configs).anyTimes();
+
+ expect(configHelper.getDefaultProperties(stack220, "ZOOKEEPER")).andReturn(
+ stack220Configs).anyTimes();
+
+ Capture<Map<String, Map<String, String>>> expectedConfigurationsCapture = EasyMock.newCapture();
+
+ configHelper.createConfigTypes(EasyMock.anyObject(Cluster.class),
+ EasyMock.anyObject(AmbariManagementController.class), EasyMock.anyObject(StackId.class),
+ EasyMock.capture(expectedConfigurationsCapture), EasyMock.anyObject(String.class),
+ EasyMock.anyObject(String.class));
+
+ expectLastCall().once();
+ EasyMock.replay(configHelperProvider, configHelper);
+
+ // mock the service config DAO and replay it
+ ServiceConfigEntity zookeeperServiceConfig = createNiceMock(ServiceConfigEntity.class);
+ expect(zookeeperServiceConfig.getClusterConfigEntities()).andReturn(
+ Lists.newArrayList(fooConfigEntity, barConfigEntity, bazConfigEntity));
+
+ ServiceConfigDAO serviceConfigDAOMock;
+ serviceConfigDAOMock = EasyMock.createNiceMock(ServiceConfigDAO.class);
+
+ List<ServiceConfigEntity> latestServiceConfigs = Lists.newArrayList(zookeeperServiceConfig);
+ expect(serviceConfigDAOMock.getLastServiceConfigsForService(EasyMock.anyLong(),
+ eq("ZOOKEEPER"))).andReturn(latestServiceConfigs).once();
+
+ replay(serviceConfigDAOMock);
+
+ Map<String, UpgradePack> upgradePacks = ambariMetaInfo.getUpgradePacks("HDP", "2.1.1");
+ UpgradePack upgradePack = upgradePacks.get("upgrade_to_new_stack");
+
+ UpgradeContext context = createNiceMock(UpgradeContext.class);
+ expect(context.getCluster()).andReturn(cluster).atLeastOnce();
+ expect(context.getType()).andReturn(UpgradeType.ROLLING).atLeastOnce();
+ expect(context.getDirection()).andReturn(Direction.UPGRADE).atLeastOnce();
+ expect(context.getRepositoryVersion()).andReturn(repoVersion220).anyTimes();
+ expect(context.getSupportedServices()).andReturn(Sets.newHashSet("ZOOKEEPER")).atLeastOnce();
+ expect(context.getSourceRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion211).atLeastOnce();
+ expect(context.getTargetRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion220).atLeastOnce();
+ expect(context.getRepositoryType()).andReturn(RepositoryType.STANDARD).anyTimes();
+ expect(context.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+ expect(context.getHostRoleCommandFactory()).andStubReturn(injector.getInstance(HostRoleCommandFactory.class));
+ expect(context.getRoleGraphFactory()).andStubReturn(injector.getInstance(RoleGraphFactory.class));
+ expect(context.getUpgradePack()).andReturn(upgradePack).atLeastOnce();
+
+ replayAll();
+
+ UpgradeHelper upgradeHelper = injector.getInstance(UpgradeHelper.class);
+ upgradeHelper.m_serviceConfigDAO = serviceConfigDAOMock;
+ upgradeHelper.m_configHelperProvider = configHelperProvider;
+ upgradeHelper.updateDesiredRepositoriesAndConfigs(context);
+
+ Map<String, Map<String, String>> expectedConfigurations = expectedConfigurationsCapture.getValue();
+ Map<String, String> expectedFooType = expectedConfigurations.get("foo-site");
+ Map<String, String> expectedBarType = expectedConfigurations.get("bar-site");
+ Map<String, String> expectedBazType = expectedConfigurations.get("baz-site");
+
+ // As the upgrade pack did not have any Flume updates, its configs should
+ // not be updated.
+ assertEquals(3, expectedConfigurations.size());
+
+ // the really important values are one-new and three-changed; one-new
+ // indicates that the new stack value is changed since it was not customized
+ // while three-changed represents that the customized value was preserved
+ // even though the stack value changed
+ assertEquals("one-new", expectedFooType.get("1"));
+ assertEquals("one-A", expectedFooType.get("1A"));
+ assertEquals("two", expectedBarType.get("2"));
+ assertEquals("three-changed", expectedBazType.get("3"));
+ }
+
+ /**
* @param cluster
* @param direction
* @param type
@@ -2304,19 +2487,21 @@ public class UpgradeHelperTest {
UpgradeType type, RepositoryVersionEntity repositoryVersion, final RepositoryType repositoryType,
Set<String> services, MasterHostResolver resolver, boolean replay) {
UpgradeContext context = EasyMock.createNiceMock(UpgradeContext.class);
- EasyMock.expect(context.getCluster()).andReturn(cluster).anyTimes();
- EasyMock.expect(context.getType()).andReturn(type).anyTimes();
- EasyMock.expect(context.getDirection()).andReturn(direction).anyTimes();
- EasyMock.expect(context.getRepositoryVersion()).andReturn(repositoryVersion).anyTimes();
- EasyMock.expect(context.getSupportedServices()).andReturn(services).anyTimes();
- EasyMock.expect(context.getRepositoryType()).andReturn(repositoryType).anyTimes();
- EasyMock.expect(context.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
- EasyMock.expect(context.getHostRoleCommandFactory()).andStubReturn(injector.getInstance(HostRoleCommandFactory.class));
- EasyMock.expect(context.getRoleGraphFactory()).andStubReturn(injector.getInstance(RoleGraphFactory.class));
+ expect(context.getCluster()).andReturn(cluster).anyTimes();
+ expect(context.getType()).andReturn(type).anyTimes();
+ expect(context.getDirection()).andReturn(direction).anyTimes();
+ expect(context.getRepositoryVersion()).andReturn(repositoryVersion).anyTimes();
+ expect(context.getSupportedServices()).andReturn(services).anyTimes();
+ expect(context.getRepositoryType()).andReturn(repositoryType).anyTimes();
+ expect(context.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+ expect(context.getHostRoleCommandFactory()).andStubReturn(
+ injector.getInstance(HostRoleCommandFactory.class));
+ expect(context.getRoleGraphFactory()).andStubReturn(
+ injector.getInstance(RoleGraphFactory.class));
// only set this if supplied
if (null != resolver) {
- EasyMock.expect(context.getResolver()).andReturn(resolver).anyTimes();
+ expect(context.getResolver()).andReturn(resolver).anyTimes();
}
final Map<String, RepositoryVersionEntity> targetRepositoryVersions = new HashMap<>();
@@ -2325,7 +2510,7 @@ public class UpgradeHelperTest {
}
final Capture<String> repoVersionServiceName = EasyMock.newCapture();
- EasyMock.expect(
+ expect(
context.getTargetRepositoryVersion(EasyMock.capture(repoVersionServiceName))).andAnswer(
new IAnswer<RepositoryVersionEntity>() {
@Override
@@ -2335,7 +2520,7 @@ public class UpgradeHelperTest {
}).anyTimes();
final Capture<String> serviceNameSupported = EasyMock.newCapture();
- EasyMock.expect(context.isServiceSupported(EasyMock.capture(serviceNameSupported))).andAnswer(
+ expect(context.isServiceSupported(EasyMock.capture(serviceNameSupported))).andAnswer(
new IAnswer<Boolean>() {
@Override
public Boolean answer() {
@@ -2349,7 +2534,7 @@ public class UpgradeHelperTest {
final Capture<String> serviceDisplayNameArg2 = EasyMock.newCapture();
context.setServiceDisplay(EasyMock.capture(serviceDisplayNameArg1), EasyMock.capture(serviceDisplayNameArg2));
- EasyMock.expectLastCall().andAnswer(
+ expectLastCall().andAnswer(
new IAnswer<Object>() {
@Override
public Object answer() {
@@ -2367,7 +2552,7 @@ public class UpgradeHelperTest {
context.setComponentDisplay(EasyMock.capture(componentDisplayNameArg1),
EasyMock.capture(componentDisplayNameArg2), EasyMock.capture(componentDisplayNameArg3));
- EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ expectLastCall().andAnswer(new IAnswer<Object>() {
@Override
public Object answer() {
componentNames.put(
@@ -2378,7 +2563,7 @@ public class UpgradeHelperTest {
}).anyTimes();
final Capture<String> getServiceDisplayArgument1 = EasyMock.newCapture();
- EasyMock.expect(
+ expect(
context.getServiceDisplay(EasyMock.capture(getServiceDisplayArgument1))).andAnswer(
new IAnswer<String>() {
@Override
@@ -2389,7 +2574,7 @@ public class UpgradeHelperTest {
final Capture<String> getComponentDisplayArgument1 = EasyMock.newCapture();
final Capture<String> getComponentDisplayArgument2 = EasyMock.newCapture();
- EasyMock.expect(context.getComponentDisplay(EasyMock.capture(getComponentDisplayArgument1),
+ expect(context.getComponentDisplay(EasyMock.capture(getComponentDisplayArgument1),
EasyMock.capture(getComponentDisplayArgument2))).andAnswer(new IAnswer<String>() {
@Override
public String answer() {
@@ -2399,7 +2584,7 @@ public class UpgradeHelperTest {
}).anyTimes();
final Capture<UpgradeScope> isScopedCapture = EasyMock.newCapture();
- EasyMock.expect(context.isScoped(EasyMock.capture(isScopedCapture))).andStubAnswer(
+ expect(context.isScoped(EasyMock.capture(isScopedCapture))).andStubAnswer(
new IAnswer<Boolean>() {
@Override
public Boolean answer() throws Throwable {