You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2015/09/03 19:52:59 UTC
[2/2] ambari git commit: AMBARI-12699. Stop-and-Start Upgrade: DB
Schema Changes (alejandro)
AMBARI-12699. Stop-and-Start Upgrade: DB Schema Changes (alejandro)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ddd5d928
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ddd5d928
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ddd5d928
Branch: refs/heads/branch-dev-stop-all-upgrade
Commit: ddd5d928ed09561cfcfdfd1c6fa8d01162f0f689
Parents: cca303d
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Thu Aug 20 17:24:48 2015 -0700
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Wed Sep 2 13:07:58 2015 -0700
----------------------------------------------------------------------
.../checks/HostsMasterMaintenanceCheck.java | 4 +-
.../checks/SecondaryNamenodeDeletedCheck.java | 5 +
.../server/controller/PrereqCheckRequest.java | 20 +-
...atibleRepositoryVersionResourceProvider.java | 3 -
.../PreUpgradeCheckResourceProvider.java | 16 +-
.../RepositoryVersionResourceProvider.java | 28 +-
.../internal/UpgradeResourceProvider.java | 47 ++-
.../server/orm/dao/RepositoryVersionDAO.java | 6 +-
.../ambari/server/orm/dao/UpgradeDAO.java | 19 +-
.../orm/entities/RepositoryVersionEntity.java | 18 +-
.../server/orm/entities/UpgradeEntity.java | 89 +++++
.../ambari/server/stack/StackDirectory.java | 7 +-
.../apache/ambari/server/state/StackInfo.java | 2 +-
.../ambari/server/state/UpgradeContext.java | 2 +-
.../ambari/server/state/UpgradeHelper.java | 5 +-
.../ambari/server/state/stack/UpgradePack.java | 18 +-
.../stack/upgrade/RepositoryVersionHelper.java | 33 +-
.../server/state/stack/upgrade/UpgradeType.java | 6 +-
.../svccomphost/ServiceComponentHostImpl.java | 1 -
.../server/upgrade/SchemaUpgradeHelper.java | 1 +
.../server/upgrade/UpgradeCatalog212.java | 323 +++++++++++++++++++
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 3 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 3 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 3 +-
.../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql | 3 +-
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 3 +-
.../HDFS/2.1.0.2.0/package/scripts/namenode.py | 4 +-
.../HDP/2.2/upgrades/nonrolling-upgrade-2.2.xml | 6 +-
.../stacks/HDP/2.2/upgrades/upgrade-2.2.xml | 2 +-
.../stacks/HDP/2.2/upgrades/upgrade-2.3.xml | 2 +-
.../stacks/HDP/2.3/upgrades/upgrade-2.3.xml | 2 +-
.../checks/HostsMasterMaintenanceCheckTest.java | 9 +-
...leRepositoryVersionResourceProviderTest.java | 16 +
.../RepositoryVersionResourceProviderTest.java | 96 +++---
.../UpgradeResourceProviderHDP22Test.java | 3 +-
.../internal/UpgradeResourceProviderTest.java | 57 ++--
.../apache/ambari/server/orm/OrmTestHelper.java | 2 +-
.../ambari/server/orm/dao/CrudDAOTest.java | 1 -
.../orm/dao/RepositoryVersionDAOTest.java | 8 +-
.../ambari/server/orm/dao/UpgradeDAOTest.java | 10 +-
.../upgrades/ConfigureActionTest.java | 3 +-
.../upgrades/UpgradeActionTest.java | 6 +-
.../ambari/server/state/UpgradeHelperTest.java | 15 +-
.../server/state/stack/UpgradePackTest.java | 57 ++--
.../server/upgrade/UpgradeCatalog212Test.java | 195 +++++++++++
.../HDP/2.1.1/upgrades/upgrade_bucket_test.xml | 5 +-
.../HDP/2.1.1/upgrades/upgrade_direction.xml | 5 +-
.../stacks/HDP/2.1.1/upgrades/upgrade_test.xml | 5 +-
.../HDP/2.1.1/upgrades/upgrade_test_checks.xml | 5 +-
.../2.1.1/upgrades/upgrade_test_nonrolling.xml | 7 +-
.../HDP/2.1.1/upgrades/upgrade_to_new_stack.xml | 4 +-
.../stacks/HDP/2.2.0/upgrades/upgrade_test.xml | 2 +-
.../HDP/2.2.0/upgrades/upgrade_test_checks.xml | 2 +-
53 files changed, 957 insertions(+), 240 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 ef93337..b1b6b68 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
@@ -68,7 +68,9 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
final StackId stackId = cluster.getDesiredStackVersion();
final Set<String> hostsWithMasterComponent = new HashSet<String>();
- final String upgradePackName = repositoryVersionHelper.get().getUpgradePackageName(stackId.getStackName(), stackId.getStackVersion(), request.getRepositoryVersion());
+
+ // TODO AMBARI-12698, need to pass the upgrade pack to use in the request, or at least the type.
+ final String upgradePackName = repositoryVersionHelper.get().getUpgradePackageName(stackId.getStackName(), stackId.getStackVersion(), request.getRepositoryVersion(), null);
if (upgradePackName == null) {
prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
String fail = getFailReason(KEY_NO_UPGRADE_NAME, prerequisiteCheck, request);
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
index 493042f..2086b67 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
@@ -72,6 +72,11 @@ public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor {
return true;
}
+ // TODO AMBARI-12698, there are 2 ways to filter the prechecks.
+ // 1. Explictly mention them in each upgrade pack, which is more flexible, but requires adding the name of checks
+ // to perform in each upgrade pack.
+ // 2. Make each upgrade check class call a function before perform() that will determine if the check is appropriate
+ // given the type of upgrade. The PrereqCheckRequest object has a field for the type of upgrade.
@Override
public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
Set<String> hosts = new HashSet<String>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java
index f8c5316..b8dda3a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.apache.ambari.server.checks.CheckDescription;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
/**
* Represents a prerequisite check request.
@@ -33,17 +34,34 @@ public class PrereqCheckRequest {
private StackId m_sourceStackId;
private StackId m_targetStackId;
+ private UpgradeType m_upgradeType;
+
private Map<CheckDescription, PrereqCheckStatus> m_results =
new HashMap<CheckDescription, PrereqCheckStatus>();
- public PrereqCheckRequest(String clusterName) {
+
+ public PrereqCheckRequest(String clusterName, UpgradeType upgradeType) {
m_clusterName = clusterName;
+ m_upgradeType = upgradeType;
+ }
+
+ /**
+ * Construct a request to performs checks before an Upgrade.
+ * The default type is Rolling.
+ * @param clusterName
+ */
+ public PrereqCheckRequest(String clusterName) {
+ this(clusterName, UpgradeType.ROLLING);
}
public String getClusterName() {
return m_clusterName;
}
+ public UpgradeType getUpgradeType() {
+ return m_upgradeType;
+ }
+
public String getRepositoryVersion() {
return m_repositoryVersion;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 6344aa2..2a1092b 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
@@ -61,7 +61,6 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc
public static final String REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID = "CompatibleRepositoryVersions/stack_version";
public static final String REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID = "CompatibleRepositoryVersions/repository_version";
public static final String REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID = "CompatibleRepositoryVersions/display_name";
- public static final String REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID = "CompatibleRepositoryVersions/upgrade_pack";
public static final String SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID = new OperatingSystemResourceDefinition().getPluralName();
public static final String SUBRESOURCE_REPOSITORIES_PROPERTY_ID = new RepositoryResourceDefinition().getPluralName();
@@ -73,7 +72,6 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc
REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID,
REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID,
REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID,
- REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID,
SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID);
static Map<Type, String> keyPropertyIds = new HashMap<Type, String>() {
@@ -151,7 +149,6 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc
setResourceProperty(resource, REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID, entity.getStackName(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID, entity.getStackVersion(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID, entity.getDisplayName(), requestedIds);
- setResourceProperty(resource, REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID, entity.getUpgradePackage(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID, entity.getVersion(), requestedIds);
resources.add(resource);
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java
index c394498..65b5794 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java
@@ -20,11 +20,13 @@ package org.apache.ambari.server.controller.internal;
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.StaticallyInject;
+import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.UpgradeCheckRegistry;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.PrereqCheckRequest;
@@ -47,6 +49,7 @@ import org.apache.ambari.server.state.stack.PrerequisiteCheck;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.google.inject.Provider;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
/**
* Resource provider for pre-upgrade checks.
@@ -64,6 +67,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
public static final String UPGRADE_CHECK_FAILED_DETAIL_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "failed_detail");
public static final String UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "check_type");
public static final String UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "cluster_name");
+ public static final String UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "upgrade_type");
public static final String UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "repository_version");
@Inject
@@ -86,6 +90,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
UPGRADE_CHECK_FAILED_DETAIL_PROPERTY_ID,
UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID,
UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID,
+ UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID,
UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID);
@@ -119,6 +124,9 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
for (Map<String, Object> propertyMap: propertyMaps) {
final String clusterName = propertyMap.get(UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID).toString();
+ // TODO AMBARI-12698, uncomment once the UI starts passing the property.
+ // final UpgradeType upgradeType = (UpgradeType) propertyMap.get(UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID);
+ final UpgradeType upgradeType = UpgradeType.NON_ROLLING;
final Cluster cluster;
try {
@@ -129,7 +137,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
String stackName = cluster.getCurrentStackVersion().getStackName();
- final PrereqCheckRequest upgradeCheckRequest = new PrereqCheckRequest(clusterName);
+ final PrereqCheckRequest upgradeCheckRequest = new PrereqCheckRequest(clusterName, upgradeType);
upgradeCheckRequest.setSourceStackId(cluster.getCurrentStackVersion());
if (propertyMap.containsKey(UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID)) {
@@ -141,7 +149,10 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
upgradeCheckRequest.setTargetStackId(repositoryVersionEntity.getStackId());
}
- for (PrerequisiteCheck prerequisiteCheck : checkHelper.performChecks(upgradeCheckRequest, upgradeCheckRegistry.getUpgradeChecks())) {
+ // TODO AMBARI-12698, filter the upgrade checks to run based on the stack and upgrade type, or the upgrade pack.
+ List<AbstractCheckDescriptor> upgradeChecksToRun = upgradeCheckRegistry.getUpgradeChecks();
+
+ for (PrerequisiteCheck prerequisiteCheck : checkHelper.performChecks(upgradeCheckRequest, upgradeChecksToRun)) {
final Resource resource = new ResourceImpl(Resource.Type.PreUpgradeCheck);
setResourceProperty(resource, UPGRADE_CHECK_ID_PROPERTY_ID, prerequisiteCheck.getId(), requestedIds);
setResourceProperty(resource, UPGRADE_CHECK_CHECK_PROPERTY_ID, prerequisiteCheck.getDescription(), requestedIds);
@@ -151,6 +162,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
setResourceProperty(resource, UPGRADE_CHECK_FAILED_DETAIL_PROPERTY_ID,prerequisiteCheck.getFailedDetail(), requestedIds);
setResourceProperty(resource, UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID, prerequisiteCheck.getType(), requestedIds);
setResourceProperty(resource, UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID, prerequisiteCheck.getClusterName(), requestedIds);
+ setResourceProperty(resource, UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID, upgradeType, requestedIds);
if (upgradeCheckRequest.getRepositoryVersion() != null) {
setResourceProperty(resource, UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID, upgradeCheckRequest.getRepositoryVersion(), requestedIds);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 f1fa3bf..1c2328d 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
@@ -73,7 +73,6 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
public static final String REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "stack_version");
public static final String REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "repository_version");
public static final String REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "display_name");
- public static final String REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "upgrade_pack");
public static final String SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID = new OperatingSystemResourceDefinition().getPluralName();
public static final String SUBRESOURCE_REPOSITORIES_PROPERTY_ID = new RepositoryResourceDefinition().getPluralName();
@@ -92,7 +91,6 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
add(REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID);
add(REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID);
add(REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID);
- add(REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID);
add(SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID);
}
};
@@ -214,7 +212,6 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
setResourceProperty(resource, REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID, entity.getStackName(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID, entity.getStackVersion(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID, entity.getDisplayName(), requestedIds);
- setResourceProperty(resource, REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID, entity.getUpgradePackage(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID, entity.getVersion(), requestedIds);
resources.add(resource);
@@ -243,22 +240,18 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
throw new ObjectNotFoundException("There is no repository version with id " + id);
}
- if (StringUtils.isNotBlank(ObjectUtils.toString(propertyMap.get(REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID)))) {
- StackEntity stackEntity = entity.getStack();
- String stackName = stackEntity.getStackName();
- String stackVersion = stackEntity.getStackVersion();
+ // Prevent changing repo version if there's already a cluster version that has performed some meaningful action on it.
+ StackEntity stackEntity = entity.getStack();
+ String stackName = stackEntity.getStackName();
+ String stackVersion = stackEntity.getStackVersion();
- final List<ClusterVersionEntity> clusterVersionEntities = clusterVersionDAO.findByStackAndVersion(
- stackName, stackVersion, entity.getVersion());
+ final List<ClusterVersionEntity> clusterVersionEntities = clusterVersionDAO.findByStackAndVersion(
+ stackName, stackVersion, entity.getVersion());
- if (!clusterVersionEntities.isEmpty()) {
- final ClusterVersionEntity firstClusterVersion = clusterVersionEntities.get(0);
- throw new AmbariException("Upgrade pack can't be changed for repository version which is " +
- firstClusterVersion.getState().name() + " on cluster " + firstClusterVersion.getClusterEntity().getClusterName());
- }
-
- final String upgradePackage = propertyMap.get(REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID).toString();
- entity.setUpgradePackage(upgradePackage);
+ if (!clusterVersionEntities.isEmpty()) {
+ final ClusterVersionEntity firstClusterVersion = clusterVersionEntities.get(0);
+ throw new AmbariException("Upgrade pack can't be changed for repository version which has a state of " +
+ firstClusterVersion.getState().name() + " on cluster " + firstClusterVersion.getClusterEntity().getClusterName());
}
if (StringUtils.isNotBlank(ObjectUtils.toString(propertyMap.get(SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID)))) {
@@ -430,7 +423,6 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
throw new AmbariException("Json structure for operating systems is incorrect", ex);
}
entity.setOperatingSystems(operatingSystemsJson);
- entity.setUpgradePackage(repositoryVersionHelper.getUpgradePackageName(stackName, stackVersion, entity.getVersion()));
return entity;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 fa743be..dddec73 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
@@ -111,6 +111,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
protected static final String UPGRADE_CLUSTER_NAME = "Upgrade/cluster_name";
protected static final String UPGRADE_VERSION = "Upgrade/repository_version";
+ protected static final String UPGRADE_TYPE = "Upgrade/type";
+ protected static final String UPGRADE_PACK = "Upgrade/pack";
protected static final String UPGRADE_REQUEST_ID = "Upgrade/request_id";
protected static final String UPGRADE_FROM_VERSION = "Upgrade/from_version";
protected static final String UPGRADE_TO_VERSION = "Upgrade/to_version";
@@ -206,6 +208,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
// properties
PROPERTY_IDS.add(UPGRADE_CLUSTER_NAME);
PROPERTY_IDS.add(UPGRADE_VERSION);
+ 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);
@@ -423,6 +427,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
ResourceImpl resource = new ResourceImpl(Resource.Type.Upgrade);
setResourceProperty(resource, UPGRADE_CLUSTER_NAME, clusterName, requestedIds);
+ setResourceProperty(resource, UPGRADE_TYPE, entity.getUpgradeType().toString(), 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);
@@ -444,6 +450,16 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
String clusterName = (String) requestMap.get(UPGRADE_CLUSTER_NAME);
String version = (String) requestMap.get(UPGRADE_VERSION);
String versionForUpgradePack = (String) requestMap.get(UPGRADE_FROM_VERSION);
+ /**
+ * 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);
+
+ // The type will determine which Upgrade Pack to use.
+ // TODO AMBARI-12698, uncomment once the UI starts passing the upgrade type.
+ //final UpgradeType upgradeType = (UpgradeType) requestMap.get(UPGRADE_TYPE);
+ final UpgradeType upgradeType = UpgradeType.ROLLING;
if (null == clusterName) {
throw new AmbariException(String.format("%s is required", UPGRADE_CLUSTER_NAME));
@@ -474,27 +490,34 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
Map<String, UpgradePack> packs = s_metaProvider.get().getUpgradePacks(stack.getStackName(),
stack.getStackVersion());
- UpgradePack up = packs.get(versionEntity.getUpgradePackage());
+ UpgradePack pack = null;
+ if (!preferredUpgradePackName.isEmpty() && packs.containsKey(preferredUpgradePackName)) {
+ pack = packs.get(preferredUpgradePackName);
+ }
- if (null == up) {
+ if (null == pack) {
// !!! in case there is an upgrade pack that doesn't match the name
String repoStackId = versionEntity.getStackId().getStackId();
for (UpgradePack upgradePack : packs.values()) {
- if (null != upgradePack.getTargetStack()
- && upgradePack.getTargetStack().equals(repoStackId)) {
- up = upgradePack;
- break;
+ if (null != upgradePack.getTargetStack() && upgradePack.getTargetStack().equals(repoStackId) && upgradeType == upgradePack.getType()) {
+ if (null == pack) {
+ pack = upgradePack;
+ } else {
+ throw new AmbariException(
+ String.format("Unable to perform %s. Found multiple upgrade packs for type %s and target version %s",
+ direction.getText(false), upgradeType.toString(), repoVersion));
+ }
}
}
}
- if (null == up) {
+ if (null == pack) {
throw new AmbariException(
- String.format("Unable to perform %s. Could not locate upgrade pack %s for version %s",
- direction.getText(false), versionEntity.getUpgradePackage(), repoVersion));
+ String.format("Unable to perform %s. Could not locate %s upgrade pack for version %s",
+ direction.getText(false), upgradeType.toString(), repoVersion));
}
- return up;
+ return pack;
}
/**
@@ -646,6 +669,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
entity.setUpgradeGroups(groupEntities);
entity.setClusterId(Long.valueOf(cluster.getClusterId()));
entity.setDirection(direction);
+ entity.setUpgradePackage(pack.getName());
+ entity.setUpgradeType(pack.getType());
req.getRequestStatusResponse();
@@ -1015,7 +1040,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
if (context.getType() == UpgradeType.ROLLING) {
commandParams.put(COMMAND_PARAM_RESTART_TYPE, "rolling_upgrade");
}
- if (context.getType() == UpgradeType.NONROLLING) {
+ if (context.getType() == UpgradeType.NON_ROLLING) {
commandParams.put(COMMAND_PARAM_RESTART_TYPE, "nonrolling_upgrade");
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 4ac1314..9f5f6f1 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
@@ -129,15 +129,13 @@ public class RepositoryVersionDAO extends CrudDAO<RepositoryVersionEntity, Long>
* @param stackEntity Stack entity.
* @param version Stack version, e.g., 2.2 or 2.2.0.1-885
* @param displayName Unique display name
- * @param upgradePack Optional upgrade pack, e.g, upgrade-2.2
* @param operatingSystems JSON structure of repository URLs for each OS
* @return Returns the object created if successful, and throws an exception otherwise.
* @throws AmbariException
*/
@Transactional
public RepositoryVersionEntity create(StackEntity stackEntity,
- String version, String displayName, String upgradePack,
- String operatingSystems) throws AmbariException {
+ String version, String displayName, String operatingSystems) throws AmbariException {
if (stackEntity == null || version == null || version.isEmpty()
|| displayName == null || displayName.isEmpty()) {
@@ -164,7 +162,7 @@ public class RepositoryVersionDAO extends CrudDAO<RepositoryVersionEntity, Long>
}
RepositoryVersionEntity newEntity = new RepositoryVersionEntity(
- stackEntity, version, displayName, upgradePack, operatingSystems);
+ stackEntity, version, displayName, operatingSystems);
this.create(newEntity);
return newEntity;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java
index bc0652c..06f6ac1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/UpgradeDAO.java
@@ -48,6 +48,18 @@ public class UpgradeDAO {
private DaoUtils daoUtils;
/**
+ * Get all items.
+ * @return List of all of the UpgradeEntity items.
+ */
+ @RequiresSession
+ public List<UpgradeEntity> findAll() {
+ TypedQuery<UpgradeEntity> query = entityManagerProvider.get().createNamedQuery(
+ "UpgradeEntity.findAll", UpgradeEntity.class);
+
+ return daoUtils.selectList(query);
+ }
+
+ /**
* @param clusterId the cluster id
* @return the list of upgrades initiated for the cluster
*/
@@ -157,8 +169,7 @@ public class UpgradeDAO {
}
/**
- * @param requestId the request id
- * @param stageId the stage id
+ * @param clusterId the cluster id
* @return the upgrade entity, or {@code null} if not found
*/
@RequiresSession
@@ -174,4 +185,8 @@ public class UpgradeDAO {
return daoUtils.selectSingle(query);
}
+ @Transactional
+ public UpgradeEntity merge(UpgradeEntity upgradeEntity) {
+ return entityManagerProvider.get().merge(upgradeEntity);
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 0fb2f10..16b7c1c 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
@@ -90,9 +90,6 @@ public class RepositoryVersionEntity {
@Column(name = "display_name")
private String displayName;
- @Column(name = "upgrade_package")
- private String upgradePackage;
-
@Lob
@Column(name = "repositories")
private String operatingSystems;
@@ -110,11 +107,10 @@ public class RepositoryVersionEntity {
}
public RepositoryVersionEntity(StackEntity stack, String version,
- String displayName, String upgradePackage, String operatingSystems) {
+ String displayName, String operatingSystems) {
this.stack = stack;
this.version = version;
this.displayName = displayName;
- this.upgradePackage = upgradePackage;
this.operatingSystems = operatingSystems;
}
@@ -161,14 +157,6 @@ public class RepositoryVersionEntity {
this.displayName = displayName;
}
- public String getUpgradePackage() {
- return upgradePackage;
- }
-
- public void setUpgradePackage(String upgradePackage) {
- this.upgradePackage = upgradePackage;
- }
-
public String getOperatingSystemsJson() {
return operatingSystems;
}
@@ -233,9 +221,6 @@ public class RepositoryVersionEntity {
if (displayName != null ? !displayName.equals(that.displayName) : that.displayName != null) {
return false;
}
- if (upgradePackage != null ? !upgradePackage.equals(that.upgradePackage) : that.upgradePackage != null) {
- return false;
- }
if (operatingSystems != null ? !operatingSystems.equals(that.operatingSystems) : that.operatingSystems != null) {
return false;
}
@@ -249,7 +234,6 @@ public class RepositoryVersionEntity {
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 + (upgradePackage != null ? upgradePackage.hashCode() : 0);
result = 31 * result + (operatingSystems != null ? operatingSystems.hashCode() : 0);
return result;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 802ea03..ad9073a 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
@@ -34,6 +34,7 @@ import javax.persistence.Table;
import javax.persistence.TableGenerator;
import org.apache.ambari.server.state.stack.upgrade.Direction;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
/**
* Models the data representation of an upgrade
@@ -44,6 +45,8 @@ import org.apache.ambari.server.state.stack.upgrade.Direction;
table = "ambari_sequences", pkColumnName = "sequence_name", valueColumnName = "sequence_value",
pkColumnValue = "upgrade_id_seq", initialValue = 0)
@NamedQueries({
+ @NamedQuery(name = "UpgradeEntity.findAll",
+ query = "SELECT u FROM UpgradeEntity u"),
@NamedQuery(name = "UpgradeEntity.findAllForCluster",
query = "SELECT u FROM UpgradeEntity u WHERE u.clusterId = :clusterId"),
@NamedQuery(name = "UpgradeEntity.findUpgrade",
@@ -74,6 +77,13 @@ public class UpgradeEntity {
@Enumerated(value = EnumType.STRING)
private Direction direction = Direction.UPGRADE;
+ @Column(name="upgrade_package", nullable = false)
+ private String upgradePackage;
+
+ @Column(name="upgrade_type", nullable = false)
+ @Enumerated(value = EnumType.STRING)
+ private UpgradeType upgradeType;
+
@OneToMany(mappedBy = "upgradeEntity", cascade = { CascadeType.ALL })
private List<UpgradeGroupEntity> upgradeGroupEntities;
@@ -179,5 +189,84 @@ public class UpgradeEntity {
this.direction = direction;
}
+ /**
+ * @return the upgrade type, such as rolling or non_rolling
+ */
+ public UpgradeType getUpgradeType() {
+ return upgradeType;
+ }
+
+ /**
+ * @param upgradeType the upgrade type to set
+ */
+ public void setUpgradeType(UpgradeType upgradeType) {
+ this.upgradeType = upgradeType;
+ }
+
+ /**
+ * @return the upgrade package name, without the extension.
+ */
+ public String getUpgradePackage() {
+ return upgradePackage;
+ }
+
+ /**
+ * @param upgradePackage the upgrade pack to set
+ */
+ public void setUpgradePackage(String upgradePackage) {
+ this.upgradePackage = upgradePackage;
+ }
+
+ @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 (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;
+ }
+
+ @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 + (upgradeType != null ? upgradeType.hashCode() : 0);
+ result = 31 * result + (upgradePackage != null ? upgradePackage.hashCode() : 0);
+ return result;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java
index 89c10c6..db947ca 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java
@@ -95,7 +95,6 @@ public class StackDirectory extends StackDefinitionDirectory {
/**
* map of upgrade pack name to upgrade pack
*/
- //todo: should be a collection but upgrade pack doesn't have a name attribute
private Map<String, UpgradePack> upgradePacks;
/**
@@ -412,8 +411,10 @@ public class StackDirectory extends StackDefinitionDirectory {
upgradesDir = f.getAbsolutePath();
for (File upgradeFile : f.listFiles(XML_FILENAME_FILTER)) {
try {
- upgradeMap.put(FilenameUtils.removeExtension(upgradeFile.getName()),
- unmarshaller.unmarshal(UpgradePack.class, upgradeFile));
+ String upgradePackName = FilenameUtils.removeExtension(upgradeFile.getName());
+ UpgradePack pack = unmarshaller.unmarshal(UpgradePack.class, upgradeFile);
+ pack.setName(upgradePackName);
+ upgradeMap.put(upgradePackName, pack);
} catch (JAXBException e) {
throw new AmbariException("Unable to parse stack upgrade file at location: " +
upgradeFile.getAbsolutePath(), e);
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java
index 2aa89cc..87301e5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java
@@ -356,7 +356,7 @@ public class StackInfo implements Comparable<StackInfo>, Validable{
/**
* Set upgrade packs.
*
- * @param upgradePacks map of upgrade packs
+ * @param upgradePacks map of upgrade packs
*/
public void setUpgradePacks(Map<String, UpgradePack> upgradePacks) {
this.upgradePacks = upgradePacks;
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 8b17d49..d86210a 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
@@ -77,7 +77,7 @@ public class UpgradeContext {
* @param direction
* the direction for the upgrade
* @param type
- * the type of upgrade, either rolling or nonrolling
+ * the type of upgrade, either rolling or non_rolling
*/
public UpgradeContext(MasterHostResolver resolver, StackId sourceStackId,
StackId targetStackId, String version,
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 3e25d01..ecefe6e 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
@@ -216,7 +216,7 @@ public class UpgradeHelper {
// NonRolling defaults to not performing service checks on a group.
// Of course, a Service Check Group does indeed run them.
- if (upgradePack.getType() == UpgradeType.NONROLLING) {
+ if (upgradePack.getType() == UpgradeType.NON_ROLLING) {
group.performServiceCheck = false;
}
@@ -273,7 +273,7 @@ public class UpgradeHelper {
ProcessingComponent pc = null;
if (upgradePack.getType() == UpgradeType.ROLLING) {
pc = allTasks.get(service.serviceName).get(component);
- } else if (upgradePack.getType() == UpgradeType.NONROLLING) {
+ } else if (upgradePack.getType() == UpgradeType.NON_ROLLING) {
// Construct a processing task on-the-fly
if (null != functionName) {
pc = new ProcessingComponent();
@@ -564,5 +564,4 @@ public class UpgradeHelper {
LOG.debug("Could not get service detail", e);
}
}
-
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java
index 79b8eb5..bd06ea8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java
@@ -45,6 +45,11 @@ import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
@XmlAccessorType(XmlAccessType.FIELD)
public class UpgradePack {
+ /**
+ * Name of the file without the extension, such as upgrade-2.2
+ */
+ private String name;
+
@XmlElement(name="target")
private String target;
@@ -60,7 +65,7 @@ public class UpgradePack {
/**
* In the case of a rolling upgrade, will specify processing logic for a particular component.
- * Nonrolling upgrades are simpler so the "processing" is embedded into the group's "type", which is a function like
+ * NonRolling upgrades are simpler so the "processing" is embedded into the group's "type", which is a function like
* "stop" or "start".
*/
@XmlElementWrapper(name="processing")
@@ -74,6 +79,13 @@ public class UpgradePack {
@XmlTransient
private boolean m_resolvedGroups = false;
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
/**
* @return the target version for the upgrade pack
*/
@@ -89,7 +101,7 @@ public class UpgradePack {
}
/**
- * @return the type of upgrade, e.g., "rolling" or "nonrolling"
+ * @return the type of upgrade, e.g., "ROLLING" or "NON_ROLLING"
*/
public UpgradeType getType() {
return type;
@@ -108,7 +120,7 @@ public class UpgradePack {
} else {
if (type == UpgradeType.ROLLING) {
list = getDowngradeGroupsForRolling();
- } else if (type == UpgradeType.NONROLLING) {
+ } else if (type == UpgradeType.NON_ROLLING) {
list = getDowngradeGroupsForNonrolling();
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
index 2e17cf4..615029d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
@@ -159,14 +159,19 @@ public class RepositoryVersionHelper {
* @param stackName stack name
* @param stackVersion stack version
* @param repositoryVersion target repository version
+ * @param upgradeType if not {@code null} null, will only return upgrade packs whose type matches.
* @return upgrade pack name
* @throws AmbariException if no upgrade packs suit the requirements
*/
- public String getUpgradePackageName(String stackName, String stackVersion, String repositoryVersion) throws AmbariException {
+ public String getUpgradePackageName(String stackName, String stackVersion, String repositoryVersion, UpgradeType upgradeType) throws AmbariException {
final Map<String, UpgradePack> upgradePacks = ambariMetaInfo.getUpgradePacks(stackName, stackVersion);
- for (Entry<String, UpgradePack> upgradePackEntry : upgradePacks.entrySet()) {
- final UpgradePack upgradePack = upgradePackEntry.getValue();
- final String upgradePackName = upgradePackEntry.getKey();
+ for (UpgradePack upgradePack : upgradePacks.values()) {
+ final String upgradePackName = upgradePack.getName();
+
+ if (null != upgradeType && upgradePack.getType() != upgradeType) {
+ continue;
+ }
+
// check that upgrade pack has <target> node
if (StringUtils.isBlank(upgradePack.getTarget())) {
LOG.error("Upgrade pack " + upgradePackName + " is corrupted, it should contain <target> node");
@@ -183,23 +188,7 @@ public class RepositoryVersionHelper {
return upgradePackName;
}
}
- throw new AmbariException("There were no suitable upgrade packs for stack " + stackName + " " + stackVersion);
- }
-
- /**
- * Scans the given stack for upgrade packages which can be applied to update the cluster to given repository version.
- * Returns NONE if there were no suitable packages.
- *
- * @param stackName stack name
- * @param stackVersion stack version
- * @param repositoryVersion target repository version
- * @return upgrade pack name or NONE
- */
- public String getUpgradePackageNameSafe(String stackName, String stackVersion, String repositoryVersion) {
- try {
- return getUpgradePackageName(stackName, stackVersion, repositoryVersion);
- } catch (AmbariException ex) {
- return "NONE";
- }
+ throw new AmbariException("There were no suitable upgrade packs for stack " + stackName + " " + stackVersion +
+ ((null != upgradeType) ? " and upgrade type " + upgradeType : ""));
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeType.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeType.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeType.java
index 17ee22c..3acfb9f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeType.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/UpgradeType.java
@@ -26,11 +26,11 @@ public enum UpgradeType {
/**
* Services are up the entire time
*/
- @XmlEnumValue("rolling")
+ @XmlEnumValue("ROLLING")
ROLLING,
/**
* All services are stopped, then started
*/
- @XmlEnumValue("nonrolling")
- NONROLLING;
+ @XmlEnumValue("NON_ROLLING")
+ NON_ROLLING;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 63f015b..e3ad814 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
@@ -1543,7 +1543,6 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
stackEntity,
version,
stackId.getStackName() + "-" + version,
- repositoryVersionHelper.getUpgradePackageNameSafe(stackId.getStackName(), stackId.getStackVersion(), version),
repositoryVersionHelper.serializeOperatingSystems(stackInfo.getRepositories()));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
index 77e2e93..2fa4275 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
@@ -178,6 +178,7 @@ public class SchemaUpgradeHelper {
catalogBinder.addBinding().to(UpgradeCatalog200.class);
catalogBinder.addBinding().to(UpgradeCatalog210.class);
catalogBinder.addBinding().to(UpgradeCatalog211.class);
+ catalogBinder.addBinding().to(UpgradeCatalog212.class);
catalogBinder.addBinding().to(UpgradeCatalog220.class);
catalogBinder.addBinding().to(FinalUpgradeCatalog.class);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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
new file mode 100644
index 0000000..6919e64
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog212.java
@@ -0,0 +1,323 @@
+/*
+ * 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.upgrade;
+
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.persist.Transactional;
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
+import org.apache.ambari.server.orm.dao.ClusterDAO;
+import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.entities.ClusterEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.state.stack.upgrade.Direction;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.MessageFormat;
+
+
+/**
+ * Upgrade catalog for version 2.1.2.
+ */
+public class UpgradeCatalog212 extends AbstractUpgradeCatalog {
+
+ public static final String UPGRADE_PACKAGE_COL = "upgrade_package";
+ public static final String UPGRADE_TYPE_COL = "upgrade_type";
+ public static final String UPGRADE_TABLE = "upgrade";
+ public static final String REPO_VERSION_TABLE = "repo_version";
+
+ /**
+ * Logger.
+ */
+ private static final Logger LOG = LoggerFactory.getLogger(UpgradeCatalog212.class);
+
+ @Inject
+ private RepositoryVersionDAO repositoryVersionDAO;
+
+ @Inject
+ private ClusterDAO clusterDAO;
+
+
+ // ----- Constructors ------------------------------------------------------
+
+ /**
+ * Don't forget to register new UpgradeCatalogs in {@link org.apache.ambari.server.upgrade.SchemaUpgradeHelper.UpgradeHelperModule#configure()}
+ *
+ * @param injector Guice injector to track dependencies and uses bindings to inject them.
+ */
+ @Inject
+ public UpgradeCatalog212(Injector injector) {
+ super(injector);
+ this.injector = injector;
+ }
+
+ // ----- UpgradeCatalog ----------------------------------------------------
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getTargetVersion() {
+ return "2.1.2";
+ }
+
+ // ----- AbstractUpgradeCatalog --------------------------------------------
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getSourceVersion() {
+ return "2.1.1";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void executeDDLUpdates() throws AmbariException, SQLException {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void executePreDMLUpdates() throws AmbariException, SQLException {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void executeDMLUpdates() throws AmbariException, SQLException {
+ executeStackUpgradeDDLUpdates();
+ }
+
+ // ----- UpgradeCatalog212 --------------------------------------------
+
+ /**
+ * Move the upgrade_package column from the repo_version table to the upgrade table as follows,
+ * add column upgrade_package to upgrade table as String 255 and nullable
+ * populate column in the upgrade table
+ * drop the column in the repo_version table
+ * make the column in the upgrade table non-nullable.
+ * This has to be called as part of DML and not DDL since the persistence service has to be started.
+ * @throws AmbariException
+ * @throws SQLException
+ */
+ @Transactional
+ private void executeStackUpgradeDDLUpdates() throws SQLException, AmbariException {
+ final Configuration.DatabaseType databaseType = configuration.getDatabaseType();
+
+ // Add columns
+ if (!dbAccessor.tableHasColumn(UPGRADE_TABLE, UPGRADE_PACKAGE_COL)) {
+ LOG.info("Adding upgrade_package column to upgrade table.");
+ dbAccessor.addColumn(UPGRADE_TABLE, new DBColumnInfo(UPGRADE_PACKAGE_COL, String.class, 255, null, true));
+ }
+ if (!dbAccessor.tableHasColumn(UPGRADE_TABLE, UPGRADE_TYPE_COL)) {
+ LOG.info("Adding upgrade_type column to upgrade table.");
+ dbAccessor.addColumn(UPGRADE_TABLE, new DBColumnInfo(UPGRADE_TYPE_COL, String.class, 32, null, true));
+ }
+
+ // Populate values in upgrade table.
+ boolean success = this.populateUpgradeTable();
+
+ if (!success) {
+ throw new AmbariException("Errors found while populating the upgrade table with values for columns upgrade_type and upgrade_package.");
+ }
+
+ if (dbAccessor.tableHasColumn(REPO_VERSION_TABLE, UPGRADE_PACKAGE_COL)) {
+ LOG.info("Dropping upgrade_package column from repo_version table.");
+ dbAccessor.dropColumn(REPO_VERSION_TABLE, UPGRADE_PACKAGE_COL);
+
+ // Now, make the added column non-nullable
+ // Make the hosts id non-null after all the values are populated
+ LOG.info("Making upgrade_package column in the upgrade table non-nullable.");
+ if (databaseType == Configuration.DatabaseType.DERBY) {
+ // This is a workaround for UpgradeTest.java unit test
+ dbAccessor.executeQuery("ALTER TABLE " + UPGRADE_TABLE + " ALTER column " + UPGRADE_PACKAGE_COL + " NOT NULL");
+ } else {
+ dbAccessor.alterColumn(UPGRADE_TABLE, new DBColumnInfo(UPGRADE_PACKAGE_COL, String.class, 255, null, false));
+ }
+ }
+
+ if (dbAccessor.tableHasColumn(REPO_VERSION_TABLE, UPGRADE_TYPE_COL)) {
+ // Now, make the added column non-nullable
+ // Make the hosts id non-null after all the values are populated
+ LOG.info("Making upgrade_type column in the upgrade table non-nullable.");
+ if (databaseType == Configuration.DatabaseType.DERBY) {
+ // This is a workaround for UpgradeTest.java unit test
+ dbAccessor.executeQuery("ALTER TABLE " + UPGRADE_TABLE + " ALTER column " + UPGRADE_TYPE_COL + " NOT NULL");
+ } else {
+ dbAccessor.alterColumn(UPGRADE_TABLE, new DBColumnInfo(UPGRADE_TYPE_COL, String.class, 32, null, false));
+ }
+ }
+ }
+
+ /**
+ * Populate the upgrade table with values for the columns upgrade_type and upgrade_package.
+ * The upgrade_type will default to {@code org.apache.ambari.server.state.stack.upgrade.UpgradeType.ROLLING}
+ * whereas the upgrade_package will be calculated.
+ * @return {@code} true on success, and {@code} false otherwise.
+ */
+ private boolean populateUpgradeTable() {
+ boolean success = true;
+ Statement statement = null;
+ ResultSet rs = null;
+ try {
+ statement = dbAccessor.getConnection().createStatement();
+ if (statement != null) {
+ // Need to use SQL since the schema is changing and some of the columns have not yet been added..
+ rs = statement.executeQuery("SELECT upgrade_id, cluster_id, from_version, to_version, direction, upgrade_package, upgrade_type FROM upgrade");
+ if (rs != null) {
+ try {
+ while (rs.next()) {
+ final long upgradeId = rs.getLong("upgrade_id");
+ final long clusterId = rs.getLong("cluster_id");
+ final String fromVersion = rs.getString("from_version");
+ final String toVersion = rs.getString("to_version");
+ final Direction direction = Direction.valueOf(rs.getString("direction"));
+ // These two values are likely null.
+ String upgradePackage = rs.getString("upgrade_package");
+ String upgradeType = rs.getString("upgrade_type");
+
+ LOG.info(MessageFormat.format("Populating rows for the upgrade table record with " +
+ "upgrade_id: {0}, cluster_id: {1}, from_version: {2}, to_version: {3}, direction: {4}",
+ upgradeId, clusterId, fromVersion, toVersion, direction));
+
+ // Set all upgrades that have been done so far to type "rolling"
+ if (StringUtils.isEmpty(upgradeType)) {
+ LOG.info("Updating the record's upgrade_type to " + UpgradeType.ROLLING);
+ dbAccessor.executeQuery("UPDATE upgrade SET upgrade_type = '" + UpgradeType.ROLLING + "' WHERE upgrade_id = " + upgradeId);
+ }
+
+ if (StringUtils.isEmpty(upgradePackage)) {
+ String version = null;
+ StackEntity stack = null;
+
+ if (direction == Direction.UPGRADE) {
+ version = toVersion;
+ } else if (direction == Direction.DOWNGRADE) {
+ // TODO AMBARI-12698, this is going to be a problem.
+ // During a downgrade, the "to_version" is overwritten to the source version, but the "from_version"
+ // doesn't swap. E.g.,
+ // upgrade_id | from_version | to_version | direction
+ // ------------+--------------+--------------+----------
+ // 1 | 2.2.6.0-2800 | 2.3.0.0-2557 | UPGRADE
+ // 2 | 2.2.6.0-2800 | 2.2.6.0-2800 | DOWNGRADE
+ version = fromVersion;
+ }
+
+ ClusterEntity cluster = clusterDAO.findById(clusterId);
+
+ if (null != cluster) {
+ stack = cluster.getDesiredStack();
+ upgradePackage = this.calculateUpgradePackage(stack, version);
+ } else {
+ LOG.error("Could not find a cluster with cluster_id " + clusterId);
+ }
+
+ if (!StringUtils.isEmpty(upgradePackage)) {
+ LOG.info("Updating the record's upgrade_package to " + upgradePackage);
+ dbAccessor.executeQuery("UPDATE upgrade SET upgrade_package = '" + upgradePackage + "' WHERE upgrade_id = " + upgradeId);
+ } else {
+ success = false;
+ LOG.error("Unable to populate column upgrade_package for record in table upgrade with id " + upgradeId);
+ }
+ }
+ }
+ } catch (Exception e) {
+ success = false;
+ e.printStackTrace();
+ LOG.error("Unable to populate the upgrade_type and upgrade_package columns of the upgrade table. " + e);
+ }
+ }
+ }
+ } catch (Exception e) {
+ success = false;
+ e.printStackTrace();
+ LOG.error("Failed to retrieve records from the upgrade table to populate the upgrade_type and upgrade_package columns. Exception: " + e);
+ } finally {
+ try {
+ if (rs != null) {
+ rs.close();
+ }
+ if (statement != null) {
+ statement.close();
+ }
+ } catch (SQLException e) {
+ ;
+ }
+ }
+ return success;
+ }
+
+ /**
+ * Find the single Repo Version for the given stack and version, and return its upgrade_package column.
+ * Because the upgrade_package column is going to be removed from this entity, must use raw SQL
+ * instead of the entity class.
+ * @param stack Stack
+ * @param version Stack version
+ * @return The value of the upgrade_package column, or null if not found.
+ */
+
+ private String calculateUpgradePackage(StackEntity stack, String version) {
+ String upgradePackage = null;
+ // Find the corresponding repo_version, and extract its upgrade_package
+ if (null != version && null != stack) {
+ RepositoryVersionEntity repoVersion = repositoryVersionDAO.findByStackNameAndVersion(stack.getStackName(), version);
+
+ Statement statement = null;
+ ResultSet rs = null;
+ try {
+ statement = dbAccessor.getConnection().createStatement();
+ if (statement != null) {
+ // Need to use SQL since the schema is changing and the entity will no longer have the upgrade_package column.
+ rs = statement.executeQuery("SELECT upgrade_package FROM repo_version WHERE repo_version_id = " + repoVersion.getId());
+ if (rs != null && rs.next()) {
+ upgradePackage = rs.getString("upgrade_package");
+ }
+ }
+ } catch (Exception e) {
+ LOG.error("Failed to retrieve upgrade_package for repo_version record with id " + repoVersion.getId() + ". Exception: " + e.getMessage());
+ } finally {
+ try {
+ if (rs != null) {
+ rs.close();
+ }
+ if (statement != null) {
+ statement.close();
+ }
+ } catch (SQLException e) {
+ ;
+ }
+ }
+ }
+ return upgradePackage;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 265e42e..976fdbd 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -540,7 +540,6 @@ CREATE TABLE repo_version (
stack_id BIGINT NOT NULL,
version VARCHAR(255) NOT NULL,
display_name VARCHAR(128) NOT NULL,
- upgrade_package VARCHAR(255) NOT NULL,
repositories LONGTEXT NOT NULL,
PRIMARY KEY(repo_version_id)
);
@@ -881,6 +880,8 @@ CREATE TABLE upgrade (
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,
PRIMARY KEY (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
FOREIGN KEY (request_id) REFERENCES request(request_id)
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 0053837..3c6205f 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -529,7 +529,6 @@ CREATE TABLE repo_version (
stack_id NUMBER(19) NOT NULL,
version VARCHAR2(255) NOT NULL,
display_name VARCHAR2(128) NOT NULL,
- upgrade_package VARCHAR2(255) NOT NULL,
repositories CLOB NOT NULL,
PRIMARY KEY(repo_version_id)
);
@@ -870,6 +869,8 @@ CREATE TABLE upgrade (
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,
PRIMARY KEY (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
FOREIGN KEY (request_id) REFERENCES request(request_id)
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 30b669d..3acf8c3 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -534,7 +534,6 @@ CREATE TABLE repo_version (
stack_id BIGINT NOT NULL,
version VARCHAR(255) NOT NULL,
display_name VARCHAR(128) NOT NULL,
- upgrade_package VARCHAR(255) NOT NULL,
repositories TEXT NOT NULL,
PRIMARY KEY(repo_version_id)
);
@@ -872,6 +871,8 @@ CREATE TABLE upgrade (
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,
PRIMARY KEY (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
FOREIGN KEY (request_id) REFERENCES request(request_id)
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
index 4f7569c..f1b6580 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
@@ -601,7 +601,6 @@ CREATE TABLE ambari.repo_version (
stack_id BIGINT NOT NULL,
version VARCHAR(255) NOT NULL,
display_name VARCHAR(128) NOT NULL,
- upgrade_package VARCHAR(255) NOT NULL,
repositories TEXT NOT NULL,
PRIMARY KEY(repo_version_id)
);
@@ -963,6 +962,8 @@ CREATE TABLE ambari.upgrade (
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,
PRIMARY KEY (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id),
FOREIGN KEY (request_id) REFERENCES ambari.request(request_id)
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 81d0e6f..99abbdc 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -640,7 +640,6 @@ CREATE TABLE repo_version (
stack_id BIGINT NOT NULL,
version VARCHAR(255) NOT NULL,
display_name VARCHAR(128) NOT NULL,
- upgrade_package VARCHAR(255) NOT NULL,
repositories VARCHAR(MAX) NOT NULL,
PRIMARY KEY CLUSTERED (repo_version_id)
);
@@ -987,6 +986,8 @@ CREATE TABLE upgrade (
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,
PRIMARY KEY CLUSTERED (upgrade_id),
FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
FOREIGN KEY (request_id) REFERENCES request(request_id)
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
index 09d4d56..07be496 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
@@ -114,14 +114,14 @@ class NameNodeDefault(NameNode):
print "TODO AMBARI-12698"
pass
- def prepare_nonrolling_upgrade(self, env):
+ def prepare_non_rolling_upgrade(self, env):
print "TODO AMBARI-12698"
pass
def prepare_rolling_upgrade(self, env):
namenode_upgrade.prepare_rolling_upgrade()
- def finalize_nonrolling_upgrade(self, env):
+ def finalize_non_rolling_upgrade(self, env):
print "TODO AMBARI-12698"
pass
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.2.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.2.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.2.xml
index bf237c6..01022b8 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.2.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.2.xml
@@ -19,7 +19,7 @@
<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target>2.2.*.*</target>
- <type>nonrolling</type>
+ <type>NON_ROLLING</type>
<order>
<group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
@@ -128,7 +128,7 @@
<execute-stage service="HDFS" component="NAMENODE" title="Snapshot HDFS">
<task xsi:type="execute" hosts="master"> <!-- TODO, this can be any NameNode, not just the active. -->
<script>scripts/namenode.py</script>
- <function>prepare_nonrolling_upgrade</function>
+ <function>prepare_non_rolling_upgrade</function>
</task>
</execute-stage>
@@ -446,7 +446,7 @@
<execute-stage service="HDFS" component="NAMENODE" title="Execute HDFS Finalize">
<task xsi:type="execute" hosts="master"> <!-- TODO, what happens if there's no HA. -->
<script>scripts/namenode.py</script>
- <function>finalize_nonrolling_upgrade</function>
+ <function>finalize_non_rolling_upgrade</function>
</task>
</execute-stage>
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.2.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.2.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.2.xml
index 9b7848f..74eb499 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.2.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.2.xml
@@ -19,7 +19,7 @@
<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target>2.2.*.*</target>
- <type>rolling</type>
+ <type>ROLLING</type>
<order>
<group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
index 25df73a..7c1a1f9 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
@@ -20,7 +20,7 @@
<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target>2.3.*.*</target>
<target-stack>HDP-2.3</target-stack>
- <type>rolling</type>
+ <type>ROLLING</type>
<order>
<group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
<direction>UPGRADE</direction>
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml
index e9671e3..044c43a 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml
@@ -19,7 +19,7 @@
<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target>2.3.*.*</target>
- <type>rolling</type>
+ <type>ROLLING</type>
<order>
<group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
<direction>UPGRADE</direction>
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 fc0f9bc..d37d8a9 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
@@ -33,6 +33,7 @@ import org.apache.ambari.server.state.stack.PrerequisiteCheck;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
@@ -61,6 +62,7 @@ public class HostsMasterMaintenanceCheckTest {
@Test
public void testPerform() throws Exception {
+ final String upgradePackName = "upgrade_pack";
final HostsMasterMaintenanceCheck hostsMasterMaintenanceCheck = new HostsMasterMaintenanceCheck();
hostsMasterMaintenanceCheck.clustersProvider = new Provider<Clusters>() {
@@ -92,13 +94,13 @@ public class HostsMasterMaintenanceCheckTest {
Mockito.when(cluster.getClusterId()).thenReturn(1L);
Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster);
Mockito.when(cluster.getDesiredStackVersion()).thenReturn(new StackId("HDP", "1.0"));
- Mockito.when(repositoryVersionHelper.getUpgradePackageName(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(null);
+ 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"));
Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Mockito.when(repositoryVersionHelper.getUpgradePackageName(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn("upgrade pack");
+ 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);
@@ -107,7 +109,8 @@ public class HostsMasterMaintenanceCheckTest {
final Map<String, UpgradePack> upgradePacks = new HashMap<String, UpgradePack>();
final UpgradePack upgradePack = Mockito.mock(UpgradePack.class);
- upgradePacks.put("upgrade pack", upgradePack);
+ Mockito.when(upgradePack.getName()).thenReturn(upgradePackName);
+ upgradePacks.put(upgradePack.getName(), upgradePack);
Mockito.when(ambariMetaInfo.getUpgradePacks(Mockito.anyString(), Mockito.anyString())).thenReturn(upgradePacks);
Mockito.when(upgradePack.getTasks()).thenReturn(new HashMap<String, Map<String,ProcessingComponent>>());
Mockito.when(cluster.getServices()).thenReturn(new HashMap<String, Service>());
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddd5d928/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 ea6e56e..ab06a5c 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
@@ -102,6 +102,12 @@ public class CompatibleRepositoryVersionResourceProviderTest {
Map<String, UpgradePack> map = new HashMap<String, UpgradePack>();
UpgradePack pack1 = new UpgradePack() {
+
+ @Override
+ public String getName() {
+ return "pack1";
+ }
+
@Override
public String getTarget() {
return "1.1.*.*";
@@ -110,6 +116,11 @@ public class CompatibleRepositoryVersionResourceProviderTest {
final UpgradePack pack2 = new UpgradePack() {
@Override
+ public String getName() {
+ return "pack2";
+ }
+
+ @Override
public String getTarget() {
return "2.2.*.*";
}
@@ -133,6 +144,11 @@ public class CompatibleRepositoryVersionResourceProviderTest {
UpgradePack pack = new UpgradePack() {
@Override
+ public String getName() {
+ return "pack2";
+ }
+
+ @Override
public String getTarget() {
return "2.2.*.*";
}