You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2015/09/16 11:31:07 UTC
[2/2] ambari git commit: AMBARI-12703. Stop-and-Start Upgrade: Revise
PreChecks (dgrinenko via dlysnichenko)
AMBARI-12703. Stop-and-Start Upgrade: Revise PreChecks (dgrinenko via dlysnichenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/df0d238a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/df0d238a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/df0d238a
Branch: refs/heads/branch-dev-stop-all-upgrade
Commit: df0d238a1541d06301b924dba56da1c7fc95912d
Parents: 247e728
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Wed Sep 16 12:31:02 2015 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Wed Sep 16 12:31:02 2015 +0300
----------------------------------------------------------------------
.../server/checks/AbstractCheckDescriptor.java | 56 ++++++++++------
.../server/checks/ClientRetryPropertyCheck.java | 17 +----
.../server/checks/ConfigurationMergeCheck.java | 29 +--------
.../HiveDynamicServiceDiscoveryCheck.java | 15 +----
.../checks/HiveMultipleMetastoreCheck.java | 13 +---
.../server/checks/HostsHeartbeatCheck.java | 2 +-
.../checks/HostsMasterMaintenanceCheck.java | 11 +---
.../checks/HostsRepositoryVersionCheck.java | 11 +---
...apReduce2JobHistoryStatePreservingCheck.java | 7 +-
.../checks/SecondaryNamenodeDeletedCheck.java | 10 +--
.../checks/ServicesMaintenanceModeCheck.java | 3 +-
.../ServicesMapReduceDistributedCacheCheck.java | 10 +--
.../ServicesNamenodeHighAvailabilityCheck.java | 13 +---
.../checks/ServicesNamenodeTruncateCheck.java | 11 +---
.../ServicesTezDistributedCacheCheck.java | 10 +--
.../ambari/server/checks/ServicesUpCheck.java | 2 +-
.../checks/ServicesYarnWorkPreservingCheck.java | 14 +---
.../ambari/server/checks/UpgradeCheck.java | 8 +++
.../server/checks/UpgradeCheckRegistry.java | 19 ++++++
.../checks/YarnRMHighAvailabilityCheck.java | 13 +---
.../YarnTimelineServerStatePreservingCheck.java | 7 +-
.../PreUpgradeCheckResourceProvider.java | 30 ++++++++-
.../internal/UpgradeResourceProvider.java | 67 +++-----------------
.../ambari/server/state/UpgradeHelper.java | 65 ++++++++++++++++++-
.../ambari/server/state/stack/UpgradePack.java | 11 ++++
.../HDP/2.2/upgrades/nonrolling-upgrade-2.2.xml | 4 +-
.../stacks/HDP/2.2/upgrades/upgrade-2.2.xml | 13 +++-
.../stacks/HDP/2.2/upgrades/upgrade-2.3.xml | 12 ++++
.../stacks/HDP/2.3/upgrades/upgrade-2.3.xml | 13 ++++
.../checks/ConfigurationMergeCheckTest.java | 30 ---------
.../checks/HostsMasterMaintenanceCheckTest.java | 3 -
.../checks/HostsRepositoryVersionCheckTest.java | 3 -
.../SecondaryNamenodeDeletedCheckTest.java | 16 +++--
...vicesMapReduceDistributedCacheCheckTest.java | 14 ++--
...rvicesNamenodeHighAvailabilityCheckTest.java | 10 ++-
.../ServicesNamenodeTruncateCheckTest.java | 8 ++-
.../ServicesTezDistributedCacheCheckTest.java | 15 +++--
.../ServicesYarnWorkPreservingCheckTest.java | 10 ++-
.../UpgradeResourceProviderHDP22Test.java | 1 -
.../internal/UpgradeResourceProviderTest.java | 10 ++-
.../ambari/server/state/UpgradeHelperTest.java | 67 ++++++++++++++++----
.../HDP/2.1.1/upgrades/upgrade_bucket_test.xml | 15 ++++-
.../HDP/2.1.1/upgrades/upgrade_direction.xml | 2 +-
.../stacks/HDP/2.1.1/upgrades/upgrade_test.xml | 2 +-
.../HDP/2.1.1/upgrades/upgrade_test_checks.xml | 13 +++-
.../2.1.1/upgrades/upgrade_test_nonrolling.xml | 15 ++++-
.../HDP/2.1.1/upgrades/upgrade_to_new_stack.xml | 15 ++++-
.../stacks/HDP/2.2.0/upgrades/upgrade_test.xml | 14 +++-
.../HDP/2.2.0/upgrades/upgrade_test_checks.xml | 16 ++++-
49 files changed, 435 insertions(+), 340 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 44cec85..649db02 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
@@ -18,7 +18,9 @@
package org.apache.ambari.server.checks;
import java.util.LinkedHashSet;
+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;
@@ -80,7 +82,7 @@ public abstract class AbstractCheckDescriptor {
/**
* Tests if the prerequisite check is applicable to given cluster. This
- * method's defautl logic is to ensure that the cluster stack source and
+ * method's default logic is to ensure that the cluster stack source and
* target are compatible with the prerequisite check. When overridding this
* method, call {@code super#isApplicable(PrereqCheckRequest)}.
*
@@ -92,26 +94,36 @@ public abstract class AbstractCheckDescriptor {
* if server error happens
*/
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- StackId sourceStackId = getSourceStack();
- StackId targetStackId = getTargetStack();
-
- if( null == sourceStackId && null == targetStackId ) {
- return true;
- }
-
- StackId requestSourceStack = request.getSourceStackId();
- if (null != sourceStackId && null != requestSourceStack
- && sourceStackId.compareTo(requestSourceStack) > 0) {
- return false;
- }
+ // this is default behaviour
+ return true;
+ }
- StackId requestTargetStack = request.getTargetStackId();
- if (null != targetStackId && null != requestTargetStack
- && targetStackId.compareTo(requestTargetStack) < 0) {
- return false;
+ /**
+ * Same like {@code isApplicable(PrereqCheckRequest request)}, but with service presence check
+ * @param request
+ * prerequisite check request
+ * @param requiredServices
+ * set of services, which need to be present to allow check execution
+ * @param requiredAll
+ * require all services in the list or at least one need to present
+ * @return true if check should be performed
+ * @throws org.apache.ambari.server.AmbariException
+ * if server error happens
+ */
+ public boolean isApplicable(PrereqCheckRequest request, List<String> requiredServices, boolean requiredAll) throws AmbariException {
+ final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
+ Set<String> services = cluster.getServices().keySet();
+ boolean serviceFound = false;
+
+ for (String service : requiredServices) {
+ if (services.contains(service) && !requiredAll) {
+ serviceFound = true;
+ } else if (!services.contains(service) && requiredAll) {
+ return false;
+ }
}
- return true;
+ return !(!serviceFound && !requiredAll);
}
/**
@@ -281,4 +293,12 @@ public abstract class AbstractCheckDescriptor {
return formatted.toString();
}
+
+ /**
+ * Return the optionality flag of the Upgrade Check
+ * @return
+ */
+ public Boolean isRequired(){
+ return getClass().getAnnotation(UpgradeCheck.class).required();
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java
index 52fca40..368bcb8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.checks;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -36,7 +37,7 @@ import com.google.inject.Singleton;
* client retry properties for HDFS, HIVE, and OOZIE are set.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.CLIENT_RETRY_PROPERTY)
+@UpgradeCheck(group = UpgradeCheckGroup.CLIENT_RETRY_PROPERTY, required = true)
public class ClientRetryPropertyCheck extends AbstractCheckDescriptor {
static final String HIVE_CLIENT_RETRY_MISSING_KEY = "hive.client.retry.missing.key";
@@ -54,19 +55,7 @@ public class ClientRetryPropertyCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
-
- if (services.containsKey("HDFS") || services.containsKey("HIVE")
- || services.containsKey("OOZIE")) {
- return true;
- }
-
- return false;
+ return super.isApplicable(request, Arrays.asList("HDFS", "HIVE", "OOZIE"), false);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java
index b81ca11..a47512e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java
@@ -39,7 +39,7 @@ import com.google.inject.Singleton;
* Checks for configuration merge conflicts.
*/
@Singleton
-@UpgradeCheck(order = 99.0f)
+@UpgradeCheck(order = 99.0f, required = true)
public class ConfigurationMergeCheck extends AbstractCheckDescriptor {
@Inject
@@ -49,33 +49,6 @@ public class ConfigurationMergeCheck extends AbstractCheckDescriptor {
super(CheckDescription.CONFIG_MERGE);
}
- @Override
- public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- String stackName = request.getTargetStackId().getStackName();
- String repoVersion = request.getRepositoryVersion();
- if (null == repoVersion) {
- return false;
- }
-
- RepositoryVersionEntity rve = repositoryVersionDaoProvider.get().findByStackNameAndVersion(stackName, repoVersion);
- if (null == rve) {
- return false;
- }
-
- Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
-
- if (rve.getStackId().equals(cluster.getCurrentStackVersion())) {
- return false;
- }
-
- return true;
- }
-
-
/**
* The following logic determines if a warning is generated for config merge
* issues:
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
index 4ea5484..d8f51a2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.checks;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -37,7 +38,7 @@ import com.google.inject.Singleton;
* is properly configured for dynamic discovery.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 1.0f, required = true)
public class HiveDynamicServiceDiscoveryCheck extends AbstractCheckDescriptor {
static final String HIVE_DYNAMIC_SERVICE_DISCOVERY_ENABLED_KEY = "hive.dynamic-service.discovery.enabled.key";
@@ -56,17 +57,7 @@ public class HiveDynamicServiceDiscoveryCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (services.containsKey("HIVE")) {
- return true;
- }
-
- return false;
+ return super.isApplicable(request, Arrays.asList("HIVE"), true);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
index c387a4b..14b8435 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
@@ -51,17 +52,7 @@ public class HiveMultipleMetastoreCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (!services.containsKey("HIVE")) {
- return false;
- }
-
- return true;
+ return super.isApplicable(request, Arrays.asList("HIVE"), true);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
index 6076a32..c9a352e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
@@ -34,7 +34,7 @@ import com.google.inject.Singleton;
* Checks that all hosts are either in maintenance mode or heartbeating with the server.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.LIVELINESS, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.LIVELINESS, order = 1.0f, required = true)
public class HostsHeartbeatCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 b1b6b68..39ab39f 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
@@ -40,7 +40,7 @@ import com.google.inject.Singleton;
* Checks that all hosts in maintenance state do not have master components.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 1.0f, required = true)
public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
static final String KEY_NO_UPGRADE_NAME = "no_upgrade_name";
@@ -54,15 +54,6 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
}
@Override
- public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- return request.getRepositoryVersion() != null;
- }
-
- @Override
public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 6ebf8e1..3b965b7 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
@@ -38,7 +38,7 @@ import com.google.inject.Singleton;
* Checks that all hosts have particular repository version.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.REPOSITORY_VERSION)
+@UpgradeCheck(group = UpgradeCheckGroup.REPOSITORY_VERSION, required = true)
public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor {
static final String KEY_NO_REPO_VERSION = "no_repo_version";
@@ -51,15 +51,6 @@ public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor {
}
@Override
- public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- return request.getRepositoryVersion() != null;
- }
-
- @Override
public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
index 5f02c4f..af134d8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
@@ -28,6 +28,7 @@ import org.apache.ambari.server.utils.VersionUtils;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -87,15 +88,11 @@ public class MapReduce2JobHistoryStatePreservingCheck extends AbstractCheckDescr
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
+ if (!super.isApplicable(request, Arrays.asList("MAPREDUCE2"), true)) {
return false;
}
final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (!services.containsKey("MAPREDUCE2")) {
- return false;
- }
// Applicable only if stack not defined in MinimumApplicableStackVersion, or
// version equals or exceeds the enumerated version.
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 2086b67..d7c27d7 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
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -53,14 +54,7 @@ public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor {
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("HDFS");
- } catch (ServiceNotFoundException ex) {
+ if (!super.isApplicable(request, Arrays.asList("HDFS"), true)) {
return false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
index 5108afd..8d578d8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
@@ -24,7 +24,6 @@ import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.Service;
-import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
@@ -34,7 +33,7 @@ import com.google.inject.Singleton;
* Checks that services are in the maintenance mode.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 2.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 2.0f, required = true)
public class ServicesMaintenanceModeCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
index be5d11a..2359919 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.checks;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -48,14 +49,7 @@ public class ServicesMapReduceDistributedCacheCheck extends AbstractCheckDescrip
public boolean isApplicable(PrereqCheckRequest request)
throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("YARN");
- } catch (ServiceNotFoundException ex) {
+ if (!super.isApplicable(request, Arrays.asList("YARN"), true)) {
return false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
index d92f12d..44e183d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
@@ -46,17 +47,7 @@ public class ServicesNamenodeHighAvailabilityCheck extends AbstractCheckDescript
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("HDFS");
- } catch (ServiceNotFoundException ex) {
- return false;
- }
- return true;
+ return super.isApplicable(request, Arrays.asList("HDFS"), true);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
index 51369c9..3761d99 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
@@ -28,6 +28,8 @@ import org.apache.ambari.server.utils.VersionUtils;
import com.google.inject.Singleton;
+import java.util.Arrays;
+
/**
* Checks that namenode high availability is enabled.
*/
@@ -44,14 +46,7 @@ public class ServicesNamenodeTruncateCheck extends AbstractCheckDescriptor {
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("HDFS");
- } catch (ServiceNotFoundException ex) {
+ if (!super.isApplicable(request, Arrays.asList("HDFS"), true)) {
return false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
index 68a7103..70a9b1b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.checks;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -48,14 +49,7 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor {
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("TEZ");
- } catch (ServiceNotFoundException ex) {
+ if (!super.isApplicable(request, Arrays.asList("TEZ"), true)) {
return false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 70b8884..ea8569c 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
@@ -44,7 +44,7 @@ import com.google.inject.Singleton;
* Checks that services are up.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.LIVELINESS, order = 2.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.LIVELINESS, order = 2.0f, required = true)
public class ServicesUpCheck extends AbstractCheckDescriptor {
private static final float SLAVE_THRESHOLD = 0.5f;
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
index a0b2b59..062c11f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
@@ -27,6 +27,8 @@ import org.apache.commons.lang.BooleanUtils;
import com.google.inject.Singleton;
+import java.util.Arrays;
+
/**
* Checks that YARN has work-preserving restart enabled.
*/
@@ -46,17 +48,7 @@ public class ServicesYarnWorkPreservingCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("YARN");
- } catch (ServiceNotFoundException ex) {
- return false;
- }
- return true;
+ return super.isApplicable(request, Arrays.asList("YARN"), true);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java
index 9fa8916..9e43560 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java
@@ -55,4 +55,12 @@ public @interface UpgradeCheck {
* @return the order, or {@code 1.0f} if not specified.
*/
float order() default 1.0f;
+
+ /**
+ * Gets whether the pre-upgrade check is required.
+ * By default, a pre-upgrade check needs to be declared in the upgrade pack. This flag will override that setting.
+ *
+ * @return flag state, or {@code true} if not specified
+ */
+ boolean required() default false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java
index 8be572c..4ed345c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java
@@ -24,6 +24,7 @@ import java.util.Set;
import java.util.TreeSet;
import com.google.inject.Singleton;
+import org.apache.ambari.server.state.stack.UpgradePack;
/**
* The {@link UpgradeCheckRegistry} contains the ordered list of all pre-upgrade
@@ -59,6 +60,24 @@ public class UpgradeCheckRegistry {
}
/**
+ * Gets an ordered and filtered list of the upgrade checks.
+ * @param upgradePack Upgrade pack object with the list of required checks to be included
+ * @return
+ */
+ public List<AbstractCheckDescriptor> getFilteredUpgradeChecks(UpgradePack upgradePack){
+ List<String> prerequisiteChecks = upgradePack.getPrerequisiteChecks();
+ List<AbstractCheckDescriptor> resultCheckDescriptor = new ArrayList<AbstractCheckDescriptor>();
+ for (AbstractCheckDescriptor descriptor: m_upgradeChecks){
+ if (descriptor.isRequired()){
+ resultCheckDescriptor.add(descriptor);
+ } else if (prerequisiteChecks.contains(descriptor.getClass().getName())){
+ resultCheckDescriptor.add(descriptor);
+ }
+ }
+ return resultCheckDescriptor;
+ }
+
+ /**
* THe {@link PreUpgradeCheckComparator} class is used to compare
* {@link AbstractCheckDescriptor} based on their {@link UpgradeCheck}
* annotations.
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
index bf25f9f..9f3bd6e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
@@ -49,17 +50,7 @@ public class YarnRMHighAvailabilityCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (!services.containsKey("YARN")) {
- return false;
- }
-
- return true;
+ return super.isApplicable(request, Arrays.asList("YARN"), true);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 eca0967..03528c2 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
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
@@ -81,15 +82,11 @@ public class YarnTimelineServerStatePreservingCheck extends AbstractCheckDescrip
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
+ if (!super.isApplicable(request, Arrays.asList("YARN"), true)) {
return false;
}
final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (!services.containsKey("YARN")) {
- return false;
- }
// Applicable only if stack not defined in MinimumApplicableStackVersion, or
// version equals or exceeds the enumerated version.
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 65b5794..93093d2 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
@@ -26,6 +26,7 @@ import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.StaticallyInject;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.UpgradeCheckRegistry;
import org.apache.ambari.server.controller.AmbariManagementController;
@@ -44,11 +45,14 @@ import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.CheckHelper;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.UpgradeHelper;
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.UpgradePack;
+import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
/**
@@ -79,6 +83,9 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
@Inject
private static UpgradeCheckRegistry upgradeCheckRegistry;
+ @Inject
+ private static Provider<UpgradeHelper> upgradeHelper;
+
private static Set<String> pkPropertyIds = Collections.singleton(UPGRADE_CHECK_ID_PROPERTY_ID);
public static Set<String> propertyIds = Sets.newHashSet(
@@ -116,7 +123,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
@Override
public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException,
- NoSuchResourceException, NoSuchParentResourceException {
+ NoSuchResourceException, NoSuchParentResourceException {
final Set<Resource> resources = new HashSet<Resource>();
final Set<String> requestedIds = getRequestPropertyIds(request, predicate);
@@ -136,6 +143,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
}
String stackName = cluster.getCurrentStackVersion().getStackName();
+ String sourceStackVersion = cluster.getCurrentStackVersion().getStackVersion();
final PrereqCheckRequest upgradeCheckRequest = new PrereqCheckRequest(clusterName, upgradeType);
upgradeCheckRequest.setSourceStackId(cluster.getCurrentStackVersion());
@@ -143,14 +151,30 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
if (propertyMap.containsKey(UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID)) {
String repositoryVersionId = propertyMap.get(UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID).toString();
RepositoryVersionEntity repositoryVersionEntity = repositoryVersionDAO.findByStackNameAndVersion(stackName, repositoryVersionId);
-
// set some required properties on the check request
upgradeCheckRequest.setRepositoryVersion(repositoryVersionId);
upgradeCheckRequest.setTargetStackId(repositoryVersionEntity.getStackId());
}
+ //ambariMetaInfo.getStack(stackName, cluster.getCurrentStackVersion().getStackVersion()).getUpgradePacks()
// 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();
+ UpgradePack upgradePack = null;
+ try{
+ // Hint: PreChecks currently executing only before UPGRADE direction
+ upgradePack = upgradeHelper.get().suggestUpgradePack(clusterName, sourceStackVersion,
+ upgradeCheckRequest.getRepositoryVersion(), Direction.UPGRADE, upgradeType);
+ } catch (AmbariException e) {
+ throw new SystemException(e.getMessage(), e);
+ }
+
+ if (upgradePack == null) {
+ throw new SystemException(String.format("Upgrade pack not found for the target repository version %s",
+ upgradeCheckRequest.getRepositoryVersion()));
+ }
+
+ // ToDo: properly handle exceptions, i.e. create fake check with error description
+
+ List<AbstractCheckDescriptor> upgradeChecksToRun = upgradeCheckRegistry.getFilteredUpgradeChecks(upgradePack);
for (PrerequisiteCheck prerequisiteCheck : checkHelper.performChecks(upgradeCheckRequest, upgradeChecksToRun)) {
final Resource resource = new ResourceImpl(Resource.Type.PreUpgradeCheck);
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 2d41673..8f4870c 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
@@ -470,55 +470,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
throw new AmbariException(String.format("%s is required", UPGRADE_VERSION));
}
- Cluster cluster = getManagementController().getClusters().getCluster(clusterName);
-
- // !!! find upgrade packs based on current stack. This is where to upgrade
- // from.
- StackId stack = cluster.getCurrentStackVersion();
-
- String repoVersion = version;
-
- if (direction.isDowngrade() && null != versionForUpgradePack) {
- repoVersion = versionForUpgradePack;
- }
-
- RepositoryVersionEntity versionEntity = s_repoVersionDAO.findByStackNameAndVersion(stack.getStackName(), repoVersion);
-
- if (null == versionEntity) {
- throw new AmbariException(String.format("Repository version %s was not found", repoVersion));
- }
-
- Map<String, UpgradePack> packs = s_metaProvider.get().getUpgradePacks(stack.getStackName(),
- stack.getStackVersion());
-
- UpgradePack pack = null;
- if (preferredUpgradePackName != null && !preferredUpgradePackName.isEmpty() && packs.containsKey(preferredUpgradePackName)) {
- pack = packs.get(preferredUpgradePackName);
- }
-
- 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) && 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 == pack) {
- throw new AmbariException(
- String.format("Unable to perform %s. Could not locate %s upgrade pack for version %s",
- direction.getText(false), upgradeType.toString(), repoVersion));
- }
-
- return pack;
+ return s_upgradeHelper.suggestUpgradePack(clusterName, versionForUpgradePack, version, direction, upgradeType);
}
/**
@@ -633,8 +585,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
// TODO: for cross-stack upgrade, merge a new config upgrade pack from all
// target stacks involved into upgrade and pass it into method
ConfigUpgradePack configUpgradePack = s_metaProvider.get().getConfigUpgradePack(
- targetStackId.getStackName(), targetStackId.getStackVersion());
-
+ targetStackId.getStackName(), targetStackId.getStackVersion());
for (UpgradeGroupHolder group : groups) {
UpgradeGroupEntity groupEntity = new UpgradeGroupEntity();
groupEntity.setName(group.name);
@@ -1258,13 +1209,13 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
entity.setStageId(Long.valueOf(stageId));
stage.addServerActionCommand(task.getImplementationClass(),
- getManagementController().getAuthName(),
- Role.AMBARI_SERVER_ACTION,
- RoleCommand.EXECUTE,
- cluster.getClusterName(),
- new ServiceComponentHostServerActionEvent(null,
- System.currentTimeMillis()),
- commandParams, itemDetail, null, Integer.valueOf(1200), allowRetry);
+ getManagementController().getAuthName(),
+ Role.AMBARI_SERVER_ACTION,
+ RoleCommand.EXECUTE,
+ cluster.getClusterName(),
+ new ServiceComponentHostServerActionEvent(null,
+ System.currentTimeMillis()),
+ commandParams, itemDetail, null, Integer.valueOf(1200), allowRetry);
request.addStages(Collections.singletonList(stage));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 3acee63..ed9b3a7 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
@@ -43,11 +43,12 @@ import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.ClusterControllerHelper;
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.entities.RepositoryVersionEntity;
import org.apache.ambari.server.stack.HostsType;
import org.apache.ambari.server.stack.MasterHostResolver;
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.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;
@@ -180,6 +181,68 @@ public class UpgradeHelper {
@Inject
private Provider<AmbariMetaInfo> m_ambariMetaInfo;
+ @Inject
+ private Provider<Clusters> clusters;
+
+ @Inject
+ private Provider<RepositoryVersionDAO> s_repoVersionDAO;
+
+
+ /**
+ * 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}
+ * @return {@code UpgradeType} object
+ * @throws AmbariException
+ */
+ public UpgradePack suggestUpgradePack(String clusterName, String upgradeFromVersion, String upgradeToVersion,
+ Direction direction, UpgradeType upgradeType) throws AmbariException {
+
+ // !!! find upgrade packs based on current stack. This is where to upgrade from
+ Cluster cluster = clusters.get().getCluster(clusterName);
+ StackId stack = cluster.getCurrentStackVersion();
+
+ String repoVersion = upgradeToVersion;
+
+ // ToDo: AMBARI-12706. Here we need to check, how this would work with SWU Downgrade
+ if (direction.isDowngrade() && null != upgradeFromVersion) {
+ repoVersion = upgradeFromVersion;
+ }
+
+ RepositoryVersionEntity versionEntity = s_repoVersionDAO.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());
+ UpgradePack pack = null;
+
+ String repoStackId = versionEntity.getStackId().getStackId();
+ for (UpgradePack upgradePack : packs.values()) {
+ if (upgradePack.getTargetStack() != null && upgradePack.getTargetStack().equals(repoStackId) &&
+ upgradeType == upgradePack.getType()) {
+ if (pack == null) {
+ pack = upgradePack;
+ } else {
+ throw new AmbariException(
+ String.format("Found multiple upgrade packs for type %s and target version %s",
+ upgradeType.toString(), repoVersion));
+ }
+ }
+ }
+
+ if (pack == null) {
+ throw new AmbariException(String.format("No upgrade pack found for type %s and target version %s",
+ upgradeType.toString(),repoVersion));
+ }
+
+ return pack;
+ }
+
/**
* Generates a list of UpgradeGroupHolder items that are used to execute either
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 e57bfef..6ae0a15 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
@@ -64,6 +64,10 @@ public class UpgradePack {
@XmlElement(name="group")
private List<Grouping> groups;
+ @XmlElementWrapper(name="prerequisite-checks")
+ @XmlElement(name="check", type=String.class)
+ private List<String> prerequisiteChecks = new ArrayList<String>();
+
/**
* 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
@@ -109,6 +113,13 @@ public class UpgradePack {
}
/**
+ * @return the preCheck name, e.g. "CheckDescription"
+ */
+ public List<String> getPrerequisiteChecks() {
+ return new ArrayList<String>(prerequisiteChecks);
+ }
+
+ /**
* Gets the groups defined for the upgrade pack. If a direction is defined
* for a group, it must match the supplied direction to be returned
* @param direction the direction to return the ordered groups
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 e95aabc..2f6840f 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,8 +19,10 @@
<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target>2.2.*.*</target>
+ <target-stack>HDP-2.2</target-stack>
<type>NON_ROLLING</type>
-
+ <prechecks>
+ </prechecks>
<order>
<group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
<skippable>true</skippable>
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 9900d6a..c41e9b6 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
@@ -20,7 +20,18 @@
<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target>2.2.*.*</target>
<type>ROLLING</type>
-
+ <prerequisite-checks>
+ <check>org.apache.ambari.server.checks.HiveMultipleMetastoreCheck</check>
+ <check>org.apache.ambari.server.checks.MapReduce2JobHistoryStatePreservingCheck</check>
+ <check>org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesMapReduceDistributedCacheCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesNamenodeHighAvailabilityCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesNamenodeTruncateCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesTezDistributedCacheCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesYarnWorkPreservingCheck</check>
+ <check>org.apache.ambari.server.checks.YarnRMHighAvailabilityCheck</check>
+ <check>org.apache.ambari.server.checks.YarnTimelineServerStatePreservingCheck</check>
+ </prerequisite-checks>
<order>
<group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
<direction>UPGRADE</direction>
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 8397aaf..678d0f2 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
@@ -21,6 +21,18 @@
<target>2.3.*.*</target>
<target-stack>HDP-2.3</target-stack>
<type>ROLLING</type>
+ <prerequisite-checks>
+ <check>org.apache.ambari.server.checks.HiveMultipleMetastoreCheck</check>
+ <check>org.apache.ambari.server.checks.MapReduce2JobHistoryStatePreservingCheck</check>
+ <check>org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesMapReduceDistributedCacheCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesNamenodeHighAvailabilityCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesNamenodeTruncateCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesTezDistributedCacheCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesYarnWorkPreservingCheck</check>
+ <check>org.apache.ambari.server.checks.YarnRMHighAvailabilityCheck</check>
+ <check>org.apache.ambari.server.checks.YarnTimelineServerStatePreservingCheck</check>
+ </prerequisite-checks>
<order>
<group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
<direction>UPGRADE</direction>
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 c9bd438..4cd08a5 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,20 @@
<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target>2.3.*.*</target>
+ <target-stack>HDP-2.3</target-stack>
<type>ROLLING</type>
+ <prerequisite-checks>
+ <check>org.apache.ambari.server.checks.HiveMultipleMetastoreCheck</check>
+ <check>org.apache.ambari.server.checks.MapReduce2JobHistoryStatePreservingCheck</check>
+ <check>org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesMapReduceDistributedCacheCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesNamenodeHighAvailabilityCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesNamenodeTruncateCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesTezDistributedCacheCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesYarnWorkPreservingCheck</check>
+ <check>org.apache.ambari.server.checks.YarnRMHighAvailabilityCheck</check>
+ <check>org.apache.ambari.server.checks.YarnTimelineServerStatePreservingCheck</check>
+ </prerequisite-checks>
<order>
<group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
<direction>UPGRADE</direction>
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/java/org/apache/ambari/server/checks/ConfigurationMergeCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ConfigurationMergeCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ConfigurationMergeCheckTest.java
index 2e2bf3d..ea74bc3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ConfigurationMergeCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ConfigurationMergeCheckTest.java
@@ -88,37 +88,7 @@ public class ConfigurationMergeCheckTest {
request.setTargetStackId(stackId_1_0);
ConfigurationMergeCheck cmc = new ConfigurationMergeCheck();
- Assert.assertFalse(cmc.isApplicable(request));
-
- final RepositoryVersionDAO repositoryVersionDAO = EasyMock.createMock(RepositoryVersionDAO.class);
- expect(repositoryVersionDAO.findByStackNameAndVersion("HDP", "1.0")).andReturn(createFor("1.0")).anyTimes();
- expect(repositoryVersionDAO.findByStackNameAndVersion("HDP", "1.1")).andReturn(createFor("1.1")).anyTimes();
- expect(repositoryVersionDAO.findByStackNameAndVersion("HDP", "1.2")).andReturn(null).anyTimes();
-
- replay(repositoryVersionDAO);
-
- cmc.repositoryVersionDaoProvider = new Provider<RepositoryVersionDAO>() {
- @Override
- public RepositoryVersionDAO get() {
- return repositoryVersionDAO;
- }
- };
-
- cmc.clustersProvider = new Provider<Clusters>() {
- @Override
- public Clusters get() {
- return clusters;
- }
- };
-
- request.setRepositoryVersion("1.0");
- Assert.assertFalse(cmc.isApplicable(request));
-
- request.setRepositoryVersion("1.1");
Assert.assertTrue(cmc.isApplicable(request));
-
- request.setRepositoryVersion("1.2");
- Assert.assertFalse(cmc.isApplicable(request));
}
@Test
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 d37d8a9..b3be979 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
@@ -55,9 +55,6 @@ public class HostsMasterMaintenanceCheckTest {
final PrereqCheckRequest request = new PrereqCheckRequest("cluster");
request.setRepositoryVersion("not null");
Assert.assertTrue(new HostsMasterMaintenanceCheck().isApplicable(request));
-
- request.setRepositoryVersion(null);
- Assert.assertFalse(new HostsMasterMaintenanceCheck().isApplicable(request));
}
@Test
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java
index c6c7e54..510929f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java
@@ -55,9 +55,6 @@ public class HostsRepositoryVersionCheckTest {
final PrereqCheckRequest request = new PrereqCheckRequest("cluster");
request.setRepositoryVersion("not null");
Assert.assertTrue(new HostsMasterMaintenanceCheck().isApplicable(request));
-
- request.setRepositoryVersion(null);
- Assert.assertFalse(new HostsMasterMaintenanceCheck().isApplicable(request));
}
@Test
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java
index 631ca8a..f57728a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java
@@ -18,6 +18,8 @@
package org.apache.ambari.server.checks;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.ambari.server.ServiceNotFoundException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -69,25 +71,25 @@ public class SecondaryNamenodeDeletedCheckTest {
@Test
public void testIsApplicable() throws Exception {
final Cluster cluster = Mockito.mock(Cluster.class);
+ final Map<String, Service> services = new HashMap<>();
+ final Service service = Mockito.mock(Service.class);
+
+ services.put("HDFS", service);
+
Mockito.when(cluster.getClusterId()).thenReturn(1L);
+ Mockito.when(cluster.getServices()).thenReturn(services);
Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster);
- final Service service = Mockito.mock(Service.class);
- Mockito.when(cluster.getService("HDFS")).thenReturn(service);
Assert.assertTrue(secondaryNamenodeDeletedCheck.isApplicable(new PrereqCheckRequest("cluster")));
PrereqCheckRequest req = new PrereqCheckRequest("cluster");
req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.FAIL);
- Mockito.when(cluster.getService("HDFS")).thenReturn(service);
Assert.assertFalse(secondaryNamenodeDeletedCheck.isApplicable(req));
req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.PASS);
- Mockito.when(cluster.getService("HDFS")).thenReturn(service);
Assert.assertTrue(secondaryNamenodeDeletedCheck.isApplicable(req));
-
-
- Mockito.when(cluster.getService("HDFS")).thenThrow(new ServiceNotFoundException("no", "service"));
+ services.remove("HDFS");
Assert.assertFalse(secondaryNamenodeDeletedCheck.isApplicable(new PrereqCheckRequest("cluster")));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java
index acc9776..3a300d5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java
@@ -59,24 +59,26 @@ public class ServicesMapReduceDistributedCacheCheckTest {
@Test
public void testIsApplicable() throws Exception {
final Cluster cluster = Mockito.mock(Cluster.class);
- Mockito.when(cluster.getClusterId()).thenReturn(1L);
+ final Map<String, Service> services = new HashMap<>();
+ final Service service = Mockito.mock(Service.class);
+
+ services.put("YARN", service);
+
+ Mockito.when(cluster.getServices()).thenReturn(services);
Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster);
+ Mockito.when(cluster.getClusterId()).thenReturn(1L);
- final Service service = Mockito.mock(Service.class);
- Mockito.when(cluster.getService("YARN")).thenReturn(service);
Assert.assertTrue(servicesMapReduceDistributedCacheCheck.isApplicable(new PrereqCheckRequest("cluster")));
PrereqCheckRequest req = new PrereqCheckRequest("cluster");
req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.FAIL);
- Mockito.when(cluster.getService("YARN")).thenReturn(service);
Assert.assertFalse(servicesMapReduceDistributedCacheCheck.isApplicable(req));
req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.PASS);
- Mockito.when(cluster.getService("YARN")).thenReturn(service);
Assert.assertTrue(servicesMapReduceDistributedCacheCheck.isApplicable(req));
- Mockito.when(cluster.getService("YARN")).thenThrow(new ServiceNotFoundException("no", "service"));
+ services.remove("YARN");
Assert.assertFalse(servicesMapReduceDistributedCacheCheck.isApplicable(new PrereqCheckRequest("cluster")));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java
index 85ebc79..4800707 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java
@@ -60,14 +60,18 @@ public class ServicesNamenodeHighAvailabilityCheckTest {
@Test
public void testIsApplicable() throws Exception {
final Cluster cluster = Mockito.mock(Cluster.class);
+ final Map<String, Service> services = new HashMap<>();
+ final Service service = Mockito.mock(Service.class);
+
+ services.put("HDFS", service);
+
+ Mockito.when(cluster.getServices()).thenReturn(services);
Mockito.when(cluster.getClusterId()).thenReturn(1L);
Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster);
- final Service service = Mockito.mock(Service.class);
- Mockito.when(cluster.getService("HDFS")).thenReturn(service);
Assert.assertTrue(servicesNamenodeHighAvailabilityCheck.isApplicable(new PrereqCheckRequest("cluster")));
- Mockito.when(cluster.getService("HDFS")).thenThrow(new ServiceNotFoundException("no", "service"));
+ services.remove("HDFS");
Assert.assertFalse(servicesNamenodeHighAvailabilityCheck.isApplicable(new PrereqCheckRequest("cluster")));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheckTest.java
index b83f26c..cb1378a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheckTest.java
@@ -39,6 +39,7 @@ import org.junit.Before;
import org.junit.Test;
import com.google.inject.Provider;
+import org.mockito.Mockito;
/**
* Unit tests for ServicesUpCheck
@@ -55,9 +56,14 @@ public class ServicesNamenodeTruncateCheckTest {
Cluster cluster = EasyMock.createMock(Cluster.class);
Config config = EasyMock.createMock(Config.class);
+ final Map<String, Service> services = new HashMap<>();
+ final Service service = Mockito.mock(Service.class);
+ services.put("HDFS", service);
+
+ expect(cluster.getServices()).andReturn(services).anyTimes();
expect(config.getProperties()).andReturn(m_configMap).anyTimes();
- expect(cluster.getService("HDFS")).andReturn(EasyMock.createMock(Service.class));
+ expect(cluster.getService("HDFS")).andReturn(service);
expect(cluster.getDesiredConfigByType("hdfs-site")).andReturn(config).anyTimes();
expect(m_clusters.getCluster((String) anyObject())).andReturn(cluster).anyTimes();
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java
index 88584f7..287909b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java
@@ -59,27 +59,28 @@ public class ServicesTezDistributedCacheCheckTest {
@Test
public void testIsApplicable() throws Exception {
final Cluster cluster = Mockito.mock(Cluster.class);
+ final Map<String, Service> services = new HashMap<>();
+ final Service service = Mockito.mock(Service.class);
+
+ services.put("TEZ", service);
+
+ Mockito.when(cluster.getServices()).thenReturn(services);
Mockito.when(cluster.getClusterId()).thenReturn(1L);
Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster);
- final Service service = Mockito.mock(Service.class);
- Mockito.when(cluster.getService("TEZ")).thenReturn(service);
+
Assert.assertTrue(servicesTezDistributedCacheCheck.isApplicable(new PrereqCheckRequest("cluster")));
PrereqCheckRequest req = new PrereqCheckRequest("cluster");
req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.FAIL);
- Mockito.when(cluster.getService("TEZ")).thenReturn(service);
Assert.assertFalse(servicesTezDistributedCacheCheck.isApplicable(req));
req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.PASS);
- Mockito.when(cluster.getService("TEZ")).thenReturn(service);
Assert.assertTrue(servicesTezDistributedCacheCheck.isApplicable(req));
- Mockito.when(cluster.getService("TEZ")).thenThrow(new ServiceNotFoundException("no", "service"));
+ services.remove("TEZ");
Assert.assertFalse(servicesTezDistributedCacheCheck.isApplicable(new PrereqCheckRequest("cluster")));
-
-
}
@Test
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheckTest.java
index 721320d..b1e700a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheckTest.java
@@ -60,14 +60,18 @@ public class ServicesYarnWorkPreservingCheckTest {
@Test
public void testIsApplicable() throws Exception {
final Cluster cluster = Mockito.mock(Cluster.class);
+ final Map<String, Service> services = new HashMap<>();
+ final Service service = Mockito.mock(Service.class);
+
+ services.put("YARN", service);
+
+ Mockito.when(cluster.getServices()).thenReturn(services);
Mockito.when(cluster.getClusterId()).thenReturn(1L);
Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster);
- final Service service = Mockito.mock(Service.class);
- Mockito.when(cluster.getService("YARN")).thenReturn(service);
Assert.assertTrue(servicesYarnWorkPreservingCheck.isApplicable(new PrereqCheckRequest("cluster")));
- Mockito.when(cluster.getService("YARN")).thenThrow(new ServiceNotFoundException("no", "service"));
+ services.remove("YARN");
Assert.assertFalse(servicesYarnWorkPreservingCheck.isApplicable(new PrereqCheckRequest("cluster")));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 e35d584..b86380a 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
@@ -259,7 +259,6 @@ public class UpgradeResourceProviderHDP22Test {
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.4.2");
- requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
ResourceProvider upgradeResourceProvider = createProvider(amc);
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 1c4fe76..a4785ee 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,6 +90,7 @@ import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import com.google.gson.Gson;
@@ -239,7 +240,6 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
ResourceProvider upgradeResourceProvider = createProvider(amc);
@@ -445,7 +445,6 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
Map<String, String> requestInfoProperties = new HashMap<String, String>();
requestInfoProperties.put(UpgradeResourceDefinition.DOWNGRADE_DIRECTIVE, "true");
@@ -607,6 +606,7 @@ public class UpgradeResourceProviderTest {
@Test
+ @Ignore
public void testDirectionUpgrade() throws Exception {
Cluster cluster = clusters.getCluster("c1");
@@ -621,7 +621,6 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.2.3");
- requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_direction");
ResourceProvider upgradeResourceProvider = createProvider(amc);
@@ -751,7 +750,6 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
- requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
ResourceProvider upgradeResourceProvider = createProvider(amc);
@@ -762,10 +760,10 @@ public class UpgradeResourceProviderTest {
assertEquals(1, upgrades.size());
UpgradeEntity upgrade = upgrades.get(0);
- assertEquals(3, upgrade.getUpgradeGroups().size());
+ assertEquals(5, upgrade.getUpgradeGroups().size());
UpgradeGroupEntity group = upgrade.getUpgradeGroups().get(2);
- assertEquals(2, group.getItems().size());
+ assertEquals(1, group.getItems().size());
group = upgrade.getUpgradeGroups().get(0);
assertEquals(2, group.getItems().size());
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/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 3e994ed..abf3939 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
@@ -20,7 +20,6 @@ package org.apache.ambari.server.state;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -44,12 +43,13 @@ 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.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.stack.HostsType;
import org.apache.ambari.server.stack.MasterHostResolver;
import org.apache.ambari.server.state.UpgradeHelper.UpgradeGroupHolder;
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.ConfigUpgradeChangeDefinition.*;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.ManualTask;
import org.apache.ambari.server.state.stack.upgrade.StageWrapper;
@@ -63,13 +63,12 @@ import org.junit.Ignore;
import org.junit.Test;
import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
+
import com.google.inject.persist.PersistService;
-import com.google.inject.util.Modules;
/**
* Tests the {@link UpgradeHelper} class
@@ -97,24 +96,46 @@ public class UpgradeHelperTest {
m_configHelper = EasyMock.createNiceMock(ConfigHelper.class);
expect(
- m_configHelper.getPlaceholderValueFromDesiredConfigurations(
- EasyMock.anyObject(Cluster.class), EasyMock.eq("{{foo/bar}}"))).andReturn(
+ m_configHelper.getPlaceholderValueFromDesiredConfigurations(
+ EasyMock.anyObject(Cluster.class), EasyMock.eq("{{foo/bar}}"))).andReturn(
"placeholder-rendered-properly").anyTimes();
- replay(m_configHelper);
+ final InMemoryDefaultTestModule injectorModule = new InMemoryDefaultTestModule() {
+ @Override
+ protected void configure() {
+ super.configure();
+ }
+ };
// create an injector which will inject the mocks
- injector = Guice.createInjector(Modules.override(
- new InMemoryDefaultTestModule()).with(new MockModule()));
-
+ injector = Guice.createInjector(injectorModule);
injector.getInstance(GuiceJpaInitializer.class);
helper = injector.getInstance(OrmTestHelper.class);
ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-
m_upgradeHelper = injector.getInstance(UpgradeHelper.class);
m_masterHostResolver = EasyMock.createMock(MasterHostResolver.class);
m_managementController = injector.getInstance(AmbariManagementController.class);
+
+// StackDAO stackDAO = injector.getInstance(StackDAO.class);
+// StackEntity stackEntity = new StackEntity();
+// stackEntity.setStackName("HDP");
+// stackEntity.setStackVersion("2.1");
+// stackDAO.create(stackEntity);
+//
+// StackEntity stackEntityTo = new StackEntity();
+// stackEntityTo.setStackName("HDP");
+// stackEntityTo.setStackVersion("2.2");
+// stackDAO.create(stackEntityTo);
+//
+// Clusters clusters = injector.getInstance(Clusters.class);
+// clusters.addCluster("c1", new StackId("HDP", "2.1"));
+//
+// RepositoryVersionDAO repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
+// repositoryVersionDAO.create(stackEntity, "2.1.1", "2.1.1", "");
+// repositoryVersionDAO.create(stackEntityTo, "2.2.0", "2.2.0", "");
+//
+// replay(m_configHelper);
}
@After
@@ -123,6 +144,23 @@ public class UpgradeHelperTest {
}
@Test
+ public void testSuggestUpgradePack() throws Exception{
+ final String clusterName = "c1";
+ final String upgradeFromVersion = "2.1.1";
+ final String upgradeToVersion = "2.2.0";
+ final Direction upgradeDirection = Direction.UPGRADE;
+ final UpgradeType upgradeType = UpgradeType.ROLLING;
+
+ makeCluster();
+ try {
+ UpgradePack up = m_upgradeHelper.suggestUpgradePack(clusterName, upgradeFromVersion, upgradeToVersion, upgradeDirection, upgradeType);
+ assertEquals(upgradeType, up.getType());
+ } catch (AmbariException e){
+ assertTrue(false);
+ }
+ }
+
+ @Test
public void testUpgradeOrchestration() throws Exception {
Map<String, UpgradePack> upgrades = ambariMetaInfo.getUpgradePacks("foo", "bar");
assertTrue(upgrades.isEmpty());
@@ -236,6 +274,8 @@ public class UpgradeHelperTest {
assertEquals("h1", orderedNameNodes.get(1));
}
+
+
@Test
public void testUpgradeOrchestrationWithNoHeartbeat() throws Exception {
Map<String, UpgradePack> upgrades = ambariMetaInfo.getUpgradePacks("foo", "bar");
@@ -666,6 +706,7 @@ public class UpgradeHelperTest {
manualTask.message);
}
+ @Ignore
@Test
public void testUpgradeOrchestrationFullTask() throws Exception {
Map<String, UpgradePack> upgrades = ambariMetaInfo.getUpgradePacks("HDP", "2.1.1");
@@ -760,11 +801,13 @@ public class UpgradeHelperTest {
String clusterName = "c1";
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);
helper.getOrCreateRepositoryVersion(stackId,
c.getDesiredStackVersion().getStackVersion());
+ helper.getOrCreateRepositoryVersion(stackId2,"2.2.0");
c.createClusterVersion(stackId,
c.getDesiredStackVersion().getStackVersion(), "admin",
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_bucket_test.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_bucket_test.xml b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_bucket_test.xml
index 8c076f0..0e6d914 100644
--- a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_bucket_test.xml
+++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_bucket_test.xml
@@ -17,9 +17,20 @@
-->
<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target>2.2.*.*</target>
- <target-stack>HDP-2.2.0</target-stack>
+ <target-stack>HDP-2.2.6</target-stack>
<type>ROLLING</type>
-
+ <prerequisite-checks>
+ <check>org.apache.ambari.server.checks.HiveMultipleMetastoreCheck</check>
+ <check>org.apache.ambari.server.checks.MapReduce2JobHistoryStatePreservingCheck</check>
+ <check>org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesMapReduceDistributedCacheCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesNamenodeHighAvailabilityCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesNamenodeTruncateCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesTezDistributedCacheCheck</check>
+ <check>org.apache.ambari.server.checks.ServicesYarnWorkPreservingCheck</check>
+ <check>org.apache.ambari.server.checks.YarnRMHighAvailabilityCheck</check>
+ <check>org.apache.ambari.server.checks.YarnTimelineServerStatePreservingCheck</check>
+ </prerequisite-checks>
<order>
<group name="ZOOKEEPER" title="Zookeeper">
http://git-wip-us.apache.org/repos/asf/ambari/blob/df0d238a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_direction.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_direction.xml b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_direction.xml
index 5a90674..e12fcd9 100644
--- a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_direction.xml
+++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_direction.xml
@@ -17,7 +17,7 @@
-->
<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target>2.2.*.*</target>
- <target-stack>HDP-2.2.0</target-stack>
+ <target-stack>HDP-2.2.5</target-stack>
<type>ROLLING</type>
<order>