AMBARI-21677 - Upgrade Pre-Checks Should Take PATCH/SERVICE Types Into Account (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1f95e149 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1f95e149 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1f95e149 Branch: refs/heads/branch-2.6 Commit: 1f95e149b756bcbd653fed66457a73a2a5040700 Parents: 8bf44f3 Author: Jonathan Hurley <jhur...@hortonworks.com> Authored: Mon Aug 7 23:46:47 2017 -0400 Committer: Jonathan Hurley <jhur...@hortonworks.com> Committed: Tue Aug 8 20:08:35 2017 -0400 ---------------------------------------------------------------------- .../server/checks/AbstractCheckDescriptor.java | 215 ++++++++++---- .../server/checks/AtlasPresenceCheck.java | 13 +- .../server/checks/AutoStartDisabledCheck.java | 11 + .../ambari/server/checks/CheckDescription.java | 4 +- .../server/checks/ClientRetryPropertyCheck.java | 10 +- .../checks/ComponentsExistInRepoCheck.java | 16 +- .../checks/ComponentsInstallationCheck.java | 15 +- .../server/checks/ConfigurationMergeCheck.java | 6 +- .../ambari/server/checks/HealthCheck.java | 5 +- .../HiveDynamicServiceDiscoveryCheck.java | 19 +- .../checks/HiveMultipleMetastoreCheck.java | 7 +- .../server/checks/HiveNotRollingWarning.java | 11 +- .../checks/HostsMasterMaintenanceCheck.java | 21 +- .../checks/HostsRepositoryVersionCheck.java | 53 +--- .../server/checks/InstallPackagesCheck.java | 18 +- .../server/checks/KafkaKerberosCheck.java | 10 +- ...apReduce2JobHistoryStatePreservingCheck.java | 21 +- .../server/checks/RangerAuditDbCheck.java | 10 +- .../server/checks/RangerPasswordCheck.java | 27 +- .../server/checks/RangerSSLConfigCheck.java | 8 +- .../checks/SecondaryNamenodeDeletedCheck.java | 27 +- .../checks/ServicesMaintenanceModeCheck.java | 11 +- .../ServicesMapReduceDistributedCacheCheck.java | 30 +- .../ServicesNamenodeHighAvailabilityCheck.java | 12 +- .../checks/ServicesNamenodeTruncateCheck.java | 31 +- .../ServicesTezDistributedCacheCheck.java | 28 +- .../ambari/server/checks/ServicesUpCheck.java | 14 +- .../checks/ServicesYarnWorkPreservingCheck.java | 11 +- .../server/checks/StormShutdownWarning.java | 11 +- .../checks/YarnRMHighAvailabilityCheck.java | 11 +- .../YarnTimelineServerStatePreservingCheck.java | 99 ++++--- .../server/controller/PrereqCheckRequest.java | 13 - .../apache/ambari/server/state/CheckHelper.java | 4 +- .../checks/AbstractCheckDescriptorTest.java | 287 ++++++++++++------- .../checks/ClientRetryPropertyCheckTest.java | 33 ++- .../checks/ComponentExistsInRepoCheckTest.java | 16 ++ .../checks/ComponentsInstallationCheckTest.java | 50 +++- .../HiveDynamicServiceDiscoveryCheckTest.java | 2 +- .../checks/HiveMultipleMetastoreCheckTest.java | 31 +- .../checks/HiveNotRollingWarningTest.java | 39 ++- .../server/checks/HostsHeartbeatCheckTest.java | 2 +- .../checks/HostsMasterMaintenanceCheckTest.java | 51 ++-- .../checks/HostsRepositoryVersionCheckTest.java | 76 +++-- .../server/checks/InstallPackagesCheckTest.java | 2 +- .../server/checks/KafkaKerberosCheckTest.java | 39 ++- ...duce2JobHistoryStatePreservingCheckTest.java | 37 ++- .../server/checks/RangerAuditDbCheckTest.java | 42 ++- .../server/checks/RangerPasswordCheckTest.java | 47 +-- .../server/checks/RangerSSLConfigCheckTest.java | 42 ++- .../SecondaryNamenodeDeletedCheckTest.java | 52 +++- .../server/checks/ServicePresenceCheckTest.java | 2 +- .../ServicesMaintenanceModeCheckTest.java | 34 ++- ...vicesMapReduceDistributedCacheCheckTest.java | 60 ++-- ...rvicesNamenodeHighAvailabilityCheckTest.java | 42 ++- .../ServicesNamenodeTruncateCheckTest.java | 45 ++- .../ServicesTezDistributedCacheCheckTest.java | 49 +++- .../server/checks/ServicesUpCheckTest.java | 64 +++-- .../ServicesYarnWorkPreservingCheckTest.java | 41 ++- .../server/checks/StormShutdownWarningTest.java | 38 ++- ...nTimelineServerStatePreservingCheckTest.java | 2 +- .../ambari/server/state/CheckHelperTest.java | 248 ++++++++-------- 61 files changed, 1482 insertions(+), 793 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java index 4f8a39d..d54e8a1 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java @@ -17,6 +17,7 @@ */ package org.apache.ambari.server.checks; +import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -29,11 +30,15 @@ import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.orm.dao.HostVersionDAO; import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; import org.apache.ambari.server.orm.dao.UpgradeDAO; +import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; import org.apache.ambari.server.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.ServiceInfo; +import org.apache.ambari.server.state.repository.ClusterVersionSummary; +import org.apache.ambari.server.state.repository.VersionDefinitionXml; +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; @@ -43,6 +48,7 @@ import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.Lists; import com.google.inject.Inject; import com.google.inject.Provider; @@ -56,7 +62,7 @@ public abstract class AbstractCheckDescriptor { protected static final String DEFAULT = "default"; @Inject - Provider<Clusters> clustersProvider; + protected Provider<Clusters> clustersProvider; @Inject Provider<HostVersionDAO> hostVersionDaoProvider; @@ -88,55 +94,54 @@ public abstract class AbstractCheckDescriptor { } /** - * Tests if the prerequisite check is applicable to given cluster. This - * method's default logic is to ensure that the cluster stack source and - * target are compatible with the prerequisite check. When overridding this - * method, call {@code super#isApplicable(PrereqCheckRequest)}. + * 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. * - * @param request - * prerequisite check request - * @return true if check should be performed + * @return a set of services which will determine whether this check is + * applicable. + */ + 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. * - * @throws org.apache.ambari.server.AmbariException - * if server error happens + * @return a list of qualifications, or an empty list. */ - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - // this is default behaviour - return true; + public List<CheckQualification> getQualifications() { + return Collections.emptyList(); } /** - * Same like {@code isApplicable(PrereqCheckRequest request)}, but with service presence check + * Tests if the prerequisite check is applicable to given upgrade request. If + * a check requires some extra processing + * * @param request * prerequisite check request - * @param requiredServices - * set of services, which need to be present to allow check execution - * @param requiredAll - * require all services in the list or at least one need to present * @return true if check should be performed + * * @throws org.apache.ambari.server.AmbariException * if server error happens */ - public boolean isApplicable(PrereqCheckRequest request, List<String> requiredServices, boolean requiredAll) throws AmbariException { - final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName()); - Set<String> services = cluster.getServices().keySet(); - - // default return value depends on assign inside check block - boolean serviceFound = requiredAll && !requiredServices.isEmpty(); - - for (String service : requiredServices) { - if ( services.contains(service) && !requiredAll) { - serviceFound = true; - break; - } else if (!services.contains(service) && requiredAll) { - serviceFound = false; - break; + public final boolean isApplicable(PrereqCheckRequest request) throws AmbariException { + List<CheckQualification> qualifications = Lists.<CheckQualification> newArrayList( + new ServiceQualification()); + + // add any others from the concrete check + qualifications.addAll(getQualifications()); + for (CheckQualification qualification : qualifications) { + if (!qualification.isApplicable(request)) { + return false; } } - return serviceFound; + return true; } + /** * Executes check against given cluster. * @@ -172,7 +177,8 @@ public abstract class AbstractCheckDescriptor { * @param request the request * @return the failure string */ - protected String getFailReason(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) { + protected String getFailReason(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) + throws AmbariException { return getFailReason(DEFAULT, prerequisiteCheck, request); } @@ -214,12 +220,13 @@ public abstract class AbstractCheckDescriptor { * @param request the request * @return the failure string */ - protected String getFailReason(String key, - PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) { + protected String getFailReason(String key, PrerequisiteCheck prerequisiteCheck, + PrereqCheckRequest request) throws AmbariException { String fail = m_description.getFail(key); - if (fail.contains("{{version}}") && null != request.getTargetVersion()) { - fail = fail.replace("{{version}}", request.getTargetVersion()); + RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion(); + if (fail.contains("{{version}}") && null != repositoryVersion) { + fail = fail.replace("{{version}}", repositoryVersion.getVersion()); } if (fail.contains("{{fails}}")) { @@ -230,24 +237,21 @@ public abstract class AbstractCheckDescriptor { Clusters clusters = clustersProvider.get(); AmbariMetaInfo metaInfo = ambariMetaInfo.get(); - try { - Cluster c = clusters.getCluster(request.getClusterName()); - Map<String, ServiceInfo> services = metaInfo.getServices( - c.getDesiredStackVersion().getStackName(), - c.getDesiredStackVersion().getStackVersion()); - - LinkedHashSet<String> displays = new LinkedHashSet<>(); - for (String name : names) { - if (services.containsKey(name)) { - displays.add(services.get(name).getDisplayName()); - } else { - displays.add(name); - } + Cluster c = clusters.getCluster(request.getClusterName()); + Map<String, ServiceInfo> services = metaInfo.getServices( + c.getDesiredStackVersion().getStackName(), + c.getDesiredStackVersion().getStackVersion()); + + LinkedHashSet<String> displays = new LinkedHashSet<>(); + for (String name : names) { + if (services.containsKey(name)) { + displays.add(services.get(name).getDisplayName()); + } else { + displays.add(name); } - names = displays; - } catch (Exception e) { - LOG.warn("Could not load service info map"); } + names = displays; + } fail = fail.replace("{{fails}}", formatEntityList(names)); @@ -256,7 +260,6 @@ public abstract class AbstractCheckDescriptor { return fail; } - /** * Formats lists of given entities to human readable form: * [entity1] -> {entity1} {noun} @@ -298,4 +301,106 @@ public abstract class AbstractCheckDescriptor { return false; } + /** + * Gets the services participating in the upgrade from the VDF. + * + * @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. + */ + final Set<String> getServicesInUpgrade(PrereqCheckRequest request) throws AmbariException { + final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName()); + RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion(); + + // the check is scoped to some services, so determine if any of those + // services are included in this upgrade + try { + VersionDefinitionXml vdf = repositoryVersion.getRepositoryXml(); + ClusterVersionSummary clusterVersionSummary = vdf.getClusterSummary(cluster); + return clusterVersionSummary.getAvailableServiceNames(); + } catch (Exception exception) { + throw new AmbariException("Unable to run upgrade checks because of an invalid VDF", + exception); + } + } + + /** + * The {@link CheckQualification} interface is used to provide multiple + * different qualifications against which an upgrade check is determined to be + * applicable to the upgrade. + */ + interface CheckQualification { + + /** + * Gets whether the upgrade check meets this qualification and should + * therefore be run before the upgrade. + * + * @param request + * @return + * @throws AmbariException + */ + boolean isApplicable(PrereqCheckRequest request) throws AmbariException; + } + + /** + * 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. + * <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. + */ + final class ServiceQualification implements CheckQualification { + + /** + * {@inheritDoc} + */ + @Override + public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { + + Set<String> applicableServices = getApplicableServices(); + + // if the check is not scoped to any particular service, then it passes + // this qualification + if (applicableServices.isEmpty()) { + return true; + } + + Set<String> servicesForUpgrade = getServicesInUpgrade(request); + + for (String serviceInUpgrade : servicesForUpgrade) { + if (applicableServices.contains(serviceInUpgrade)) { + return true; + } + } + + return false; + } + } + + /** + * The {@link PriorCheckQualification} class is used to determine if a prior check has run. + */ + final class PriorCheckQualification implements CheckQualification { + + private final CheckDescription m_checkDescription; + + public PriorCheckQualification(CheckDescription checkDescription) { + m_checkDescription = checkDescription; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { + PrereqCheckStatus checkStatus = request.getResult(m_checkDescription); + if (null != checkStatus && checkStatus == PrereqCheckStatus.FAIL) { + return false; + } + + return true; + } + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/AtlasPresenceCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/AtlasPresenceCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/AtlasPresenceCheck.java index 04b73fa..7b622bd 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/AtlasPresenceCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/AtlasPresenceCheck.java @@ -17,15 +17,14 @@ */ package org.apache.ambari.server.checks; -import java.util.Arrays; +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.slf4j.Logger; -import org.slf4j.LoggerFactory; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -36,16 +35,18 @@ import com.google.inject.Singleton; @UpgradeCheck(group = UpgradeCheckGroup.DEFAULT) public class AtlasPresenceCheck extends AbstractCheckDescriptor{ - private static final Logger LOG = LoggerFactory.getLogger(AtlasPresenceCheck.class); private static final String serviceName = "ATLAS"; public AtlasPresenceCheck(){ super(CheckDescription.ATLAS_SERVICE_PRESENCE_CHECK); } + /** + * {@inheritDoc} + */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList(serviceName), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet(serviceName); } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/AutoStartDisabledCheck.java ---------------------------------------------------------------------- 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 c41ad20..6b0698e 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 @@ -17,6 +17,9 @@ */ package org.apache.ambari.server.checks; +import java.util.Collections; +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; @@ -52,6 +55,14 @@ public class AutoStartDisabledCheck extends AbstractCheckDescriptor { * {@inheritDoc} */ @Override + public Set<String> getApplicableServices() { + return Collections.emptySet(); + } + + /** + * {@inheritDoc} + */ + @Override public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { String autoStartEnabled = getProperty(request, CLUSTER_ENV_TYPE, RECOVERY_ENABLED_KEY); http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java ---------------------------------------------------------------------- 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 640de58..91a92bd 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 @@ -86,9 +86,7 @@ public class CheckDescription { "All hosts should have target version installed", new ImmutableMap.Builder<String, String>() .put(AbstractCheckDescriptor.DEFAULT, - "The following hosts must have version {{version}} installed: {{fails}}.") - .put(HostsRepositoryVersionCheck.KEY_NO_REPO_VERSION, - "Repository version {{version}} does not exist.").build()); + "The following hosts must have version {{version}} installed: {{fails}}.").build()); public static CheckDescription SECONDARY_NAMENODE_MUST_BE_DELETED = new CheckDescription("SECONDARY_NAMENODE_MUST_BE_DELETED", PrereqCheckType.HOST, http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java index 226d82c..f26202d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java @@ -18,9 +18,9 @@ package org.apache.ambari.server.checks; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; @@ -31,6 +31,7 @@ import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.apache.ambari.server.state.stack.upgrade.UpgradeType; import org.apache.commons.lang.StringUtils; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -58,10 +59,11 @@ public class ClientRetryPropertyCheck extends AbstractCheckDescriptor { * {@inheritDoc} */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList("HDFS", "HIVE", "OOZIE"), false); + public Set<String> getApplicableServices() { + return Sets.newHashSet("HDFS", "HIVE", "OOZIE"); } + /** * {@inheritDoc} */ @@ -70,7 +72,7 @@ public class ClientRetryPropertyCheck extends AbstractCheckDescriptor { final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName()); Map<String, Service> services = cluster.getServices(); - List<String> errorMessages = new ArrayList<String>(); + List<String> errorMessages = new ArrayList<>(); // HDFS needs to actually prevent client retry since that causes them to try too long and not failover quickly. if (services.containsKey("HDFS")) { http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsExistInRepoCheck.java ---------------------------------------------------------------------- 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 d60433d..6949257 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 @@ -23,11 +23,10 @@ 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.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.state.Cluster; import org.apache.ambari.server.state.ComponentInfo; import org.apache.ambari.server.state.Service; @@ -64,17 +63,16 @@ public class ComponentsExistInRepoCheck extends AbstractCheckDescriptor { throws AmbariException { final String clusterName = request.getClusterName(); final Cluster cluster = clustersProvider.get().getCluster(clusterName); + RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion(); + StackId sourceStack = request.getSourceStackId(); - StackId targetStack = request.getTargetStackId(); + StackId targetStack = repositoryVersion.getStackId(); Set<String> failedServices = new TreeSet<>(); Set<String> failedComponents = new TreeSet<>(); - @Experimental( - feature = ExperimentalFeature.PATCH_UPGRADES, - comment = "Assumes all service participate in the upgrade") - Map<String, Service> servicesInUpgrade = cluster.getServices(); - for (String serviceName : servicesInUpgrade.keySet()) { + Set<String> servicesInUpgrade = getServicesInUpgrade(request); + for (String serviceName : servicesInUpgrade) { try { ServiceInfo serviceInfo = ambariMetaInfo.get().getService(targetStack.getStackName(), targetStack.getStackVersion(), serviceName); @@ -84,7 +82,7 @@ public class ComponentsExistInRepoCheck extends AbstractCheckDescriptor { continue; } - Service service = servicesInUpgrade.get(serviceName); + Service service = cluster.getService(serviceName); Map<String, ServiceComponent> componentsInUpgrade = service.getServiceComponents(); for (String componentName : componentsInUpgrade.keySet()) { try { http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ComponentsInstallationCheck.java index a77d72b..ce7ec64 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 @@ -18,7 +18,6 @@ package org.apache.ambari.server.checks; import java.text.MessageFormat; -import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; @@ -33,7 +32,6 @@ import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponent; -import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.State; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; @@ -63,15 +61,14 @@ public class ComponentsInstallationCheck extends AbstractCheckDescriptor { public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { final String clusterName = request.getClusterName(); final Cluster cluster = clustersProvider.get().getCluster(clusterName); - Set<String> failedServiceNames = new HashSet<String>(); - - StackId stackId = cluster.getCurrentStackVersion(); + Set<String> failedServiceNames = new HashSet<>(); // Preq-req check should fail if any service component is in INSTALL_FAILED state - Set<String> installFailedHostComponents = new HashSet<String>(); + Set<String> installFailedHostComponents = new HashSet<>(); - for (Map.Entry<String, Service> serviceEntry : cluster.getServices().entrySet()) { - final Service service = serviceEntry.getValue(); + 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) { Map<String, ServiceComponent> serviceComponents = service.getServiceComponents(); @@ -100,7 +97,7 @@ public class ComponentsInstallationCheck extends AbstractCheckDescriptor { if(!installFailedHostComponents.isEmpty()) { String message = MessageFormat.format("Service components in INSTALL_FAILED state: {0}.", StringUtils.join(installFailedHostComponents, ", ")); - prerequisiteCheck.setFailedOn(new LinkedHashSet<String>(failedServiceNames)); + prerequisiteCheck.setFailedOn(new LinkedHashSet<>(failedServiceNames)); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); prerequisiteCheck.setFailReason( "Found service components in INSTALL_FAILED state. Please re-install these components. " + message); http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java index 28d7d78..4dc5d8b 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 @@ -25,7 +25,6 @@ import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; -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.stack.PrereqCheckStatus; @@ -64,13 +63,12 @@ public class ConfigurationMergeCheck extends AbstractCheckDescriptor { public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { - String stackName = request.getTargetStackId().getStackName(); - RepositoryVersionEntity rve = repositoryVersionDaoProvider.get().findByStackNameAndVersion(stackName, request.getTargetVersion()); + RepositoryVersionEntity rve = request.getTargetRepositoryVersion(); Map<String, Map<String, ThreeWayValue>> changes = m_mergeHelper.getConflicts(request.getClusterName(), rve.getStackId()); - Set<String> failedTypes = new HashSet<String>(); + Set<String> failedTypes = new HashSet<>(); for (Entry<String, Map<String, ThreeWayValue>> entry : changes.entrySet()) { for (Entry<String, ThreeWayValue> configEntry : entry.getValue().entrySet()) { http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/HealthCheck.java ---------------------------------------------------------------------- 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 8feb77a..f08be16 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 @@ -76,7 +76,7 @@ public class HealthCheck extends AbstractCheckDescriptor { final Cluster cluster = clustersProvider.get().getCluster(clusterName); List<AlertCurrentEntity> alerts = alertsDAO.findCurrentByCluster(cluster.getClusterId()); - List<String> errorMessages = new ArrayList<String>(); + List<String> errorMessages = new ArrayList<>(); for (AlertCurrentEntity alert : alerts) { AlertHistoryEntity alertHistory = alert.getAlertHistory(); @@ -99,7 +99,8 @@ public class HealthCheck extends AbstractCheckDescriptor { prerequisiteCheck.getFailedOn().add(clusterName); prerequisiteCheck.setStatus(PrereqCheckStatus.WARNING); String failReason = getFailReason(prerequisiteCheck, request); - prerequisiteCheck.setFailReason(String.format(failReason, StringUtils.join(errorMessages, "\n"))); + prerequisiteCheck.setFailReason( + String.format(failReason, StringUtils.join(errorMessages, System.lineSeparator()))); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java index c2ef4ad..34e5bfd 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java @@ -18,14 +18,14 @@ package org.apache.ambari.server.checks; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; -import org.apache.ambari.server.state.Cluster; -import org.apache.ambari.server.state.Service; +import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; +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.UpgradePack.PrerequisiteCheckConfig; @@ -33,6 +33,7 @@ import org.apache.ambari.server.state.stack.upgrade.UpgradeType; import org.apache.ambari.server.utils.VersionUtils; import org.apache.commons.lang.StringUtils; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -62,8 +63,8 @@ public class HiveDynamicServiceDiscoveryCheck extends AbstractCheckDescriptor { * {@inheritDoc} */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList("HIVE"), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet("HIVE"); } /** @@ -71,7 +72,7 @@ public class HiveDynamicServiceDiscoveryCheck extends AbstractCheckDescriptor { */ @Override public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { - List<String> errorMessages = new ArrayList<String>(); + List<String> errorMessages = new ArrayList<>(); String dynamicServiceDiscoveryEnabled = getProperty(request, "hive-site", "hive.server2.support.dynamic.service.discovery"); String zookeeperQuorum = getProperty(request, "hive-site", "hive.zookeeper.quorum"); @@ -111,9 +112,11 @@ public class HiveDynamicServiceDiscoveryCheck extends AbstractCheckDescriptor { String minStackName = minStack[0]; String minStackVersion = minStack[1]; if (minStackName.equals(request.getSourceStackId().getStackName())) { + RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion(); + StackId targetStackId = repositoryVersion.getStackId(); if (VersionUtils.compareVersions(request.getSourceStackId().getStackVersion(), minStackVersion) < 0 - && VersionUtils.compareVersions(request.getTargetStackId().getStackVersion(), minStackVersion) < 0 - && VersionUtils.compareVersions(request.getSourceStackId().getStackVersion(), request.getTargetStackId().getStackVersion()) < 0) { + && VersionUtils.compareVersions(targetStackId.getStackVersion(), minStackVersion) < 0 + && VersionUtils.compareVersions(request.getSourceStackId().getStackVersion(), targetStackId.getStackVersion()) < 0) { checkStatus = PrereqCheckStatus.WARNING; } } http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java index ea20a55..e876696 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java @@ -17,8 +17,8 @@ */ package org.apache.ambari.server.checks; -import java.util.Arrays; import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ServiceComponentNotFoundException; @@ -30,6 +30,7 @@ import org.apache.ambari.server.state.ServiceComponentHost; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -51,8 +52,8 @@ public class HiveMultipleMetastoreCheck extends AbstractCheckDescriptor { * {@inheritDoc} */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList("HIVE"), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet("HIVE"); } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveNotRollingWarning.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveNotRollingWarning.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveNotRollingWarning.java index 2b1c62e..8e862c8 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveNotRollingWarning.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveNotRollingWarning.java @@ -17,7 +17,7 @@ */ package org.apache.ambari.server.checks; -import java.util.Arrays; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; @@ -25,6 +25,7 @@ import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.apache.ambari.server.state.stack.upgrade.UpgradeType; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -52,14 +53,10 @@ public class HiveNotRollingWarning extends AbstractCheckDescriptor { /** * {@inheritDoc} - * <p/> - * This check is only applicable if Hive is installed and the upgrade type is - * {@link UpgradeType#ROLLING}. */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - boolean isApplicable = super.isApplicable(request, Arrays.asList("HIVE"), true); - return isApplicable && request.getUpgradeType() == UpgradeType.ROLLING; + public Set<String> getApplicableServices() { + return Sets.newHashSet("HIVE"); } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java index 8cd935b..86e0f3b 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,6 +23,7 @@ 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.state.Cluster; import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.MaintenanceState; @@ -58,25 +59,25 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor { } @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request) && request.getTargetVersion() != null; - } - - @Override public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { final String clusterName = request.getClusterName(); final Cluster cluster = clustersProvider.get().getCluster(clusterName); final StackId stackId = cluster.getDesiredStackVersion(); - final Set<String> hostsWithMasterComponent = new HashSet<String>(); + 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. - final String upgradePackName = repositoryVersionHelper.get().getUpgradePackageName(stackId.getStackName(), stackId.getStackVersion(), request.getTargetVersion(), null); + RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion(); + + final String upgradePackName = repositoryVersionHelper.get().getUpgradePackageName( + stackId.getStackName(), stackId.getStackVersion(), repositoryVersion.getVersion(), null); + 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; } + final UpgradePack upgradePack = ambariMetaInfo.get().getUpgradePacks(stackId.getStackName(), stackId.getStackVersion()).get(upgradePackName); if (upgradePack == null) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); @@ -84,10 +85,12 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor { prerequisiteCheck.setFailReason(String.format(fail, upgradePackName)); return; } - final Set<String> componentsFromUpgradePack = new HashSet<String>(); + + final Set<String> componentsFromUpgradePack = new HashSet<>(); for (Map<String, ProcessingComponent> task: upgradePack.getTasks().values()) { componentsFromUpgradePack.addAll(task.keySet()); } + for (Service service: cluster.getServices().values()) { for (ServiceComponent serviceComponent: service.getServiceComponents().values()) { if (serviceComponent.isMasterComponent() && componentsFromUpgradePack.contains(serviceComponent.getName())) { @@ -95,6 +98,7 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor { } } } + final Map<String, Host> clusterHosts = clustersProvider.get().getHostsForCluster(clusterName); for (Map.Entry<String, Host> hostEntry : clusterHosts.entrySet()) { final Host host = hostEntry.getValue(); @@ -102,6 +106,7 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor { prerequisiteCheck.getFailedOn().add(host.getHostName()); } } + if (!prerequisiteCheck.getFailedOn().isEmpty()) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java index 613c5fc..17c9dc3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java @@ -17,13 +17,14 @@ */ package org.apache.ambari.server.checks; +import java.util.EnumSet; import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.orm.entities.HostVersionEntity; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; -import org.apache.ambari.server.orm.entities.StackEntity; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.MaintenanceState; @@ -47,8 +48,6 @@ import com.google.inject.Singleton; required = { UpgradeType.ROLLING, UpgradeType.NON_ROLLING, UpgradeType.HOST_ORDERED }) public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor { - static final String KEY_NO_REPO_VERSION = "no_repo_version"; - /** * Constructor. */ @@ -57,17 +56,11 @@ public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor { } @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request) && request.getTargetVersion() != null; - } - - @Override public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { final String clusterName = request.getClusterName(); final Cluster cluster = clustersProvider.get().getCluster(clusterName); final Map<String, Host> clusterHosts = clustersProvider.get().getHostsForCluster(clusterName); - final StackId stackId = cluster.getDesiredStackVersion(); for (Host host : clusterHosts.values()) { // hosts in MM will produce a warning if they do not have the repo version @@ -76,41 +69,19 @@ public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor { continue; } - if (null != request.getTargetVersion()) { - boolean found = false; - for (HostVersionEntity hve : hostVersionDaoProvider.get().findByHost(host.getHostName())) { - - if (hve.getRepositoryVersion().getVersion().equals(request.getTargetVersion()) - && (hve.getState() == RepositoryVersionState.INSTALLED || hve.getState() == RepositoryVersionState.NOT_REQUIRED)) { - found = true; - break; - } - } - - if (!found) { - prerequisiteCheck.getFailedOn().add(host.getHostName()); - } - } else { - final RepositoryVersionEntity repositoryVersion = repositoryVersionDaoProvider.get().findByStackAndVersion( - stackId, request.getTargetVersion()); - if (repositoryVersion == null) { - prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason( - getFailReason(KEY_NO_REPO_VERSION, prerequisiteCheck, request)); - prerequisiteCheck.getFailedOn().addAll(clusterHosts.keySet()); - return; - } + RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion(); + StackId repositoryStackId = repositoryVersion.getStackId(); - StackEntity repositoryStackEntity = repositoryVersion.getStack(); - StackId repositoryStackId = new StackId(repositoryStackEntity.getStackName(), - repositoryStackEntity.getStackVersion()); + // get the host version entity for this host and repository + final HostVersionEntity hostVersion = hostVersionDaoProvider.get().findByClusterStackVersionAndHost( + clusterName, repositoryStackId, repositoryVersion.getVersion(), host.getHostName()); - final HostVersionEntity hostVersion = hostVersionDaoProvider.get().findByClusterStackVersionAndHost( - clusterName, repositoryStackId, repositoryVersion.getVersion(), host.getHostName()); + // the repo needs to either be installed or not required + Set<RepositoryVersionState> okStates = EnumSet.of(RepositoryVersionState.INSTALLED, + RepositoryVersionState.NOT_REQUIRED); - if (hostVersion == null || hostVersion.getState() != RepositoryVersionState.INSTALLED) { - prerequisiteCheck.getFailedOn().add(host.getHostName()); - } + if (hostVersion == null || !okStates.contains(hostVersion.getState())) { + prerequisiteCheck.getFailedOn().add(host.getHostName()); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java index 7c84e5c..3e02572 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java @@ -59,16 +59,15 @@ public class InstallPackagesCheck extends AbstractCheckDescriptor { public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { final String clusterName = request.getClusterName(); final Cluster cluster = clustersProvider.get().getCluster(clusterName); - final StackId targetStackId = request.getTargetStackId(); - final String stackName = targetStackId.getStackName(); - final String repoVersion = request.getTargetVersion(); + RepositoryVersionEntity repositoryVersion = request.getTargetRepositoryVersion(); - final RepositoryVersionEntity rve = repositoryVersionDaoProvider.get().findByStackNameAndVersion(stackName, request.getTargetVersion()); - if (StringUtils.isBlank(rve.getVersion()) || !rve.getVersion().matches("^\\d+(\\.\\d+)*\\-\\d+$")) { + final StackId targetStackId = repositoryVersion.getStackId(); + + if (!repositoryVersion.getVersion().matches("^\\d+(\\.\\d+)*\\-\\d+$")) { String message = MessageFormat.format("The Repository Version {0} for Stack {1} must contain a \"-\" followed by a build number. " + "Make sure that another registered repository does not have the same repo URL or " + - "shares the same build number. Next, try reinstalling the Repository Version.", rve.getVersion(), rve.getStackVersion()); - prerequisiteCheck.getFailedOn().add("Repository Version " + rve.getVersion()); + "shares the same build number. Next, try reinstalling the Repository Version.", repositoryVersion.getVersion(), repositoryVersion.getStackVersion()); + prerequisiteCheck.getFailedOn().add("Repository Version " + repositoryVersion.getVersion()); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); prerequisiteCheck.setFailReason(message); return; @@ -79,7 +78,7 @@ public class InstallPackagesCheck extends AbstractCheckDescriptor { for (Host host : cluster.getHosts()) { if (host.getMaintenanceState(cluster.getClusterId()) != MaintenanceState.ON) { for (HostVersionEntity hve : hostVersionDaoProvider.get().findByHost(host.getHostName())) { - if (hve.getRepositoryVersion().getVersion().equals(request.getTargetVersion()) + if (StringUtils.equals(hve.getRepositoryVersion().getVersion(), repositoryVersion.getVersion()) && hve.getState() == RepositoryVersionState.INSTALL_FAILED) { failedHosts.add(host.getHostName()); } @@ -91,7 +90,8 @@ public class InstallPackagesCheck extends AbstractCheckDescriptor { String message = MessageFormat.format("Hosts in cluster [{0},{1},{2},{3}] are in INSTALL_FAILED state because " + "Install Packages had failed. Please re-run Install Packages, if necessary place following hosts " + "in Maintenance mode: {4}", cluster.getClusterName(), targetStackId.getStackName(), - targetStackId.getStackVersion(), repoVersion, StringUtils.join(failedHosts, ", ")); + targetStackId.getStackVersion(), repositoryVersion.getVersion(), + StringUtils.join(failedHosts, ", ")); prerequisiteCheck.setFailedOn(new LinkedHashSet<>(failedHosts)); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); prerequisiteCheck.setFailReason(message); http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/KafkaKerberosCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/KafkaKerberosCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/KafkaKerberosCheck.java index 69721d9..724feab 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/KafkaKerberosCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/KafkaKerberosCheck.java @@ -18,7 +18,7 @@ package org.apache.ambari.server.checks; -import java.util.Arrays; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; @@ -27,6 +27,7 @@ import org.apache.ambari.server.state.SecurityType; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -47,9 +48,12 @@ public class KafkaKerberosCheck extends AbstractCheckDescriptor { super(CheckDescription.KAFKA_KERBEROS_CHECK); } + /** + * {@inheritDoc} + */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList(KAFKA_SERVICE), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet(KAFKA_SERVICE); } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java index 06ca162..2015be3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java @@ -17,21 +17,18 @@ */ package org.apache.ambari.server.checks; -import com.google.inject.Singleton; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; -import org.apache.ambari.server.state.Cluster; -import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; -import org.apache.ambari.server.state.stack.UpgradePack.PrerequisiteCheckConfig; -import org.apache.ambari.server.utils.VersionUtils; import org.apache.commons.lang.StringUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import com.google.common.collect.Sets; +import com.google.inject.Singleton; /** * The {@link MapReduce2JobHistoryStatePreservingCheck} @@ -61,8 +58,8 @@ public class MapReduce2JobHistoryStatePreservingCheck extends AbstractCheckDescr * {@inheritDoc} */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList("MAPREDUCE2"), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet("MAPREDUCE2"); } /** @@ -70,7 +67,7 @@ public class MapReduce2JobHistoryStatePreservingCheck extends AbstractCheckDescr */ @Override public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { - List<String> errorMessages = new ArrayList<String>(); + List<String> errorMessages = new ArrayList<>(); PrereqCheckStatus checkStatus = PrereqCheckStatus.FAIL; String enabled = http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerAuditDbCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerAuditDbCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerAuditDbCheck.java index ec4ed09..27a0591 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerAuditDbCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerAuditDbCheck.java @@ -17,7 +17,7 @@ */ package org.apache.ambari.server.checks; -import java.util.Arrays; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; @@ -26,6 +26,7 @@ import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -42,9 +43,12 @@ public class RangerAuditDbCheck extends AbstractCheckDescriptor{ super(CheckDescription.RANGER_SERVICE_AUDIT_DB_CHECK); } + /** + * {@inheritDoc} + */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList(serviceName), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet(serviceName); } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java index a55a148..4c5e4da 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java @@ -27,22 +27,21 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.configuration.ComponentSSLConfiguration; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.controller.internal.URLStreamProvider; -import org.apache.ambari.server.state.Cluster; -import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.apache.ambari.server.state.stack.upgrade.UpgradeType; -import org.apache.ambari.server.utils.VersionUtils; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.Sets; import com.google.gson.Gson; import com.google.inject.Singleton; @@ -74,25 +73,11 @@ public class RangerPasswordCheck extends AbstractCheckDescriptor { } /** - * Verifies that the check can be run. If the stack is HDP and 2.3 or higher, allow - * this to run. If the stack is not HDP, the check should run. + * {@inheritDoc} */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - if (!super.isApplicable(request, Arrays.asList("RANGER"), true)) { - return false; - } - - final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName()); - - StackId clusterStackId = cluster.getCurrentStackVersion(); - if (clusterStackId.getStackName().equals("HDP")) { - String sourceVersion = request.getSourceStackId().getStackVersion(); - - return VersionUtils.compareVersions(sourceVersion, "2.3.0.0") >= 0; - } - - return true; + public Set<String> getApplicableServices() { + return Sets.newHashSet("RANGER"); } @Override @@ -293,7 +278,7 @@ public class RangerPasswordCheck extends AbstractCheckDescriptor { */ private boolean checkRangerUser(URLStreamProvider streamProvider, String rangerUserUrl, String username, String password, String userToSearch, PrerequisiteCheck check, - PrereqCheckRequest request, List<String> warnReasons) { + PrereqCheckRequest request, List<String> warnReasons) throws AmbariException { String url = String.format("%s?name=%s", rangerUserUrl, userToSearch); http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerSSLConfigCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerSSLConfigCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerSSLConfigCheck.java index 02f6559..6ee5a97 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerSSLConfigCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerSSLConfigCheck.java @@ -18,16 +18,16 @@ package org.apache.ambari.server.checks; -import java.util.Arrays; +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.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.Sets; import com.google.inject.Singleton; @@ -55,8 +55,8 @@ public class RangerSSLConfigCheck extends AbstractCheckDescriptor { * {@inheritDoc} */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList(serviceName), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet(serviceName); } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java index 0dbb1b5..e83b118 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java @@ -24,7 +24,6 @@ import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ServiceComponentNotFoundException; -import org.apache.ambari.server.ServiceNotFoundException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.orm.dao.HostComponentStateDAO; import org.apache.ambari.server.orm.entities.HostComponentStateEntity; @@ -34,6 +33,7 @@ import org.apache.ambari.server.state.ServiceComponent; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; +import com.google.common.collect.Sets; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -54,18 +54,21 @@ public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor { super(CheckDescription.SECONDARY_NAMENODE_MUST_BE_DELETED); } + /** + * {@inheritDoc} + */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - if (!super.isApplicable(request, Arrays.asList(HDFS_SERVICE_NAME), true)) { - return false; - } - - PrereqCheckStatus ha = request.getResult(CheckDescription.SERVICES_NAMENODE_HA); - if (null != ha && ha == PrereqCheckStatus.FAIL) { - return false; - } + public Set<String> getApplicableServices() { + return Sets.newHashSet(HDFS_SERVICE_NAME); + } - return true; + /** + * {@inheritDoc} + */ + @Override + public List<CheckQualification> getQualifications() { + return Arrays.<CheckQualification> asList( + new PriorCheckQualification(CheckDescription.SERVICES_NAMENODE_HA)); } // TODO AMBARI-12698, there are 2 ways to filter the prechecks. @@ -75,7 +78,7 @@ public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor { // given the type of upgrade. The PrereqCheckRequest object has a field for the type of upgrade. @Override public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { - Set<String> hosts = new HashSet<String>(); + Set<String> hosts = new HashSet<>(); final String SECONDARY_NAMENODE = "SECONDARY_NAMENODE"; final String clusterName = request.getClusterName(); http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java index 08f4fd8..aa7b6db 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,7 +17,7 @@ */ package org.apache.ambari.server.checks; -import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; @@ -49,10 +49,11 @@ public class ServicesMaintenanceModeCheck extends AbstractCheckDescriptor { @Override public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { - final String clusterName = request.getClusterName(); - final Cluster cluster = clustersProvider.get().getCluster(clusterName); - for (Map.Entry<String, Service> serviceEntry : cluster.getServices().entrySet()) { - final Service service = serviceEntry.getValue(); + final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName()); + Set<String> servicesInUpgrade = getServicesInUpgrade(request); + + for (String serviceName : servicesInUpgrade) { + final Service service = cluster.getService(serviceName); if (!service.isClientOnlyService() && service.getMaintenanceState() == MaintenanceState.ON) { prerequisiteCheck.getFailedOn().add(service.getName()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java index 3970e9e..ab7e798 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java @@ -21,9 +21,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; -import org.apache.ambari.server.ServiceNotFoundException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Config; @@ -33,6 +33,7 @@ import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.apache.ambari.server.state.stack.UpgradePack.PrerequisiteCheckConfig; import org.apache.commons.lang.StringUtils; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -48,20 +49,21 @@ public class ServicesMapReduceDistributedCacheCheck extends AbstractCheckDescrip static final String DFS_PROTOCOLS_REGEX_PROPERTY_NAME = "dfs-protocols-regex"; static final String DFS_PROTOCOLS_REGEX_DEFAULT = "^([^:]*dfs|wasb|ecs):.*"; + /** + * {@inheritDoc} + */ @Override - public boolean isApplicable(PrereqCheckRequest request) - throws AmbariException { - - if (!super.isApplicable(request, Arrays.asList("YARN"), true)) { - return false; - } - - PrereqCheckStatus ha = request.getResult(CheckDescription.SERVICES_NAMENODE_HA); - if (null != ha && ha == PrereqCheckStatus.FAIL) { - return false; - } + public Set<String> getApplicableServices() { + return Sets.newHashSet("YARN"); + } - return true; + /** + * {@inheritDoc} + */ + @Override + public List<CheckQualification> getQualifications() { + return Arrays.<CheckQualification> asList( + new PriorCheckQualification(CheckDescription.SERVICES_NAMENODE_HA)); } /** @@ -97,7 +99,7 @@ public class ServicesMapReduceDistributedCacheCheck extends AbstractCheckDescrip final String frameworkPath = mrConfig.getProperties().get("mapreduce.application.framework.path"); final String defaultFS = coreSiteConfig.getProperties().get("fs.defaultFS"); - List<String> errorMessages = new ArrayList<String>(); + List<String> errorMessages = new ArrayList<>(); if (applicationClasspath == null || applicationClasspath.isEmpty()) { errorMessages.add(getFailReason(KEY_APP_CLASSPATH, prerequisiteCheck, request)); } http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java index 38a6702..ecd88ed 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java @@ -17,11 +17,10 @@ */ package org.apache.ambari.server.checks; -import java.util.Arrays; import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; -import org.apache.ambari.server.ServiceNotFoundException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Config; @@ -29,6 +28,7 @@ import org.apache.ambari.server.state.DesiredConfig; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -45,11 +45,15 @@ public class ServicesNamenodeHighAvailabilityCheck extends AbstractCheckDescript super(CheckDescription.SERVICES_NAMENODE_HA); } + /** + * {@inheritDoc} + */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList("HDFS"), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet("HDFS"); } + @Override public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException { final String clusterName = request.getClusterName(); http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java index 35be754..ce1b4bf 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java @@ -17,6 +17,10 @@ */ package org.apache.ambari.server.checks; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.state.Cluster; @@ -24,11 +28,9 @@ import org.apache.ambari.server.state.Config; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; +import com.google.common.collect.Sets; import com.google.inject.Singleton; -import java.util.Arrays; -import java.util.Map; - /** * Checks that namenode high availability is enabled. */ @@ -43,18 +45,21 @@ public class ServicesNamenodeTruncateCheck extends AbstractCheckDescriptor { super(CheckDescription.SERVICES_NAMENODE_TRUNCATE); } + /** + * {@inheritDoc} + */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - if (!super.isApplicable(request, Arrays.asList("HDFS"), true)) { - return false; - } - - PrereqCheckStatus ha = request.getResult(CheckDescription.SERVICES_NAMENODE_HA); - if (null != ha && ha == PrereqCheckStatus.FAIL) { - return false; - } + public Set<String> getApplicableServices() { + return Sets.newHashSet("HDFS"); + } - return true; + /** + * {@inheritDoc} + */ + @Override + public List<CheckQualification> getQualifications() { + return Arrays.<CheckQualification> asList( + new PriorCheckQualification(CheckDescription.SERVICES_NAMENODE_HA)); } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java index 5dadcdd..cb0c9ae 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java @@ -21,9 +21,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; -import org.apache.ambari.server.ServiceNotFoundException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Config; @@ -33,6 +33,7 @@ import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.apache.ambari.server.state.stack.UpgradePack.PrerequisiteCheckConfig; import org.apache.commons.lang.StringUtils; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -50,18 +51,21 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor { static final String DFS_PROTOCOLS_REGEX_PROPERTY_NAME = "dfs-protocols-regex"; static final String DFS_PROTOCOLS_REGEX_DEFAULT = "^([^:]*dfs|wasb|ecs):.*"; + /** + * {@inheritDoc} + */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - if (!super.isApplicable(request, Arrays.asList("TEZ"), true)) { - return false; - } - - PrereqCheckStatus ha = request.getResult(CheckDescription.SERVICES_NAMENODE_HA); - if (null != ha && ha == PrereqCheckStatus.FAIL) { - return false; - } + public Set<String> getApplicableServices() { + return Sets.newHashSet("TEZ"); + } - return true; + /** + * {@inheritDoc} + */ + @Override + public List<CheckQualification> getQualifications() { + return Arrays.<CheckQualification> asList( + new PriorCheckQualification(CheckDescription.SERVICES_NAMENODE_HA)); } /** @@ -97,7 +101,7 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor { final String useHadoopLibs = tezConfig.getProperties().get("tez.use.cluster.hadoop-libs"); final String defaultFS = coreSiteConfig.getProperties().get("fs.defaultFS"); - List<String> errorMessages = new ArrayList<String>(); + List<String> errorMessages = new ArrayList<>(); if (libUris == null || libUris.isEmpty()) { errorMessages.add(getFailReason(KEY_LIB_URI_MISSING, prerequisiteCheck, request)); } http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java index d838f6a..d2f4950 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 @@ -88,13 +88,12 @@ public class ServicesUpCheck extends AbstractCheckDescriptor { final String clusterName = request.getClusterName(); final Cluster cluster = clustersProvider.get().getCluster(clusterName); - List<String> errorMessages = new ArrayList<String>(); - Set<String> failedServiceNames = new HashSet<String>(); + List<String> errorMessages = new ArrayList<>(); + Set<String> failedServiceNames = new HashSet<>(); - StackId stackId = cluster.getCurrentStackVersion(); - - for (Map.Entry<String, Service> serviceEntry : cluster.getServices().entrySet()) { - final Service service = serviceEntry.getValue(); + Set<String> servicesInUpgrade = getServicesInUpgrade(request); + for (String serviceName : servicesInUpgrade) { + final Service service = cluster.getService(serviceName); // Ignore services like Tez that are clientOnly. if (service.isClientOnlyService()) { @@ -132,6 +131,7 @@ public class ServicesUpCheck extends AbstractCheckDescriptor { // non-master, "true" slaves with cardinality 1+ boolean checkThreshold = false; if (!serviceComponent.isMasterComponent()) { + StackId stackId = service.getDesiredStackId(); ComponentInfo componentInfo = ambariMetaInfo.get().getComponent(stackId.getStackName(), stackId.getStackVersion(), serviceComponent.getServiceName(), serviceComponent.getName()); @@ -182,7 +182,7 @@ public class ServicesUpCheck extends AbstractCheckDescriptor { } if (!errorMessages.isEmpty()) { - prerequisiteCheck.setFailedOn(new LinkedHashSet<String>(failedServiceNames)); + prerequisiteCheck.setFailedOn(new LinkedHashSet<>(failedServiceNames)); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); prerequisiteCheck.setFailReason( "The following Service Components should be in a started state. Please invoke a service Stop and full Start and try again. " http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java index 77605c1..0b102a9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java @@ -17,18 +17,17 @@ */ package org.apache.ambari.server.checks; +import java.util.Set; + import org.apache.ambari.server.AmbariException; -import org.apache.ambari.server.ServiceNotFoundException; 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.commons.lang.BooleanUtils; +import com.google.common.collect.Sets; import com.google.inject.Singleton; -import java.util.Arrays; - /** * Checks that YARN has work-preserving restart enabled. */ @@ -47,8 +46,8 @@ public class ServicesYarnWorkPreservingCheck extends AbstractCheckDescriptor { * {@inheritDoc} */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList("YARN"), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet("YARN"); } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/StormShutdownWarning.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/StormShutdownWarning.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/StormShutdownWarning.java index b5435f1..067cd80 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/StormShutdownWarning.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/StormShutdownWarning.java @@ -17,7 +17,7 @@ */ package org.apache.ambari.server.checks; -import java.util.Arrays; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; @@ -25,6 +25,7 @@ import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.apache.ambari.server.state.stack.upgrade.UpgradeType; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -50,14 +51,10 @@ public class StormShutdownWarning extends AbstractCheckDescriptor { /** * {@inheritDoc} - * <p/> - * This check is only applicable if Storm is installed and the upgrade type is - * {@link UpgradeType#ROLLING}. */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - boolean isApplicable = super.isApplicable(request, Arrays.asList("STORM"), true); - return isApplicable && request.getUpgradeType() == UpgradeType.ROLLING; + public Set<String> getApplicableServices() { + return Sets.newHashSet("STORM"); } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/1f95e149/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java index 9dd4877..e0d3df7 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java @@ -17,17 +17,15 @@ */ package org.apache.ambari.server.checks; -import java.util.Arrays; -import java.util.Map; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; -import org.apache.ambari.server.state.Cluster; -import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.stack.PrereqCheckStatus; import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.apache.commons.lang.BooleanUtils; +import com.google.common.collect.Sets; import com.google.inject.Singleton; /** @@ -49,10 +47,9 @@ public class YarnRMHighAvailabilityCheck extends AbstractCheckDescriptor { * {@inheritDoc} */ @Override - public boolean isApplicable(PrereqCheckRequest request) throws AmbariException { - return super.isApplicable(request, Arrays.asList("YARN"), true); + public Set<String> getApplicableServices() { + return Sets.newHashSet("YARN"); } - /** * {@inheritDoc} */