You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2018/06/21 16:06:59 UTC
[ambari] branch branch-feature-AMBARI-14714 updated: [AMBARI-24156]
- Remove RepositoryVersionEntity and Begin Switching Checks To Use
UpgradePlan (#1589)
This is an automated email from the ASF dual-hosted git repository.
jonathanhurley pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-feature-AMBARI-14714 by this push:
new 4957146 [AMBARI-24156] - Remove RepositoryVersionEntity and Begin Switching Checks To Use UpgradePlan (#1589)
4957146 is described below
commit 4957146b8dc26846ec2ffd18a90fb5c1b53dca47
Author: Jonathan Hurley <jo...@apache.org>
AuthorDate: Thu Jun 21 12:06:56 2018 -0400
[AMBARI-24156] - Remove RepositoryVersionEntity and Begin Switching Checks To Use UpgradePlan (#1589)
---
.../ambari/annotations/ExperimentalFeature.java | 15 +-
.../api/query/render/ClusterBlueprintRenderer.java | 2 +-
.../server/checks/AutoStartDisabledCheck.java | 19 +--
.../ambari/server/checks/CheckDescription.java | 128 +++++++++++----
...tractCheckDescriptor.java => ClusterCheck.java} | 169 +++++++++++--------
.../server/checks/ComponentsExistInRepoCheck.java | 140 ++++++++--------
.../server/checks/ComponentsInstallationCheck.java | 73 +++++----
.../server/checks/ConfigurationMergeCheck.java | 81 ++++++----
.../HardcodedStackVersionPropertiesCheck.java | 19 ++-
.../apache/ambari/server/checks/HealthCheck.java | 20 ++-
.../server/checks/HostMaintenanceModeCheck.java | 30 ++--
.../ambari/server/checks/HostsHeartbeatCheck.java | 21 +--
.../server/checks/HostsMasterMaintenanceCheck.java | 74 ++++-----
.../ambari/server/checks/PreUpgradeCheck.java | 98 ++++++++++++
.../server/checks/PreviousUpgradeCompleted.java | 16 +-
.../server/checks/ServiceCheckValidityCheck.java | 20 ++-
.../ambari/server/checks/ServicePresenceCheck.java | 26 +--
.../checks/ServicesMaintenanceModeCheck.java | 31 ++--
.../ambari/server/checks/ServicesUpCheck.java | 178 +++++++++++----------
.../apache/ambari/server/checks/UpgradeCheck.java | 2 +-
.../ambari/server/checks/UpgradeCheckRegistry.java | 37 +++--
.../ambari/server/checks/VersionMismatchCheck.java | 29 ++--
.../server/controller/ActionExecutionContext.java | 34 ----
.../ambari/server/controller/ControllerModule.java | 29 ++--
.../server/controller/PrereqCheckRequest.java | 110 ++++---------
.../controller/PrereqCheckRequestFactory.java | 38 +++++
.../internal/CompatibleRepositoryVersion.java | 62 -------
.../internal/PreUpgradeCheckResourceProvider.java | 92 ++---------
.../internal/UpgradeResourceProvider.java | 4 -
.../HostComponentVersionAdvertisedEvent.java | 2 +-
.../orm/entities/RepositoryVersionEntity.java | 85 ----------
.../ambari/server/orm/entities/UpgradeEntity.java | 21 +--
.../apache/ambari/server/state/CheckHelper.java | 78 ++++-----
.../org/apache/ambari/server/state/Cluster.java | 10 --
.../ambari/server/state/ServiceComponent.java | 8 +-
.../ambari/server/state/ServiceComponentImpl.java | 12 +-
.../apache/ambari/server/state/UpgradeContext.java | 25 +--
.../ambari/server/state/cluster/ClusterImpl.java | 13 +-
...requisiteCheck.java => UpgradeCheckResult.java} | 29 ++--
.../stack/upgrade/RepositoryVersionHelper.java | 70 --------
.../svccomphost/ServiceComponentHostSummary.java | 91 -----------
.../src/main/resources/Ambari-DDL-Derby-CREATE.sql | 1 -
.../src/main/resources/Ambari-DDL-MySQL-CREATE.sql | 1 -
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 1 -
.../main/resources/Ambari-DDL-Postgres-CREATE.sql | 1 -
.../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 1 -
.../main/resources/Ambari-DDL-SQLServer-CREATE.sql | 1 -
.../query/render/ClusterBlueprintRendererTest.java | 2 +-
.../server/checks/AutoStartDisabledCheckTest.java | 39 +++--
...ckDescriptorTest.java => ClusterCheckTest.java} | 34 ++--
.../checks/ComponentExistsInRepoCheckTest.java | 93 +++++------
.../checks/ComponentsInstallationCheckTest.java | 47 +++---
.../server/checks/ConfigurationMergeCheckTest.java | 44 ++---
.../ambari/server/checks/HealthCheckTest.java | 24 +--
.../checks/HostMaintenanceModeCheckTest.java | 40 +++--
.../server/checks/HostsHeartbeatCheckTest.java | 30 ++--
.../checks/HostsMasterMaintenanceCheckTest.java | 39 +++--
.../checks/PreviousUpgradeCompletedTest.java | 20 +--
.../checks/ServiceCheckValidityCheckTest.java | 47 ++++--
.../server/checks/ServicePresenceCheckTest.java | 74 +++++----
.../checks/ServicesMaintenanceModeCheckTest.java | 21 +--
.../ambari/server/checks/ServicesUpCheckTest.java | 46 +++---
.../server/checks/UpgradeCheckOrderTest.java | 10 +-
.../server/checks/VersionMismatchCheckTest.java | 22 ++-
.../PreUpgradeCheckResourceProviderTest.java | 5 +-
.../UpgradeSummaryResourceProviderTest.java | 1 -
.../ambari/server/orm/dao/UpgradeDAOTest.java | 5 -
.../server/sample/checks/SampleServiceCheck.java | 16 +-
.../upgrades/ComponentVersionCheckActionTest.java | 2 -
.../upgrades/CreateAndConfigureActionTest.java | 1 -
.../ambari/server/state/CheckHelperTest.java | 77 +++++----
.../services/RetryUpgradeActionServiceTest.java | 1 -
.../ambari/server/topology/AmbariContextTest.java | 2 +-
73 files changed, 1321 insertions(+), 1468 deletions(-)
diff --git a/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java b/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
index c5cff1f..d85d51c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
+++ b/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
@@ -40,19 +40,24 @@ public enum ExperimentalFeature {
MULTI_SERVICE,
/**
+ * Component version reporting, storage, and comparison.
+ */
+ VERSION_REPORTING,
+
+ /**
* For code that is for upgrading Mpacks. Use this to mark code that may ultimately
* be removed.
*/
MPACK_UPGRADES,
/**
- * Used to mark code that is required for successful removal and refactoring
- * when repo versions are dropped.
+ * Use this annotation when a test needs to be written.
*/
- REPO_VERSION_REMOVAL,
+ UNIT_TEST_REQUIRED,
/**
- * Use this annotation when a test needs to be written.
+ * Loading and dealing with upgrade checks dynamically and injecting
+ * configurations into them.
*/
- UNIT_TEST_REQUIRED;
+ UPGRADE_PACK_PRE_CHECKS;
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java b/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java
index 8ab41f4..f6a2625 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java
@@ -82,7 +82,7 @@ import com.google.common.collect.ImmutableMap;
* Renderer which renders a cluster resource as a blueprint.
*/
@Experimental(
- feature = ExperimentalFeature.REPO_VERSION_REMOVAL,
+ feature = ExperimentalFeature.MULTI_SERVICE,
comment = "Blueprints must get mpack data from a different endpoint, not stack_versions")
public class ClusterBlueprintRenderer extends BaseRenderer implements Renderer {
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/AutoStartDisabledCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/AutoStartDisabledCheck.java
index a0d9906..70029e2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/AutoStartDisabledCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/AutoStartDisabledCheck.java
@@ -23,7 +23,7 @@ import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
@@ -37,7 +37,7 @@ import com.google.inject.Singleton;
@UpgradeCheck(
group = UpgradeCheckGroup.CONFIGURATION_WARNING,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class AutoStartDisabledCheck extends AbstractCheckDescriptor {
+public class AutoStartDisabledCheck extends ClusterCheck {
static final String CLUSTER_ENV_TYPE = "cluster-env";
static final String RECOVERY_ENABLED_KEY = "recovery_enabled";
@@ -63,23 +63,24 @@ public class AutoStartDisabledCheck extends AbstractCheckDescriptor {
* {@inheritDoc}
*/
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+ public UpgradeCheckResult perform(PrereqCheckRequest request) throws AmbariException {
String autoStartEnabled = getProperty(request, CLUSTER_ENV_TYPE, RECOVERY_ENABLED_KEY);
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
// !!! auto-start is already disabled
if (!Boolean.valueOf(autoStartEnabled)) {
- return;
+ return result;
}
// !!! double check the value is AUTO_START. it's the only supported value (and there's no enum for it)
String recoveryType = getProperty(request, CLUSTER_ENV_TYPE, RECOVERY_TYPE_KEY);
if (StringUtils.equals(recoveryType, RECOVERY_AUTO_START)) {
-
- prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request));
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.getFailedOn().add(request.getClusterName());
-
+ result.setFailReason(getFailReason(result, request));
+ result.setStatus(PrereqCheckStatus.FAIL);
+ result.getFailedOn().add(request.getClusterName());
}
+
+ return result;
}
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
index 57be5f7..0e07945 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
@@ -17,44 +17,53 @@
*/
package org.apache.ambari.server.checks;
+import java.util.LinkedHashSet;
import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
import org.apache.ambari.server.state.stack.PrereqCheckType;
+import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableMap;
/**
- * Enum that wraps the various type, text and failure messages for the checks
- * done for Stack Upgrades.
+ * The {@link CheckDescription} class wraps information about an upgrade check
+ * in a way that is extendable by 3rd party {@link PreUpgradeCheck}s.
*/
public class CheckDescription {
+ /**
+ * All of the instantiated {@link CheckDescription}s.
+ */
+ private static final Set<CheckDescription> s_values = new LinkedHashSet<>();
+
public static CheckDescription HOSTS_HEARTBEAT = new CheckDescription("HOSTS_HEARTBEAT",
PrereqCheckType.HOST,
"All hosts must be communicating with Ambari. Hosts which are not reachable should be placed in Maintenance Mode.",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"There are hosts which are not communicating with Ambari.").build());
public static CheckDescription HEALTH = new CheckDescription("HEALTH",
PrereqCheckType.CLUSTER,
"Cluster Health",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"The following issues have been detected on this cluster and should be addressed before upgrading: %s").build());
public static CheckDescription SERVICE_CHECK = new CheckDescription("SERVICE_CHECK",
PrereqCheckType.SERVICE,
"Last Service Check should be more recent than the last configuration change for the given service",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"The following service configurations have been updated and their Service Checks should be run again: %s").build());
public static CheckDescription HOSTS_MAINTENANCE_MODE = new CheckDescription("HOSTS_MAINTENANCE_MODE",
PrereqCheckType.HOST,
"Hosts in Maintenance Mode will be excluded from the upgrade.",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"There are hosts in Maintenance Mode which excludes them from being upgraded.")
.put(HostMaintenanceModeCheck.KEY_CANNOT_START_HOST_ORDERED,
"The following hosts cannot be in Maintenance Mode: {{fails}}.").build());
@@ -63,53 +72,49 @@ public class CheckDescription {
PrereqCheckType.HOST,
"Hosts in Maintenance Mode must not have any master components",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
- "The following hosts must not be in in Maintenance Mode since they host Master components: {{fails}}.")
- .put(HostsMasterMaintenanceCheck.KEY_NO_UPGRADE_NAME,
- "Could not find suitable upgrade pack for %s %s to version {{version}}.")
- .put(HostsMasterMaintenanceCheck.KEY_NO_UPGRADE_PACK,
- "Could not find upgrade pack named %s.").build());
+ .put(ClusterCheck.DEFAULT,
+ "The following hosts must not be in in Maintenance Mode since they host Master components: {{fails}}.").build());
public static CheckDescription SERVICES_MAINTENANCE_MODE = new CheckDescription("SERVICES_MAINTENANCE_MODE",
PrereqCheckType.SERVICE,
"No services can be in Maintenance Mode",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"The following Services must not be in Maintenance Mode: {{fails}}.").build());
public static CheckDescription SERVICES_UP = new CheckDescription("SERVICES_UP",
PrereqCheckType.SERVICE,
"All services must be started",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"The following Services must be started: {{fails}}. Try to do a Stop & Start in case they were started outside of Ambari.").build());
public static CheckDescription COMPONENTS_INSTALLATION = new CheckDescription("COMPONENTS_INSTALLATION",
PrereqCheckType.SERVICE,
"All service components must be installed",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"The following Services must be reinstalled: {{fails}}. Try to reinstall the service components in INSTALL_FAILED state.").build());
public static CheckDescription PREVIOUS_UPGRADE_COMPLETED = new CheckDescription("PREVIOUS_UPGRADE_COMPLETED",
PrereqCheckType.CLUSTER,
"A previous upgrade did not complete.",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"The last upgrade attempt did not complete. {{fails}}").build());
public static CheckDescription CONFIG_MERGE = new CheckDescription("CONFIG_MERGE",
PrereqCheckType.CLUSTER,
"Configuration Merge Check",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"The following config types will have values overwritten: %s").build());
public static CheckDescription HARDCODED_STACK_VERSION_PROPERTIES_CHECK = new CheckDescription("HARDCODED_STACK_VERSION_PROPERTIES_CHECK",
PrereqCheckType.CLUSTER,
"Found hardcoded stack version in property value.",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"Some properties seem to contain hardcoded stack version string \"%s\"." +
" That is a potential problem when doing stack update.").build());
@@ -117,14 +122,14 @@ public class CheckDescription {
PrereqCheckType.HOST,
"All components must be reporting the expected version",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"There are components which are not reporting the expected stack version: \n%s").build());
public static CheckDescription SERVICE_PRESENCE_CHECK = new CheckDescription("SERVICE_PRESENCE_CHECK",
PrereqCheckType.SERVICE,
"Service Is Not Supported For Upgrades",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"The %s service is currently installed on the cluster. " +
"This service does not support upgrades and must be removed before the upgrade can continue. " +
"After upgrading, %s can be reinstalled")
@@ -137,7 +142,7 @@ public class CheckDescription {
PrereqCheckType.CLUSTER,
"Auto-Start Disabled Check",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"Auto Start must be disabled before performing an Upgrade. To disable Auto Start, navigate to " +
"Admin > Service Auto Start. Turn the toggle switch off to Disabled and hit Save.").build());
@@ -146,7 +151,7 @@ public class CheckDescription {
PrereqCheckType.CLUSTER,
"LZO Codec Check",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"You have LZO codec enabled in the core-site config of your cluster. LZO is no longer installed automatically. " +
"If any hosts require LZO, it should be installed before starting the upgrade. " +
"Consult Ambari documentation for instructions on how to do this.").build());
@@ -155,33 +160,51 @@ public class CheckDescription {
PrereqCheckType.CLUSTER,
"Verify Java version requirement",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT, "Ambari requires JDK with minimum version %s. Reconfigure Ambari with a JDK that meets the version requirement.")
+ .put(ClusterCheck.DEFAULT, "Ambari requires JDK with minimum version %s. Reconfigure Ambari with a JDK that meets the version requirement.")
.build());
public static CheckDescription COMPONENTS_EXIST_IN_TARGET_REPO = new CheckDescription("COMPONENTS_EXIST_IN_TARGET_REPO",
PrereqCheckType.CLUSTER,
"Verify Cluster Components Exist In Target Repository",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT, "The following components do not exist in the target repository's stack. They must be removed from the cluster before upgrading.")
+ .put(ClusterCheck.DEFAULT, "The following components do not exist in the target repository's stack. They must be removed from the cluster before upgrading.")
.build());
public static CheckDescription VALID_SERVICES_INCLUDED_IN_REPOSITORY = new CheckDescription("VALID_SERVICES_INCLUDED_IN_REPOSITORY",
PrereqCheckType.CLUSTER,
"The repository is missing services which are required",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"The following services are included in the upgrade but the repository is missing their dependencies:\n%s").build());
-
- private String m_name;
- private PrereqCheckType m_type;
- private String m_description;
+ /**
+ * A unique identifier.
+ */
+ private final String m_name;
+ private final PrereqCheckType m_type;
+ private final String m_description;
private Map<String, String> m_fails;
+
+ /**
+ * Constructor.
+ *
+ * @param name
+ * @param type
+ * @param description
+ * @param fails
+ */
public CheckDescription(String name, PrereqCheckType type, String description, Map<String, String> fails) {
m_name = name;
m_type = type;
m_description = description;
m_fails = fails;
+
+ if (s_values.contains(this)) {
+ throw new RuntimeException("Unable to add the upgrade check description named " + m_name
+ + " because it already is registered");
+ }
+
+ s_values.add(this);
}
/**
@@ -192,6 +215,15 @@ public class CheckDescription {
}
/**
+ * Gets all of the registered check descriptions.
+ *
+ * @return
+ */
+ public Set<CheckDescription> values() {
+ return s_values;
+ }
+
+ /**
* @return the type of check
*/
public PrereqCheckType getType() {
@@ -212,4 +244,42 @@ public class CheckDescription {
public String getFail(String key) {
return m_fails.containsKey(key) ? m_fails.get(key) : "";
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode() {
+ return Objects.hash(m_name);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object object) {
+ if (null == object) {
+ return false;
+ }
+
+ if (this == object) {
+ return true;
+ }
+
+ if (object.getClass() != getClass()) {
+ return false;
+ }
+
+ CheckDescription that = (CheckDescription) object;
+
+ return Objects.equals(m_name, that.m_name);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this).add("name", m_name).toString();
+ }
}
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/ClusterCheck.java
similarity index 74%
rename from ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
rename to ambari-server/src/main/java/org/apache/ambari/server/checks/ClusterCheck.java
index c48b5e0..97250b4 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/ClusterCheck.java
@@ -24,37 +24,44 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
+import java.util.stream.Collectors;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.orm.dao.UpgradeDAO;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.UpgradePlanDetailEntity;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.Mpack;
+import org.apache.ambari.server.state.Mpack.ModuleVersionChange;
+import org.apache.ambari.server.state.Mpack.MpackChangeSummary;
import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceGroup;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrereqCheckType;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
-import org.apache.ambari.server.state.stack.UpgradePack;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.annotate.JsonProperty;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gson.Gson;
import com.google.inject.Inject;
import com.google.inject.Provider;
/**
- * Describes prerequisite check.
+ * A {@link ClusterCheck} is used to run a pre-upgrade check against a condition
+ * that is not dependent on any installed service.
*/
-public abstract class AbstractCheckDescriptor {
+public abstract class ClusterCheck implements PreUpgradeCheck {
protected static final String DEFAULT = "default";
@@ -76,50 +83,45 @@ public abstract class AbstractCheckDescriptor {
@Inject
Gson gson;
- private CheckDescription m_description;
+ private final CheckDescription m_description;
/**
* Constructor.
*
* @param description description
*/
- protected AbstractCheckDescriptor(CheckDescription description) {
+ protected ClusterCheck(CheckDescription description) {
m_description = description;
}
/**
- * Gets the set of services that this check is associated with. If the check
- * is not associated with a particular service, then this should be an empty
- * set.
- *
- * @return a set of services which will determine whether this check is
- * applicable.
+ * {@inheritDoc}
*/
+ @Override
+ public CheckDescription getCheckDescrption() {
+ return m_description;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public Set<String> getApplicableServices() {
return Collections.emptySet();
}
/**
- * Gets any additional qualifications which an upgrade check should run in
- * order to determine if it's applicable to the upgrade.
- *
- * @return a list of qualifications, or an empty list.
+ * {@inheritDoc}
*/
+ @Override
public List<CheckQualification> getQualifications() {
return Collections.emptyList();
}
/**
- * Tests if the prerequisite check is applicable to given upgrade request. If
- * a check requires some extra processing
- *
- * @param request
- * prerequisite check request
- * @return true if check should be performed
- *
- * @throws org.apache.ambari.server.AmbariException
- * if server error happens
+ * {@inheritDoc}
*/
+ @Override
public final boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
List<CheckQualification> qualifications = Lists.newArrayList(
new ServiceQualification());
@@ -137,30 +139,16 @@ public abstract class AbstractCheckDescriptor {
/**
- * Executes check against given cluster.
- *
- * @param prerequisiteCheck dto for upgrade check results
- * @param request pre upgrade check request
- *
- * @throws AmbariException if server error happens
+ * {@inheritDoc}
*/
- public abstract void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException;
+ @Override
+ public abstract UpgradeCheckResult perform(PrereqCheckRequest request) throws AmbariException;
/**
- * Gets the description of the check.
- *
- * @return the description (not {@code null}).
- */
- public CheckDescription getDescription() {
- return m_description;
- }
-
- /**
- * Gets the type of check.
- *
- * @return the type of check (not {@code null}).
+ * {@inheritDoc}
*/
+ @Override
public PrereqCheckType getType() {
return m_description.getType();
}
@@ -171,7 +159,7 @@ public abstract class AbstractCheckDescriptor {
* @param request the request
* @return the failure string
*/
- protected String getFailReason(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ protected String getFailReason(UpgradeCheckResult prerequisiteCheck, PrereqCheckRequest request)
throws AmbariException {
return getFailReason(DEFAULT, prerequisiteCheck, request);
}
@@ -192,8 +180,8 @@ public abstract class AbstractCheckDescriptor {
*/
protected String getProperty(PrereqCheckRequest request, String configType, String propertyName)
throws AmbariException {
- final String clusterName = request.getClusterName();
- final Cluster cluster = clustersProvider.get().getCluster(clusterName);
+ UpgradePlanEntity upgradePlan = request.getUpgradePlan();
+ final Cluster cluster = clustersProvider.get().getCluster(upgradePlan.getClusterId());
final Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs();
final DesiredConfig desiredConfig = desiredConfigs.get(configType);
@@ -214,24 +202,18 @@ public abstract class AbstractCheckDescriptor {
* @param request the request
* @return the failure string
*/
- protected String getFailReason(String key, PrerequisiteCheck prerequisiteCheck,
+ protected String getFailReason(String key, UpgradeCheckResult prerequisiteCheck,
PrereqCheckRequest request) throws AmbariException {
+ UpgradePlanEntity upgradePlan = request.getUpgradePlan();
String fail = m_description.getFail(key);
- RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion();
- if (fail.contains("{{version}}") && null != repositoryVersion) {
- fail = fail.replace("{{version}}", repositoryVersion.getVersion());
- }
-
if (fail.contains("{{fails}}")) {
LinkedHashSet<String> names = prerequisiteCheck.getFailedOn();
// If Type=PrereqCheckType.HOST, names list is already populated
- if (getDescription().getType() == PrereqCheckType.SERVICE) {
+ if (m_description.getType() == PrereqCheckType.SERVICE) {
Clusters clusters = clustersProvider.get();
- AmbariMetaInfo metaInfo = ambariMetaInfo.get();
-
- Cluster c = clusters.getCluster(request.getClusterName());
+ Cluster c = clusters.getCluster(upgradePlan.getClusterId());
Map<String, Service> services = c.getServicesByName();
LinkedHashSet<String> displays = new LinkedHashSet<>();
@@ -276,12 +258,9 @@ public abstract class AbstractCheckDescriptor {
}
/**
- * Gets whether this upgrade check is required for the specified
- * {@link UpgradeType}. Checks which are marked as required do not need to be
- * explicitely declared in the {@link UpgradePack} to be run.
- *
- * @return {@code true} if it is required, {@code false} otherwise.
+ * {@inheritDoc}
*/
+ @Override
public boolean isRequired(UpgradeType upgradeType) {
UpgradeType[] upgradeTypes = getClass().getAnnotation(UpgradeCheck.class).required();
for (UpgradeType requiredType : upgradeTypes) {
@@ -294,16 +273,64 @@ public abstract class AbstractCheckDescriptor {
}
/**
- * Gets the services participating in the upgrade from the VDF.
+ * Gets the services participating in the upgrade as a flat set of services
+ * which are not associated with any service groups.
*
* @param request
* the upgrade check request.
- * @return the services participating in the upgrade, which can either be all
- * of the cluster's services or a subset based on repository type.
+ * @return the services participating in the upgrade
*/
- final Set<String> getServicesInUpgrade(PrereqCheckRequest request) throws AmbariException {
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- return Sets.newHashSet();
+ final Set<String> getDistinctServicesInUpgrade(PrereqCheckRequest request)
+ throws AmbariException {
+ Set<String> servicesInUpgrade = Sets.newHashSet();
+ UpgradePlanEntity upgradePlan = request.getUpgradePlan();
+ final Cluster cluster = clustersProvider.get().getCluster(upgradePlan.getClusterId());
+ List<UpgradePlanDetailEntity> details = upgradePlan.getDetails();
+ for (UpgradePlanDetailEntity detail : details) {
+ ServiceGroup serviceGroup = cluster.getServiceGroup(detail.getServiceGroupId());
+ Mpack sourceMpack = ambariMetaInfo.get().getMpack(serviceGroup.getMpackId());
+ Mpack targetMpack = ambariMetaInfo.get().getMpack(detail.getMpackTargetId());
+ MpackChangeSummary changeSummary = sourceMpack.getChangeSummary(targetMpack);
+ Set<ModuleVersionChange> moduleChanges = changeSummary.getModuleVersionChanges();
+
+ servicesInUpgrade.addAll(
+ moduleChanges.stream().map(moduleChange -> moduleChange.getSource().getName()).collect(
+ Collectors.toSet()));
+ }
+
+ return servicesInUpgrade;
+ }
+
+ /**
+ * Gets the services participating in the upgrade organized by their service
+ * groups.
+ *
+ * @param request
+ * @return the service groups and their services which are participating in
+ * the upgrade.
+ * @throws AmbariException
+ */
+ final Map<ServiceGroup, Set<String>> getServicesInUpgrade(PrereqCheckRequest request) throws AmbariException {
+ Map<ServiceGroup, Set<String>> serviceGroupsInUpgrade = Maps.newLinkedHashMap();
+ UpgradePlanEntity upgradePlan = request.getUpgradePlan();
+ final Cluster cluster = clustersProvider.get().getCluster(upgradePlan.getClusterId());
+ List<UpgradePlanDetailEntity> details = upgradePlan.getDetails();
+ for (UpgradePlanDetailEntity detail : details) {
+ Set<String> servicesInUpgrade = Sets.newHashSet();
+ ServiceGroup serviceGroup = cluster.getServiceGroup(detail.getServiceGroupId());
+ serviceGroupsInUpgrade.put(serviceGroup, servicesInUpgrade);
+
+ Mpack sourceMpack = ambariMetaInfo.get().getMpack(serviceGroup.getMpackId());
+ Mpack targetMpack = ambariMetaInfo.get().getMpack(detail.getMpackTargetId());
+ MpackChangeSummary changeSummary = sourceMpack.getChangeSummary(targetMpack);
+ Set<ModuleVersionChange> moduleChanges = changeSummary.getModuleVersionChanges();
+
+ servicesInUpgrade.addAll(
+ moduleChanges.stream().map(moduleChange -> moduleChange.getSource().getName()).collect(
+ Collectors.toSet()));
+ }
+
+ return serviceGroupsInUpgrade;
}
/**
@@ -327,7 +354,7 @@ public abstract class AbstractCheckDescriptor {
/**
* The {@link ServiceQualification} class is used to determine if the
* service(s) associated with an upgraade check are both installed in the
- * cluster and included in thr upgrade.
+ * cluster and included in the upgrade.
* <p/>
* If a service is installed but not included in the upgrade (for example of
* the upgrade is a patch upgrade), then the check should not qualify to run.
@@ -348,7 +375,7 @@ public abstract class AbstractCheckDescriptor {
return true;
}
- Set<String> servicesForUpgrade = getServicesInUpgrade(request);
+ Set<String> servicesForUpgrade = getDistinctServicesInUpgrade(request);
for (String serviceInUpgrade : servicesForUpgrade) {
if (applicableServices.contains(serviceInUpgrade)) {
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsExistInRepoCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsExistInRepoCheck.java
index 8bbada2..d8fad10 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsExistInRepoCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsExistInRepoCheck.java
@@ -27,15 +27,17 @@ import java.util.stream.Collectors;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.StackAccessException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.UpgradePlanDetailEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.Mpack;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.ambari.server.state.ServiceGroup;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
@@ -50,7 +52,7 @@ import com.google.inject.Singleton;
@UpgradeCheck(
group = UpgradeCheckGroup.TOPOLOGY,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class ComponentsExistInRepoCheck extends AbstractCheckDescriptor {
+public class ComponentsExistInRepoCheck extends ClusterCheck {
/**
* Constructor.
@@ -60,94 +62,104 @@ public class ComponentsExistInRepoCheck extends AbstractCheckDescriptor {
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
- RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion();
- StackId sourceStack = request.getSourceStackId();
- StackId targetStack = repositoryVersion.getStackId();
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
- Set<ServiceDetail> failedServices = new TreeSet<>();
- Set<ServiceComponentDetail> failedComponents = new TreeSet<>();
+ for (UpgradePlanDetailEntity upgradeDetail : request.getUpgradePlan().getDetails()) {
+ ServiceGroup serviceGroup = cluster.getServiceGroup(upgradeDetail.getServiceGroupId());
+ Mpack targetMpack = ambariMetaInfo.get().getMpack(upgradeDetail.getMpackTargetId());
- Set<String> servicesInUpgrade = getServicesInUpgrade(request);
- for (String serviceName : servicesInUpgrade) {
- try {
- Service service = cluster.getService(serviceName);
+ StackId sourceStack = serviceGroup.getStackId();
+ StackId targetStack = targetMpack.getStackId();
+
+ Set<ServiceDetail> failedServices = new TreeSet<>();
+ Set<ServiceComponentDetail> failedComponents = new TreeSet<>();
+
+ for (Service service : serviceGroup.getServices()) {
+ String serviceName = service.getName();
String serviceType = service.getServiceType();
- ServiceInfo serviceInfo = ambariMetaInfo.get().getService(targetStack.getStackName(),
- targetStack.getStackVersion(), serviceType);
- if (serviceInfo.isDeleted() || !serviceInfo.isValid()) {
- failedServices.add(new ServiceDetail(serviceName));
- continue;
- }
+ try {
+ ServiceInfo serviceInfo = ambariMetaInfo.get().getService(targetStack.getStackName(),
+ targetStack.getStackVersion(), serviceType);
- Map<String, ServiceComponent> componentsInUpgrade = service.getServiceComponents();
- for (String componentName : componentsInUpgrade.keySet()) {
- try {
- ComponentInfo componentInfo = ambariMetaInfo.get().getComponent(
- targetStack.getStackName(), targetStack.getStackVersion(), serviceType,
- componentName);
+ if (serviceInfo.isDeleted() || !serviceInfo.isValid()) {
+ failedServices.add(new ServiceDetail(serviceName));
+ continue;
+ }
- // if this component isn't included in the upgrade, then skip it
- if (!componentInfo.isVersionAdvertised()) {
- continue;
- }
+ Map<String, ServiceComponent> componentsInUpgrade = service.getServiceComponents();
+ for (String componentName : componentsInUpgrade.keySet()) {
+ try {
+ ComponentInfo componentInfo = ambariMetaInfo.get().getComponent(
+ targetStack.getStackName(), targetStack.getStackVersion(), serviceType,
+ componentName);
+
+ // if this component isn't included in the upgrade, then skip it
+ if (!componentInfo.isVersionAdvertised()) {
+ continue;
+ }
- if (componentInfo.isDeleted()) {
+ if (componentInfo.isDeleted()) {
+ failedComponents.add(new ServiceComponentDetail(serviceName, componentName));
+ }
+
+ } catch (StackAccessException stackAccessException) {
failedComponents.add(new ServiceComponentDetail(serviceName, componentName));
}
-
- } catch (StackAccessException stackAccessException) {
- failedComponents.add(new ServiceComponentDetail(serviceName, componentName));
}
+ } catch (StackAccessException stackAccessException) {
+ failedServices.add(new ServiceDetail(serviceName));
}
- } catch (StackAccessException stackAccessException) {
- failedServices.add(new ServiceDetail(serviceName));
}
- }
- if (failedServices.isEmpty() && failedComponents.isEmpty()) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.PASS);
- return;
- }
+ if (failedServices.isEmpty() && failedComponents.isEmpty()) {
+ continue;
+ }
- Set<String> failedServiceNames = failedServices.stream().map(
- failureDetail -> failureDetail.serviceName).collect(
- Collectors.toCollection(LinkedHashSet::new));
+ Set<String> failedServiceNames = failedServices.stream().map(
+ failureDetail -> failureDetail.serviceName).collect(
+ Collectors.toCollection(LinkedHashSet::new));
- Set<String> failedComponentNames = failedComponents.stream().map(
- failureDetail -> failureDetail.componentName).collect(
- Collectors.toCollection(LinkedHashSet::new));
+ Set<String> failedComponentNames = failedComponents.stream().map(
+ failureDetail -> failureDetail.componentName).collect(
+ Collectors.toCollection(LinkedHashSet::new));
- LinkedHashSet<String> failures = new LinkedHashSet<>();
- failures.addAll(failedServiceNames);
- failures.addAll(failedComponentNames);
+ LinkedHashSet<String> failures = new LinkedHashSet<>();
+ failures.addAll(failedServiceNames);
+ failures.addAll(failedComponentNames);
- prerequisiteCheck.setFailedOn(failures);
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
+ result.setFailedOn(failures);
+ result.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.getFailedDetail().addAll(failedServices);
- prerequisiteCheck.getFailedDetail().addAll(failedComponents);
+ result.getFailedDetail().addAll(failedServices);
+ result.getFailedDetail().addAll(failedComponents);
- String message = "The following {0} exist in {1} but are not included in {2}. They must be removed before upgrading.";
- String messageFragment = "";
- if (!failedServices.isEmpty()) {
- messageFragment = "services";
- }
+ String message = "In the {0} service group the following {1} exist in {2} but are not included in {3}. They must be removed before upgrading.";
+ String messageFragment = "";
+ if (!failedServices.isEmpty()) {
+ messageFragment = "services";
+ }
+
+ if (!failedComponents.isEmpty()) {
+ if (!StringUtils.isEmpty(messageFragment)) {
+ messageFragment += " and ";
+ }
- if( !failedComponents.isEmpty() ){
- if(!StringUtils.isEmpty(messageFragment)){
- messageFragment += " and ";
+ messageFragment += "components";
}
- messageFragment += "components";
+ message = MessageFormat.format(message, serviceGroup.getServiceGroupName(), messageFragment,
+ sourceStack, targetStack);
+
+ result.setFailReason(message);
+ return result;
}
- message = MessageFormat.format(message, messageFragment, sourceStack, targetStack);
- prerequisiteCheck.setFailReason(message);
+ return result;
}
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java
index 3f39d48..f67d9d6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java
@@ -32,9 +32,10 @@ import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.ambari.server.state.ServiceGroup;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
@@ -48,7 +49,7 @@ import com.google.inject.Singleton;
group = UpgradeCheckGroup.LIVELINESS,
order = 2.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class ComponentsInstallationCheck extends AbstractCheckDescriptor {
+public class ComponentsInstallationCheck extends ClusterCheck {
/**
* Constructor.
@@ -58,40 +59,44 @@ public class ComponentsInstallationCheck extends AbstractCheckDescriptor {
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+ public UpgradeCheckResult perform(PrereqCheckRequest request) throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
Set<String> failedServiceNames = new HashSet<>();
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
// Preq-req check should fail if any service component is in INSTALL_FAILED state
Set<String> installFailedHostComponents = new HashSet<>();
-
- Set<String> servicesInUpgrade = getServicesInUpgrade(request);
- for (String serviceName : servicesInUpgrade) {
- final Service service = cluster.getService(serviceName);
- // Skip service if it is in maintenance mode
- if (service.getMaintenanceState() == MaintenanceState.ON) {
- continue;
- }
-
- Map<String, ServiceComponent> serviceComponents = service.getServiceComponents();
- for (Map.Entry<String, ServiceComponent> component : serviceComponents.entrySet()) {
- ServiceComponent serviceComponent = component.getValue();
- if (serviceComponent.isVersionAdvertised()) {
- List<HostComponentSummary> hostComponentSummaries = HostComponentSummary.getHostComponentSummaries(
- cluster.getClusterId(), service.getServiceGroupId(), service.getServiceId(), serviceComponent.getName());
-
- for (HostComponentSummary hcs : hostComponentSummaries) {
- // Skip host if it is in maintenance mode
- Host host = clustersProvider.get().getHost(hcs.getHostName());
- if (host.getMaintenanceState(cluster.getClusterId()) != MaintenanceState.ON) {
- if (hcs.getCurrentState() == State.INSTALL_FAILED) {
-
- prerequisiteCheck.getFailedDetail().add(hcs);
-
- failedServiceNames.add(service.getName());
- installFailedHostComponents.add(MessageFormat.format("[{0}:{1} on {2}]",
- service.getName(), serviceComponent.getName(), hcs.getHostName()));
+
+ Map<ServiceGroup, Set<String>> serviceGroupsInUpgrade = getServicesInUpgrade(request);
+ for (ServiceGroup serviceGroup : serviceGroupsInUpgrade.keySet()) {
+ for( String serviceName : serviceGroupsInUpgrade.get(serviceGroup) ) {
+ final Service service = cluster.getService(serviceName);
+ // Skip service if it is in maintenance mode
+ if (service.getMaintenanceState() == MaintenanceState.ON) {
+ continue;
+ }
+
+ Map<String, ServiceComponent> serviceComponents = service.getServiceComponents();
+ for (Map.Entry<String, ServiceComponent> component : serviceComponents.entrySet()) {
+ ServiceComponent serviceComponent = component.getValue();
+ if (serviceComponent.isVersionAdvertised()) {
+ List<HostComponentSummary> hostComponentSummaries = HostComponentSummary.getHostComponentSummaries(
+ cluster.getClusterId(), service.getServiceGroupId(), service.getServiceId(), serviceComponent.getName());
+
+ for (HostComponentSummary hcs : hostComponentSummaries) {
+ // Skip host if it is in maintenance mode
+ Host host = clustersProvider.get().getHost(hcs.getHostName());
+ if (host.getMaintenanceState(cluster.getClusterId()) != MaintenanceState.ON) {
+ if (hcs.getCurrentState() == State.INSTALL_FAILED) {
+
+ result.getFailedDetail().add(hcs);
+
+ failedServiceNames.add(service.getName());
+ installFailedHostComponents.add(MessageFormat.format("[{0}:{1} on {2}]",
+ service.getName(), serviceComponent.getName(), hcs.getHostName()));
+ }
}
}
}
@@ -103,10 +108,12 @@ public class ComponentsInstallationCheck extends AbstractCheckDescriptor {
String message = MessageFormat.format("Service components in INSTALL_FAILED state: {0}.",
StringUtils.join(installFailedHostComponents, ", "));
- prerequisiteCheck.setFailedOn(new LinkedHashSet<>(failedServiceNames));
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.setFailReason(
+ result.setFailedOn(new LinkedHashSet<>(failedServiceNames));
+ result.setStatus(PrereqCheckStatus.FAIL);
+ result.setFailReason(
"Found service components in INSTALL_FAILED state. Please re-install these components. " + message);
}
+
+ return result;
}
}
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 d886d4f..fb5fe25 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
@@ -24,11 +24,15 @@ import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.UpgradePlanDetailEntity;
+import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ConfigMergeHelper;
import org.apache.ambari.server.state.ConfigMergeHelper.ThreeWayValue;
+import org.apache.ambari.server.state.Mpack;
+import org.apache.ambari.server.state.ServiceGroup;
+import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
@@ -42,7 +46,7 @@ import com.google.inject.Singleton;
@UpgradeCheck(
order = 99.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class ConfigurationMergeCheck extends AbstractCheckDescriptor {
+public class ConfigurationMergeCheck extends ClusterCheck {
@Inject
ConfigMergeHelper m_mergeHelper;
@@ -60,39 +64,32 @@ public class ConfigurationMergeCheck extends AbstractCheckDescriptor {
* </ul>
*/
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
- RepositoryVersionEntity rve = request.getTargetRepositoryVersion();
-
- Map<String, Map<String, ThreeWayValue>> changes =
- m_mergeHelper.getConflicts(request.getClusterName(), rve.getStackId());
-
+ final String clusterName = request.getClusterName();
+ final Cluster cluster = clustersProvider.get().getCluster(clusterName);
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
Set<String> failedTypes = new HashSet<>();
- for (Entry<String, Map<String, ThreeWayValue>> entry : changes.entrySet()) {
- for (Entry<String, ThreeWayValue> configEntry : entry.getValue().entrySet()) {
+ for (UpgradePlanDetailEntity upgradeDetail : request.getUpgradePlan().getDetails()) {
+ ServiceGroup serviceGroup = cluster.getServiceGroup(upgradeDetail.getServiceGroupId());
+ Mpack targetMpack = ambariMetaInfo.get().getMpack(upgradeDetail.getMpackTargetId());
- ThreeWayValue twv = configEntry.getValue();
- if (null == twv.oldStackValue) { // !!! did not exist and in the map means changed
- failedTypes.add(entry.getKey());
+ StackId sourceStack = serviceGroup.getStackId();
+ StackId targetStack = targetMpack.getStackId();
- prerequisiteCheck.getFailedOn().add(entry.getKey() + "/" + configEntry.getKey());
+ Map<String, Map<String, ThreeWayValue>> changes =
+ m_mergeHelper.getConflicts(request.getClusterName(), targetStack);
- MergeDetail md = new MergeDetail();
- md.type = entry.getKey();
- md.property = configEntry.getKey();
- md.current = twv.savedValue;
- md.new_stack_value = twv.newStackValue;
- md.result_value = md.current;
- prerequisiteCheck.getFailedDetail().add(md);
+ for (Entry<String, Map<String, ThreeWayValue>> entry : changes.entrySet()) {
+ for (Entry<String, ThreeWayValue> configEntry : entry.getValue().entrySet()) {
- } else if (!twv.oldStackValue.equals(twv.savedValue)) { // !!! value customized
- if (null == twv.newStackValue || // !!! not in new stack
- !twv.oldStackValue.equals(twv.newStackValue)) { // !!! or the default value changed
+ ThreeWayValue twv = configEntry.getValue();
+ if (null == twv.oldStackValue) { // !!! did not exist and in the map means changed
failedTypes.add(entry.getKey());
- prerequisiteCheck.getFailedOn().add(entry.getKey() + "/" + configEntry.getKey());
+ result.getFailedOn().add(entry.getKey() + "/" + configEntry.getKey());
MergeDetail md = new MergeDetail();
md.type = entry.getKey();
@@ -100,22 +97,38 @@ public class ConfigurationMergeCheck extends AbstractCheckDescriptor {
md.current = twv.savedValue;
md.new_stack_value = twv.newStackValue;
md.result_value = md.current;
- prerequisiteCheck.getFailedDetail().add(md);
+ result.getFailedDetail().add(md);
+
+ } else if (!twv.oldStackValue.equals(twv.savedValue)) { // !!! value customized
+ if (null == twv.newStackValue || // !!! not in new stack
+ !twv.oldStackValue.equals(twv.newStackValue)) { // !!! or the default value changed
+ failedTypes.add(entry.getKey());
+
+ result.getFailedOn().add(entry.getKey() + "/" + configEntry.getKey());
+
+ MergeDetail md = new MergeDetail();
+ md.type = entry.getKey();
+ md.property = configEntry.getKey();
+ md.current = twv.savedValue;
+ md.new_stack_value = twv.newStackValue;
+ md.result_value = md.current;
+ result.getFailedDetail().add(md);
+ }
}
}
}
}
- if (prerequisiteCheck.getFailedOn().size() > 0) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.WARNING);
- String failReason = getFailReason(prerequisiteCheck, request);
-
- prerequisiteCheck.setFailReason(String.format(failReason, StringUtils.join(
- failedTypes, ", ")));
+ if (result.getFailedOn().size() > 0) {
+ result.setStatus(PrereqCheckStatus.WARNING);
+ String failReason = getFailReason(result, request);
+ result.setFailReason(String.format(failReason, StringUtils.join(failedTypes, ", ")));
} else {
- prerequisiteCheck.setStatus(PrereqCheckStatus.PASS);
+ result.setStatus(PrereqCheckStatus.PASS);
}
+
+ return result;
}
/**
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java
index 48c300d..d3597b0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HardcodedStackVersionPropertiesCheck.java
@@ -31,7 +31,7 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
@@ -47,14 +47,14 @@ import com.google.inject.Singleton;
@UpgradeCheck(
order = 98.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class HardcodedStackVersionPropertiesCheck extends AbstractCheckDescriptor {
+public class HardcodedStackVersionPropertiesCheck extends ClusterCheck {
public HardcodedStackVersionPropertiesCheck() {
super(CheckDescription.HARDCODED_STACK_VERSION_PROPERTIES_CHECK);
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
@@ -85,17 +85,20 @@ public class HardcodedStackVersionPropertiesCheck extends AbstractCheckDescripto
}
}
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
if (failures.size() > 0) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.WARNING);
- String failReason = getFailReason(prerequisiteCheck, request);
+ result.setStatus(PrereqCheckStatus.WARNING);
+ String failReason = getFailReason(result, request);
- prerequisiteCheck.setFailReason(String.format(failReason, StringUtils.join(failedVersions, ',')));
- prerequisiteCheck.setFailedOn(new LinkedHashSet<>(failures));
+ result.setFailReason(String.format(failReason, StringUtils.join(failedVersions, ',')));
+ result.setFailedOn(new LinkedHashSet<>(failures));
} else {
- prerequisiteCheck.setStatus(PrereqCheckStatus.PASS);
+ result.setStatus(PrereqCheckStatus.PASS);
}
+ return result;
}
/**
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HealthCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HealthCheck.java
index 7ba0d4a..58e00d9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HealthCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HealthCheck.java
@@ -34,7 +34,7 @@ import org.apache.ambari.server.state.AlertState;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.annotate.JsonProperty;
@@ -51,7 +51,7 @@ import com.google.inject.Singleton;
@UpgradeCheck(
group = UpgradeCheckGroup.DEFAULT,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class HealthCheck extends AbstractCheckDescriptor {
+public class HealthCheck extends ClusterCheck {
private static final List<AlertState> ALERT_STATES = asList(WARNING, CRITICAL);
@@ -69,7 +69,7 @@ public class HealthCheck extends AbstractCheckDescriptor {
* {@inheritDoc}
*/
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
AlertsDAO alertsDAO = alertsDAOProvider.get();
@@ -79,6 +79,8 @@ public class HealthCheck extends AbstractCheckDescriptor {
List<String> errorMessages = new ArrayList<>();
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
for (AlertCurrentEntity alert : alerts) {
AlertHistoryEntity alertHistory = alert.getAlertHistory();
AlertState alertState = alertHistory.getAlertState();
@@ -92,17 +94,19 @@ public class HealthCheck extends AbstractCheckDescriptor {
} else {
errorMessages.add(state + ": " + label + ": " + hostName);
}
- prerequisiteCheck.getFailedDetail().add(new AlertDetail(state, label, hostName));
+ result.getFailedDetail().add(new AlertDetail(state, label, hostName));
}
}
if (!errorMessages.isEmpty()) {
- prerequisiteCheck.getFailedOn().add(clusterName);
- prerequisiteCheck.setStatus(PrereqCheckStatus.WARNING);
- String failReason = getFailReason(prerequisiteCheck, request);
- prerequisiteCheck.setFailReason(
+ result.getFailedOn().add(clusterName);
+ result.setStatus(PrereqCheckStatus.WARNING);
+ String failReason = getFailReason(result, request);
+ result.setFailReason(
String.format(failReason, StringUtils.join(errorMessages, System.lineSeparator())));
}
+
+ return result;
}
/**
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java
index ca74231..1bf3473 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java
@@ -21,11 +21,12 @@ import java.util.Collection;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import com.google.inject.Singleton;
@@ -44,7 +45,7 @@ import com.google.inject.Singleton;
group = UpgradeCheckGroup.MAINTENANCE_MODE,
order = 7.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class HostMaintenanceModeCheck extends AbstractCheckDescriptor {
+public class HostMaintenanceModeCheck extends ClusterCheck {
public static final String KEY_CANNOT_START_HOST_ORDERED = "cannot_upgrade_mm_hosts";
@@ -59,34 +60,39 @@ public class HostMaintenanceModeCheck extends AbstractCheckDescriptor {
* {@inheritDoc}
*/
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
Collection<Host> hosts = cluster.getHosts();
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
// see if any hosts in the cluster are in MM
for (Host host : hosts) {
MaintenanceState maintenanceState = host.getMaintenanceState(cluster.getClusterId());
if (maintenanceState != MaintenanceState.OFF) {
- prerequisiteCheck.getFailedOn().add(host.getHostName());
+ result.getFailedOn().add(host.getHostName());
- prerequisiteCheck.getFailedDetail().add(
+ result.getFailedDetail().add(
new HostDetail(host.getHostId(), host.getHostName()));
}
}
// for any host in MM, produce a warning
- if (!prerequisiteCheck.getFailedOn().isEmpty()) {
- PrereqCheckStatus status = request.getUpgradeType() == UpgradeType.HOST_ORDERED ?
+ if (!result.getFailedOn().isEmpty()) {
+ UpgradePlanEntity upgradePlan = request.getUpgradePlan();
+ PrereqCheckStatus status = upgradePlan.getUpgradeType() == UpgradeType.HOST_ORDERED ?
PrereqCheckStatus.FAIL : PrereqCheckStatus.WARNING;
- prerequisiteCheck.setStatus(status);
+ result.setStatus(status);
- String failReason = request.getUpgradeType() == UpgradeType.HOST_ORDERED ?
- getFailReason(KEY_CANNOT_START_HOST_ORDERED, prerequisiteCheck, request) :
- getFailReason(prerequisiteCheck, request);
+ String failReason = upgradePlan.getUpgradeType() == UpgradeType.HOST_ORDERED ?
+ getFailReason(KEY_CANNOT_START_HOST_ORDERED, result, request)
+ : getFailReason(result, request);
- prerequisiteCheck.setFailReason(failReason);
+ result.setFailReason(failReason);
}
+
+ return result;
}
}
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 f6b6296..881a057 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
@@ -26,7 +26,7 @@ import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostHealthStatus.HealthStatus;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import com.google.inject.Singleton;
@@ -46,7 +46,7 @@ import com.google.inject.Singleton;
group = UpgradeCheckGroup.LIVELINESS,
order = 1.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class HostsHeartbeatCheck extends AbstractCheckDescriptor {
+public class HostsHeartbeatCheck extends ClusterCheck {
/**
* Constructor.
@@ -59,12 +59,14 @@ public class HostsHeartbeatCheck extends AbstractCheckDescriptor {
* {@inheritDoc}
*/
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
Collection<Host> hosts = cluster.getHosts();
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
for (Host host : hosts) {
HealthStatus hostHealth = host.getHealthStatus().getHealthStatus();
MaintenanceState maintenanceState = host.getMaintenanceState(cluster.getClusterId());
@@ -72,9 +74,9 @@ public class HostsHeartbeatCheck extends AbstractCheckDescriptor {
case UNHEALTHY:
case UNKNOWN:
if (maintenanceState == MaintenanceState.OFF) {
- prerequisiteCheck.getFailedOn().add(host.getHostName());
+ result.getFailedOn().add(host.getHostName());
- prerequisiteCheck.getFailedDetail().add(
+ result.getFailedDetail().add(
new HostDetail(host.getHostId(), host.getHostName()));
}
break;
@@ -85,10 +87,11 @@ public class HostsHeartbeatCheck extends AbstractCheckDescriptor {
}
// for any hosts unhealthy and NOT in MM mode, fail this check
- if (!prerequisiteCheck.getFailedOn().isEmpty()) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request));
- return;
+ if (!result.getFailedOn().isEmpty()) {
+ result.setStatus(PrereqCheckStatus.FAIL);
+ result.setFailReason(getFailReason(result, request));
}
+
+ return result;
}
}
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 f5204d8..901ff9c 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
@@ -23,18 +23,21 @@ import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.UpgradePlanDetailEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.MaintenanceState;
+import org.apache.ambari.server.state.ModuleComponent;
+import org.apache.ambari.server.state.Mpack;
+import org.apache.ambari.server.state.Mpack.ModuleComponentVersionChange;
+import org.apache.ambari.server.state.Mpack.MpackChangeSummary;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
-import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.ServiceGroup;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-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.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.apache.commons.lang3.StringUtils;
import com.google.inject.Singleton;
@@ -46,10 +49,7 @@ import com.google.inject.Singleton;
group = UpgradeCheckGroup.MAINTENANCE_MODE,
order = 5.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
-
- static final String KEY_NO_UPGRADE_NAME = "no_upgrade_name";
- static final String KEY_NO_UPGRADE_PACK = "no_upgrade_pack";
+public class HostsMasterMaintenanceCheck extends ClusterCheck {
/**
* Constructor.
@@ -59,42 +59,28 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+ public UpgradeCheckResult perform(PrereqCheckRequest request) throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
- final StackId stackId = request.getSourceStackId();
final Set<String> hostsWithMasterComponent = new HashSet<>();
- // TODO AMBARI-12698, need to pass the upgrade pack to use in the request, or at least the type.
- RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion();
-
- final String upgradePackName = repositoryVersionHelper.get().getUpgradePackageName(
- stackId.getStackName(), stackId.getStackVersion(), repositoryVersion.getVersion(), null);
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
- if (upgradePackName == null) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- String fail = getFailReason(KEY_NO_UPGRADE_NAME, prerequisiteCheck, request);
- prerequisiteCheck.setFailReason(String.format(fail, stackId.getStackName(), stackId.getStackVersion()));
- return;
- }
+ for (UpgradePlanDetailEntity upgradeDetail : request.getUpgradePlan().getDetails()) {
+ ServiceGroup serviceGroup = cluster.getServiceGroup(upgradeDetail.getServiceGroupId());
+ Mpack sourceMpack = ambariMetaInfo.get().getMpack(serviceGroup.getMpackId());
+ Mpack targetMpack = ambariMetaInfo.get().getMpack(upgradeDetail.getMpackTargetId());
- final UpgradePack upgradePack = ambariMetaInfo.get().getUpgradePacks(stackId.getStackName(), stackId.getStackVersion()).get(upgradePackName);
- if (upgradePack == null) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- String fail = getFailReason(KEY_NO_UPGRADE_PACK, prerequisiteCheck, request);
- prerequisiteCheck.setFailReason(String.format(fail, upgradePackName));
- return;
- }
+ MpackChangeSummary changeSummary = sourceMpack.getChangeSummary(targetMpack);
+ for( ModuleComponentVersionChange componentChanges : changeSummary.getComponentVersionChanges()) {
+ ModuleComponent moduleComponent = componentChanges.getSource();
- final Set<String> componentsFromUpgradePack = new HashSet<>();
- for (Map<String, ProcessingComponent> task: upgradePack.getTasks().values()) {
- componentsFromUpgradePack.addAll(task.keySet());
- }
-
- for (Service service: cluster.getServices()) {
- for (ServiceComponent serviceComponent: service.getServiceComponents().values()) {
- if (serviceComponent.isMasterComponent() && componentsFromUpgradePack.contains(serviceComponent.getName())) {
- hostsWithMasterComponent.addAll(serviceComponent.getServiceComponentHosts().keySet());
+ for (Service service: serviceGroup.getServices()) {
+ for (ServiceComponent serviceComponent: service.getServiceComponents().values()) {
+ if (serviceComponent.isMasterComponent() && StringUtils.equals(moduleComponent.getName(), serviceComponent.getName())) {
+ hostsWithMasterComponent.addAll(serviceComponent.getServiceComponentHosts().keySet());
+ }
+ }
}
}
}
@@ -103,16 +89,18 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
for (Map.Entry<String, Host> hostEntry : clusterHosts.entrySet()) {
final Host host = hostEntry.getValue();
if (host.getMaintenanceState(cluster.getClusterId()) == MaintenanceState.ON && hostsWithMasterComponent.contains(host.getHostName())) {
- prerequisiteCheck.getFailedOn().add(host.getHostName());
+ result.getFailedOn().add(host.getHostName());
- prerequisiteCheck.getFailedDetail().add(
+ result.getFailedDetail().add(
new HostDetail(host.getHostId(), host.getHostName()));
}
}
- if (!prerequisiteCheck.getFailedOn().isEmpty()) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request));
+ if (!result.getFailedOn().isEmpty()) {
+ result.setStatus(PrereqCheckStatus.FAIL);
+ result.setFailReason(getFailReason(result, request));
}
+
+ return result;
}
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/PreUpgradeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/PreUpgradeCheck.java
new file mode 100644
index 0000000..b098478
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/PreUpgradeCheck.java
@@ -0,0 +1,98 @@
+/*
+ * 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.checks;
+
+import java.util.List;
+import java.util.Set;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.checks.ClusterCheck.CheckQualification;
+import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.state.stack.PrereqCheckType;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
+import org.apache.ambari.server.state.stack.UpgradePack;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+
+/**
+ * The {@link PreUpgradeCheck} is used before an upgrade in order to present the
+ * administrator with a warning or a failure about an upgrade.
+ */
+public interface PreUpgradeCheck {
+
+ /**
+ * Gets the set of services that this check is associated with. If the check
+ * is not associated with a particular service, then this should be an empty
+ * set.
+ *
+ * @return a set of services which will determine whether this check is
+ * applicable, or an empty set.
+ */
+ Set<String> getApplicableServices();
+
+ /**
+ * Gets any additional qualifications which an upgrade check should run in
+ * order to determine if it's applicable to the upgrade.
+ *
+ * @return a list of qualifications, or an empty list.
+ */
+ List<CheckQualification> getQualifications();
+
+ /**
+ * Tests if the prerequisite check is applicable to given upgrade request.
+ *
+ * @param request
+ * prerequisite check request
+ * @return true if check should be performed
+ * @throws AmbariException
+ */
+ boolean isApplicable(PrereqCheckRequest request) throws AmbariException;
+
+ /**
+ * Executes check against given cluster.
+ * @param request pre upgrade check request
+ * @return TODO
+ *
+ * @throws AmbariException if server error happens
+ */
+ UpgradeCheckResult perform(PrereqCheckRequest request)
+ throws AmbariException;
+
+ /**
+ * Gets the type of check.
+ *
+ * @return the type of check (not {@code null}).
+ */
+ PrereqCheckType getType();
+
+ /**
+ * Gets whether this upgrade check is required for the specified
+ * {@link UpgradeType}. Checks which are marked as required do not need to be
+ * explicitely declared in the {@link UpgradePack} to be run.
+ *
+ * @return {@code true} if it is required, {@code false} otherwise.
+ */
+ boolean isRequired(UpgradeType upgradeType);
+
+ /**
+ * The {@link CheckDescription} which includes the name, description, and
+ * success/failure messages for a {@link PreUpgradeCheck}.
+ *
+ * @return the check description.
+ */
+ CheckDescription getCheckDescrption();
+}
\ No newline at end of file
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
index 286ffd7..4f6667b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
@@ -25,7 +25,7 @@ import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
@@ -41,7 +41,7 @@ import com.google.inject.Singleton;
group = UpgradeCheckGroup.DEFAULT,
order = 4.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class PreviousUpgradeCompleted extends AbstractCheckDescriptor {
+public class PreviousUpgradeCompleted extends ClusterCheck {
/**
* The message displayed as part of this pre-upgrade check.
@@ -56,7 +56,7 @@ public class PreviousUpgradeCompleted extends AbstractCheckDescriptor {
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+ public UpgradeCheckResult perform(PrereqCheckRequest request) throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
@@ -70,12 +70,16 @@ public class PreviousUpgradeCompleted extends AbstractCheckDescriptor {
directionText);
}
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
if (null != errorMessage) {
LinkedHashSet<String> failedOn = new LinkedHashSet<>();
failedOn.add(cluster.getClusterName());
- prerequisiteCheck.setFailedOn(failedOn);
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.setFailReason(errorMessage);
+ result.setFailedOn(failedOn);
+ result.setStatus(PrereqCheckStatus.FAIL);
+ result.setFailReason(errorMessage);
}
+
+ return result;
}
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
index 236cced..473a086 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
@@ -43,7 +43,7 @@ import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.annotate.JsonProperty;
@@ -63,7 +63,7 @@ import com.google.inject.Singleton;
@UpgradeCheck(
group = UpgradeCheckGroup.DEFAULT,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class ServiceCheckValidityCheck extends AbstractCheckDescriptor {
+public class ServiceCheckValidityCheck extends ClusterCheck {
private static final Logger LOG = LoggerFactory.getLogger(ServiceCheckValidityCheck.class);
@@ -89,7 +89,7 @@ public class ServiceCheckValidityCheck extends AbstractCheckDescriptor {
* {@inheritDoc}
*/
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
ServiceConfigDAO serviceConfigDAO = serviceConfigDAOProvider.get();
@@ -150,17 +150,21 @@ public class ServiceCheckValidityCheck extends AbstractCheckDescriptor {
}
}
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
if (!failures.isEmpty()) {
- prerequisiteCheck.getFailedDetail().addAll(failures);
+ result.getFailedDetail().addAll(failures);
LinkedHashSet<String> failedServiceNames = failures.stream().map(
failure -> failure.serviceName).collect(Collectors.toCollection(LinkedHashSet::new));
- prerequisiteCheck.setFailedOn(failedServiceNames);
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- String failReason = getFailReason(prerequisiteCheck, request);
- prerequisiteCheck.setFailReason(String.format(failReason, StringUtils.join(failedServiceNames, ", ")));
+ result.setFailedOn(failedServiceNames);
+ result.setStatus(PrereqCheckStatus.FAIL);
+ String failReason = getFailReason(result, request);
+ result.setFailReason(String.format(failReason, StringUtils.join(failedServiceNames, ", ")));
}
+
+ return result;
}
private boolean hasAtLeastOneComponentVersionAdvertised(Service service) {
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicePresenceCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicePresenceCheck.java
index 3425a1d..ea9922e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicePresenceCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicePresenceCheck.java
@@ -28,7 +28,7 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.UpgradePack.PrerequisiteCheckConfig;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -42,7 +42,7 @@ import com.google.inject.Singleton;
*/
@Singleton
@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT)
-public class ServicePresenceCheck extends AbstractCheckDescriptor{
+public class ServicePresenceCheck extends ClusterCheck{
private static final Logger LOG = LoggerFactory.getLogger(ServicePresenceCheck.class);
@@ -75,7 +75,7 @@ public class ServicePresenceCheck extends AbstractCheckDescriptor{
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+ public UpgradeCheckResult perform(PrereqCheckRequest request) throws AmbariException {
final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
Set<String> installedServices = cluster.getServicesByName().keySet();
@@ -85,39 +85,43 @@ public class ServicePresenceCheck extends AbstractCheckDescriptor{
List<String> failReasons = new ArrayList<>();
- String reason = getFailReason(prerequisiteCheck, request);
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
+ String reason = getFailReason(result, request);
for(String service: noUpgradeSupportServices){
if (installedServices.contains(service.toUpperCase())){
- prerequisiteCheck.getFailedOn().add(service);
+ result.getFailedOn().add(service);
String msg = String.format(reason, service, service);
failReasons.add(msg);
}
}
- reason = getFailReason(KEY_SERVICE_REPLACED, prerequisiteCheck, request);
+ reason = getFailReason(KEY_SERVICE_REPLACED, result, request);
for (Map.Entry<String, String> entry : replacedServices.entrySet()) {
String removedService = entry.getKey();
if(installedServices.contains(removedService.toUpperCase())){
- prerequisiteCheck.getFailedOn().add(removedService);
+ result.getFailedOn().add(removedService);
String newService = entry.getValue();
String msg = String.format(reason, removedService, newService);
failReasons.add(msg);
}
}
- reason = getFailReason(KEY_SERVICE_REMOVED, prerequisiteCheck, request);
+ reason = getFailReason(KEY_SERVICE_REMOVED, result, request);
for(String service: removedServices){
if (installedServices.contains(service.toUpperCase())){
- prerequisiteCheck.getFailedOn().add(service);
+ result.getFailedOn().add(service);
String msg = String.format(reason, service, service);
failReasons.add(msg);
}
}
if(!failReasons.isEmpty()){
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.setFailReason(StringUtils.join(failReasons, '\n'));
+ result.setStatus(PrereqCheckStatus.FAIL);
+ result.setFailReason(StringUtils.join(failReasons, '\n'));
}
+
+ return result;
}
/**
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 8d7cd1b..ecd9d96 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
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Map;
import java.util.Set;
import org.apache.ambari.server.AmbariException;
@@ -24,8 +25,9 @@ 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.ServiceGroup;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import com.google.inject.Singleton;
@@ -38,7 +40,7 @@ import com.google.inject.Singleton;
group = UpgradeCheckGroup.MAINTENANCE_MODE,
order = 6.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class ServicesMaintenanceModeCheck extends AbstractCheckDescriptor {
+public class ServicesMaintenanceModeCheck extends ClusterCheck {
/**
* Constructor.
@@ -48,19 +50,26 @@ public class ServicesMaintenanceModeCheck extends AbstractCheckDescriptor {
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+ public UpgradeCheckResult perform(PrereqCheckRequest request) throws AmbariException {
final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Set<String> servicesInUpgrade = getServicesInUpgrade(request);
+ Map<ServiceGroup, Set<String>> serviceGroupsInUpgrade = getServicesInUpgrade(request);
- for (String serviceName : servicesInUpgrade) {
- final Service service = cluster.getService(serviceName);
- if (!service.isClientOnlyService() && service.getMaintenanceState() == MaintenanceState.ON) {
- prerequisiteCheck.getFailedOn().add(service.getName());
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
+ for (ServiceGroup serviceGroup : serviceGroupsInUpgrade.keySet()) {
+ for( String serviceName : serviceGroupsInUpgrade.get(serviceGroup) ) {
+ final Service service = cluster.getService(serviceName);
+ if (!service.isClientOnlyService() && service.getMaintenanceState() == MaintenanceState.ON) {
+ result.getFailedOn().add(service.getName());
+ }
}
}
- if (!prerequisiteCheck.getFailedOn().isEmpty()) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request));
+
+ if (!result.getFailedOn().isEmpty()) {
+ result.setStatus(PrereqCheckStatus.FAIL);
+ result.setFailReason(getFailReason(result, request));
}
+
+ return result;
}
}
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 b65aff7..eb54d2c 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
@@ -34,10 +34,11 @@ import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.ambari.server.state.ServiceGroup;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
@@ -68,7 +69,7 @@ import com.google.inject.Singleton;
group = UpgradeCheckGroup.LIVELINESS,
order = 2.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class ServicesUpCheck extends AbstractCheckDescriptor {
+public class ServicesUpCheck extends ClusterCheck {
private static final float SLAVE_THRESHOLD = 0.5f;
@@ -83,7 +84,7 @@ public class ServicesUpCheck extends AbstractCheckDescriptor {
* {@inheritDoc}
*/
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
final String clusterName = request.getClusterName();
@@ -91,109 +92,116 @@ public class ServicesUpCheck extends AbstractCheckDescriptor {
List<String> errorMessages = new ArrayList<>();
LinkedHashSet<ServiceDetail> failedServices = new LinkedHashSet<>();
- Set<String> servicesInUpgrade = getServicesInUpgrade(request);
- for (String serviceName : servicesInUpgrade) {
- final Service service = cluster.getService(serviceName);
+ Map<ServiceGroup, Set<String>> serviceGroupsInUpgrade = getServicesInUpgrade(request);
+ for (ServiceGroup serviceGroup : serviceGroupsInUpgrade.keySet()) {
+ for( String serviceName : serviceGroupsInUpgrade.get(serviceGroup) ) {
- // Ignore services like Tez that are clientOnly.
- if (service.isClientOnlyService()) {
- continue;
- }
-
- Map<String, ServiceComponent> serviceComponents = service.getServiceComponents();
- for (Map.Entry<String, ServiceComponent> component : serviceComponents.entrySet()) {
-
- ServiceComponent serviceComponent = component.getValue();
- // In Services like HDFS, ignore components like HDFS Client
- if (serviceComponent.isClientComponent()) {
- continue;
- }
-
- // skip if the component is not part of the finalization version check
- if (!serviceComponent.isVersionAdvertised()) {
+ final Service service = cluster.getService(serviceName);
+
+ // Ignore services like Tez that are clientOnly.
+ if (service.isClientOnlyService()) {
continue;
}
-
- // TODO, add more logic that checks the Upgrade Pack.
- // These components are not in the upgrade pack and do not advertise a
- // version:
- // ZKFC, Ambari Metrics, Kerberos, Atlas (right now).
- // Generally, if it advertises a version => in the upgrade pack.
- // So it can be in the Upgrade Pack but not advertise a version.
- List<HostComponentSummary> hostComponentSummaries = HostComponentSummary.getHostComponentSummaries(
- service.getClusterId(), service.getServiceGroupId(), service.getServiceId(), serviceComponent.getName());
-
- // not installed, nothing to do
- if (hostComponentSummaries.isEmpty()) {
- continue;
- }
-
- // non-master, "true" slaves with cardinality 1+
- boolean checkThreshold = false;
- if (!serviceComponent.isMasterComponent()) {
- StackId stackId = service.getStackId();
- ComponentInfo componentInfo = ambariMetaInfo.get().getComponent(stackId.getStackName(),
- stackId.getStackVersion(), serviceComponent.getServiceType(),
- serviceComponent.getName());
-
- String cardinality = componentInfo.getCardinality();
- // !!! check if there can be more than one. This will match, say,
- // datanodes but not ZKFC
- if (null != cardinality
- && (cardinality.equals("ALL") || cardinality.matches("[1-9].*"))) {
- checkThreshold = true;
+
+ Map<String, ServiceComponent> serviceComponents = service.getServiceComponents();
+ for (Map.Entry<String, ServiceComponent> component : serviceComponents.entrySet()) {
+
+ ServiceComponent serviceComponent = component.getValue();
+ // In Services like HDFS, ignore components like HDFS Client
+ if (serviceComponent.isClientComponent()) {
+ continue;
}
- }
-
- // check threshold for slaves which have a non-0 cardinality
- if (checkThreshold) {
- int total = hostComponentSummaries.size();
- int up = 0;
- int down = 0;
-
- for (HostComponentSummary summary : hostComponentSummaries) {
- if (isConsideredDown(cluster, serviceComponent, summary)) {
- down++;
- } else {
- up++;
- }
+
+ // skip if the component is not part of the finalization version check
+ if (!serviceComponent.isVersionAdvertised()) {
+ continue;
}
-
- if ((float) down / total > SLAVE_THRESHOLD) { // arbitrary
- failedServices.add(new ServiceDetail(serviceName));
-
- String message = MessageFormat.format(
- "{0}: {1} out of {2} {3} are started; there should be {4,number,percent} started before upgrading.",
- service.getName(), up, total, serviceComponent.getName(), SLAVE_THRESHOLD);
- errorMessages.add(message);
+
+ // TODO, add more logic that checks the Upgrade Pack.
+ // These components are not in the upgrade pack and do not advertise a
+ // version:
+ // ZKFC, Ambari Metrics, Kerberos, Atlas (right now).
+ // Generally, if it advertises a version => in the upgrade pack.
+ // So it can be in the Upgrade Pack but not advertise a version.
+ List<HostComponentSummary> hostComponentSummaries = HostComponentSummary.getHostComponentSummaries(
+ service.getClusterId(), service.getServiceGroupId(), service.getServiceId(), serviceComponent.getName());
+
+ // not installed, nothing to do
+ if (hostComponentSummaries.isEmpty()) {
+ continue;
+ }
+
+ // non-master, "true" slaves with cardinality 1+
+ boolean checkThreshold = false;
+ if (!serviceComponent.isMasterComponent()) {
+ StackId stackId = service.getStackId();
+ ComponentInfo componentInfo = ambariMetaInfo.get().getComponent(stackId.getStackName(),
+ stackId.getStackVersion(), serviceComponent.getServiceType(),
+ serviceComponent.getName());
+
+ String cardinality = componentInfo.getCardinality();
+ // !!! check if there can be more than one. This will match, say,
+ // datanodes but not ZKFC
+ if (null != cardinality
+ && (cardinality.equals("ALL") || cardinality.matches("[1-9].*"))) {
+ checkThreshold = true;
+ }
}
- } else {
- for (HostComponentSummary summary : hostComponentSummaries) {
- if (isConsideredDown(cluster, serviceComponent, summary)) {
+
+ // check threshold for slaves which have a non-0 cardinality
+ if (checkThreshold) {
+ int total = hostComponentSummaries.size();
+ int up = 0;
+ int down = 0;
+
+ for (HostComponentSummary summary : hostComponentSummaries) {
+ if (isConsideredDown(cluster, serviceComponent, summary)) {
+ down++;
+ } else {
+ up++;
+ }
+ }
+
+ if ((float) down / total > SLAVE_THRESHOLD) { // arbitrary
failedServices.add(new ServiceDetail(serviceName));
-
- String message = MessageFormat.format("{0}: {1} (in {2} on host {3})",
- service.getName(), serviceComponent.getName(), summary.getCurrentState(),
- summary.getHostName());
+
+ String message = MessageFormat.format(
+ "{0}: {1} out of {2} {3} are started; there should be {4,number,percent} started before upgrading.",
+ service.getName(), up, total, serviceComponent.getName(), SLAVE_THRESHOLD);
errorMessages.add(message);
- break;
+ }
+ } else {
+ for (HostComponentSummary summary : hostComponentSummaries) {
+ if (isConsideredDown(cluster, serviceComponent, summary)) {
+ failedServices.add(new ServiceDetail(serviceName));
+
+ String message = MessageFormat.format("{0}: {1} (in {2} on host {3})",
+ service.getName(), serviceComponent.getName(), summary.getCurrentState(),
+ summary.getHostName());
+ errorMessages.add(message);
+ break;
+ }
}
}
}
}
}
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
if (!errorMessages.isEmpty()) {
- prerequisiteCheck.setFailedOn(
+ result.setFailedOn(
failedServices.stream().map(failedService -> failedService.serviceName).collect(
Collectors.toCollection(LinkedHashSet::new)));
- prerequisiteCheck.getFailedDetail().addAll(failedServices);
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
- prerequisiteCheck.setFailReason(
+ result.getFailedDetail().addAll(failedServices);
+ result.setStatus(PrereqCheckStatus.FAIL);
+ result.setFailReason(
"The following Service Components should be in a started state. Please invoke a service Stop and full Start and try again. "
+ StringUtils.join(errorMessages, ", "));
}
+
+ return result;
}
/**
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 58ef4ba..a8161f6 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
@@ -30,7 +30,7 @@ import com.google.inject.Singleton;
/**
* The {@link UpgradeCheck} annotation is used to provide ordering and grouping
- * to any {@link AbstractCheckDescriptor} instance.
+ * to any {@link ClusterCheck} instance.
* <p/>
* Classes marked with this annotation should also be {@link Singleton}. They
* will be discovered on the classpath and then registered with the
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 ff3aeda..5e2f4b6 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
@@ -28,6 +28,8 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.slf4j.Logger;
@@ -48,7 +50,7 @@ public class UpgradeCheckRegistry {
/**
* The list of upgrade checks to run through.
*/
- private Set<AbstractCheckDescriptor> m_upgradeChecks = new TreeSet<>(
+ private Set<PreUpgradeCheck> m_upgradeChecks = new TreeSet<>(
new PreUpgradeCheckComparator());
/**
@@ -57,7 +59,7 @@ public class UpgradeCheckRegistry {
* @param upgradeCheck
* the check to register (not {@code null}).
*/
- public void register(AbstractCheckDescriptor upgradeCheck) {
+ public void register(PreUpgradeCheck upgradeCheck) {
m_upgradeChecks.add(upgradeCheck);
}
@@ -66,11 +68,15 @@ public class UpgradeCheckRegistry {
*
* @return
*/
- public List<AbstractCheckDescriptor> getUpgradeChecks() {
+ public List<PreUpgradeCheck> getUpgradeChecks() {
return new ArrayList<>(m_upgradeChecks);
}
- public List<AbstractCheckDescriptor> getServiceLevelUpgradeChecks(UpgradePack upgradePack, Map<String, ServiceInfo> services) {
+ @Experimental(
+ feature = ExperimentalFeature.UPGRADE_PACK_PRE_CHECKS,
+ comment = "Need a different way to register these and inject configs into them")
+ public List<PreUpgradeCheck> getServiceLevelUpgradeChecks(UpgradePack upgradePack,
+ Map<String, ServiceInfo> services) {
List<String> prerequisiteChecks = upgradePack.getPrerequisiteChecks();
List<String> missingChecks = new ArrayList<>();
for (String prerequisiteCheck : prerequisiteChecks) {
@@ -79,7 +85,7 @@ public class UpgradeCheckRegistry {
}
}
- List<AbstractCheckDescriptor> checks = new ArrayList<>(missingChecks.size());
+ List<PreUpgradeCheck> checks = new ArrayList<>(missingChecks.size());
if (missingChecks.isEmpty()) {
return checks;
}
@@ -116,7 +122,7 @@ public class UpgradeCheckRegistry {
}
try {
if (clazz != null) {
- AbstractCheckDescriptor upgradeCheck = (AbstractCheckDescriptor) clazz.newInstance();
+ PreUpgradeCheck upgradeCheck = (PreUpgradeCheck) clazz.newInstance();
checks.add(upgradeCheck);
}
} catch (Exception exception) {
@@ -127,7 +133,7 @@ public class UpgradeCheckRegistry {
}
private boolean isRegistered(String prerequisiteCheck) {
- for (AbstractCheckDescriptor descriptor: m_upgradeChecks){
+ for (PreUpgradeCheck descriptor: m_upgradeChecks){
if (prerequisiteCheck.equals(descriptor.getClass().getName())){
return true;
}
@@ -140,10 +146,10 @@ public class UpgradeCheckRegistry {
* @param upgradePack Upgrade pack object with the list of required checks to be included
* @return
*/
- public List<AbstractCheckDescriptor> getFilteredUpgradeChecks(UpgradePack upgradePack){
+ public List<PreUpgradeCheck> getFilteredUpgradeChecks(UpgradePack upgradePack) {
List<String> prerequisiteChecks = upgradePack.getPrerequisiteChecks();
- List<AbstractCheckDescriptor> resultCheckDescriptor = new ArrayList<>();
- for (AbstractCheckDescriptor descriptor: m_upgradeChecks){
+ List<PreUpgradeCheck> resultCheckDescriptor = new ArrayList<>();
+ for (PreUpgradeCheck descriptor : m_upgradeChecks) {
if (descriptor.isRequired(upgradePack.getType())) {
resultCheckDescriptor.add(descriptor);
} else if (prerequisiteChecks.contains(descriptor.getClass().getName())){
@@ -155,19 +161,18 @@ public class UpgradeCheckRegistry {
/**
* THe {@link PreUpgradeCheckComparator} class is used to compare
- * {@link AbstractCheckDescriptor} based on their {@link UpgradeCheck}
- * annotations.
+ * {@link PreUpgradeCheck} based on their {@link UpgradeCheck} annotations.
*/
private static final class PreUpgradeCheckComparator implements
- Comparator<AbstractCheckDescriptor> {
+ Comparator<PreUpgradeCheck> {
/**
* {@inheritDoc}
*/
@Override
- public int compare(AbstractCheckDescriptor check1, AbstractCheckDescriptor check2) {
- Class<? extends AbstractCheckDescriptor> clazz1 = check1.getClass();
- Class<? extends AbstractCheckDescriptor> clazz2 = check2.getClass();
+ public int compare(PreUpgradeCheck check1, PreUpgradeCheck check2) {
+ Class<? extends PreUpgradeCheck> clazz1 = check1.getClass();
+ Class<? extends PreUpgradeCheck> clazz2 = check2.getClass();
UpgradeCheck annotation1 = clazz1.getAnnotation(UpgradeCheck.class);
UpgradeCheck annotation2 = clazz2.getAnnotation(UpgradeCheck.class);
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/VersionMismatchCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/VersionMismatchCheck.java
index 9c8f66b..83f8328 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/VersionMismatchCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/VersionMismatchCheck.java
@@ -29,7 +29,7 @@ import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.UpgradeState;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
@@ -44,27 +44,32 @@ import com.google.inject.Singleton;
group = UpgradeCheckGroup.COMPONENT_VERSION,
order = 7.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
-public class VersionMismatchCheck extends AbstractCheckDescriptor {
+public class VersionMismatchCheck extends ClusterCheck {
public VersionMismatchCheck() {
super(CheckDescription.VERSION_MISMATCH);
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+ public UpgradeCheckResult perform(PrereqCheckRequest request) throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
List<String> errorMessages = new ArrayList<>();
+
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+
for (Service service : cluster.getServices()) {
- validateService(service, prerequisiteCheck, errorMessages);
+ validateService(service, result, errorMessages);
}
- if (!prerequisiteCheck.getFailedOn().isEmpty()) {
- prerequisiteCheck.setStatus(PrereqCheckStatus.WARNING);
- String failReason = getFailReason(prerequisiteCheck, request);
- prerequisiteCheck.setFailReason(String.format(failReason, StringUtils.join(errorMessages, "\n")));
- prerequisiteCheck.setFailReason(StringUtils.join(errorMessages, "\n"));
+ if (!result.getFailedOn().isEmpty()) {
+ result.setStatus(PrereqCheckStatus.WARNING);
+ String failReason = getFailReason(result, request);
+ result.setFailReason(String.format(failReason, StringUtils.join(errorMessages, "\n")));
+ result.setFailReason(StringUtils.join(errorMessages, "\n"));
}
+
+ return result;
}
/**
@@ -74,7 +79,7 @@ public class VersionMismatchCheck extends AbstractCheckDescriptor {
* @param errorMessages
* @throws AmbariException
*/
- private void validateService(Service service, PrerequisiteCheck prerequisiteCheck,
+ private void validateService(Service service, UpgradeCheckResult prerequisiteCheck,
List<String> errorMessages) throws AmbariException {
Map<String, ServiceComponent> serviceComponents = service.getServiceComponents();
for (ServiceComponent serviceComponent : serviceComponents.values()) {
@@ -89,7 +94,7 @@ public class VersionMismatchCheck extends AbstractCheckDescriptor {
* @param errorMessages
*/
private void validateServiceComponent(ServiceComponent serviceComponent,
- PrerequisiteCheck prerequisiteCheck, List<String> errorMessages) {
+ UpgradeCheckResult prerequisiteCheck, List<String> errorMessages) {
Map<String, ServiceComponentHost> serviceComponentHosts = serviceComponent.getServiceComponentHosts();
for (ServiceComponentHost serviceComponentHost : serviceComponentHosts.values()) {
validateServiceComponentHost(serviceComponent, serviceComponentHost,
@@ -108,7 +113,7 @@ public class VersionMismatchCheck extends AbstractCheckDescriptor {
*/
private void validateServiceComponentHost(ServiceComponent serviceComponent,
ServiceComponentHost serviceComponentHost,
- PrerequisiteCheck prerequisiteCheck,
+ UpgradeCheckResult prerequisiteCheck,
List<String> errorMessages) {
if (serviceComponentHost.getUpgradeState().equals(UpgradeState.VERSION_MISMATCH)) {
String hostName = serviceComponentHost.getHostName();
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java
index c0be480..cf95d65 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java
@@ -23,13 +23,10 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import org.apache.ambari.annotations.Experimental;
-import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.actionmanager.TargetHostType;
import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.controller.internal.RequestOperationLevel;
import org.apache.ambari.server.controller.internal.RequestResourceFilter;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
/**
* The context required to create tasks and stages for a custom action
@@ -48,7 +45,6 @@ public class ActionExecutionContext {
private String expectedComponentName;
private boolean hostsInMaintenanceModeExcluded = true;
private boolean allowRetry = false;
- private RepositoryVersionEntity repositoryVersion;
private List<ExecutionCommandVisitor> m_visitors = new ArrayList<>();
/**
@@ -196,36 +192,6 @@ public class ActionExecutionContext {
}
/**
- * Gets the stack/version to use for generating stack-associated values for a
- * command. In some cases the cluster's stack is not the correct one to use,
- * such as when distributing a repository.
- *
- * @return the repository for the stack/version to use when generating
- * stack-specific content for the command.
- *
- * @return
- */
- @Deprecated
- @Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
- public RepositoryVersionEntity getRepositoryVersion() {
- return repositoryVersion;
- }
-
- /**
- * Sets the stack/version to use for generating stack-associated values for a
- * command. In some cases the cluster's stack is not the correct one to use,
- * such as when distributing a repository.
- *
- * @param stackId
- * the stackId to use for stack-based properties on the command.
- */
- @Deprecated
- @Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
- public void setRepositoryVersion(RepositoryVersionEntity repositoryVersion) {
- this.repositoryVersion = repositoryVersion;
- }
-
- /**
* Adds a command visitor that will be invoked after a command is created. Provides access
* to the command.
*
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
index 493a209..9fa570f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
@@ -44,6 +44,8 @@ import java.util.List;
import java.util.Properties;
import java.util.Set;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariService;
import org.apache.ambari.server.EagerSingleton;
import org.apache.ambari.server.StaticallyInject;
@@ -55,8 +57,8 @@ import org.apache.ambari.server.actionmanager.HostRoleCommandFactoryImpl;
import org.apache.ambari.server.actionmanager.RequestFactory;
import org.apache.ambari.server.actionmanager.StageFactory;
import org.apache.ambari.server.actionmanager.StageFactoryImpl;
-import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.DatabaseConsistencyCheckHelper;
+import org.apache.ambari.server.checks.PreUpgradeCheck;
import org.apache.ambari.server.checks.UpgradeCheckRegistry;
import org.apache.ambari.server.cleanup.ClasspathScannerUtils;
import org.apache.ambari.server.configuration.Configuration;
@@ -531,6 +533,7 @@ public class ControllerModule extends AbstractModule {
install(new FactoryModuleBuilder().build(UpgradeContextFactory.class));
install(new FactoryModuleBuilder().build(MpackManagerFactory.class));
install(new FactoryModuleBuilder().build(RootLevelSettingsManagerFactory.class));
+ install(new FactoryModuleBuilder().build(PrereqCheckRequestFactory.class));
bind(RegistryFactory.class).to(RegistryFactoryImpl.class);
bind(HostRoleCommandFactory.class).to(HostRoleCommandFactoryImpl.class);
@@ -700,11 +703,13 @@ public class ControllerModule extends AbstractModule {
}
/**
- * Searches for all instances of {@link AbstractCheckDescriptor} on the
- * classpath and registers each as a singleton with the
- * {@link UpgradeCheckRegistry}.
+ * Searches for all instances of {@link PreUpgradeCheck} on the classpath and
+ * registers each as a singleton with the {@link UpgradeCheckRegistry}.
*/
@SuppressWarnings("unchecked")
+ @Experimental(
+ feature = ExperimentalFeature.UPGRADE_PACK_PRE_CHECKS,
+ comment = "Need a different way to register these and inject configs into them")
protected Set<BeanDefinition> registerUpgradeChecks(Set<BeanDefinition> beanDefinitions) {
// make the registry a singleton
@@ -712,14 +717,14 @@ public class ControllerModule extends AbstractModule {
bind(UpgradeCheckRegistry.class).toInstance(registry);
if (null == beanDefinitions || beanDefinitions.isEmpty()) {
- String packageName = AbstractCheckDescriptor.class.getPackage().getName();
+ String packageName = PreUpgradeCheck.class.getPackage().getName();
LOG.info("Searching package {} for classes matching {}", packageName,
- AbstractCheckDescriptor.class);
+ PreUpgradeCheck.class);
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
// match all implementations of the base check class
- AssignableTypeFilter filter = new AssignableTypeFilter(AbstractCheckDescriptor.class);
+ AssignableTypeFilter filter = new AssignableTypeFilter(PreUpgradeCheck.class);
scanner.addIncludeFilter(filter);
beanDefinitions = scanner.findCandidateComponents(packageName);
@@ -727,7 +732,7 @@ public class ControllerModule extends AbstractModule {
// no dispatchers is a problem
if (null == beanDefinitions || beanDefinitions.size() == 0) {
- LOG.error("No instances of {} found to register", AbstractCheckDescriptor.class);
+ LOG.error("No instances of {} found to register", PreUpgradeCheck.class);
return null;
}
@@ -738,8 +743,8 @@ public class ControllerModule extends AbstractModule {
Class<?> clazz = ClassUtils.resolveClassName(className, ClassUtils.getDefaultClassLoader());
try {
- AbstractCheckDescriptor upgradeCheck = (AbstractCheckDescriptor) clazz.newInstance();
- bind((Class<AbstractCheckDescriptor>) clazz).toInstance(upgradeCheck);
+ PreUpgradeCheck upgradeCheck = (PreUpgradeCheck) clazz.newInstance();
+ bind((Class<PreUpgradeCheck>) clazz).toInstance(upgradeCheck);
registry.register(upgradeCheck);
} catch (Exception exception) {
LOG.error("Unable to bind and register upgrade check {}", clazz, exception);
@@ -747,8 +752,8 @@ public class ControllerModule extends AbstractModule {
}
// log the order of the pre-upgrade checks
- List<AbstractCheckDescriptor> upgradeChecks = registry.getUpgradeChecks();
- for (AbstractCheckDescriptor upgradeCheck : upgradeChecks) {
+ List<PreUpgradeCheck> upgradeChecks = registry.getUpgradeChecks();
+ for (PreUpgradeCheck upgradeCheck : upgradeChecks) {
LOG.info("Registered pre-upgrade check {}", upgradeCheck.getClass());
}
return beanDefinitions;
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 6d9f655..5c793c7 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
@@ -20,48 +20,59 @@ package org.apache.ambari.server.controller;
import java.util.HashMap;
import java.util.Map;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.checks.CheckDescription;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
+import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.UpgradePack.PrerequisiteCheckConfig;
-import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
+import com.google.inject.assistedinject.AssistedInject;
/**
* Represents a prerequisite check request.
*/
public class PrereqCheckRequest {
- private String m_clusterName;
- private StackId m_sourceStackId;
- private RepositoryVersionEntity m_targetRepositoryVersion;
+ private final UpgradePlanEntity m_upgradePlan;
private PrerequisiteCheckConfig m_prereqCheckConfig;
- private UpgradeType m_upgradeType;
-
private Map<CheckDescription, PrereqCheckStatus> m_results = new HashMap<>();
- private boolean m_revert = false;
-
- public PrereqCheckRequest(String clusterName, UpgradeType upgradeType) {
- m_clusterName = clusterName;
- m_upgradeType = upgradeType;
- }
+ /**
+ *
+ */
+ @Inject
+ private Clusters m_clusters;
/**
- * Construct a request to performs checks before an Upgrade.
- * The default type is Rolling.
- * @param clusterName
+ * Constructor.
+ *
+ * @param upgradePlan
+ * the upgrade plan.
*/
- public PrereqCheckRequest(String clusterName) {
- this(clusterName, UpgradeType.ROLLING);
+ @AssistedInject
+ public PrereqCheckRequest(@Assisted UpgradePlanEntity upgradePlan) {
+ m_upgradePlan = upgradePlan;
}
- public String getClusterName() {
- return m_clusterName;
+ /**
+ * Gets the upgrade plan associated with this upgrade pre-check request.
+ *
+ * @return the upgrade plan.
+ */
+ public UpgradePlanEntity getUpgradePlan() {
+ return m_upgradePlan;
}
- public UpgradeType getUpgradeType() {
- return m_upgradeType;
+ /**
+ * Gets the cluster name involved in the pre upgrade checks.
+ *
+ * @return the cluster name.
+ */
+ public String getClusterName() throws AmbariException {
+ return m_clusters.getCluster(m_upgradePlan.getClusterId()).getClusterName();
}
/**
@@ -83,44 +94,6 @@ public class PrereqCheckRequest {
}
/**
- * Gets the cluster's current stack before upgrade.
- *
- * @return the sourceStackId the source stack ID.
- */
- public StackId getSourceStackId() {
- return m_sourceStackId;
- }
-
- /**
- * Sets the cluster's current stack before upgrade.
- *
- * @param sourceStackId
- * the sourceStackId to set
- */
- public void setSourceStackId(StackId sourceStackId) {
- m_sourceStackId = sourceStackId;
- }
-
- /**
- * Gets the target repository of the upgrade.
- *
- * @return the target repository.
- */
- public RepositoryVersionEntity getTargetRepositoryVersion() {
- return m_targetRepositoryVersion;
- }
-
- /**
- * Sets the target of the upgrade.
- *
- * @param targetRepositoryVersion
- * the target repository version
- */
- public void setTargetRepositoryVersion(RepositoryVersionEntity targetRepositoryVersion) {
- m_targetRepositoryVersion = targetRepositoryVersion;
- }
-
- /**
* Gets the prerequisite check config
* @return the prereqCheckConfig
*/
@@ -135,19 +108,4 @@ public class PrereqCheckRequest {
public void setPrerequisiteCheckConfig(PrerequisiteCheckConfig prereqCheckConfig) {
m_prereqCheckConfig = prereqCheckConfig;
}
-
- /**
- * @param revert
- * {@code true} if the check is for a patch reversion
- */
- public void setRevert(boolean revert) {
- m_revert = revert;
- }
-
- /**
- * @return if the check is for a patch reversion
- */
- public boolean isRevert() {
- return m_revert;
- }
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequestFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequestFactory.java
new file mode 100644
index 0000000..36412db
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequestFactory.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.controller;
+
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
+
+/**
+ * Used for building dependency injected instances of
+ * {@link PrereqCheckRequest}s.
+ */
+public interface PrereqCheckRequestFactory {
+
+ /**
+ * Creates a new {@link PrereqCheckRequest} based off of a supplied upgrade
+ * plan.
+ *
+ * @param upgradePlanEntity
+ * the upgrade plan
+ * @return the upgrade check request
+ */
+ PrereqCheckRequest createNew(UpgradePlanEntity upgradePlanEntity);
+
+}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersion.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersion.java
deleted file mode 100644
index 408d216..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersion.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.server.controller.internal;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
-
-/**
- * Helper class for maintaining RepositoryVersionEntity along with
- * supported Upgrade Type(s).
- */
-public class CompatibleRepositoryVersion {
- private RepositoryVersionEntity repositoryVersionEntity;
- private Set<UpgradeType> supportedTypes;
-
- public CompatibleRepositoryVersion(RepositoryVersionEntity repositoryVersionEntity) {
- this.repositoryVersionEntity = repositoryVersionEntity;
- this.supportedTypes = new HashSet<>();
- }
-
- /**
- * Maintains the List of Upgrade Types.
- *
- * @param type Supported Upgrade Type.
- */
- public void addUpgradePackType(UpgradeType type) {
- supportedTypes.add(type);
- }
-
- /**
- * @return List of supported Upgrade Type(s).
- */
- public Set<UpgradeType> getSupportedTypes() {
- return supportedTypes;
- }
-
- /**
- * @return RepositoryVersionEntity instance.
- */
- public RepositoryVersionEntity getRepositoryVersionEntity() {
- return repositoryVersionEntity;
- }
-
-}
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 e5da5d7..2686a65 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
@@ -24,10 +24,11 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.ParentObjectNotFoundException;
import org.apache.ambari.server.StaticallyInject;
-import org.apache.ambari.server.checks.AbstractCheckDescriptor;
+import org.apache.ambari.server.checks.PreUpgradeCheck;
import org.apache.ambari.server.checks.UpgradeCheckRegistry;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariManagementController;
@@ -41,18 +42,13 @@ import org.apache.ambari.server.controller.spi.Resource.Type;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
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.ServiceInfo;
-import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.UpgradeHelper;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
-import org.apache.ambari.server.state.stack.UpgradePack;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
-import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -80,14 +76,6 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
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_UPGRADE_PLAN_ID = PropertyHelper.getPropertyId("UpgradeChecks", "upgrade_plan_id");
- public static final String UPGRADE_CHECK_TARGET_REPOSITORY_VERSION = PropertyHelper.getPropertyId("UpgradeChecks", "repository_version");
-
- /**
- * Optional parameter to specify the preferred Upgrade Pack to use.
- */
- public static final String UPGRADE_CHECK_UPGRADE_PACK_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "upgrade_pack");
- public static final String UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "repository_version");
- public static final String UPGRADE_CHECK_FOR_REVERT_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "for_revert");
@Inject
private static Provider<Clusters> clustersProvider;
@@ -116,9 +104,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID,
UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID,
UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID,
- UPGRADE_CHECK_FOR_REVERT_PROPERTY_ID,
- UPGRADE_CHECK_UPGRADE_PLAN_ID,
- UPGRADE_CHECK_UPGRADE_PACK_PROPERTY_ID);
+ UPGRADE_CHECK_UPGRADE_PLAN_ID);
@SuppressWarnings("serial")
@@ -175,61 +161,15 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
UPGRADE_CHECK_UPGRADE_PLAN_ID));
}
- final PrereqCheckRequest upgradeCheckRequest = new PrereqCheckRequest(clusterName,
- upgradeType);
-
- StackId sourceStackId = cluster.getCurrentStackVersion();
- upgradeCheckRequest.setSourceStackId(cluster.getCurrentStackVersion());
-
- RepositoryVersionEntity repositoryVersion = null;
+ @Experimental(
+ feature = ExperimentalFeature.UPGRADE_PACK_PRE_CHECKS,
+ comment = "This no longer accounts for custom checks")
+ UpgradePlanEntity upgradePlan = null;
+ final PrereqCheckRequest upgradeCheckRequest = new PrereqCheckRequest(upgradePlan);
+ List<PreUpgradeCheck> upgradeChecksToRun = upgradeCheckRegistry.getFilteredUpgradeChecks(null);
- upgradeCheckRequest.setTargetRepositoryVersion(repositoryVersion);
- if (propertyMap.containsKey(UPGRADE_CHECK_FOR_REVERT_PROPERTY_ID)) {
- Boolean forRevert = BooleanUtils.toBooleanObject(propertyMap.get(UPGRADE_CHECK_FOR_REVERT_PROPERTY_ID).toString());
- upgradeCheckRequest.setRevert(forRevert);
- }
-
- //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.
- UpgradePack upgradePack = null;
- String preferredUpgradePackName = propertyMap.containsKey(UPGRADE_CHECK_UPGRADE_PACK_PROPERTY_ID) ?
- (String) propertyMap.get(UPGRADE_CHECK_UPGRADE_PACK_PROPERTY_ID) : null;
- try{
- // Hint: PreChecks currently executing only before UPGRADE direction
- upgradePack = upgradeHelper.get().suggestUpgradePack(clusterName, sourceStackId,
- repositoryVersion.getStackId(), Direction.UPGRADE, upgradeType,
- preferredUpgradePackName);
- } 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.getTargetRepositoryVersion()));
- }
-
- // ToDo: properly handle exceptions, i.e. create fake check with error description
- List<AbstractCheckDescriptor> upgradeChecksToRun = upgradeCheckRegistry.getFilteredUpgradeChecks(upgradePack);
- upgradeCheckRequest.setPrerequisiteCheckConfig(upgradePack.getPrerequisiteCheckConfig());
-
- try {
- // Register all the custom prechecks from the services
- Map<String, ServiceInfo> services = getManagementController().getAmbariMetaInfo().getServices(
- sourceStackId.getStackName(), sourceStackId.getStackVersion());
-
- List<AbstractCheckDescriptor> serviceLevelUpgradeChecksToRun = upgradeCheckRegistry.getServiceLevelUpgradeChecks(upgradePack, services);
- upgradeChecksToRun.addAll(serviceLevelUpgradeChecksToRun);
- } catch (ParentObjectNotFoundException parentNotFoundException) {
- LOG.error("Invalid stack version: {}", sourceStackId, parentNotFoundException);
- } catch (AmbariException ambariException) {
- LOG.error("Unable to register all the custom prechecks from the services", ambariException);
- } catch (Exception e) {
- LOG.error("Failed to register custom prechecks for the services", e);
- }
-
- for (PrerequisiteCheck prerequisiteCheck : checkHelper.performChecks(upgradeCheckRequest, upgradeChecksToRun, config.get())) {
+ for (UpgradeCheckResult prerequisiteCheck : checkHelper.performChecks(upgradeCheckRequest, upgradeChecksToRun, config.get())) {
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);
@@ -238,12 +178,10 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
setResourceProperty(resource, UPGRADE_CHECK_FAILED_ON_PROPERTY_ID, prerequisiteCheck.getFailedOn(), requestedIds);
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_CLUSTER_NAME_PROPERTY_ID, cluster.getClusterName(), requestedIds);
setResourceProperty(resource, UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID, upgradeType, requestedIds);
- setResourceProperty(resource, UPGRADE_CHECK_UPGRADE_PLAN_ID, repositoryVersion.getId(), requestedIds);
- setResourceProperty(resource, UPGRADE_CHECK_TARGET_REPOSITORY_VERSION, repositoryVersion.getVersion(), requestedIds);
-
+ setResourceProperty(resource, UPGRADE_CHECK_UPGRADE_PLAN_ID, upgradePlan.getId(), requestedIds);
resources.add(resource);
}
}
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 99bbcac..a5aec09 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
@@ -125,7 +125,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
public static final String UPGRADE_CLUSTER_NAME = "Upgrade/cluster_name";
public static final String UPGRADE_PLAN_ID = "Upgrade/upgrade_plan_id";
public static final String UPGRADE_TYPE = "Upgrade/upgrade_type";
- public static final String UPGRADE_PACK = "Upgrade/pack";
public static final String UPGRADE_ID = "Upgrade/upgrade_id";
public static final String UPGRADE_REQUEST_ID = "Upgrade/request_id";
public static final String UPGRADE_SUMMARY = "Upgrade/summary";
@@ -264,7 +263,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
PROPERTY_IDS.add(UPGRADE_CLUSTER_NAME);
PROPERTY_IDS.add(UPGRADE_PLAN_ID);
PROPERTY_IDS.add(UPGRADE_TYPE);
- PROPERTY_IDS.add(UPGRADE_PACK);
PROPERTY_IDS.add(UPGRADE_ID);
PROPERTY_IDS.add(UPGRADE_REQUEST_ID);
PROPERTY_IDS.add(UPGRADE_SUMMARY);
@@ -625,7 +623,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
setResourceProperty(resource, UPGRADE_ID, entity.getId(), requestedIds);
setResourceProperty(resource, UPGRADE_CLUSTER_NAME, cluster.getClusterName(), requestedIds);
setResourceProperty(resource, UPGRADE_TYPE, entity.getUpgradeType(), requestedIds);
- setResourceProperty(resource, UPGRADE_PACK, entity.getUpgradePackage(), requestedIds);
setResourceProperty(resource, UPGRADE_REQUEST_ID, entity.getRequestId(), requestedIds);
setResourceProperty(resource, UPGRADE_DIRECTION, entity.getDirection(), requestedIds);
setResourceProperty(resource, UPGRADE_SUSPENDED, entity.isSuspended(), requestedIds);
@@ -747,7 +744,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
UpgradeEntity upgrade = new UpgradeEntity();
upgrade.setClusterId(cluster.getClusterId());
upgrade.setDirection(direction);
- upgrade.setUpgradePackage(pack.getName());
upgrade.setUpgradeType(pack.getType());
upgrade.setAutoSkipComponentFailures(upgradeContext.isComponentFailureAutoSkipped());
upgrade.setAutoSkipServiceCheckFailures(upgradeContext.isServiceCheckFailureAutoSkipped());
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/HostComponentVersionAdvertisedEvent.java b/ambari-server/src/main/java/org/apache/ambari/server/events/HostComponentVersionAdvertisedEvent.java
index e8509b4..664bce6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/HostComponentVersionAdvertisedEvent.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/HostComponentVersionAdvertisedEvent.java
@@ -27,7 +27,7 @@ import org.apache.ambari.server.state.ServiceComponentHost;
* occurs when a Host Component advertises it's current version value.
*/
@Deprecated
-@Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
+@Experimental(feature = ExperimentalFeature.VERSION_REPORTING)
public class HostComponentVersionAdvertisedEvent extends ClusterEvent {
protected Cluster cluster;
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
deleted file mode 100644
index bda687a..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.server.orm.entities;
-
-import org.apache.ambari.annotations.Experimental;
-import org.apache.ambari.annotations.ExperimentalFeature;
-import org.apache.ambari.server.state.StackId;
-
-@Deprecated
-@Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
-public class RepositoryVersionEntity {
-
- public RepositoryVersionEntity() {
-
- }
-
- public Long getId() {
- return null;
- }
-
- /**
- * Gets the repository version's stack.
- *
- * @return the stack.
- */
- public StackEntity getStack() {
- return null;
- }
-
- public String getVersion() {
- return null;
- }
-
- public String getDisplayName() {
- return null;
- }
-
- public String getStackName() {
- return null;
- }
-
- public String getStackVersion() {
- return null;
- }
-
- public StackId getStackId() {
- return null;
- }
-
- /**
- * @return the XML that is the basis for the version
- */
- public String getVersionXml() {
- return null;
- }
-
- /**
- * @return The url used for the version. Optional in case the XML was loaded via blob.
- */
- public String getVersionUrl() {
- return null;
- }
-
- /**
- * @return the XSD name extracted from the XML.
- */
- public String getVersionXsd() {
- return null;
- }
-}
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 bb99b72..4df3db9 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
@@ -116,9 +116,6 @@ 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;
@@ -320,20 +317,6 @@ public class UpgradeEntity {
}
/**
- * @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;
- }
-
- /**
* Gets whether skippable components that failed are automatically skipped.
* They will be placed into the {@link HostRoleStatus#SKIPPED_FAILED} state.
*
@@ -443,7 +426,6 @@ public class UpgradeEntity {
.append(direction, that.direction)
.append(suspended, that.suspended)
.append(upgradeType, that.upgradeType)
- .append(upgradePackage, that.upgradePackage)
.isEquals();
}
@@ -452,8 +434,7 @@ public class UpgradeEntity {
*/
@Override
public int hashCode() {
- return Objects.hashCode(upgradeId, clusterId, requestId, direction, suspended, upgradeType,
- upgradePackage);
+ return Objects.hashCode(upgradeId, clusterId, requestId, direction, suspended, upgradeType);
}
/**
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/CheckHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/CheckHelper.java
index 7fe3256..705cb78 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/CheckHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/CheckHelper.java
@@ -22,29 +22,18 @@ import java.util.LinkedList;
import java.util.List;
import org.apache.ambari.server.ClusterNotFoundException;
-import org.apache.ambari.server.checks.AbstractCheckDescriptor;
+import org.apache.ambari.server.checks.CheckDescription;
+import org.apache.ambari.server.checks.PreUpgradeCheck;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Singleton;
-
-class DescriptorPreCheck {
-
- public AbstractCheckDescriptor descriptor;
- public PrerequisiteCheck check;
-
- public DescriptorPreCheck(AbstractCheckDescriptor descriptor, PrerequisiteCheck check) {
- this.descriptor = descriptor;
- this.check = check;
- }
-}
-
@Singleton
public class CheckHelper {
/**
@@ -60,22 +49,19 @@ public class CheckHelper {
* @param checksRegistry Registry with all PreChecks that may be applied.
* @return List of applicable PreChecks.
*/
- public List<DescriptorPreCheck> getApplicablePrerequisiteChecks(PrereqCheckRequest request,
- List<AbstractCheckDescriptor> checksRegistry) {
- List<DescriptorPreCheck> applicablePreChecks = new LinkedList<>();
-
- final String clusterName = request.getClusterName();
- for (AbstractCheckDescriptor checkDescriptor : checksRegistry) {
- final PrerequisiteCheck prerequisiteCheck = new PrerequisiteCheck(checkDescriptor.getDescription(), clusterName);
+ public List<PreUpgradeCheck> getApplicablePrerequisiteChecks(PrereqCheckRequest request,
+ List<PreUpgradeCheck> checksRegistry) {
+ List<PreUpgradeCheck> applicablePreChecks = new LinkedList<>();
+ for (PreUpgradeCheck preUpgradeCheck : checksRegistry) {
try {
- if (checkDescriptor.isApplicable(request)) {
- applicablePreChecks.add(new DescriptorPreCheck(checkDescriptor, prerequisiteCheck));
+ if (preUpgradeCheck.isApplicable(request)) {
+ applicablePreChecks.add(preUpgradeCheck);
}
} catch (Exception ex) {
LOG.error(
"Unable to determine whether the pre-upgrade check {} is applicable to this upgrade",
- checkDescriptor.getDescription().name(), ex);
+ preUpgradeCheck.getCheckDescrption().name(), ex);
}
}
return applicablePreChecks;
@@ -88,39 +74,39 @@ public class CheckHelper {
* pre-requisite check request
* @return list of pre-requisite check results
*/
- public List<PrerequisiteCheck> performChecks(PrereqCheckRequest request,
- List<AbstractCheckDescriptor> checksRegistry, Configuration config) {
+ public List<UpgradeCheckResult> performChecks(PrereqCheckRequest request,
+ List<PreUpgradeCheck> checksRegistry, Configuration config) {
- final String clusterName = request.getClusterName();
- final List<PrerequisiteCheck> prerequisiteCheckResults = new ArrayList<>();
+ final List<UpgradeCheckResult> prerequisiteCheckResults = new ArrayList<>();
final boolean canBypassPreChecks = config.isUpgradePrecheckBypass();
- List<DescriptorPreCheck> applicablePreChecks = getApplicablePrerequisiteChecks(request, checksRegistry);
+ List<PreUpgradeCheck> applicablePreChecks = getApplicablePrerequisiteChecks(request, checksRegistry);
- for (DescriptorPreCheck descriptorPreCheck : applicablePreChecks) {
- AbstractCheckDescriptor checkDescriptor = descriptorPreCheck.descriptor;
- PrerequisiteCheck prerequisiteCheck = descriptorPreCheck.check;
+ for (PreUpgradeCheck preUpgradeCheck : applicablePreChecks) {
+ CheckDescription checkDescription = preUpgradeCheck.getCheckDescrption();
+ UpgradeCheckResult result;
try {
- checkDescriptor.perform(prerequisiteCheck, request);
+ result = preUpgradeCheck.perform(request);
} catch (ClusterNotFoundException ex) {
- prerequisiteCheck.setFailReason("Cluster with name " + clusterName + " doesn't exists");
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
+ result = new UpgradeCheckResult(preUpgradeCheck, PrereqCheckStatus.FAIL);
+ result.setFailReason("The cluster could not be found.");
} catch (Exception ex) {
- LOG.error("Check " + checkDescriptor.getDescription().name() + " failed", ex);
- prerequisiteCheck.setFailReason("Unexpected server error happened");
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
+ LOG.error("Check " + checkDescription.name() + " failed", ex);
+ result = new UpgradeCheckResult(preUpgradeCheck, PrereqCheckStatus.FAIL);
+ result.setFailReason("Unexpected server error happened");
}
- if (prerequisiteCheck.getStatus() == PrereqCheckStatus.FAIL && canBypassPreChecks) {
- LOG.error("Check {} failed but stack upgrade is allowed to bypass failures. Error to bypass: {}. Failed on: {}",
- checkDescriptor.getDescription().name(),
- prerequisiteCheck.getFailReason(),
- StringUtils.join(prerequisiteCheck.getFailedOn(), ", "));
- prerequisiteCheck.setStatus(PrereqCheckStatus.BYPASS);
+ if (result.getStatus() == PrereqCheckStatus.FAIL && canBypassPreChecks) {
+ LOG.error(
+ "Check {} failed but stack upgrade is allowed to bypass failures. Error to bypass: {}. Failed on: {}",
+ checkDescription.name(), result.getFailReason(),
+ StringUtils.join(result.getFailedOn(), ", "));
+
+ result.setStatus(PrereqCheckStatus.BYPASS);
}
- prerequisiteCheckResults.add(prerequisiteCheck);
- request.addResult(checkDescriptor.getDescription(), prerequisiteCheck.getStatus());
+ prerequisiteCheckResults.add(result);
+ request.addResult(checkDescription, result.getStatus());
}
return prerequisiteCheckResults;
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java
index 477be2f..0161ed9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java
@@ -23,8 +23,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.apache.ambari.annotations.Experimental;
-import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ClusterSettingNotFoundException;
import org.apache.ambari.server.ServiceGroupNotFoundException;
@@ -357,14 +355,6 @@ public interface Cluster {
void setCurrentStackVersion(StackId stackVersion) throws AmbariException;
/**
- * @return
- * @throws AmbariException
- */
- @Deprecated
- @Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
- List<Host> transitionHostsToInstalling() throws AmbariException;
-
- /**
* Gets whether the cluster is still initializing or has finished with its
* deployment requests.
*
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java
index a90f006..f5f028d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java
@@ -66,17 +66,13 @@ public interface ServiceComponent {
void setDesiredState(State state);
@Deprecated
- @Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
+ @Experimental(feature = ExperimentalFeature.VERSION_REPORTING)
StackId getStackId();
@Deprecated
- @Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
+ @Experimental(feature = ExperimentalFeature.VERSION_REPORTING)
String getDesiredVersion();
- @Deprecated
- @Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
- void setDesiredRepositoryVersion();
-
/**
* Refresh Component info due to current stack
* @throws AmbariException
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
index 889d5c7..702f99d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
@@ -397,19 +397,9 @@ public class ServiceComponentImpl implements ServiceComponent {
}
}
- /**
- * {@inheritDoc}
- */
- @Override
- @Deprecated
- @Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
- public void setDesiredRepositoryVersion() {
- }
-
-
@Override
@Deprecated
- @Experimental(feature = ExperimentalFeature.REPO_VERSION_REMOVAL)
+ @Experimental(feature = ExperimentalFeature.VERSION_REPORTING)
public String getDesiredVersion() {
Cluster cluster = service.getCluster();
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 4482aca..9e3b5ec 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
@@ -19,7 +19,6 @@ package org.apache.ambari.server.state;
import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_FAIL_ON_CHECK_WARNINGS;
import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_HOST_ORDERED_HOSTS;
-import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_PACK;
import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_PLAN_ID;
import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_REVERT_UPGRADE_ID;
import static org.apache.ambari.server.controller.internal.UpgradeResourceProvider.UPGRADE_SKIP_FAILURES;
@@ -198,6 +197,7 @@ public class UpgradeContext {
* Used to suggest upgrade packs during creation of an upgrade context.
*/
@Inject
+ @Experimental(feature = ExperimentalFeature.MPACK_UPGRADES)
private UpgradeHelper m_upgradeHelper;
/**
@@ -289,9 +289,6 @@ public class UpgradeContext {
m_serviceGroups.put(serviceGroup, summary);
}
- // !!! use the same upgrade pack that was used in the upgrade being reverted
- upgradeRequestMap.put(UPGRADE_PACK, revertUpgrade.getUpgradePackage());
-
// !!! direction can ONLY be an downgrade on revert
m_direction = Direction.DOWNGRADE;
} else {
@@ -336,14 +333,6 @@ public class UpgradeContext {
}
}
- /**
- * For the unit tests tests, there are multiple upgrade packs for the same
- * type, so allow picking one of them. In prod, this is empty.
- */
- @Experimental(feature = ExperimentalFeature.MPACK_UPGRADES, comment = "No longer using single packs")
- String preferredUpgradePackName = (String) upgradeRequestMap.get(UPGRADE_PACK);
- m_upgradePack = null;
-
// the validator will throw an exception if the upgrade request is not valid
UpgradeRequestValidator upgradeRequestValidator = buildValidator(m_type);
upgradeRequestValidator.validate(cluster, m_direction, m_type, m_upgradePack,
@@ -402,13 +391,6 @@ public class UpgradeContext {
populateParticipatingServiceGroups(cluster, m_serviceGroups, upgradeEntity, false);
- @Experimental(
- feature = ExperimentalFeature.MPACK_UPGRADES,
- comment = "We need a way to get the upgrade packs given multiple mpacks")
- String upgradePackage = upgradeEntity.getUpgradePackage();
- Map<String, UpgradePack> packs = m_metaInfo.getUpgradePacks(null, null);
- m_upgradePack = packs.get(upgradePackage);
-
m_resolver = new MasterHostResolver(m_cluster, configHelper, this);
m_isRevert = upgradeEntity.isRevert();
}
@@ -977,7 +959,6 @@ public class UpgradeContext {
String upgradePlanId = (String) requestMap.get(UPGRADE_PLAN_ID);
boolean skipPrereqChecks = Boolean.parseBoolean((String) requestMap.get(UPGRADE_SKIP_PREREQUISITE_CHECKS));
boolean failOnCheckWarnings = Boolean.parseBoolean((String) requestMap.get(UPGRADE_FAIL_ON_CHECK_WARNINGS));
- String preferredUpgradePack = requestMap.containsKey(UPGRADE_PACK) ? (String) requestMap.get(UPGRADE_PACK) : null;
// verify that there is not an upgrade or downgrade that is in progress or suspended
UpgradeEntity existingUpgrade = cluster.getUpgradeInProgress();
@@ -1000,9 +981,7 @@ public class UpgradeContext {
Predicate preUpgradeCheckPredicate = new PredicateBuilder().property(
PreUpgradeCheckResourceProvider.UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID).equals(cluster.getClusterName()).and().property(
PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_PLAN_ID).equals(upgradePlanId).and().property(
- PreUpgradeCheckResourceProvider.UPGRADE_CHECK_FOR_REVERT_PROPERTY_ID).equals(m_isRevert).and().property(
- PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID).equals(type).and().property(
- PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_PACK_PROPERTY_ID).equals(preferredUpgradePack).toPredicate();
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID).equals(type).toPredicate();
Request preUpgradeCheckRequest = PropertyHelper.getReadRequest();
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
index 6698e59..11ee53c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
@@ -163,7 +163,6 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
-import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
@@ -1420,15 +1419,6 @@ public class ClusterImpl implements Cluster {
clusterEntity = clusterDAO.merge(clusterEntity);
}
- /**
- * {@inheritDoc}
- */
- @Override
- @Transactional
- public List<Host> transitionHostsToInstalling() throws AmbariException {
- return Lists.newArrayList();
- }
-
@Override
@Transactional
public void setCurrentStackVersion(StackId stackId) throws AmbariException {
@@ -3390,6 +3380,9 @@ public class ClusterImpl implements Cluster {
* {@inheritDoc}
*/
@Override
+ @Experimental(
+ feature = ExperimentalFeature.VERSION_REPORTING,
+ comment = "This needs to be changed to include service groups and to use the module component version")
public Map<String, Map<String, String>> getComponentVersionMap() {
Map<String, Map<String, String>> componentVersionMap = new HashMap<>();
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/PrerequisiteCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradeCheckResult.java
similarity index 77%
rename from ambari-server/src/main/java/org/apache/ambari/server/state/stack/PrerequisiteCheck.java
rename to ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradeCheckResult.java
index 0e605dd..49dc43f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/PrerequisiteCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradeCheckResult.java
@@ -21,32 +21,35 @@ import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
-import org.apache.ambari.server.checks.CheckDescription;
+import org.apache.ambari.server.checks.PreUpgradeCheck;
/**
* Contains information about performed prerequisite check. Newly initialized
- * {@link PrerequisiteCheck} instances are always set to
+ * {@link UpgradeCheckResult} instances are always set to
* {@link PrereqCheckStatus#PASS}.
*/
-public class PrerequisiteCheck {
- private final CheckDescription m_description;
- private final String m_clusterName;
+public class UpgradeCheckResult {
+ private PreUpgradeCheck m_upgradeCheck;
private PrereqCheckStatus m_status = PrereqCheckStatus.PASS;
private String m_failReason = "";
private LinkedHashSet<String> m_failedOn = new LinkedHashSet<>();
private List<Object> m_failedDetail = new ArrayList<>();
- public PrerequisiteCheck(CheckDescription description, String clusterName) {
- m_description = description;
- m_clusterName = clusterName;
+ public UpgradeCheckResult(PreUpgradeCheck check) {
+ m_upgradeCheck = check;
+ }
+
+ public UpgradeCheckResult(PreUpgradeCheck check, PrereqCheckStatus status) {
+ m_upgradeCheck = check;
+ m_status = status;
}
public String getId() {
- return m_description.name();
+ return m_upgradeCheck.getCheckDescrption().name();
}
public String getDescription() {
- return m_description.getText();
+ return m_upgradeCheck.getCheckDescrption().getText();
}
public PrereqCheckStatus getStatus() {
@@ -78,10 +81,6 @@ public class PrerequisiteCheck {
}
public PrereqCheckType getType() {
- return m_description.getType();
- }
-
- public String getClusterName() {
- return m_clusterName;
+ return m_upgradeCheck.getType();
}
}
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 c19f9a5..d451b4c 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
@@ -19,38 +19,29 @@ package org.apache.ambari.server.state.stack.upgrade;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Set;
import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.agent.CommandRepository;
-import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.ActionExecutionContext;
-import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.orm.dao.MpackDAO;
import org.apache.ambari.server.orm.entities.MpackEntity;
import org.apache.ambari.server.orm.entities.RepoDefinitionEntity;
import org.apache.ambari.server.orm.entities.RepoOsEntity;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.Mpack;
-import org.apache.ambari.server.state.OsSpecific;
import org.apache.ambari.server.state.RepositoryInfo;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceGroup;
-import org.apache.ambari.server.state.ServiceInfo;
-import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.stack.OsFamily;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.commons.lang.StringUtils;
@@ -154,67 +145,6 @@ public class RepositoryVersionHelper {
}
/**
- * Build the role parameters for an install command.
- *
- * @param amc the management controller. Tests don't use the same instance that gets injected.
- * @param repoVersion the repository version
- * @param osFamily the os family
- * @param servicesOnHost the set of services to check for packages
- * @return a Map<String, String> to use in
- */
- public Map<String, String> buildRoleParams(AmbariManagementController amc, RepositoryVersionEntity repoVersion, String osFamily, Set<String> servicesOnHost)
- throws SystemException {
-
- StackId stackId = repoVersion.getStackId();
-
- List<OsSpecific.Package> packages = new ArrayList<>();
-
- for (String serviceName : servicesOnHost) {
- ServiceInfo serviceInfo;
- StackInfo stackInfo;
-
- try {
- if (ami.get().isServiceRemovedInStack(stackId.getStackName(), stackId.getStackVersion(), serviceName)) {
- LOG.info(String.format("%s has been removed from stack %s-%s. Skip calculating its installation packages", stackId.getStackName(), stackId.getStackVersion(), serviceName));
- continue; //No need to calculate install packages for removed services
- }
-
- stackInfo = ami.get().getStack(stackId);
- serviceInfo = ami.get().getService(stackId.getStackName(), stackId.getStackVersion(), serviceName);
- } catch (AmbariException e) {
- throw new SystemException(String.format("Cannot obtain stack information for %s-%s", stackId.getStackName(), stackId.getStackVersion()), e);
- }
-
- List<OsSpecific.Package> packagesForStackService = amc.getPackagesForStackServiceHost(stackInfo, serviceInfo,
- new HashMap<>(), osFamily);
-
- List<String> blacklistedPackagePrefixes = configuration.get().getRollingUpgradeSkipPackagesPrefixes();
- for (OsSpecific.Package aPackage : packagesForStackService) {
- if (!aPackage.getSkipUpgrade()) {
- boolean blacklisted = false;
- for (String prefix : blacklistedPackagePrefixes) {
- if (aPackage.getName().startsWith(prefix)) {
- blacklisted = true;
- break;
- }
- }
- if (! blacklisted) {
- packages.add(aPackage);
- }
- }
- }
- }
-
- Map<String, String> roleParams = new HashMap<>();
- roleParams.put("stack_id", stackId.getStackId());
- // !!! TODO make roleParams <String, Object> so we don't have to do this awfulness.
- roleParams.put(KeyNames.PACKAGE_LIST, gson.toJson(packages));
-
- return roleParams;
- }
-
-
- /**
* Return repositories available for target os version on host based on the
* mpack and host family.
*
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
deleted file mode 100644
index 33737e1..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.server.state.svccomphost;
-
-
-import java.util.Collection;
-import java.util.HashSet;
-
-import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
-import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
-import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
-import org.apache.ambari.server.orm.entities.HostEntity;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.state.ComponentInfo;
-import org.apache.ambari.server.state.State;
-import org.apache.ambari.server.state.UpgradeState;
-import org.apache.commons.lang.StringUtils;
-
-
-/**
- * Represents a summary of the versions of the components installed on a host.
- */
-public class ServiceComponentHostSummary {
-
- private Collection<HostComponentStateEntity> allHostComponents;
- private Collection<HostComponentStateEntity> haveAdvertisedVersion;
- private Collection<HostComponentStateEntity> waitingToAdvertiseVersion;
- private Collection<HostComponentStateEntity> noVersionToAdvertise;
-
- /**
- * Constructor.
- *
- * @param ambariMetaInfo
- * used to lookup whether a component advertises a version (not
- * {@code null}).
- * @param host
- * the host to generate a component summary for (not {@code null}).
- * @param repositoryVersion
- * the repository to generate a summary for (not {@code null}).
- * @throws AmbariException
- */
- public ServiceComponentHostSummary(AmbariMetaInfo ambariMetaInfo, HostEntity host,
- RepositoryVersionEntity repositoryVersion) throws AmbariException {
- allHostComponents = host.getHostComponentStateEntities();
- haveAdvertisedVersion = new HashSet<>();
- waitingToAdvertiseVersion = new HashSet<>();
- noVersionToAdvertise = new HashSet<>();
-
- String stackName = repositoryVersion.getStackName();
- String stackVersion = repositoryVersion.getStackVersion();
-
- for (HostComponentStateEntity hostComponentStateEntity : allHostComponents) {
- ClusterServiceEntity serviceEntity = hostComponentStateEntity.getServiceComponentDesiredStateEntity().getClusterServiceEntity();
- String serviceType = serviceEntity.getServiceType();
- ComponentInfo compInfo = ambariMetaInfo.getComponent(stackName, stackVersion, serviceType,
- hostComponentStateEntity.getComponentName());
-
- if (!compInfo.isVersionAdvertised()) {
- // Some Components cannot advertise a version. E.g., ZKF, AMBARI_METRICS, Kerberos
- noVersionToAdvertise.add(hostComponentStateEntity);
- continue;
- }
-
- String versionAdvertised = hostComponentStateEntity.getVersion();
- if (hostComponentStateEntity.getUpgradeState() == UpgradeState.IN_PROGRESS
- || StringUtils.equals(versionAdvertised, State.UNKNOWN.name())) {
- waitingToAdvertiseVersion.add(hostComponentStateEntity);
- continue;
- }
-
- haveAdvertisedVersion.add(hostComponentStateEntity);
- }
- }
-}
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
index cd851cf..66c3bfe 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -966,7 +966,6 @@ CREATE TABLE upgrade (
cluster_id BIGINT NOT NULL,
request_id BIGINT NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
- upgrade_package VARCHAR(255) NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
skip_failures SMALLINT DEFAULT 0 NOT NULL,
skip_sc_failures SMALLINT DEFAULT 0 NOT NULL,
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 d89c454..463f3da 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -983,7 +983,6 @@ CREATE TABLE upgrade (
cluster_id BIGINT NOT NULL,
request_id BIGINT NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
- upgrade_package VARCHAR(255) NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
skip_failures TINYINT(1) NOT NULL DEFAULT 0,
skip_sc_failures TINYINT(1) NOT NULL DEFAULT 0,
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 afed777..6f9e48d 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -961,7 +961,6 @@ CREATE TABLE upgrade (
cluster_id NUMBER(19) NOT NULL,
request_id NUMBER(19) NOT NULL,
direction VARCHAR2(255) DEFAULT 'UPGRADE' NOT NULL,
- upgrade_package VARCHAR2(255) NOT NULL,
upgrade_type VARCHAR2(32) NOT NULL,
skip_failures NUMBER(1) DEFAULT 0 NOT NULL,
skip_sc_failures NUMBER(1) DEFAULT 0 NOT NULL,
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 f7b6c0c..0f6228c 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -967,7 +967,6 @@ CREATE TABLE upgrade (
cluster_id BIGINT NOT NULL,
request_id BIGINT NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
- upgrade_package VARCHAR(255) NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
skip_failures SMALLINT DEFAULT 0 NOT NULL,
skip_sc_failures SMALLINT DEFAULT 0 NOT NULL,
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
index 77daf73..6fbb812 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -962,7 +962,6 @@ CREATE TABLE upgrade (
request_id NUMERIC(19) NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
- upgrade_package VARCHAR(255) NOT NULL,
skip_failures BIT NOT NULL DEFAULT 0,
skip_sc_failures BIT NOT NULL DEFAULT 0,
downgrade_allowed BIT NOT NULL DEFAULT 1,
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 4bcc399..eff3e92 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -984,7 +984,6 @@ CREATE TABLE upgrade (
cluster_id BIGINT NOT NULL,
request_id BIGINT NOT NULL,
direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
- upgrade_package VARCHAR(255) NOT NULL,
upgrade_type VARCHAR(32) NOT NULL,
skip_failures BIT NOT NULL DEFAULT 0,
skip_sc_failures BIT NOT NULL DEFAULT 0,
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java
index b881b9d..1675a5f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java
@@ -819,7 +819,7 @@ public class ClusterBlueprintRendererTest {
}
@Experimental(
- feature = ExperimentalFeature.REPO_VERSION_REMOVAL,
+ feature = ExperimentalFeature.MULTI_SERVICE,
comment = "Blueprints must get mpack data from a different endpoint, not stack_versions")
private void addStackVersions(TreeNode<Resource> clusterTree) {
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/AutoStartDisabledCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/AutoStartDisabledCheckTest.java
index d1d66fa..828ee49 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/AutoStartDisabledCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/AutoStartDisabledCheckTest.java
@@ -26,12 +26,14 @@ import java.util.Map;
import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
import org.easymock.EasyMock;
import org.junit.Assert;
@@ -82,48 +84,51 @@ public class AutoStartDisabledCheckTest {
@Test
public void testNoAutoStart() throws Exception {
- PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.AUTO_START_DISABLED, "foo");
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = EasyMock.createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
Assert.assertTrue(m_check.isApplicable(request));
- m_check.perform(check, request);
+ UpgradeCheckResult result = m_check.perform(request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(StringUtils.isBlank(check.getFailReason()));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(StringUtils.isBlank(result.getFailReason()));
}
@Test
public void testAutoStartFalse() throws Exception {
- PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.AUTO_START_DISABLED, "foo");
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = EasyMock.createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
Assert.assertTrue(m_check.isApplicable(request));
m_configMap.put(AutoStartDisabledCheck.RECOVERY_ENABLED_KEY, "false");
- m_check.perform(check, request);
+ UpgradeCheckResult result = m_check.perform(request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(StringUtils.isBlank(check.getFailReason()));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(StringUtils.isBlank(result.getFailReason()));
}
@Test
public void testAutoStartTrue() throws Exception {
- PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.AUTO_START_DISABLED, "foo");
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = EasyMock.createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
Assert.assertTrue(m_check.isApplicable(request));
m_configMap.put(AutoStartDisabledCheck.RECOVERY_ENABLED_KEY, "true");
m_configMap.put(AutoStartDisabledCheck.RECOVERY_TYPE_KEY, AutoStartDisabledCheck.RECOVERY_AUTO_START);
- m_check.perform(check, request);
+ UpgradeCheckResult result = m_check.perform(request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Assert.assertTrue(StringUtils.isNotBlank(check.getFailReason()));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
+ Assert.assertTrue(StringUtils.isNotBlank(result.getFailReason()));
Assert.assertEquals("Auto Start must be disabled before performing an Upgrade. To disable Auto Start, navigate to " +
- "Admin > Service Auto Start. Turn the toggle switch off to Disabled and hit Save.", check.getFailReason());
+ "Admin > Service Auto Start. Turn the toggle switch off to Disabled and hit Save.", result.getFailReason());
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/AbstractCheckDescriptorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ClusterCheckTest.java
similarity index 86%
rename from ambari-server/src/test/java/org/apache/ambari/server/checks/AbstractCheckDescriptorTest.java
rename to ambari-server/src/test/java/org/apache/ambari/server/checks/ClusterCheckTest.java
index bd970ea..be6d3f6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/AbstractCheckDescriptorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ClusterCheckTest.java
@@ -29,12 +29,13 @@ import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.repository.ClusterVersionSummary;
import org.apache.ambari.server.state.stack.PrereqCheckType;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.easymock.EasyMockSupport;
import org.easymock.Mock;
@@ -52,7 +53,7 @@ import junit.framework.Assert;
*/
@Ignore
@Experimental(feature = ExperimentalFeature.UNIT_TEST_REQUIRED)
-public class AbstractCheckDescriptorTest extends EasyMockSupport {
+public class ClusterCheckTest extends EasyMockSupport {
@Mock
private Clusters clusters;
@@ -69,7 +70,7 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
@Test
public void testFormatEntityList() {
- AbstractCheckDescriptor check = new TestCheckImpl(PrereqCheckType.HOST);
+ ClusterCheck check = new TestCheckImpl(PrereqCheckType.HOST);
Assert.assertEquals("", check.formatEntityList(null));
@@ -113,6 +114,7 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
Set<String> missingServiceList = Sets.newHashSet("MISSING_SERVICE");
expect(clusters.getCluster(anyString())).andReturn(cluster).atLeastOnce();
+ expect(clusters.getCluster(clusterName)).andReturn(cluster).anyTimes();
expect(cluster.getServicesByName()).andReturn(services).atLeastOnce();
expect(cluster.getServices()).andReturn(services.values()).anyTimes();
@@ -122,7 +124,10 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
replayAll();
TestCheckImpl check = new TestCheckImpl(PrereqCheckType.SERVICE);
- PrereqCheckRequest request = new PrereqCheckRequest(clusterName, UpgradeType.ROLLING);
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
// case, where we need at least one service to be present
check.setApplicableServices(oneServiceList);
@@ -157,6 +162,7 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
Set<String> oneServiceList = Sets.newHashSet("SERVICE1");
expect(clusters.getCluster(anyString())).andReturn(cluster).atLeastOnce();
+ expect(clusters.getCluster(clusterName)).andReturn(cluster).anyTimes();
expect(cluster.getServicesByName()).andReturn(services).atLeastOnce();
expect(cluster.getServices()).andReturn(services.values()).anyTimes();
@@ -168,7 +174,10 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
replayAll();
TestCheckImpl check = new TestCheckImpl(PrereqCheckType.SERVICE);
- PrereqCheckRequest request = new PrereqCheckRequest(clusterName, UpgradeType.ROLLING);
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
// since the check is for SERVICE2, it should not match even though its
// installed since the repository is only for SERVICE1
@@ -206,7 +215,7 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
group = UpgradeCheckGroup.DEFAULT,
order = 1.0f,
required = { UpgradeType.ROLLING, UpgradeType.EXPRESS, UpgradeType.HOST_ORDERED })
- private class TestCheckImpl extends AbstractCheckDescriptor {
+ private class TestCheckImpl extends ClusterCheck {
private PrereqCheckType m_type;
private Set<String> m_applicableServices = Sets.newHashSet();
@@ -228,8 +237,9 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
+ return new UpgradeCheckResult(this);
}
/**
@@ -246,7 +256,7 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
}
@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 1.0f, required = { UpgradeType.ROLLING })
- private class RollingTestCheckImpl extends AbstractCheckDescriptor {
+ private class RollingTestCheckImpl extends ClusterCheck {
private PrereqCheckType m_type;
RollingTestCheckImpl(PrereqCheckType type) {
@@ -262,13 +272,14 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
+ return new UpgradeCheckResult(this);
}
}
@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 1.0f)
- private class NotRequiredCheckTest extends AbstractCheckDescriptor {
+ private class NotRequiredCheckTest extends ClusterCheck {
private PrereqCheckType m_type;
NotRequiredCheckTest(PrereqCheckType type) {
@@ -284,8 +295,9 @@ public class AbstractCheckDescriptorTest extends EasyMockSupport {
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
+ return new UpgradeCheckResult(this);
}
}
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentExistsInRepoCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentExistsInRepoCheckTest.java
index 729ee45..ee40d81 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentExistsInRepoCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentExistsInRepoCheckTest.java
@@ -28,6 +28,7 @@ import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.StackAccessException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
@@ -37,7 +38,8 @@ import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.repository.ClusterVersionSummary;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.StringUtils;
import org.easymock.EasyMockSupport;
import org.easymock.Mock;
@@ -157,9 +159,9 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
*/
@Test
public void testCheckPassesWhenServicAndComponentsExist() throws Exception {
- PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.COMPONENTS_EXIST_IN_TARGET_REPO, "c1");
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
- request.setSourceStackId(SOURCE_STACK);
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
CLUSTER_SERVICES.put("ZOOKEEPER", m_zookeeperService);
expect(m_zookeeperInfo.isValid()).andReturn(true).atLeastOnce();
@@ -171,11 +173,11 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
Assert.assertTrue(m_check.isApplicable(request));
- m_check.perform(check, request);
+ UpgradeCheckResult result = m_check.perform(request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
- Assert.assertTrue(StringUtils.isBlank(check.getFailReason()));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
+ Assert.assertTrue(StringUtils.isBlank(result.getFailReason()));
}
/**
@@ -186,9 +188,9 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
*/
@Test
public void testCheckPassesWhenComponentNotAdvertisingVersion() throws Exception {
- PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.COMPONENTS_EXIST_IN_TARGET_REPO, "c1");
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
- request.setSourceStackId(SOURCE_STACK);
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
CLUSTER_SERVICES.put("FOO_SERVICE", m_fooService);
@@ -208,11 +210,11 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
Assert.assertTrue(m_check.isApplicable(request));
- m_check.perform(check, request);
+ UpgradeCheckResult result = m_check.perform(request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
- Assert.assertTrue(StringUtils.isBlank(check.getFailReason()));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
+ Assert.assertTrue(StringUtils.isBlank(result.getFailReason()));
}
/**
@@ -222,9 +224,9 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
*/
@Test
public void testCheckFailsWhenServiceExistsButIsDeleted() throws Exception {
- PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.COMPONENTS_EXIST_IN_TARGET_REPO, "c1");
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
- request.setSourceStackId(SOURCE_STACK);
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
CLUSTER_SERVICES.put("ZOOKEEPER", m_zookeeperService);
expect(m_zookeeperInfo.isValid()).andReturn(true).atLeastOnce();
@@ -234,11 +236,11 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
Assert.assertTrue(m_check.isApplicable(request));
- m_check.perform(check, request);
+ UpgradeCheckResult result = m_check.perform(request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Assert.assertEquals(1, check.getFailedDetail().size());
- Assert.assertTrue(check.getFailedOn().contains("ZOOKEEPER"));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
+ Assert.assertEquals(1, result.getFailedDetail().size());
+ Assert.assertTrue(result.getFailedOn().contains("ZOOKEEPER"));
}
/**
@@ -248,9 +250,10 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
*/
@Test
public void testCheckFailsWhenComponentExistsButIsDeleted() throws Exception {
- PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.COMPONENTS_EXIST_IN_TARGET_REPO, "c1");
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
- request.setSourceStackId(SOURCE_STACK);
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
CLUSTER_SERVICES.put("ZOOKEEPER", m_zookeeperService);
expect(m_zookeeperInfo.isValid()).andReturn(true).atLeastOnce();
@@ -262,11 +265,11 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
Assert.assertTrue(m_check.isApplicable(request));
- m_check.perform(check, request);
+ UpgradeCheckResult result = m_check.perform(request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Assert.assertEquals(1, check.getFailedDetail().size());
- Assert.assertTrue(check.getFailedOn().contains("ZOOKEEPER_SERVER"));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
+ Assert.assertEquals(1, result.getFailedDetail().size());
+ Assert.assertTrue(result.getFailedOn().contains("ZOOKEEPER_SERVER"));
}
/**
@@ -276,10 +279,10 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
*/
@Test
public void testCheckFailsWhenServiceIsMissing() throws Exception {
- PrerequisiteCheck check = new PrerequisiteCheck(
- CheckDescription.COMPONENTS_EXIST_IN_TARGET_REPO, "c1");
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
- request.setSourceStackId(SOURCE_STACK);
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
CLUSTER_SERVICES.put("ZOOKEEPER", m_zookeeperService);
CLUSTER_SERVICES.put("FOO_SERVICE", m_fooService);
@@ -296,11 +299,11 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
Assert.assertTrue(m_check.isApplicable(request));
- m_check.perform(check, request);
+ UpgradeCheckResult result = m_check.perform(request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Assert.assertEquals(1, check.getFailedDetail().size());
- Assert.assertTrue(check.getFailedOn().contains("FOO_SERVICE"));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
+ Assert.assertEquals(1, result.getFailedDetail().size());
+ Assert.assertTrue(result.getFailedOn().contains("FOO_SERVICE"));
}
/**
@@ -310,10 +313,10 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
*/
@Test
public void testCheckFailsWhenComponentIsMissing() throws Exception {
- PrerequisiteCheck check = new PrerequisiteCheck(
- CheckDescription.COMPONENTS_EXIST_IN_TARGET_REPO, "c1");
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
- request.setSourceStackId(SOURCE_STACK);
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+ expect(upgradePlan.getUpgradeType()).andReturn(UpgradeType.ROLLING).anyTimes();
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
CLUSTER_SERVICES.put("FOO_SERVICE", m_fooService);
@@ -336,11 +339,11 @@ public class ComponentExistsInRepoCheckTest extends EasyMockSupport {
Assert.assertTrue(m_check.isApplicable(request));
- m_check.perform(check, request);
+ UpgradeCheckResult result = m_check.perform(request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Assert.assertEquals(1, check.getFailedDetail().size());
- Assert.assertTrue(check.getFailedOn().contains("FOO_COMPONENT"));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
+ Assert.assertEquals(1, result.getFailedDetail().size());
+ Assert.assertTrue(result.getFailedOn().contains("FOO_COMPONENT"));
}
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentsInstallationCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentsInstallationCheckTest.java
index cb6c2cb..007f9ce 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentsInstallationCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentsInstallationCheckTest.java
@@ -28,6 +28,7 @@ import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.orm.models.HostComponentSummary;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
@@ -40,7 +41,7 @@ import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.repository.ClusterVersionSummary;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
@@ -88,8 +89,8 @@ public class ComponentsInstallationCheckTest {
@Test
public void testIsApplicable() throws Exception {
- PrereqCheckRequest checkRequest = new PrereqCheckRequest("c1");
- checkRequest.setSourceStackId(new StackId("HDP", "2.2"));
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ PrereqCheckRequest checkRequest = new PrereqCheckRequest(upgradePlan);
ComponentsInstallationCheck cic = new ComponentsInstallationCheck();
Configuration config = Mockito.mock(Configuration.class);
cic.config = config;
@@ -275,45 +276,41 @@ public class ComponentsInstallationCheckTest {
Mockito.when(hcs.getCurrentState()).thenReturn(State.STARTED);
}
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
Mockito.when(hcsTezClient.getCurrentState()).thenReturn(State.INSTALLED);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- componentsInstallationCheck.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
+ UpgradeCheckResult result = componentsInstallationCheck.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
// Case 2. Ensure that AMS is ignored even if their current state is not INSTALLED
Mockito.when(hcsMetricsCollector.getCurrentState()).thenReturn(State.INSTALL_FAILED);
Mockito.when(hcsMetricsMonitor.getCurrentState()).thenReturn(State.INSTALL_FAILED);
- check = new PrerequisiteCheck(null, null);
- componentsInstallationCheck.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
+ result = componentsInstallationCheck.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
// Case 3: Change TEZ client state to INSTALL_FAILED, should fail
Mockito.when(hcsTezClient.getCurrentState()).thenReturn(State.INSTALL_FAILED);
- check = new PrerequisiteCheck(null, null);
- componentsInstallationCheck.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Assert.assertTrue(check.getFailReason().indexOf("Service components in INSTALL_FAILED state") > -1);
- Assert.assertEquals(1, check.getFailedDetail().size());
+ result = componentsInstallationCheck.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
+ Assert.assertTrue(result.getFailReason().indexOf("Service components in INSTALL_FAILED state") > -1);
+ Assert.assertEquals(1, result.getFailedDetail().size());
// Case 4: Change TEZ client state to INSTALL_FAILED and place TEZ in Maintenance mode, should succeed
Mockito.when(tezService.getMaintenanceState()).thenReturn(MaintenanceState.ON);
Mockito.when(hcsTezClient.getCurrentState()).thenReturn(State.INSTALL_FAILED);
- check = new PrerequisiteCheck(null, null);
- componentsInstallationCheck.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
+ result = componentsInstallationCheck.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
// Case 5: Change TEZ client state to INSTALL_FAILED and place host2 in Maintenance mode, should succeed
Mockito.when(tezService.getMaintenanceState()).thenReturn(MaintenanceState.OFF);
Mockito.when(host2.getMaintenanceState(1L)).thenReturn(MaintenanceState.ON);
Mockito.when(hcsTezClient.getCurrentState()).thenReturn(State.INSTALL_FAILED);
- check = new PrerequisiteCheck(null, null);
- componentsInstallationCheck.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
+ result = componentsInstallationCheck.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
}
}
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 a6b9784..e5dd02d 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
@@ -31,6 +31,7 @@ import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
@@ -38,7 +39,7 @@ import org.apache.ambari.server.state.ConfigMergeHelper;
import org.apache.ambari.server.state.PropertyInfo;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Before;
@@ -88,8 +89,10 @@ public class ConfigurationMergeCheckTest {
@Test
public void testApplicable() throws Exception {
-
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = EasyMock.createNiceMock(UpgradePlanEntity.class);
+ replay(upgradePlan);
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
ConfigurationMergeCheck cmc = new ConfigurationMergeCheck();
Configuration config = EasyMock.createMock(Configuration.class);
@@ -148,41 +151,40 @@ public class ConfigurationMergeCheckTest {
replay(ami);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = EasyMock.createNiceMock(UpgradePlanEntity.class);
+ replay(upgradePlan);
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
- PrerequisiteCheck check = new PrerequisiteCheck(null, "cluster");
- cmc.perform(check, request);
- Assert.assertEquals("Expect no warnings", 0, check.getFailedOn().size());
+ UpgradeCheckResult result = cmc.perform(request);
+ Assert.assertEquals("Expect no warnings", 0, result.getFailedOn().size());
- check = new PrerequisiteCheck(null, "cluster");
m_configMap.put(CONFIG_PROPERTY, "1025m");
pi11.setValue("1026");
- cmc.perform(check, request);
+ result = cmc.perform(request);
Assert.assertEquals("Expect warning when user-set has changed from new default",
- 1, check.getFailedOn().size());
- Assert.assertEquals(1, check.getFailedDetail().size());
- ConfigurationMergeCheck.MergeDetail detail = (ConfigurationMergeCheck.MergeDetail) check.getFailedDetail().get(0);
+ 1, result.getFailedOn().size());
+ Assert.assertEquals(1, result.getFailedDetail().size());
+ ConfigurationMergeCheck.MergeDetail detail = (ConfigurationMergeCheck.MergeDetail) result.getFailedDetail().get(0);
Assert.assertEquals("1025m", detail.current);
Assert.assertEquals("1026m", detail.new_stack_value);
Assert.assertEquals("1025m", detail.result_value);
Assert.assertEquals(CONFIG_TYPE, detail.type);
Assert.assertEquals(CONFIG_PROPERTY, detail.property);
- check = new PrerequisiteCheck(null, "cluster");
pi11.setName(CONFIG_PROPERTY + ".foo");
- cmc.perform(check, request);
+ result = cmc.perform(request);
Assert.assertEquals("Expect no warning when user new stack is empty",
- 0, check.getFailedOn().size());
- Assert.assertEquals(0, check.getFailedDetail().size());
+ 0, result.getFailedOn().size());
+ Assert.assertEquals(0, result.getFailedDetail().size());
- check = new PrerequisiteCheck(null, "cluster");
pi11.setName(CONFIG_PROPERTY);
pi10.setName(CONFIG_PROPERTY + ".foo");
- cmc.perform(check, request);
+ result = cmc.perform(request);
Assert.assertEquals("Expect warning when user old stack is empty, and value changed",
- 1, check.getFailedOn().size());
- Assert.assertEquals(1, check.getFailedDetail().size());
- detail = (ConfigurationMergeCheck.MergeDetail) check.getFailedDetail().get(0);
+ 1, result.getFailedOn().size());
+ Assert.assertEquals(1, result.getFailedDetail().size());
+ detail = (ConfigurationMergeCheck.MergeDetail) result.getFailedDetail().get(0);
Assert.assertEquals("1025m", detail.current);
Assert.assertEquals("1026m", detail.new_stack_value);
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/HealthCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/HealthCheckTest.java
index 76f9f30..5bdb8e8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/HealthCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/HealthCheckTest.java
@@ -30,18 +30,20 @@ import org.apache.ambari.server.orm.dao.AlertsDAO;
import org.apache.ambari.server.orm.entities.AlertCurrentEntity;
import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
import org.apache.ambari.server.orm.entities.AlertHistoryEntity;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.AlertState;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import com.google.inject.Provider;
-
+@Ignore
public class HealthCheckTest {
private static final String CLUSTER_NAME = "cluster1";
private static final long CLUSTER_ID = 1L;
@@ -79,10 +81,11 @@ public class HealthCheckTest {
public void testWarningWhenNoAlertsExist() throws AmbariException {
when(alertsDAO.findCurrentByCluster(eq(CLUSTER_ID))).thenReturn(Collections.emptyList());
- PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
- healthCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
+ UpgradePlanEntity upgradePlan = mock(UpgradePlanEntity.class);
+
+ UpgradeCheckResult result = healthCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
}
@Test
@@ -110,9 +113,10 @@ public class HealthCheckTest {
when(alertsDAO.findCurrentByCluster(eq(CLUSTER_ID))).thenReturn(asList(alertCurrentEntity));
- PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
- healthCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
- Assert.assertEquals(PrereqCheckStatus.WARNING, check.getStatus());
- Assert.assertFalse(check.getFailedDetail().isEmpty());
+ UpgradePlanEntity upgradePlan = mock(UpgradePlanEntity.class);
+
+ UpgradeCheckResult result = healthCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.WARNING, result.getStatus());
+ Assert.assertFalse(result.getFailedDetail().isEmpty());
}
}
\ No newline at end of file
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostMaintenanceModeCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostMaintenanceModeCheckTest.java
index 286313c..12bc66b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostMaintenanceModeCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostMaintenanceModeCheckTest.java
@@ -21,15 +21,17 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.junit.Assert;
+import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mockito;
@@ -38,6 +40,7 @@ import com.google.inject.Provider;
/**
* Tests {@link HostMaintenanceModeCheck}.
*/
+@Ignore
public class HostMaintenanceModeCheckTest {
private final Clusters clusters = Mockito.mock(Clusters.class);
@@ -75,15 +78,16 @@ public class HostMaintenanceModeCheckTest {
Mockito.when(cluster.getHosts()).thenReturn(hosts);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- hostMaintenanceModeCheck.perform(check, new PrereqCheckRequest("cluster"));
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ Mockito.when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ UpgradeCheckResult result = hostMaintenanceModeCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
// put a host into MM in order to trigger the warning
- check = new PrerequisiteCheck(null, null);
Mockito.when(host3.getMaintenanceState(1L)).thenReturn(MaintenanceState.ON);
- hostMaintenanceModeCheck.perform(check, new PrereqCheckRequest("cluster"));
- Assert.assertEquals(PrereqCheckStatus.WARNING, check.getStatus());
+ result = hostMaintenanceModeCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.WARNING, result.getStatus());
}
@Test
@@ -120,17 +124,21 @@ public class HostMaintenanceModeCheckTest {
Mockito.when(cluster.getHosts()).thenReturn(hosts);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- hostMaintenanceModeCheck.perform(check, new PrereqCheckRequest("cluster"));
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+
+ UpgradeCheckResult result = hostMaintenanceModeCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
// put a host into MM in order to trigger the warning
- check = new PrerequisiteCheck(null, null);
Mockito.when(host3.getMaintenanceState(1L)).thenReturn(MaintenanceState.ON);
- hostMaintenanceModeCheck.perform(check, new PrereqCheckRequest("cluster", UpgradeType.HOST_ORDERED));
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Assert.assertFalse(check.getFailedDetail().isEmpty());
- Assert.assertEquals("The following hosts cannot be in Maintenance Mode: h3.", check.getFailReason());
+
+ upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ Mockito.when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.HOST_ORDERED);
+
+ result = hostMaintenanceModeCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
+ Assert.assertFalse(result.getFailedDetail().isEmpty());
+ Assert.assertEquals("The following hosts cannot be in Maintenance Mode: h3.", result.getFailReason());
}
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsHeartbeatCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsHeartbeatCheckTest.java
index d6e6920..501cd83 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsHeartbeatCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsHeartbeatCheckTest.java
@@ -24,6 +24,7 @@ import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
@@ -32,7 +33,7 @@ import org.apache.ambari.server.state.HostHealthStatus.HealthStatus;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
@@ -59,8 +60,9 @@ public class HostsHeartbeatCheckTest {
@Test
public void testIsApplicable() throws Exception {
- PrereqCheckRequest checkRequest = new PrereqCheckRequest("c1");
- checkRequest.setSourceStackId(new StackId("HDP", "2.2"));
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ PrereqCheckRequest checkRequest = new PrereqCheckRequest(upgradePlan);
+
HostsHeartbeatCheck hhc = new HostsHeartbeatCheck();
Configuration config = Mockito.mock(Configuration.class);
hhc.config = config;
@@ -114,24 +116,22 @@ public class HostsHeartbeatCheckTest {
Mockito.when(cluster.getHosts()).thenReturn(hosts);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- hostHeartbeatCheck.perform(check, new PrereqCheckRequest("cluster"));
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
- Assert.assertFalse(check.getFailedDetail().isEmpty());
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ UpgradeCheckResult result = hostHeartbeatCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
+ Assert.assertFalse(result.getFailedDetail().isEmpty());
// put the unhealthy host into MM which will allow this check to pass
- check = new PrerequisiteCheck(null, null);
Mockito.when(host3.getMaintenanceState(1L)).thenReturn(MaintenanceState.ON);
- hostHeartbeatCheck.perform(check, new PrereqCheckRequest("cluster"));
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
+ result = hostHeartbeatCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
// make the host healthy and take it out of MM to produce a PASS result
Mockito.when(status3.getHealthStatus()).thenReturn(HealthStatus.HEALTHY);
- check = new PrerequisiteCheck(null, null);
Mockito.when(host3.getMaintenanceState(1L)).thenReturn(MaintenanceState.OFF);
- hostHeartbeatCheck.perform(check, new PrereqCheckRequest("cluster"));
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
- Assert.assertTrue(check.getFailedDetail().isEmpty());
+ result = hostHeartbeatCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
+ Assert.assertTrue(result.getFailedDetail().isEmpty());
}
}
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 36b1646..16b09b2 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
@@ -25,13 +25,14 @@ import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.repository.ClusterVersionSummary;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
@@ -72,16 +73,17 @@ public class HostsMasterMaintenanceCheckTest {
@Test
public void testIsApplicable() throws Exception {
- final PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ PrereqCheckRequest checkRequest = new PrereqCheckRequest(upgradePlan);
HostsMasterMaintenanceCheck hmmc = new HostsMasterMaintenanceCheck();
Configuration config = Mockito.mock(Configuration.class);
hmmc.config = config;
- Assert.assertTrue(hmmc.isApplicable(request));
- Assert.assertTrue(new HostsMasterMaintenanceCheck().isApplicable(request));
+ Assert.assertTrue(hmmc.isApplicable(checkRequest));
+ Assert.assertTrue(new HostsMasterMaintenanceCheck().isApplicable(checkRequest));
HostsMasterMaintenanceCheck hmmc2 = new HostsMasterMaintenanceCheck();
hmmc2.config = config;
- Assert.assertTrue(hmmc2.isApplicable(request));
+ Assert.assertTrue(hmmc2.isApplicable(checkRequest));
}
@Test
@@ -114,22 +116,18 @@ public class HostsMasterMaintenanceCheckTest {
Mockito.when(cluster.getDesiredStackVersion()).thenReturn(new StackId("HDP", "1.0"));
Mockito.when(repositoryVersionHelper.getUpgradePackageName(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), (UpgradeType) Mockito.anyObject())).thenReturn(null);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- PrereqCheckRequest checkRequest = new PrereqCheckRequest("cluster");
- checkRequest.setSourceStackId(new StackId("HDP-1.0"));
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ PrereqCheckRequest checkRequest = new PrereqCheckRequest(upgradePlan);
- hostsMasterMaintenanceCheck.perform(check, checkRequest);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradeCheckResult result = hostsMasterMaintenanceCheck.perform(checkRequest);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
Mockito.when(repositoryVersionHelper.getUpgradePackageName(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), (UpgradeType) Mockito.anyObject())).thenReturn(upgradePackName);
Mockito.when(ambariMetaInfo.getUpgradePacks(Mockito.anyString(), Mockito.anyString())).thenReturn(new HashMap<>());
- check = new PrerequisiteCheck(null, null);
- checkRequest = new PrereqCheckRequest("cluster");
- checkRequest.setSourceStackId(new StackId("HDP-1.0"));
-
- hostsMasterMaintenanceCheck.perform(check, checkRequest);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ checkRequest = new PrereqCheckRequest(upgradePlan);
+ result = hostsMasterMaintenanceCheck.perform(checkRequest);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
final Map<String, UpgradePack> upgradePacks = new HashMap<>();
final UpgradePack upgradePack = Mockito.mock(UpgradePack.class);
@@ -140,11 +138,10 @@ public class HostsMasterMaintenanceCheckTest {
Mockito.when(cluster.getServicesByName()).thenReturn(new HashMap<>());
Mockito.when(clusters.getHostsForCluster(Mockito.anyString())).thenReturn(new HashMap<>());
- check = new PrerequisiteCheck(null, null);
- checkRequest = new PrereqCheckRequest("cluster");
- checkRequest.setSourceStackId(new StackId("HDP-1.0"));
+ checkRequest = new PrereqCheckRequest(upgradePlan);
+ result = hostsMasterMaintenanceCheck.perform(checkRequest);
- hostsMasterMaintenanceCheck.perform(check, checkRequest);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+ hostsMasterMaintenanceCheck.perform(checkRequest);
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
}
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/PreviousUpgradeCompletedTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/PreviousUpgradeCompletedTest.java
index 4ad72af..40cdd24 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/PreviousUpgradeCompletedTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/PreviousUpgradeCompletedTest.java
@@ -22,11 +22,12 @@ import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.junit.Assert;
import org.junit.Before;
@@ -49,7 +50,7 @@ public class PreviousUpgradeCompletedTest {
private StackId sourceStackId = new StackId("HDP", "2.2");
private StackId targetStackId = new StackId("HDP", "2.2");
private String clusterName = "cluster";
- private PrereqCheckRequest checkRequest = new PrereqCheckRequest(clusterName);
+ private PrereqCheckRequest checkRequest;
private PreviousUpgradeCompleted puc = new PreviousUpgradeCompleted();
@@ -68,23 +69,23 @@ public class PreviousUpgradeCompletedTest {
stack.setStackName(stackId.getStackName());
stack.setStackVersion(stackId.getStackVersion());
- checkRequest.setSourceStackId(sourceStackId);
-
puc.clustersProvider = new Provider<Clusters>() {
@Override
public Clusters get() {
return clusters;
}
};
+
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ checkRequest = new PrereqCheckRequest(upgradePlan);
}
@Test
public void testPerform() throws Exception {
// no existing upgrades
Mockito.when(cluster.getUpgradeInProgress()).thenReturn(null);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- puc.perform(check, checkRequest);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+ UpgradeCheckResult result = puc.perform(checkRequest);
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
// existing upgrade
UpgradeEntity upgradeInProgress = Mockito.mock(UpgradeEntity.class);
@@ -92,8 +93,7 @@ public class PreviousUpgradeCompletedTest {
Mockito.when(upgradeInProgress.getClusterId()).thenReturn(1L);
Mockito.when(cluster.getUpgradeInProgress()).thenReturn(upgradeInProgress);
- check = new PrerequisiteCheck(null, null);
- puc.perform(check, checkRequest);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ result = puc.perform(checkRequest);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
index 63aae86..d7bb5e1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
@@ -35,6 +35,7 @@ import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO.LastServiceCheckDTO;
import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.MaintenanceState;
@@ -42,9 +43,11 @@ import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mockito;
@@ -52,6 +55,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Provider;
+@Ignore
public class ServiceCheckValidityCheckTest {
private static final String CLUSTER_NAME = "cluster1";
private static final long CLUSTER_ID = 1L;
@@ -146,13 +150,16 @@ public class ServiceCheckValidityCheckTest {
when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(asList(lastServiceCheckDTO1, lastServiceCheckDTO2));
- PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
+ UpgradePlanEntity upgradePlan = mock(UpgradePlanEntity.class);
+ when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
try {
- serviceCheckValidityCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
+ UpgradeCheckResult result = serviceCheckValidityCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
} catch (NullPointerException ex){
Assert.fail("serviceCheckValidityCheck failed due to null at start_time were not handled");
}
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+
}
@Test
@@ -173,9 +180,11 @@ public class ServiceCheckValidityCheckTest {
when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(singletonList(lastServiceCheckDTO));
- PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
- serviceCheckValidityCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradePlanEntity upgradePlan = mock(UpgradePlanEntity.class);
+ when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ UpgradeCheckResult result = serviceCheckValidityCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
@@ -195,9 +204,11 @@ public class ServiceCheckValidityCheckTest {
when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(Collections.emptyList());
- PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
- serviceCheckValidityCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradePlanEntity upgradePlan = mock(UpgradePlanEntity.class);
+ when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ UpgradeCheckResult result = serviceCheckValidityCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
@Test
@@ -219,9 +230,11 @@ public class ServiceCheckValidityCheckTest {
when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(asList(lastServiceCheckDTO1, lastServiceCheckDTO2));
- PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
- serviceCheckValidityCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradePlanEntity upgradePlan = mock(UpgradePlanEntity.class);
+ when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ UpgradeCheckResult result = serviceCheckValidityCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
/**
@@ -254,7 +267,9 @@ public class ServiceCheckValidityCheckTest {
when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(asList(lastServiceCheckDTO1, lastServiceCheckDTO2));
- PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
- serviceCheckValidityCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); }
+ UpgradePlanEntity upgradePlan = mock(UpgradePlanEntity.class);
+ when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ UpgradeCheckResult result = serviceCheckValidityCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus()); }
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicePresenceCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicePresenceCheckTest.java
index 1b76eba..f12ed7a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicePresenceCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicePresenceCheckTest.java
@@ -23,12 +23,14 @@ import java.util.Map;
import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.apache.ambari.server.state.stack.UpgradePack.PrerequisiteCheckConfig;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
@@ -77,12 +79,14 @@ public class ServicePresenceCheckTest {
Mockito.when(prerequisiteCheckConfig.getCheckProperties(
m_check.getClass().getName())).thenReturn(checkProperties);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ Mockito.when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
request.setPrerequisiteCheckConfig(prerequisiteCheckConfig);
- m_check.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+ UpgradeCheckResult result = m_check.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
}
@Test
@@ -101,12 +105,14 @@ public class ServicePresenceCheckTest {
Mockito.when(prerequisiteCheckConfig.getCheckProperties(
m_check.getClass().getName())).thenReturn(checkProperties);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ Mockito.when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
request.setPrerequisiteCheckConfig(prerequisiteCheckConfig);
- m_check.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradeCheckResult result = m_check.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
@Test
@@ -129,12 +135,14 @@ public class ServicePresenceCheckTest {
prerequisiteCheckConfig.getCheckProperties(m_check.getClass().getName())).thenReturn(
checkProperties);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ Mockito.when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
request.setPrerequisiteCheckConfig(prerequisiteCheckConfig);
- m_check.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradeCheckResult result = m_check.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
@Test
@@ -155,12 +163,14 @@ public class ServicePresenceCheckTest {
Mockito.when(prerequisiteCheckConfig.getCheckProperties(
m_check.getClass().getName())).thenReturn(checkProperties);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ Mockito.when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
request.setPrerequisiteCheckConfig(prerequisiteCheckConfig);
- m_check.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradeCheckResult result = m_check.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
@Test
@@ -184,12 +194,14 @@ public class ServicePresenceCheckTest {
Mockito.when(prerequisiteCheckConfig.getCheckProperties(
m_check.getClass().getName())).thenReturn(checkProperties);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ Mockito.when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
request.setPrerequisiteCheckConfig(prerequisiteCheckConfig);
- m_check.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradeCheckResult result = m_check.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
@Test
@@ -211,12 +223,14 @@ public class ServicePresenceCheckTest {
Mockito.when(prerequisiteCheckConfig.getCheckProperties(
m_check.getClass().getName())).thenReturn(checkProperties);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ Mockito.when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
request.setPrerequisiteCheckConfig(prerequisiteCheckConfig);
- m_check.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradeCheckResult result = m_check.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
@Test
@@ -241,11 +255,13 @@ public class ServicePresenceCheckTest {
Mockito.when(prerequisiteCheckConfig.getCheckProperties(
m_check.getClass().getName())).thenReturn(checkProperties);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ Mockito.when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
request.setPrerequisiteCheckConfig(prerequisiteCheckConfig);
- m_check.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ UpgradeCheckResult result = m_check.perform(request);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, result.getStatus());
}
}
\ No newline at end of file
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheckTest.java
index e162a38..e2951a0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheckTest.java
@@ -26,6 +26,7 @@ import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Service;
@@ -33,7 +34,7 @@ import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.repository.ClusterVersionSummary;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
@@ -72,8 +73,8 @@ public class ServicesMaintenanceModeCheckTest {
@Test
public void testIsApplicable() throws Exception {
- PrereqCheckRequest checkRequest = new PrereqCheckRequest("c1");
- checkRequest.setSourceStackId(new StackId("HDP", "2.2"));
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ PrereqCheckRequest checkRequest = new PrereqCheckRequest(upgradePlan);
ServicesMaintenanceModeCheck smmc = new ServicesMaintenanceModeCheck();
Configuration config = Mockito.mock(Configuration.class);
@@ -109,16 +110,16 @@ public class ServicesMaintenanceModeCheckTest {
// We don't bother checking service desired state as it's performed by a separate check
Mockito.when(service.getDesiredState()).thenReturn(State.UNKNOWN);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ PrereqCheckRequest checkRequest = new PrereqCheckRequest(upgradePlan);
- servicesMaintenanceModeCheck.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+ UpgradeCheckResult result = servicesMaintenanceModeCheck.perform(checkRequest);
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
Mockito.when(service.getDesiredState()).thenReturn(State.STARTED);
- check = new PrerequisiteCheck(null, null);
- servicesMaintenanceModeCheck.perform(check, request);
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+
+ result = servicesMaintenanceModeCheck.perform(checkRequest);
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
}
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
index e7ee71e..cd0da86 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
@@ -28,6 +28,7 @@ import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.orm.models.HostComponentSummary;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
@@ -40,7 +41,7 @@ import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.repository.ClusterVersionSummary;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
@@ -89,8 +90,8 @@ public class ServicesUpCheckTest {
@Test
public void testIsApplicable() throws Exception {
- PrereqCheckRequest checkRequest = new PrereqCheckRequest("c1");
- checkRequest.setSourceStackId(new StackId("HDP", "2.2"));
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ PrereqCheckRequest checkRequest = new PrereqCheckRequest(upgradePlan);
ServicesUpCheck suc = new ServicesUpCheck();
Configuration config = Mockito.mock(Configuration.class);
@@ -284,10 +285,11 @@ public class ServicesUpCheckTest {
Mockito.when(hcs.getCurrentState()).thenReturn(State.STARTED);
}
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = Mockito.mock(UpgradePlanEntity.class);
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
- PrerequisiteCheck check = new PrerequisiteCheck(null, null);
- servicesUpCheck.perform(check, request);
+ UpgradeCheckResult check = new UpgradeCheckResult(null, null);
+ servicesUpCheck.perform(request);
Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
Assert.assertTrue(check.getFailedDetail().isEmpty());
@@ -295,8 +297,8 @@ public class ServicesUpCheckTest {
Mockito.when(hcsNameNode.getDesiredState()).thenReturn(State.STARTED);
Mockito.when(hcsDataNode1.getDesiredState()).thenReturn(State.STARTED);
- check = new PrerequisiteCheck(null, null);
- servicesUpCheck.perform(check, request);
+ check = new UpgradeCheckResult(null, null);
+ servicesUpCheck.perform(request);
Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
Assert.assertTrue(check.getFailedDetail().isEmpty());
@@ -305,8 +307,8 @@ public class ServicesUpCheckTest {
Mockito.when(hcsMetricsCollector.getCurrentState()).thenReturn(State.INSTALLED);
Mockito.when(hcsMetricsMonitor.getCurrentState()).thenReturn(State.INSTALLED);
- check = new PrerequisiteCheck(null, null);
- servicesUpCheck.perform(check, request);
+ check = new UpgradeCheckResult(null, null);
+ servicesUpCheck.perform(request);
Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
Assert.assertTrue(check.getFailedDetail().isEmpty());
@@ -314,16 +316,16 @@ public class ServicesUpCheckTest {
Mockito.when(hcsNameNode.getCurrentState()).thenReturn(State.INSTALLED);
Mockito.when(hcsDataNode1.getCurrentState()).thenReturn(State.INSTALLED);
- check = new PrerequisiteCheck(null, null);
- servicesUpCheck.perform(check, request);
+ check = new UpgradeCheckResult(null, null);
+ servicesUpCheck.perform(request);
Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
Assert.assertFalse(check.getFailedDetail().isEmpty());
// Case 5. Change HDFS master to STARTED, but one slave to INSTALLED, should pass (2/3 are up).
Mockito.when(hcsNameNode.getCurrentState()).thenReturn(State.STARTED);
Mockito.when(hcsDataNode1.getCurrentState()).thenReturn(State.INSTALLED);
- check = new PrerequisiteCheck(null, null);
- servicesUpCheck.perform(check, request);
+ check = new UpgradeCheckResult(null, null);
+ servicesUpCheck.perform(request);
Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
Assert.assertTrue(check.getFailedDetail().isEmpty());
@@ -331,8 +333,8 @@ public class ServicesUpCheckTest {
Mockito.when(hcsNameNode.getCurrentState()).thenReturn(State.STARTED);
Mockito.when(hcsDataNode1.getCurrentState()).thenReturn(State.INSTALLED);
Mockito.when(hcsDataNode2.getCurrentState()).thenReturn(State.INSTALLED);
- check = new PrerequisiteCheck(null, null);
- servicesUpCheck.perform(check, request);
+ check = new UpgradeCheckResult(null, null);
+ servicesUpCheck.perform(request);
Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
Assert.assertTrue(check.getFailReason().indexOf("50%") > -1);
Assert.assertFalse(check.getFailedDetail().isEmpty());
@@ -340,8 +342,8 @@ public class ServicesUpCheckTest {
// place the DN slaves into MM which will allow them to be skipped
Mockito.when(host1.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.ON);
Mockito.when(host3.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.ON);
- check = new PrerequisiteCheck(null, null);
- servicesUpCheck.perform(check, request);
+ check = new UpgradeCheckResult(null, null);
+ servicesUpCheck.perform(request);
Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
Assert.assertTrue(check.getFailedDetail().isEmpty());
@@ -352,15 +354,15 @@ public class ServicesUpCheckTest {
Mockito.when(host1.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.OFF);
Mockito.when(host3.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.OFF);
- check = new PrerequisiteCheck(null, null);
- servicesUpCheck.perform(check, request);
+ check = new UpgradeCheckResult(null, null);
+ servicesUpCheck.perform(request);
Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
Assert.assertFalse(check.getFailedDetail().isEmpty());
// put NN into MM; should still fail since it's a master
Mockito.when(host1.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.ON);
- check = new PrerequisiteCheck(null, null);
- servicesUpCheck.perform(check, request);
+ check = new UpgradeCheckResult(null, null);
+ servicesUpCheck.perform(request);
Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
Assert.assertFalse(check.getFailedDetail().isEmpty());
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/UpgradeCheckOrderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/UpgradeCheckOrderTest.java
index 0bc1584..b527a03 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/UpgradeCheckOrderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/UpgradeCheckOrderTest.java
@@ -41,7 +41,7 @@ import com.google.inject.Injector;
public class UpgradeCheckOrderTest {
/**
- * Tests that instances of {@link AbstractCheckDescriptor} are ordered
+ * Tests that instances of {@link ClusterCheck} are ordered
* correctly.
*
* @throws Exception
@@ -63,11 +63,11 @@ public class UpgradeCheckOrderTest {
Assert.assertEquals(registry, registry2);
// get the check list
- List<AbstractCheckDescriptor> checks = registry.getUpgradeChecks();
+ List<PreUpgradeCheck> checks = registry.getUpgradeChecks();
// scan for all checks
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
- AssignableTypeFilter filter = new AssignableTypeFilter(AbstractCheckDescriptor.class);
+ AssignableTypeFilter filter = new AssignableTypeFilter(ClusterCheck.class);
scanner.addIncludeFilter(filter);
// grab all check subclasses using the exact folder they are in to avoid loading the SampleServiceCheck from the test jar
@@ -76,8 +76,8 @@ public class UpgradeCheckOrderTest {
// verify they are equal
Assert.assertEquals(beanDefinitions.size(), checks.size());
- AbstractCheckDescriptor lastCheck = null;
- for (AbstractCheckDescriptor check : checks) {
+ PreUpgradeCheck lastCheck = null;
+ for (PreUpgradeCheck check : checks) {
UpgradeCheckGroup group = UpgradeCheckGroup.DEFAULT;
UpgradeCheckGroup lastGroup = UpgradeCheckGroup.DEFAULT;
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/VersionMismatchCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/VersionMismatchCheckTest.java
index c7310f8..ded1c3d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/VersionMismatchCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/VersionMismatchCheckTest.java
@@ -25,15 +25,18 @@ import static org.mockito.Mockito.when;
import java.util.Map;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import com.google.common.collect.ImmutableMap;
@@ -44,6 +47,7 @@ import com.google.inject.Provider;
* Checks VersionMismatchCheck pre-upgrade check. Includes tests that emulate both
* clusters with and without host components in VERSION_MISMATCH upgrade state.
*/
+@Ignore
public class VersionMismatchCheckTest {
private static final String CLUSTER_NAME = "cluster1";
private static final String FIRST_SERVICE_NAME = "service1";
@@ -82,17 +86,21 @@ public class VersionMismatchCheckTest {
public void testWarningWhenHostWithVersionMismatchExists() throws Exception {
when(firstServiceComponentHosts.get(FIRST_SERVICE_COMPONENT_HOST_NAME).getUpgradeState()).thenReturn(VERSION_MISMATCH);
- PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
- versionMismatchCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
- Assert.assertEquals(PrereqCheckStatus.WARNING, check.getStatus());
+ UpgradePlanEntity upgradePlan = mock(UpgradePlanEntity.class);
+ when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ UpgradeCheckResult result = versionMismatchCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.WARNING, result.getStatus());
}
@Test
public void testWarningWhenHostWithVersionMismatchDoesNotExist() throws Exception {
when(firstServiceComponentHosts.get(FIRST_SERVICE_COMPONENT_HOST_NAME).getUpgradeState()).thenReturn(IN_PROGRESS);
- PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
- versionMismatchCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
- Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+ UpgradePlanEntity upgradePlan = mock(UpgradePlanEntity.class);
+ when(upgradePlan.getUpgradeType()).thenReturn(UpgradeType.ROLLING);
+
+ UpgradeCheckResult result = versionMismatchCheck.perform(new PrereqCheckRequest(upgradePlan));
+ Assert.assertEquals(PrereqCheckStatus.PASS, result.getStatus());
}
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProviderTest.java
index 6a89cb1..e054947 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProviderTest.java
@@ -38,7 +38,7 @@ import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
-import org.apache.ambari.server.checks.AbstractCheckDescriptor;
+import org.apache.ambari.server.checks.ClusterCheck;
import org.apache.ambari.server.checks.UpgradeCheckRegistry;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariManagementController;
@@ -124,7 +124,7 @@ public class PreUpgradeCheckResourceProviderTest {
expect(upgradeHelper.suggestUpgradePack("Cluster100", currentStackId, targetStackId, Direction.UPGRADE, UpgradeType.EXPRESS, "upgrade_pack11")).andReturn(upgradePack);
- List<AbstractCheckDescriptor> upgradeChecksToRun = new LinkedList<>();
+ List<ClusterCheck> upgradeChecksToRun = new LinkedList<>();
List<String> prerequisiteChecks = new LinkedList<>();
prerequisiteChecks.add("org.apache.ambari.server.sample.checks.SampleServiceCheck");
expect(upgradePack.getPrerequisiteCheckConfig()).andReturn(config);
@@ -144,7 +144,6 @@ public class PreUpgradeCheckResourceProviderTest {
Request request = PropertyHelper.getReadRequest(new HashSet<>());
PredicateBuilder builder = new PredicateBuilder();
Predicate predicate = builder.property(PreUpgradeCheckResourceProvider.UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").and()
- .property(PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_PACK_PROPERTY_ID).equals("upgrade_pack11").and()
.property(PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID).equals(UpgradeType.EXPRESS).and()
.property(PreUpgradeCheckResourceProvider.UPGRADE_CHECK_UPGRADE_PLAN_ID).equals("1").toPredicate();
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
index 30f29a6..4e66811 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
@@ -265,7 +265,6 @@ public class UpgradeSummaryResourceProviderTest {
upgrade.setRequestEntity(requestEntity);
upgrade.setClusterId(cluster.getClusterId());
upgrade.setId(1L);
- upgrade.setUpgradePackage("some-name");
upgrade.setUpgradeType(UpgradeType.ROLLING);
upgrade.setDirection(Direction.UPGRADE);
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
index eda9f2c..112188a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
@@ -103,7 +103,6 @@ public class UpgradeDAOTest {
entity.setClusterId(clusterId.longValue());
entity.setRequestEntity(requestEntity);
entity.setUpgradeType(UpgradeType.ROLLING);
- entity.setUpgradePackage("test-upgrade");
entity.setDowngradeAllowed(true);
UpgradeGroupEntity group = new UpgradeGroupEntity();
@@ -179,7 +178,6 @@ public class UpgradeDAOTest {
entity1.setDirection(Direction.UPGRADE);
entity1.setRequestEntity(requestEntity);
entity1.setUpgradeType(UpgradeType.ROLLING);
- entity1.setUpgradePackage("test-upgrade");
entity1.setDowngradeAllowed(true);
dao.create(entity1);
UpgradeEntity entity2 = new UpgradeEntity();
@@ -188,7 +186,6 @@ public class UpgradeDAOTest {
entity2.setDirection(Direction.DOWNGRADE);
entity2.setRequestEntity(requestEntity);
entity2.setUpgradeType(UpgradeType.ROLLING);
- entity2.setUpgradePackage("test-upgrade");
entity2.setDowngradeAllowed(true);
dao.create(entity2);
UpgradeEntity entity3 = new UpgradeEntity();
@@ -197,7 +194,6 @@ public class UpgradeDAOTest {
entity3.setDirection(Direction.UPGRADE);
entity3.setRequestEntity(requestEntity);
entity3.setUpgradeType(UpgradeType.ROLLING);
- entity3.setUpgradePackage("test-upgrade");
entity3.setDowngradeAllowed(true);
dao.create(entity3);
UpgradeEntity lastUpgradeForCluster = dao.findLastUpgradeForCluster(clusterId.longValue(), Direction.UPGRADE);
@@ -225,7 +221,6 @@ public class UpgradeDAOTest {
upgradeEntity.setDirection(Direction.UPGRADE);
upgradeEntity.setRequestEntity(requestEntity);
upgradeEntity.setUpgradeType(UpgradeType.ROLLING);
- upgradeEntity.setUpgradePackage("test-upgrade");
dao.create(upgradeEntity);
UpgradeEntity lastUpgradeForCluster = dao.findLastUpgradeForCluster(1, Direction.UPGRADE);
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/sample/checks/SampleServiceCheck.java b/ambari-server/src/test/java/org/apache/ambari/server/sample/checks/SampleServiceCheck.java
index 3a07928..0ce4b6a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/sample/checks/SampleServiceCheck.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/sample/checks/SampleServiceCheck.java
@@ -18,30 +18,32 @@
package org.apache.ambari.server.sample.checks;
import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.CheckDescription;
+import org.apache.ambari.server.checks.ClusterCheck;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrereqCheckType;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
import com.google.common.collect.ImmutableMap;
-public class SampleServiceCheck extends AbstractCheckDescriptor {
+public class SampleServiceCheck extends ClusterCheck {
public SampleServiceCheck() {
super(new CheckDescription("SAMPLE_SERVICE_CHECK",
PrereqCheckType.HOST,
"Sample service check description.",
new ImmutableMap.Builder<String, String>()
- .put(AbstractCheckDescriptor.DEFAULT,
+ .put(ClusterCheck.DEFAULT,
"Sample service check default property description.").build()));
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
- prerequisiteCheck.setFailReason("Sample service check always fails.");
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
+ public UpgradeCheckResult perform(PrereqCheckRequest request) throws AmbariException {
+ UpgradeCheckResult result = new UpgradeCheckResult(this);
+ result.setFailReason("Sample service check always fails.");
+ result.setStatus(PrereqCheckStatus.FAIL);
+ return result;
}
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
index 358f19d..f84c79f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
@@ -193,7 +193,6 @@ public class ComponentVersionCheckActionTest {
upgradeEntity.setId(1L);
upgradeEntity.setClusterId(c.getClusterId());
upgradeEntity.setRequestEntity(requestEntity);
- upgradeEntity.setUpgradePackage("");
upgradeEntity.setUpgradeType(UpgradeType.EXPRESS);
upgradeDAO.create(upgradeEntity);
@@ -256,7 +255,6 @@ public class ComponentVersionCheckActionTest {
upgradeEntity.setId(1L);
upgradeEntity.setClusterId(c.getClusterId());
upgradeEntity.setRequestEntity(requestEntity);
- upgradeEntity.setUpgradePackage("");
upgradeEntity.setUpgradeType(UpgradeType.EXPRESS);
upgradeDAO.create(upgradeEntity);
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/CreateAndConfigureActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/CreateAndConfigureActionTest.java
index 1601b1e..59a54b9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/CreateAndConfigureActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/CreateAndConfigureActionTest.java
@@ -312,7 +312,6 @@ public class CreateAndConfigureActionTest {
upgradeEntity.setId(1L);
upgradeEntity.setClusterId(cluster.getClusterId());
upgradeEntity.setRequestEntity(requestEntity);
- upgradeEntity.setUpgradePackage("");
upgradeEntity.setUpgradeType(UpgradeType.EXPRESS);
ServiceGroupDAO serviceGroupDAO = m_injector.getInstance(ServiceGroupDAO.class);
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
index 3f3be20..eb1369f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
@@ -18,6 +18,8 @@
package org.apache.ambari.server.state;
+import static org.easymock.EasyMock.expect;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -27,14 +29,16 @@ import java.util.Set;
import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.CheckDescription;
+import org.apache.ambari.server.checks.ClusterCheck;
+import org.apache.ambari.server.checks.PreUpgradeCheck;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
import org.apache.ambari.server.state.repository.ClusterVersionSummary;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
-import org.apache.ambari.server.state.stack.PrerequisiteCheck;
-import org.easymock.EasyMock;
+import org.apache.ambari.server.state.stack.UpgradeCheckResult;
+import org.easymock.EasyMockSupport;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
@@ -55,7 +59,7 @@ import junit.framework.Assert;
@Ignore
@Experimental(feature = ExperimentalFeature.UNIT_TEST_REQUIRED)
@RunWith(MockitoJUnitRunner.class)
-public class CheckHelperTest {
+public class CheckHelperTest extends EasyMockSupport {
private final Clusters clusters = Mockito.mock(Clusters.class);
@@ -87,14 +91,16 @@ public class CheckHelperTest {
@Test
public void testPreUpgradeCheck() throws Exception {
final CheckHelper helper = new CheckHelper();
- Configuration configuration = EasyMock.createNiceMock(Configuration.class);
- List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<>();
+ Configuration configuration = createNiceMock(Configuration.class);
+ List<PreUpgradeCheck> updateChecksRegistry = new ArrayList<>();
- EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
- EasyMock.replay(configuration);
+ expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
updateChecksRegistry.add(m_mockCheck);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+
+ replayAll();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
helper.performChecks(request, updateChecksRegistry, configuration);
@@ -116,14 +122,16 @@ public class CheckHelperTest {
Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster);
final CheckHelper helper = new CheckHelper();
- Configuration configuration = EasyMock.createNiceMock(Configuration.class);
- List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<>();
+ Configuration configuration = createNiceMock(Configuration.class);
+ List<PreUpgradeCheck> updateChecksRegistry = new ArrayList<>();
- EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
- EasyMock.replay(configuration);
+ expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
updateChecksRegistry.add(m_mockCheck);
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+
+ replayAll();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
helper.performChecks(request, updateChecksRegistry, configuration);
@@ -137,17 +145,19 @@ public class CheckHelperTest {
@Test
public void testPreUpgradeCheckThrowsException() throws Exception {
final CheckHelper helper = new CheckHelper();
- Configuration configuration = EasyMock.createNiceMock(Configuration.class);
- List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<>();
+ Configuration configuration = createNiceMock(Configuration.class);
+ List<PreUpgradeCheck> updateChecksRegistry = new ArrayList<>();
- EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
- EasyMock.replay(configuration);
+ expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
updateChecksRegistry.add(m_mockCheck);
// this will cause an exception
Mockito.when(m_mockPerform.toString()).thenThrow(new RuntimeException());
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+
+ replayAll();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
helper.performChecks(request, updateChecksRegistry, configuration);
@@ -160,18 +170,20 @@ public class CheckHelperTest {
@Test
public void testPreUpgradeCheckBypassesFailure() throws Exception {
final CheckHelper helper = new CheckHelper();
- Configuration configuration = EasyMock.createNiceMock(Configuration.class);
- List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<>();
+ Configuration configuration = createNiceMock(Configuration.class);
+ List<PreUpgradeCheck> updateChecksRegistry = new ArrayList<>();
- EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(true);
- EasyMock.replay(configuration);
+ expect(configuration.isUpgradePrecheckBypass()).andReturn(true);
updateChecksRegistry.add(m_mockCheck);
// this will cause an exception, triggering the bypass
Mockito.when(m_mockPerform.toString()).thenThrow(new RuntimeException());
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+
+ replayAll();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
helper.performChecks(request, updateChecksRegistry, configuration);
Assert.assertEquals(PrereqCheckStatus.BYPASS, request.getResult(m_mockCheckDescription));
@@ -190,24 +202,26 @@ public class CheckHelperTest {
Mockito.when(clusters.getCluster(Mockito.anyString())).thenReturn(cluster);
final CheckHelper helper = new CheckHelper();
- Configuration configuration = EasyMock.createNiceMock(Configuration.class);
- List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<>();
+ Configuration configuration = createNiceMock(Configuration.class);
+ List<PreUpgradeCheck> updateChecksRegistry = new ArrayList<>();
- EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
- EasyMock.replay(configuration);
+ expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
updateChecksRegistry.add(m_mockCheck);
// this will cause an exception, triggering the fail
Mockito.when(m_mockPerform.toString()).thenThrow(new RuntimeException());
- PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ UpgradePlanEntity upgradePlan = createNiceMock(UpgradePlanEntity.class);
+
+ replayAll();
+ PrereqCheckRequest request = new PrereqCheckRequest(upgradePlan);
helper.performChecks(request, updateChecksRegistry, configuration);
Assert.assertEquals(PrereqCheckStatus.FAIL, request.getResult(m_mockCheckDescription));
}
- class MockCheck extends AbstractCheckDescriptor {
+ class MockCheck extends ClusterCheck {
protected MockCheck() {
super(m_mockCheckDescription);
@@ -230,9 +244,10 @@ public class CheckHelperTest {
}
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ public UpgradeCheckResult perform(PrereqCheckRequest request)
throws AmbariException {
m_mockPerform.toString();
+ return new UpgradeCheckResult(this);
}
}
}
\ No newline at end of file
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
index 655c439..3810310 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
@@ -257,7 +257,6 @@ public class RetryUpgradeActionServiceTest {
upgrade.setId(1L);
upgrade.setRequestEntity(requestEntity);
upgrade.setClusterId(cluster.getClusterId());
- upgrade.setUpgradePackage("some-name");
upgrade.setUpgradeType(UpgradeType.ROLLING);
upgrade.setDirection(Direction.UPGRADE);
upgradeDAO.create(upgrade);
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java
index d3bed44..7e42c5e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java
@@ -91,7 +91,7 @@ import com.google.common.collect.ImmutableSet;
*/
//todo: switch over to EasyMockSupport
@Experimental(
- feature = ExperimentalFeature.REPO_VERSION_REMOVAL,
+ feature = ExperimentalFeature.UNIT_TEST_REQUIRED,
comment = "Add test cases for mpacks and multiple/bad versions")
public class AmbariContextTest {