AMBARI-9780. RU: upgrade checks need changes (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c9e901bc Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c9e901bc Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c9e901bc Branch: refs/heads/branch-2.0.0 Commit: c9e901bc27cc7711aa0cb329f82752c561be32fa Parents: 9b86ebd Author: Nate Cole <[email protected]> Authored: Wed Feb 25 10:12:22 2015 -0500 Committer: Nate Cole <[email protected]> Committed: Wed Feb 25 10:12:22 2015 -0500 ---------------------------------------------------------------------- .../server/checks/AbstractCheckDescriptor.java | 98 ++++++++++-- .../ambari/server/checks/CheckDescription.java | 157 +++++++++++++++++++ .../server/checks/HostsHeartbeatCheck.java | 9 +- .../checks/HostsMasterMaintenanceCheck.java | 26 +-- .../checks/HostsRepositoryVersionCheck.java | 7 +- .../checks/SecondaryNamenodeDeletedCheck.java | 20 ++- .../checks/ServicesDecommissionCheck.java | 17 +- .../checks/ServicesMaintenanceModeCheck.java | 11 +- .../ServicesMapReduceDistributedCacheCheck.java | 30 ++-- .../ServicesNamenodeHighAvailabilityCheck.java | 9 +- .../ServicesTezDistributedCacheCheck.java | 32 ++-- .../ambari/server/checks/ServicesUpCheck.java | 9 +- .../checks/ServicesYarnWorkPreservingCheck.java | 12 +- .../server/controller/PrereqCheckRequest.java | 39 ++++- .../PreUpgradeCheckResourceProvider.java | 14 +- .../apache/ambari/server/state/CheckHelper.java | 32 +++- .../server/state/stack/PrerequisiteCheck.java | 42 +++-- .../checks/AbstractCheckDescriptorTest.java | 28 ++-- .../server/checks/HostsHeartbeatCheckTest.java | 4 +- .../checks/HostsMasterMaintenanceCheckTest.java | 6 +- .../checks/HostsRepositoryVersionCheckTest.java | 4 +- .../SecondaryNamenodeDeletedCheckTest.java | 24 ++- .../checks/ServicesDecommissionCheckTest.java | 12 +- .../ServicesMaintenanceModeCheckTest.java | 13 +- ...vicesMapReduceDistributedCacheCheckTest.java | 23 ++- ...rvicesNamenodeHighAvailabilityCheckTest.java | 4 +- .../ServicesTezDistributedCacheCheckTest.java | 29 ++-- .../server/checks/ServicesUpCheckTest.java | 14 +- .../ServicesYarnWorkPreservingCheckTest.java | 4 +- .../ambari/server/state/CheckHelperTest.java | 3 + 30 files changed, 547 insertions(+), 185 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 c43d843..d23124b 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,18 +17,24 @@ */ package org.apache.ambari.server.checks; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.api.services.AmbariMetaInfo; 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.state.Cluster; import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.ServiceInfo; import org.apache.ambari.server.state.stack.PrereqCheckType; import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.inject.Inject; import com.google.inject.Provider; @@ -38,9 +44,7 @@ import com.google.inject.Provider; */ public abstract class AbstractCheckDescriptor { - public final String id; - public final String description; - public final PrereqCheckType type; + private static final Logger LOG = LoggerFactory.getLogger(AbstractCheckDescriptor.class); @Inject Provider<Clusters> clustersProvider; @@ -57,17 +61,15 @@ public abstract class AbstractCheckDescriptor { @Inject Provider<AmbariMetaInfo> ambariMetaInfo; + private CheckDescription m_description; + /** * Constructor. * - * @param id unique identifier - * @param type type * @param description description */ - public AbstractCheckDescriptor(String id, PrereqCheckType type, String description) { - this.id = id; - this.type = type; - this.description = description; + protected AbstractCheckDescriptor(CheckDescription description) { + m_description = description; } /** @@ -92,6 +94,77 @@ public abstract class AbstractCheckDescriptor { */ public abstract void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException; + + public CheckDescription getDescription() { + return m_description; + } + + public PrereqCheckType getType() { + return m_description.getType(); + } + + /** + * Gets the default fail reason + * @param prerequisiteCheck the check being performed + * @param request the request + * @return the failure string + */ + protected String getFailReason(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) { + return getFailReason("default", prerequisiteCheck, request); + } + + /** + * Gets the fail reason + * @param key the failure text key + * @param prerequisiteCheck the check being performed + * @param request the request + * @return the failure string + */ + protected String getFailReason(String key, + PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) { + String fail = m_description.getFail(key); + + if (-1 != fail.indexOf("{{version}}") && null != request.getRepositoryVersion()) { + fail = fail.replace("{{version}}", request.getRepositoryVersion()); + } + + if (-1 != fail.indexOf("{{fails}}")) { + List<String> names = prerequisiteCheck.getFailedOn(); + + if (getDescription().getType() == PrereqCheckType.SERVICE) { + 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()); + + List<String> displays = new ArrayList<String>(); + 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"); + } + + fail = fail.replace("{{fails}}", formatEntityList(names)); + + } + + + } + + return fail; + } + + /** * Formats lists of given entities to human readable form: * [entity1] -> {entity1} {noun} @@ -110,12 +183,7 @@ public abstract class AbstractCheckDescriptor { if (entities.size() > 1) { formatted.replace(formatted.lastIndexOf(","), formatted.lastIndexOf(",") + 1, " and"); } - if (type != null) { - formatted.append(" ").append(type.name().toLowerCase()); - if (entities.size() > 1) { - formatted.append("s"); - } - } + return formatted.toString(); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 new file mode 100644 index 0000000..5b67565 --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java @@ -0,0 +1,157 @@ +/** + * 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.HashMap; +import java.util.Map; + +import org.apache.ambari.server.state.stack.PrereqCheckType; + +/** + * Enum that wraps the various type, text and failure messages for the checks + * done for Rolling Upgrades. + */ +public enum CheckDescription { + + HOSTS_HEARTBEAT(PrereqCheckType.HOST, + "All hosts must be heartbeating with the Ambari Server unless they are in Maintenance Mode", + new HashMap<String, String>() {{ + put("default", + "The following hosts must be heartbeating to the Ambari Server: {{fails}}."); + }}), + + HOSTS_MASTER_MAINTENANCE(PrereqCheckType.HOST, + "Hosts in Maintenance Mode must not have any master components", + new HashMap<String, String>() {{ + put("default", + "The following hosts must not be in in Maintenance Mode since they host Master components: {{fails}}."); + put("no_upgrade_name", + "Could not find suitable upgrade pack for %s %s to version {{version}}."); + put("no_upgrade_pack", + "Could not find upgrade pack named %s."); + }}), + + HOSTS_REPOSITORY_VERSION(PrereqCheckType.HOST, + "All hosts should have target version installed", + new HashMap<String, String>() {{ + put("default", + "The following hosts must have version {{version}} installed: {{fails}}."); + put("no_repo_version", + "Repository version {{version}} does not exist."); + }}), + + SECONDARY_NAMENODE_MUST_BE_DELETED(PrereqCheckType.SERVICE, + "The SNameNode component must be deleted from all hosts", + new HashMap<String, String>() {{ + put("default", "The SNameNode component must be deleted from host: {{fails}}."); + }}), + + SERVICES_DECOMMISSION(PrereqCheckType.SERVICE, + "Services should not have components in decommission state", + new HashMap<String, String>() {{ + put("default", + "The following Services must not have components in decommissioned or decommissioning state: {{fails}}."); + }}), + + SERVICES_MAINTENANCE_MODE(PrereqCheckType.SERVICE, + "No services can be in Maintenance Mode", + new HashMap<String, String>() {{ + put("default", + "The following Services must not be in Maintenance Mode: {{fails}}."); + }}), + + SERVICES_MR_DISTRIBUTED_CACHE(PrereqCheckType.SERVICE, + "MapReduce should reference Hadoop libraries from the distributed cache in HDFS", + new HashMap<String, String>() {{ + put("app_classpath", + "The mapred-site.xml property mapreduce.application.classpath should be set."); + put("framework_path", + "The mapred-site.xml property mapreduce.application.framework.path should be set."); + put("not_dfs", + "The mapred-site.xml property mapreduce.application.framework.path or the core-site.xml property fs.defaultFS should point to *dfs:/ url."); + }}), + + SERVICES_NAMENODE_HA(PrereqCheckType.SERVICE, + "NameNode High Availability must be enabled", + new HashMap<String, String>() {{ + put("default", + "NameNode High Availability is not enabled. Verify that dfs.nameservices property is present in hdfs-site.xml."); + }}), + + + SERVICES_TEZ_DISTRIBUTED_CACHE(PrereqCheckType.SERVICE, + "Tez should reference Hadoop libraries from the distributed cache in HDFS", + new HashMap<String, String>() {{ + put("tez_lib_uri_missing", + "The tez-site.xml property tez.lib.uris should be set."); + put("tez_use_hadoop_libs", + "The tez-site.xml property tez.use.cluster-hadoop-libs should be set."); + put("lib_not_dfs", + "The tez-site.xml property tez.lib.uris or the core-site.xml property fs.defaultFS should point to *dfs:/ url."); + put("lib_not_targz", + "The tez-site.xml property tez.lib.uris should point to tar.gz file."); + put("tez_use_hadoop_libs_false", + "The tez-site.xml property tez.use.cluster.hadoop-libs should be set to false."); + }}), + + SERVICES_UP(PrereqCheckType.SERVICE, + "All services must be started", + new HashMap<String, String>() {{ + put("default", + "The following Services must be started: {{fails}}"); + }}), + + SERVICES_YARN_WP(PrereqCheckType.SERVICE, + "YARN work preserving restart should be enabled", + new HashMap<String, String>() {{ + put("default", + "YARN should have work preserving restart enabled. The yarn-site.xml property yarn.resourcemanager.work-preserving-recovery.enabled property should be set to true."); + }}); + + private PrereqCheckType m_type; + private String m_description; + private Map<String, String> m_fails; + private CheckDescription(PrereqCheckType type, String description, + Map<String, String> fails) { + m_type = type; + m_description = description; + m_fails = fails; + } + + /** + * @return the type of check + */ + public PrereqCheckType getType() { + return m_type; + } + + /** + * @return the text associated with the description + */ + public String getText() { + return m_description; + } + + /** + * @param key the failure text key + * @return the fail text template. Never {@code null} + */ + public String getFail(String key) { + return m_fails.containsKey(key) ? m_fails.get(key) : ""; + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java index 9e76928..cf9e4ae 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 @@ -17,6 +17,8 @@ */ package org.apache.ambari.server.checks; +import java.util.Map; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.state.Cluster; @@ -25,9 +27,6 @@ import org.apache.ambari.server.state.HostHealthStatus; 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.PrereqCheckType; - -import java.util.Map; /** * Checks that all hosts are either in maintenance mode or heartbeating with the server. @@ -38,7 +37,7 @@ public class HostsHeartbeatCheck extends AbstractCheckDescriptor { * Constructor. */ public HostsHeartbeatCheck() { - super("HOSTS_HEARTBEAT", PrereqCheckType.HOST, "All hosts must be heartbeating with the server unless they are in Maintenance Mode"); + super(CheckDescription.HOSTS_HEARTBEAT); } @Override @@ -54,7 +53,7 @@ public class HostsHeartbeatCheck extends AbstractCheckDescriptor { } if (!prerequisiteCheck.getFailedOn().isEmpty()) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must be heartbeating with the server"); + prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 7bdce47..1f97dd9 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 @@ -17,19 +17,23 @@ */ package org.apache.ambari.server.checks; +import java.util.HashSet; +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.*; +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.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.PrereqCheckType; import org.apache.ambari.server.state.stack.UpgradePack; import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - /** * Checks that all hosts in maintenance state do not have master components. */ @@ -39,7 +43,7 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor { * Constructor. */ public HostsMasterMaintenanceCheck() { - super("HOSTS_MASTER_MAINTENANCE", PrereqCheckType.HOST, "Hosts in Maintenance Mode must not have any master components"); + super(CheckDescription.HOSTS_MASTER_MAINTENANCE); } @Override @@ -56,13 +60,15 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor { final String upgradePackName = repositoryVersionHelper.get().getUpgradePackageName(stackId.getStackName(), stackId.getStackVersion(), request.getRepositoryVersion()); if (upgradePackName == null) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason("Could not find suitable upgrade pack for " + stackId.getStackName() + " " + stackId.getStackVersion() + " to version " + request.getRepositoryVersion()); + String fail = getFailReason("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); - prerequisiteCheck.setFailReason("Could not find upgrade pack named " + upgradePackName); + String fail = getFailReason("no_upgrade_pack", prerequisiteCheck, request); + prerequisiteCheck.setFailReason(String.format(fail, upgradePackName)); return; } final Set<String> componentsFromUpgradePack = new HashSet<String>(); @@ -85,7 +91,7 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor { } if (!prerequisiteCheck.getFailedOn().isEmpty()) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must not be in in Maintenance Mode as they have master components installed"); + prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 f9bcdd9..cc8335e 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 @@ -29,7 +29,6 @@ import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.RepositoryVersionState; import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.stack.PrereqCheckStatus; -import org.apache.ambari.server.state.stack.PrereqCheckType; import org.apache.ambari.server.state.stack.PrerequisiteCheck; /** @@ -41,7 +40,7 @@ public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor { * Constructor. */ public HostsRepositoryVersionCheck() { - super("HOSTS_REPOSITORY_VERSION", PrereqCheckType.HOST, "Hosts should have the new repository version installed"); + super(CheckDescription.HOSTS_REPOSITORY_VERSION); } @Override @@ -61,7 +60,7 @@ public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor { final RepositoryVersionEntity repositoryVersion = repositoryVersionDaoProvider.get().findByStackAndVersion(stackId.getStackId(), request.getRepositoryVersion()); if (repositoryVersion == null) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason("Repository version " + request.getRepositoryVersion() + " doesn't exist"); + prerequisiteCheck.setFailReason(getFailReason("no_repo_version",prerequisiteCheck, request)); prerequisiteCheck.getFailedOn().addAll(clusterHosts.keySet()); return; } @@ -73,7 +72,7 @@ public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor { } if (!prerequisiteCheck.getFailedOn().isEmpty()) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must have repository version " + request.getRepositoryVersion() + " installed"); + prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 6ba28f1..2a7b9f3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java @@ -17,7 +17,9 @@ */ package org.apache.ambari.server.checks; -import com.google.inject.Inject; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ServiceComponentNotFoundException; @@ -29,13 +31,9 @@ import org.apache.ambari.server.stack.MasterHostResolver; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.ServiceComponent; 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.commons.lang.StringUtils; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import com.google.inject.Inject; /** * Checks that the Secondary NameNode is not present on any of the hosts. @@ -47,7 +45,7 @@ public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor { * Constructor. */ public SecondaryNamenodeDeletedCheck() { - super("SECONDARY_NAMENODE_MUST_BE_DELETED", PrereqCheckType.SERVICE, "The SECONDARY_NAMENODE component must be deleted from all hosts"); + super(CheckDescription.SECONDARY_NAMENODE_MUST_BE_DELETED); } @Override @@ -58,6 +56,12 @@ public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor { } catch (ServiceNotFoundException ex) { return false; } + + PrereqCheckStatus ha = request.getResult(CheckDescription.SERVICES_NAMENODE_HA); + if (null != ha && ha == PrereqCheckStatus.FAIL) { + return false; + } + return true; } @@ -91,7 +95,7 @@ public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor { if (!hosts.isEmpty()) { prerequisiteCheck.getFailedOn().add(SECONDARY_NAMENODE); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason("The SECONDARY_NAMENODE component must be deleted from host(s): " + StringUtils.join(hosts, ", ") + ". Please delete it from the Host Components."); + prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java index 6ac0326..7497c2f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesDecommissionCheck.java @@ -17,14 +17,17 @@ */ package org.apache.ambari.server.checks; +import java.util.Map; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; -import org.apache.ambari.server.state.*; -import org.apache.ambari.server.state.stack.PrereqCheckType; -import org.apache.ambari.server.state.stack.PrerequisiteCheck; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.HostComponentAdminState; +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 java.util.Map; +import org.apache.ambari.server.state.stack.PrerequisiteCheck; /** * Checks that there are no services in decommission state. @@ -35,7 +38,7 @@ public class ServicesDecommissionCheck extends AbstractCheckDescriptor { * Constructor. */ public ServicesDecommissionCheck() { - super("SERVICES_DECOMMISSION", PrereqCheckType.SERVICE, "Services should not be in Decommission state"); + super(CheckDescription.SERVICES_DECOMMISSION); } @Override @@ -56,7 +59,7 @@ public class ServicesDecommissionCheck extends AbstractCheckDescriptor { } if (!prerequisiteCheck.getFailedOn().isEmpty()) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must not be in decommissioned or decommissioning state"); + prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 5043d31..0ae5c46 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,17 +17,16 @@ */ package org.apache.ambari.server.checks; +import java.util.Map; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.State; -import org.apache.ambari.server.state.stack.PrerequisiteCheck; import org.apache.ambari.server.state.stack.PrereqCheckStatus; -import org.apache.ambari.server.state.stack.PrereqCheckType; - -import java.util.Map; +import org.apache.ambari.server.state.stack.PrerequisiteCheck; /** * Checks that services are in the maintenance mode. @@ -38,7 +37,7 @@ public class ServicesMaintenanceModeCheck extends AbstractCheckDescriptor { * Constructor. */ public ServicesMaintenanceModeCheck() { - super("SERVICES_MAINTENANCE_MODE", PrereqCheckType.SERVICE, "No service can be in maintenance mode"); + super(CheckDescription.SERVICES_MAINTENANCE_MODE); } @Override @@ -53,7 +52,7 @@ public class ServicesMaintenanceModeCheck extends AbstractCheckDescriptor { } if (!prerequisiteCheck.getFailedOn().isEmpty()) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must not be in Maintenance Mode"); + prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 c388a81..59e0a95 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 @@ -17,6 +17,10 @@ */ package org.apache.ambari.server.checks; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ServiceNotFoundException; import org.apache.ambari.server.controller.PrereqCheckRequest; @@ -25,13 +29,8 @@ 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.PrereqCheckType; import org.apache.commons.lang.StringUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - /** * Checks that MR jobs reference hadoop libraries from the distributed cache. */ @@ -46,6 +45,12 @@ public class ServicesMapReduceDistributedCacheCheck extends AbstractCheckDescrip } catch (ServiceNotFoundException ex) { return false; } + + PrereqCheckStatus ha = request.getResult(CheckDescription.SERVICES_NAMENODE_HA); + if (null != ha && ha == PrereqCheckStatus.FAIL) { + return false; + } + return true; } @@ -53,7 +58,7 @@ public class ServicesMapReduceDistributedCacheCheck extends AbstractCheckDescrip * Constructor. */ public ServicesMapReduceDistributedCacheCheck() { - super("SERVICES_MR_DISTRIBUTED_CACHE", PrereqCheckType.SERVICE, "MapReduce should reference hadoop libraries from the distributed cache"); + super(CheckDescription.SERVICES_MR_DISTRIBUTED_CACHE); } @Override @@ -63,6 +68,7 @@ public class ServicesMapReduceDistributedCacheCheck extends AbstractCheckDescrip final String mrConfigType = "mapred-site"; final String coreSiteConfigType = "core-site"; final Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs(); + final DesiredConfig mrDesiredConfig = desiredConfigs.get(mrConfigType); final DesiredConfig coreSiteDesiredConfig = desiredConfigs.get(coreSiteConfigType); final Config mrConfig = cluster.getConfig(mrConfigType, mrDesiredConfig.getTag()); @@ -73,24 +79,24 @@ public class ServicesMapReduceDistributedCacheCheck extends AbstractCheckDescrip List<String> errorMessages = new ArrayList<String>(); if (applicationClasspath == null || applicationClasspath.isEmpty()) { - errorMessages.add("Property mapreduce.application.classpath is missing from mapred-site, please add it."); + errorMessages.add(getFailReason("app_classpath", prerequisiteCheck, request)); } if (frameworkPath == null || frameworkPath.isEmpty()) { - errorMessages.add("Property mapreduce.application.framework.path is missing from mapred-site, please add it."); + errorMessages.add(getFailReason("framework_path", prerequisiteCheck, request)); } if (!errorMessages.isEmpty()) { - prerequisiteCheck.getFailedOn().add("MAP_REDUCE"); + prerequisiteCheck.getFailedOn().add("MAPREDUCE2"); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); prerequisiteCheck.setFailReason(StringUtils.join(errorMessages, " ")); return; } if (!frameworkPath.matches("^[^:]*dfs:.*") && (defaultFS == null || !defaultFS.matches("^[^:]*dfs:.*"))) { - prerequisiteCheck.getFailedOn().add("MAP_REDUCE"); + prerequisiteCheck.getFailedOn().add("MAPREDUCE2"); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason("MapReduce should reference hadoop libraries from the distributed cache. Please make sure that either mapred-site's mapreduce.application.framework.path or core-site's fs.defaultFS begins with *dfs:"); + prerequisiteCheck.setFailReason(getFailReason("not_dfs", prerequisiteCheck, request)); } } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 d9f8704..56ce1c1 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java @@ -17,6 +17,8 @@ */ package org.apache.ambari.server.checks; +import java.util.Map; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ServiceNotFoundException; import org.apache.ambari.server.controller.PrereqCheckRequest; @@ -24,11 +26,8 @@ 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.PrereqCheckType; import org.apache.ambari.server.state.stack.PrerequisiteCheck; -import java.util.Map; - /** * Checks that namenode high availability is enabled. */ @@ -38,7 +37,7 @@ public class ServicesNamenodeHighAvailabilityCheck extends AbstractCheckDescript * Constructor. */ public ServicesNamenodeHighAvailabilityCheck() { - super("SERVICES_NAMENODE_HA", PrereqCheckType.SERVICE, "Namenode high availability should be enabled"); + super(CheckDescription.SERVICES_NAMENODE_HA); } @Override @@ -63,7 +62,7 @@ public class ServicesNamenodeHighAvailabilityCheck extends AbstractCheckDescript if (!config.getProperties().containsKey("dfs.nameservices")) { prerequisiteCheck.getFailedOn().add("HDFS"); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason("Namenode high availability is disabled. Verify that dfs.nameservices property is present in hdfs-site.xml"); + prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 8859370..6686a95 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 @@ -17,6 +17,10 @@ */ package org.apache.ambari.server.checks; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ServiceNotFoundException; import org.apache.ambari.server.controller.PrereqCheckRequest; @@ -25,13 +29,8 @@ 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.PrereqCheckType; import org.apache.commons.lang.StringUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - /** * Checks that Tez jobs reference hadoop libraries from the distributed cache. */ @@ -46,6 +45,12 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor { } catch (ServiceNotFoundException ex) { return false; } + + PrereqCheckStatus ha = request.getResult(CheckDescription.SERVICES_NAMENODE_HA); + if (null != ha && ha == PrereqCheckStatus.FAIL) { + return false; + } + return true; } @@ -53,7 +58,7 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor { * Constructor. */ public ServicesTezDistributedCacheCheck() { - super("SERVICES_TEZ_DISTRIBUTED_CACHE", PrereqCheckType.SERVICE, "TEZ should reference hadoop libraries from the distributed cache"); + super(CheckDescription.SERVICES_TEZ_DISTRIBUTED_CACHE); } @Override @@ -63,6 +68,7 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor { final String tezConfigType = "tez-site"; final String coreSiteConfigType = "core-site"; final Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs(); + final DesiredConfig tezDesiredConfig = desiredConfigs.get(tezConfigType); final Config tezConfig = cluster.getConfig(tezConfigType, tezDesiredConfig.getTag()); final DesiredConfig coreSiteDesiredConfig = desiredConfigs.get(coreSiteConfigType); @@ -73,11 +79,11 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor { List<String> errorMessages = new ArrayList<String>(); if (libUris == null || libUris.isEmpty()) { - errorMessages.add("Property tez.lib.uris is missing from tez-site, please add it."); + errorMessages.add(getFailReason("tez_lib_uri_missing", prerequisiteCheck, request)); } if (useHadoopLibs == null || useHadoopLibs.isEmpty()) { - errorMessages.add("Property tez.use.cluster.hadoop-libs is missing from tez-site, please add it."); + errorMessages.add(getFailReason("tez_use_hadoop_libs", prerequisiteCheck, request)); } if (!errorMessages.isEmpty()) { @@ -88,13 +94,15 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor { } if (!libUris.matches("^[^:]*dfs:.*") && (defaultFS == null || !defaultFS.matches("^[^:]*dfs:.*"))) { - errorMessages.add("Property tez.lib.uris in tez-site should use a distributed file system. Please make sure that either tez-site's tez.lib.uris or core-site's fs.defaultFS begins with *dfs:"); + errorMessages.add(getFailReason("lib_not_dfs", prerequisiteCheck, request)); } + if (!libUris.contains("tar.gz")) { - errorMessages.add("Property tez.lib.uris in tez-site should end in tar.gz"); + errorMessages.add(getFailReason("lib_not_targz", prerequisiteCheck, request)); } + if (Boolean.parseBoolean(useHadoopLibs)) { - errorMessages.add("Property tez.use.cluster.hadoop-libs in tez-site should be set to false"); + errorMessages.add(getFailReason("tez_use_hadoop_libs_false", prerequisiteCheck, request)); } if (!errorMessages.isEmpty()) { @@ -103,4 +111,4 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor { prerequisiteCheck.setFailReason(StringUtils.join(errorMessages, " ")); } } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 e2b7657..e0696fa 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 @@ -17,17 +17,16 @@ */ package org.apache.ambari.server.checks; +import java.util.Map; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.State; 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 java.util.Map; - /** * Checks that services are up. */ @@ -37,7 +36,7 @@ public class ServicesUpCheck extends AbstractCheckDescriptor { * Constructor. */ public ServicesUpCheck() { - super("SERVICES_UP", PrereqCheckType.SERVICE, "All services must be up"); + super(CheckDescription.SERVICES_UP); } @Override @@ -56,7 +55,7 @@ public class ServicesUpCheck extends AbstractCheckDescriptor { if (!prerequisiteCheck.getFailedOn().isEmpty()) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason(formatEntityList(prerequisiteCheck.getFailedOn()) + " must be STARTED"); + prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/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 3b06076..7879346 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,19 +17,18 @@ */ package org.apache.ambari.server.checks; +import java.util.Map; + 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; import org.apache.ambari.server.state.DesiredConfig; -import org.apache.ambari.server.state.stack.PrerequisiteCheck; 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.commons.lang.BooleanUtils; -import java.util.Map; - /** * Checks that YARN has work-preserving restart enabled. */ @@ -39,7 +38,7 @@ public class ServicesYarnWorkPreservingCheck extends AbstractCheckDescriptor { * Constructor. */ public ServicesYarnWorkPreservingCheck() { - super("SERVICES_YARN_WP", PrereqCheckType.SERVICE, "YARN work preserving restart should be enabled"); + super(CheckDescription.SERVICES_YARN_WP); } @Override @@ -65,8 +64,7 @@ public class ServicesYarnWorkPreservingCheck extends AbstractCheckDescriptor { !BooleanUtils.toBoolean(config.getProperties().get("yarn.resourcemanager.work-preserving-recovery.enabled"))) { prerequisiteCheck.getFailedOn().add("YARN"); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); - prerequisiteCheck.setFailReason("YARN doesn't have work preserving restart. Verify that yarn.resourcemanager.work-preserving-recovery.enabled property" - + " is present in yarn-site.xml and is set to true"); + prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request)); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java index 5f33914..b7b4858 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 @@ -17,27 +17,52 @@ */ package org.apache.ambari.server.controller; +import java.util.HashMap; +import java.util.Map; + +import org.apache.ambari.server.checks.CheckDescription; +import org.apache.ambari.server.state.stack.PrereqCheckStatus; + /** * Represents a prerequisite check request. */ public class PrereqCheckRequest { - private final String clusterName; - private String repositoryVersion; + private String m_clusterName; + private String m_repositoryVersion; + private Map<CheckDescription, PrereqCheckStatus> m_results = + new HashMap<CheckDescription, PrereqCheckStatus>(); - //TODO make repositoryVersionName also final as soon as UI will be changed to always provide it to API public PrereqCheckRequest(String clusterName) { - this.clusterName = clusterName; + m_clusterName = clusterName; } public String getClusterName() { - return clusterName; + return m_clusterName; } public String getRepositoryVersion() { - return repositoryVersion; + return m_repositoryVersion; } public void setRepositoryVersion(String repositoryVersion) { - this.repositoryVersion = repositoryVersion; + m_repositoryVersion = repositoryVersion; + } + + /** + * Sets the result of a check. + * @param description the description + * @param status the status result + */ + public void addResult(CheckDescription description, PrereqCheckStatus status) { + m_results.put(description, status); + } + + /** + * Gets the result of a check of the supplied description + * @param description the description + * @return the return value, or {@code null} if it has not been run + */ + public PrereqCheckStatus getResult(CheckDescription description) { + return m_results.get(description); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java index 2220b2b..ee8cefce 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 @@ -17,27 +17,26 @@ */ package org.apache.ambari.server.controller.internal; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; -import java.util.List; -import java.util.ArrayList; import org.apache.ambari.server.StaticallyInject; import org.apache.ambari.server.checks.AbstractCheckDescriptor; import org.apache.ambari.server.checks.HostsHeartbeatCheck; import org.apache.ambari.server.checks.HostsMasterMaintenanceCheck; import org.apache.ambari.server.checks.HostsRepositoryVersionCheck; +import org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck; import org.apache.ambari.server.checks.ServicesDecommissionCheck; -import org.apache.ambari.server.checks.ServicesMapReduceDistributedCacheCheck; import org.apache.ambari.server.checks.ServicesMaintenanceModeCheck; +import org.apache.ambari.server.checks.ServicesMapReduceDistributedCacheCheck; import org.apache.ambari.server.checks.ServicesNamenodeHighAvailabilityCheck; -import org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck; import org.apache.ambari.server.checks.ServicesTezDistributedCacheCheck; import org.apache.ambari.server.checks.ServicesUpCheck; import org.apache.ambari.server.checks.ServicesYarnWorkPreservingCheck; -import org.apache.ambari.server.state.CheckHelper; import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.controller.spi.NoSuchParentResourceException; @@ -49,6 +48,7 @@ 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.state.CheckHelper; import org.apache.ambari.server.state.stack.PrerequisiteCheck; import com.google.inject.Inject; @@ -94,7 +94,9 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider { private static ServicesTezDistributedCacheCheck servicesTezDistributedCacheCheck; /** - * List of the registered upgrade checks + * List of the registered upgrade checks. Make sure that if a check that + * depends on the result of another check comes earlier in the list. + * For example, MR2 and Tez distributed cache checks rely on NN-HA check passing. */ @SuppressWarnings("serial") private final List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<AbstractCheckDescriptor>() { http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/main/java/org/apache/ambari/server/state/CheckHelper.java ---------------------------------------------------------------------- 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 f4b0b52..abaf8e7 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 @@ -17,17 +17,18 @@ */ package org.apache.ambari.server.state; -import com.google.inject.Singleton; +import java.util.ArrayList; +import java.util.List; + import org.apache.ambari.server.ClusterNotFoundException; import org.apache.ambari.server.checks.AbstractCheckDescriptor; import org.apache.ambari.server.controller.PrereqCheckRequest; -import org.apache.ambari.server.state.stack.PrerequisiteCheck; 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 java.util.ArrayList; -import java.util.List; +import com.google.inject.Singleton; @Singleton public class CheckHelper { @@ -49,24 +50,41 @@ public class CheckHelper { final List<PrerequisiteCheck> prerequisiteCheckResults = new ArrayList<PrerequisiteCheck>(); for (AbstractCheckDescriptor checkDescriptor : checksRegistry) { final PrerequisiteCheck prerequisiteCheck = new PrerequisiteCheck( - checkDescriptor.id, checkDescriptor.description, - checkDescriptor.type, clusterName); + checkDescriptor.getDescription(), clusterName); try { if (checkDescriptor.isApplicable(request)) { checkDescriptor.perform(prerequisiteCheck, request); prerequisiteCheckResults.add(prerequisiteCheck); + + request.addResult(checkDescriptor.getDescription(), prerequisiteCheck.getStatus()); } } catch (ClusterNotFoundException ex) { prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); prerequisiteCheck.setFailReason("Cluster with name " + clusterName + " doesn't exists"); prerequisiteCheckResults.add(prerequisiteCheck); + + request.addResult(checkDescriptor.getDescription(), prerequisiteCheck.getStatus()); } catch (Exception ex) { - LOG.error("Check " + checkDescriptor.id + " failed", ex); + LOG.error("Check " + checkDescriptor.getDescription().name() + " failed", ex); prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL); prerequisiteCheck.setFailReason("Unexpected server error happened"); prerequisiteCheckResults.add(prerequisiteCheck); + + request.addResult(checkDescriptor.getDescription(), prerequisiteCheck.getStatus()); } + + + + + + + + + + } + + return prerequisiteCheckResults; } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/main/java/org/apache/ambari/server/state/stack/PrerequisiteCheck.java ---------------------------------------------------------------------- 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/PrerequisiteCheck.java index 4ed2fb3..a538dd9 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/PrerequisiteCheck.java @@ -20,63 +20,61 @@ package org.apache.ambari.server.state.stack; import java.util.ArrayList; import java.util.List; +import org.apache.ambari.server.checks.CheckDescription; + /** * Contains information about performed prerequisite check. * */ public class PrerequisiteCheck { - private final String id; - private final String description; - private final PrereqCheckType type; - private final String clusterName; - private PrereqCheckStatus status = PrereqCheckStatus.PASS; - private String failReason = ""; - private List<String> failedOn = new ArrayList<String>(); + private final CheckDescription m_description; + private final String m_clusterName; + private PrereqCheckStatus m_status = PrereqCheckStatus.PASS; + private String m_failReason = ""; + private List<String> m_failedOn = new ArrayList<String>(); - public PrerequisiteCheck(String id, String description, PrereqCheckType type, String clusterName) { - this.id = id; - this.description = description; - this.type = type; - this.clusterName = clusterName; + public PrerequisiteCheck(CheckDescription description, String clusterName) { + m_description = description; + m_clusterName = clusterName; } public String getId() { - return id; + return m_description.name(); } public String getDescription() { - return description; + return m_description.getText(); } public PrereqCheckStatus getStatus() { - return status; + return m_status; } public void setStatus(PrereqCheckStatus status) { - this.status = status; + m_status = status; } public String getFailReason() { - return failReason; + return m_failReason; } public void setFailReason(String failReason) { - this.failReason = failReason; + m_failReason = failReason; } public List<String> getFailedOn() { - return failedOn; + return m_failedOn; } public void setFailedOn(List<String> failedOn) { - this.failedOn = failedOn; + m_failedOn = failedOn; } public PrereqCheckType getType() { - return type; + return m_description.getType(); } public String getClusterName() { - return clusterName; + return m_clusterName; } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/AbstractCheckDescriptorTest.java ---------------------------------------------------------------------- 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/AbstractCheckDescriptorTest.java index 716d033..4834cee 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/AbstractCheckDescriptorTest.java @@ -34,9 +34,15 @@ import org.junit.Test; public class AbstractCheckDescriptorTest { private class TestCheckImpl extends AbstractCheckDescriptor { + private PrereqCheckType m_type; + public TestCheckImpl(PrereqCheckType type) { + super(null); + m_type = type; + } - public TestCheckImpl(String id, PrereqCheckType type, String description) { - super(id, type, description); + @Override + public PrereqCheckType getType() { + return m_type; } @Override @@ -47,7 +53,7 @@ public class AbstractCheckDescriptorTest { @Test public void testFormatEntityList() { - AbstractCheckDescriptor check = new TestCheckImpl(null, PrereqCheckType.HOST, null); + AbstractCheckDescriptor check = new TestCheckImpl(PrereqCheckType.HOST); Assert.assertEquals("", check.formatEntityList(null)); @@ -55,21 +61,21 @@ public class AbstractCheckDescriptorTest { Assert.assertEquals("", check.formatEntityList(failedOn)); failedOn.add("host1"); - Assert.assertEquals("host1 host", check.formatEntityList(failedOn)); + Assert.assertEquals("host1", check.formatEntityList(failedOn)); failedOn.add("host2"); - Assert.assertEquals("host1 and host2 hosts", check.formatEntityList(failedOn)); + Assert.assertEquals("host1 and host2", check.formatEntityList(failedOn)); failedOn.add("host3"); - Assert.assertEquals("host1, host2 and host3 hosts", check.formatEntityList(failedOn)); + Assert.assertEquals("host1, host2 and host3", check.formatEntityList(failedOn)); - check = new TestCheckImpl(null, PrereqCheckType.CLUSTER, null); - Assert.assertEquals("host1, host2 and host3 clusters", check.formatEntityList(failedOn)); + check = new TestCheckImpl(PrereqCheckType.CLUSTER); + Assert.assertEquals("host1, host2 and host3", check.formatEntityList(failedOn)); - check = new TestCheckImpl(null, PrereqCheckType.SERVICE, null); - Assert.assertEquals("host1, host2 and host3 services", check.formatEntityList(failedOn)); + check = new TestCheckImpl(PrereqCheckType.SERVICE); + Assert.assertEquals("host1, host2 and host3", check.formatEntityList(failedOn)); - check = new TestCheckImpl(null, null, null); + check = new TestCheckImpl(null); Assert.assertEquals("host1, host2 and host3", check.formatEntityList(failedOn)); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsHeartbeatCheckTest.java ---------------------------------------------------------------------- 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 fa20373..0b77bcb 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 @@ -82,12 +82,12 @@ public class HostsHeartbeatCheckTest { hosts.put("host3", host3); Mockito.when(clusters.getHostsForCluster("cluster")).thenReturn(hosts); - PrerequisiteCheck check = new PrerequisiteCheck(null, null, null, null); + PrerequisiteCheck check = new PrerequisiteCheck(null, null); hostHeartbeatCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); Mockito.when(status3.getHealthStatus()).thenReturn(HealthStatus.HEALTHY); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); hostHeartbeatCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java index 9444aa3..fc0f9bc 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 @@ -94,14 +94,14 @@ public class HostsMasterMaintenanceCheckTest { Mockito.when(cluster.getDesiredStackVersion()).thenReturn(new StackId("HDP", "1.0")); Mockito.when(repositoryVersionHelper.getUpgradePackageName(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(null); - PrerequisiteCheck check = new PrerequisiteCheck(null, null, null, null); + PrerequisiteCheck check = new PrerequisiteCheck(null, null); hostsMasterMaintenanceCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); Mockito.when(repositoryVersionHelper.getUpgradePackageName(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn("upgrade pack"); Mockito.when(ambariMetaInfo.getUpgradePacks(Mockito.anyString(), Mockito.anyString())).thenReturn(new HashMap<String, UpgradePack>()); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); hostsMasterMaintenanceCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); @@ -113,7 +113,7 @@ public class HostsMasterMaintenanceCheckTest { Mockito.when(cluster.getServices()).thenReturn(new HashMap<String, Service>()); Mockito.when(clusters.getHostsForCluster(Mockito.anyString())).thenReturn(new HashMap<String, Host>()); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); hostsMasterMaintenanceCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java index 02fd01e..f70d9fc 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java @@ -98,7 +98,7 @@ public class HostsRepositoryVersionCheckTest { Mockito.when(clusters.getHostsForCluster("cluster")).thenReturn(hosts); Mockito.when(repositoryVersionDAO.findByStackAndVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(null); - PrerequisiteCheck check = new PrerequisiteCheck(null, null, null, null); + PrerequisiteCheck check = new PrerequisiteCheck(null, null); hostsRepositoryVersionCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); @@ -108,7 +108,7 @@ public class HostsRepositoryVersionCheckTest { hostVersion.setState(RepositoryVersionState.INSTALLED); Mockito.when(hostVersionDAO.findByClusterStackVersionAndHost(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(hostVersion); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); hostsRepositoryVersionCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java index 4938468..631ca8a 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheckTest.java @@ -20,6 +20,7 @@ package org.apache.ambari.server.checks; import java.util.Collections; import org.apache.ambari.server.ServiceNotFoundException; +import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.orm.dao.HostComponentStateDAO; import org.apache.ambari.server.state.Cluster; @@ -49,13 +50,19 @@ public class SecondaryNamenodeDeletedCheckTest { @Before public void setup() { secondaryNamenodeDeletedCheck.clustersProvider = new Provider<Clusters>() { - @Override public Clusters get() { return clusters; } }; + secondaryNamenodeDeletedCheck.ambariMetaInfo = new Provider<AmbariMetaInfo>() { + @Override + public AmbariMetaInfo get() { + return Mockito.mock(AmbariMetaInfo.class); + } + }; + secondaryNamenodeDeletedCheck.hostComponentStateDao = hostComponentStateDAO; } @@ -69,6 +76,17 @@ public class SecondaryNamenodeDeletedCheckTest { Mockito.when(cluster.getService("HDFS")).thenReturn(service); Assert.assertTrue(secondaryNamenodeDeletedCheck.isApplicable(new PrereqCheckRequest("cluster"))); + PrereqCheckRequest req = new PrereqCheckRequest("cluster"); + req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.FAIL); + Mockito.when(cluster.getService("HDFS")).thenReturn(service); + Assert.assertFalse(secondaryNamenodeDeletedCheck.isApplicable(req)); + + req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.PASS); + Mockito.when(cluster.getService("HDFS")).thenReturn(service); + Assert.assertTrue(secondaryNamenodeDeletedCheck.isApplicable(req)); + + + Mockito.when(cluster.getService("HDFS")).thenThrow(new ServiceNotFoundException("no", "service")); Assert.assertFalse(secondaryNamenodeDeletedCheck.isApplicable(new PrereqCheckRequest("cluster"))); } @@ -85,12 +103,12 @@ public class SecondaryNamenodeDeletedCheckTest { Mockito.when(service.getServiceComponent("SECONDARY_NAMENODE")).thenReturn(serviceComponent); Mockito.when(serviceComponent.getServiceComponentHosts()).thenReturn(Collections.<String, ServiceComponentHost>singletonMap("host", null)); - PrerequisiteCheck check = new PrerequisiteCheck(null, null, null, null); + PrerequisiteCheck check = new PrerequisiteCheck(null, null); secondaryNamenodeDeletedCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); Mockito.when(serviceComponent.getServiceComponentHosts()).thenReturn(Collections.<String, ServiceComponentHost> emptyMap()); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); secondaryNamenodeDeletedCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesDecommissionCheckTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesDecommissionCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesDecommissionCheckTest.java index 71e61e2..151648f 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesDecommissionCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesDecommissionCheckTest.java @@ -21,6 +21,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; @@ -58,6 +59,13 @@ public class ServicesDecommissionCheckTest { return clusters; } }; + servicesDecommissionCheck.ambariMetaInfo = new Provider<AmbariMetaInfo>() { + @Override + public AmbariMetaInfo get() { + return Mockito.mock(AmbariMetaInfo.class); + } + }; + final Cluster cluster = Mockito.mock(Cluster.class); Mockito.when(cluster.getClusterId()).thenReturn(1L); Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster); @@ -78,12 +86,12 @@ public class ServicesDecommissionCheckTest { Mockito.when(serviceComponentHost1.getComponentAdminState()).thenReturn(HostComponentAdminState.DECOMMISSIONED); Mockito.when(serviceComponentHost2.getComponentAdminState()).thenReturn(HostComponentAdminState.INSERVICE); - PrerequisiteCheck check = new PrerequisiteCheck(null, null, null, null); + PrerequisiteCheck check = new PrerequisiteCheck(null, null); servicesDecommissionCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); Mockito.when(serviceComponentHost1.getComponentAdminState()).thenReturn(HostComponentAdminState.INSERVICE); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesDecommissionCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheckTest.java ---------------------------------------------------------------------- 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 c8c8bd8..ff4e36f 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 @@ -19,6 +19,7 @@ package org.apache.ambari.server.checks; import java.util.Collections; +import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; @@ -54,6 +55,14 @@ public class ServicesMaintenanceModeCheckTest { return clusters; } }; + + servicesMaintenanceModeCheck.ambariMetaInfo = new Provider<AmbariMetaInfo>() { + @Override + public AmbariMetaInfo get() { + return Mockito.mock(AmbariMetaInfo.class); + } + }; + final Cluster cluster = Mockito.mock(Cluster.class); Mockito.when(cluster.getClusterId()).thenReturn(1L); Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster); @@ -62,12 +71,12 @@ public class ServicesMaintenanceModeCheckTest { Mockito.when(service.isClientOnlyService()).thenReturn(false); Mockito.when(service.getDesiredState()).thenReturn(State.UNKNOWN); - PrerequisiteCheck check = new PrerequisiteCheck(null, null, null, null); + PrerequisiteCheck check = new PrerequisiteCheck(null, null); servicesMaintenanceModeCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); Mockito.when(service.getDesiredState()).thenReturn(State.STARTED); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesMaintenanceModeCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java index a8a09bd..acc9776 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheckTest.java @@ -17,7 +17,6 @@ */ package org.apache.ambari.server.checks; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -67,6 +66,16 @@ public class ServicesMapReduceDistributedCacheCheckTest { Mockito.when(cluster.getService("YARN")).thenReturn(service); Assert.assertTrue(servicesMapReduceDistributedCacheCheck.isApplicable(new PrereqCheckRequest("cluster"))); + PrereqCheckRequest req = new PrereqCheckRequest("cluster"); + req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.FAIL); + Mockito.when(cluster.getService("YARN")).thenReturn(service); + Assert.assertFalse(servicesMapReduceDistributedCacheCheck.isApplicable(req)); + + req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.PASS); + Mockito.when(cluster.getService("YARN")).thenReturn(service); + Assert.assertTrue(servicesMapReduceDistributedCacheCheck.isApplicable(req)); + + Mockito.when(cluster.getService("YARN")).thenThrow(new ServiceNotFoundException("no", "service")); Assert.assertFalse(servicesMapReduceDistributedCacheCheck.isApplicable(new PrereqCheckRequest("cluster"))); } @@ -88,35 +97,35 @@ public class ServicesMapReduceDistributedCacheCheckTest { final Map<String, String> properties = new HashMap<String, String>(); Mockito.when(config.getProperties()).thenReturn(properties); - PrerequisiteCheck check = new PrerequisiteCheck(null, null, null, null); + PrerequisiteCheck check = new PrerequisiteCheck(null, null); servicesMapReduceDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); properties.put("fs.defaultFS", "anything"); properties.put("mapreduce.application.framework.path", "hdfs://some/path"); properties.put("mapreduce.application.classpath", "anything"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesMapReduceDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); properties.put("fs.defaultFS", "anything"); properties.put("mapreduce.application.framework.path", "dfs://some/path"); properties.put("mapreduce.application.classpath", "anything"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesMapReduceDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); properties.put("fs.defaultFS", "hdfs://ha"); properties.put("mapreduce.application.framework.path", "/some/path"); properties.put("mapreduce.application.classpath", "anything"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesMapReduceDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); properties.put("fs.defaultFS", "dfs://ha"); properties.put("mapreduce.application.framework.path", "/some/path"); properties.put("mapreduce.application.classpath", "anything"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesMapReduceDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); @@ -124,7 +133,7 @@ public class ServicesMapReduceDistributedCacheCheckTest { properties.put("fs.defaultFS", "anything"); properties.put("mapreduce.application.framework.path", "/some/path"); properties.put("mapreduce.application.classpath", "anything"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesMapReduceDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java index c1b2022..85ebc79 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheckTest.java @@ -85,12 +85,12 @@ public class ServicesNamenodeHighAvailabilityCheckTest { final Map<String, String> properties = new HashMap<String, String>(); Mockito.when(config.getProperties()).thenReturn(properties); - PrerequisiteCheck check = new PrerequisiteCheck(null, null, null, null); + PrerequisiteCheck check = new PrerequisiteCheck(null, null); servicesNamenodeHighAvailabilityCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); properties.put("dfs.nameservices", "anything"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesNamenodeHighAvailabilityCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c9e901bc/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java index c4dcc5e..88584f7 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheckTest.java @@ -17,7 +17,6 @@ */ package org.apache.ambari.server.checks; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -67,8 +66,20 @@ public class ServicesTezDistributedCacheCheckTest { Mockito.when(cluster.getService("TEZ")).thenReturn(service); Assert.assertTrue(servicesTezDistributedCacheCheck.isApplicable(new PrereqCheckRequest("cluster"))); + PrereqCheckRequest req = new PrereqCheckRequest("cluster"); + req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.FAIL); + Mockito.when(cluster.getService("TEZ")).thenReturn(service); + Assert.assertFalse(servicesTezDistributedCacheCheck.isApplicable(req)); + + req.addResult(CheckDescription.SERVICES_NAMENODE_HA, PrereqCheckStatus.PASS); + Mockito.when(cluster.getService("TEZ")).thenReturn(service); + Assert.assertTrue(servicesTezDistributedCacheCheck.isApplicable(req)); + + Mockito.when(cluster.getService("TEZ")).thenThrow(new ServiceNotFoundException("no", "service")); Assert.assertFalse(servicesTezDistributedCacheCheck.isApplicable(new PrereqCheckRequest("cluster"))); + + } @Test @@ -88,35 +99,35 @@ public class ServicesTezDistributedCacheCheckTest { final Map<String, String> properties = new HashMap<String, String>(); Mockito.when(config.getProperties()).thenReturn(properties); - PrerequisiteCheck check = new PrerequisiteCheck(null, null, null, null); + PrerequisiteCheck check = new PrerequisiteCheck(null, null); servicesTezDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); properties.put("fs.defaultFS", "anything"); properties.put("tez.lib.uris", "hdfs://some/path/to/archive.tar.gz"); properties.put("tez.use.cluster.hadoop-libs", "false"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesTezDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); properties.put("fs.defaultFS", "anything"); properties.put("tez.lib.uris", "dfs://some/path/to/archive.tar.gz"); properties.put("tez.use.cluster.hadoop-libs", "false"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesTezDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); properties.put("fs.defaultFS", "dfs://ha"); properties.put("tez.lib.uris", "/some/path/to/archive.tar.gz"); properties.put("tez.use.cluster.hadoop-libs", "false"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesTezDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); properties.put("fs.defaultFS", "hdfs://ha"); properties.put("tez.lib.uris", "/some/path/to/archive.tar.gz"); properties.put("tez.use.cluster.hadoop-libs", "false"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesTezDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); @@ -124,7 +135,7 @@ public class ServicesTezDistributedCacheCheckTest { properties.put("fs.defaultFS", "anything"); properties.put("tez.lib.uris", "/some/path/to/archive.tar.gz"); properties.put("tez.use.cluster.hadoop-libs", "false"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesTezDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); @@ -132,7 +143,7 @@ public class ServicesTezDistributedCacheCheckTest { properties.put("fs.defaultFS", "hdfs://ha"); properties.put("tez.lib.uris", "/some/path/to/archive.log"); properties.put("tez.use.cluster.hadoop-libs", "false"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesTezDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); @@ -140,7 +151,7 @@ public class ServicesTezDistributedCacheCheckTest { properties.put("fs.defaultFS", "hdfs://ha"); properties.put("tez.lib.uris", "/some/path/to/archive.tar.gz"); properties.put("tez.use.cluster.hadoop-libs", "true"); - check = new PrerequisiteCheck(null, null, null, null); + check = new PrerequisiteCheck(null, null); servicesTezDistributedCacheCheck.perform(check, new PrereqCheckRequest("cluster")); Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); }
