You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2016/04/15 16:34:18 UTC
ambari git commit: AMBARI-15896 - RU/EU: Unable to start upgrade with
host in MM (jonathanhurley)
Repository: ambari
Updated Branches:
refs/heads/trunk 073eed0d9 -> 2491dee6f
AMBARI-15896 - RU/EU: Unable to start upgrade with host in MM (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2491dee6
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2491dee6
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2491dee6
Branch: refs/heads/trunk
Commit: 2491dee6f925f64f0df3aa84813d5a4614e33aa8
Parents: 073eed0
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Thu Apr 14 16:11:02 2016 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Fri Apr 15 10:33:54 2016 -0400
----------------------------------------------------------------------
.../ambari/server/checks/ServicesUpCheck.java | 198 +++++++++++++------
.../listeners/upgrade/StackVersionListener.java | 21 +-
.../server/orm/models/HostComponentSummary.java | 15 +-
.../ambari/server/state/UpgradeState.java | 6 -
.../server/state/cluster/ClustersImpl.java | 4 +-
.../server/checks/ServicesUpCheckTest.java | 48 +++++
.../upgrade/StackVersionListenerTest.java | 51 +----
7 files changed, 203 insertions(+), 140 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/2491dee6/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 09ad55d..d4c7894 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
@@ -30,6 +30,8 @@ import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.orm.models.HostComponentSummary;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
+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;
@@ -41,7 +43,24 @@ import org.apache.commons.lang.StringUtils;
import com.google.inject.Singleton;
/**
- * Checks that services are up.
+ * The {@link ServicesUpCheck} class is used to ensure that services are up
+ * "enough" before an upgrade begins. This class uses the following rules:
+ * <ul>
+ * <li>If the component is a CLIENT, it will skip it</li>
+ * <li>If the component is a MASTER then it must be online and not in MM</li>
+ * <li>If the component is a SLAVE
+ * <ul>
+ * <li>If the cardinality is 1+, then determine if {@value #SLAVE_THRESHOLD} %
+ * are running. Hosts in MM are counted as being "up" since they are not part of
+ * the upgrade.</li>
+ * <li>If the cardinality is 0, then all instances must be online. Hosts in MM
+ * are counted as being "up" since they are not part of the upgrade.</li>
+ * </ul>
+ * </ul>
+ * It seems counter-intuitive to have a liveliness check which allows a
+ * percentage of the slaves to be down. The goal is to be able to start an
+ * upgrade, even if some slave components on healthy hosts are down. We still
+ * want hosts to be scehdule for upgrade of their other components.
*/
@Singleton
@UpgradeCheck(group = UpgradeCheckGroup.LIVELINESS, order = 2.0f, required = true)
@@ -56,8 +75,13 @@ public class ServicesUpCheck extends AbstractCheckDescriptor {
super(CheckDescription.SERVICES_UP);
}
+ /**
+ * {@inheritDoc}
+ */
@Override
- public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+ public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
+ throws AmbariException {
+
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
List<String> errorMessages = new ArrayList<String>();
@@ -69,74 +93,84 @@ public class ServicesUpCheck extends AbstractCheckDescriptor {
final Service service = serviceEntry.getValue();
// Ignore services like Tez that are clientOnly.
- if (!service.isClientOnlyService()) {
- Map<String, ServiceComponent> serviceComponents = service.getServiceComponents();
+ if (service.isClientOnlyService()) {
+ continue;
+ }
- for (Map.Entry<String, ServiceComponent> component : serviceComponents.entrySet()) {
+ Map<String, ServiceComponent> serviceComponents = service.getServiceComponents();
+ for (Map.Entry<String, ServiceComponent> component : serviceComponents.entrySet()) {
- boolean ignoreComponent = false;
- boolean checkThreshold = false;
+ ServiceComponent serviceComponent = component.getValue();
+ // In Services like HDFS, ignore components like HDFS Client
+ if (serviceComponent.isClientComponent()) {
+ continue;
+ }
- ServiceComponent serviceComponent = component.getValue();
- // In Services like HDFS, ignore components like HDFS Client
- if (serviceComponent.isClientComponent()) {
- ignoreComponent = true;
+ // skip if the component is not part of the finalization version check
+ if (!serviceComponent.isVersionAdvertised()) {
+ continue;
+ }
+
+ // TODO, add more logic that checks the Upgrade Pack.
+ // These components are not in the upgrade pack and do not advertise a
+ // version:
+ // ZKFC, Ambari Metrics, Kerberos, Atlas (right now).
+ // Generally, if it advertises a version => in the upgrade pack.
+ // So it can be in the Upgrade Pack but not advertise a version.
+ List<HostComponentSummary> hostComponentSummaries = HostComponentSummary.getHostComponentSummaries(
+ service.getName(), serviceComponent.getName());
+
+ // not installed, nothing to do
+ if (hostComponentSummaries.isEmpty()) {
+ continue;
+ }
+
+ // non-master, "true" slaves with cardinality 1+
+ boolean checkThreshold = false;
+ if (!serviceComponent.isMasterComponent()) {
+ ComponentInfo componentInfo = ambariMetaInfo.get().getComponent(stackId.getStackName(),
+ stackId.getStackVersion(), serviceComponent.getServiceName(),
+ serviceComponent.getName());
+
+ String cardinality = componentInfo.getCardinality();
+ // !!! check if there can be more than one. This will match, say,
+ // datanodes but not ZKFC
+ if (null != cardinality
+ && (cardinality.equals("ALL") || cardinality.matches("[1-9].*"))) {
+ checkThreshold = true;
}
+ }
+
+ // check threshold for slaves which have a non-0 cardinality
+ if (checkThreshold) {
+ int total = hostComponentSummaries.size();
+ int up = 0;
+ int down = 0;
- // non-master, "true" slaves with cardinality 1+
- if (!ignoreComponent && !serviceComponent.isMasterComponent()) {
- ComponentInfo componentInfo = ambariMetaInfo.get().getComponent(
- stackId.getStackName(), stackId.getStackVersion(),
- serviceComponent.getServiceName(), serviceComponent.getName());
-
- String cardinality = componentInfo.getCardinality();
- // !!! check if there can be more than one. This will match, say, datanodes but not ZKFC
- if (null != cardinality &&
- (cardinality.equals("ALL") || cardinality.matches("[1-9].*"))) {
- checkThreshold = true;
+ for (HostComponentSummary summary : hostComponentSummaries) {
+ if (isConsideredDown(cluster, serviceComponent, summary)) {
+ down++;
+ } else {
+ up++;
}
}
- if (!serviceComponent.isVersionAdvertised()) {
- ignoreComponent = true;
+ if ((float) down / total > SLAVE_THRESHOLD) { // arbitrary
+ failedServiceNames.add(service.getName());
+ String message = MessageFormat.format(
+ "{0}: {1} out of {2} {3} are started; there should be {4,number,percent} started before upgrading.",
+ service.getName(), up, total, serviceComponent.getName(), SLAVE_THRESHOLD);
+ errorMessages.add(message);
}
-
- // TODO, add more logic that checks the Upgrade Pack.
- // These components are not in the upgrade pack and do not advertise a version:
- // ZKFC, Ambari Metrics, Kerberos, Atlas (right now).
- // Generally, if it advertises a version => in the upgrade pack.
- // So it can be in the Upgrade Pack but not advertise a version.
- if (!ignoreComponent) {
- List<HostComponentSummary> hostComponentSummaries = HostComponentSummary.getHostComponentSummaries(service.getName(), serviceComponent.getName());
-
- if (checkThreshold && !hostComponentSummaries.isEmpty()) {
- int total = hostComponentSummaries.size();
- int up = 0;
- int down = 0;
-
- for(HostComponentSummary s : hostComponentSummaries) {
- if ((s.getDesiredState() == State.INSTALLED || s.getDesiredState() == State.STARTED) && State.STARTED != s.getCurrentState()) {
- down++;
- } else {
- up++;
- }
- }
-
- if ((float) down/total > SLAVE_THRESHOLD) { // arbitrary
- failedServiceNames.add(service.getName());
- String message = MessageFormat.format("{0}: {1} out of {2} {3} are started; there should be {4,number,percent} started before upgrading.",
- service.getName(), up, total, serviceComponent.getName(), SLAVE_THRESHOLD);
- errorMessages.add(message);
- }
- } else {
- for(HostComponentSummary s : hostComponentSummaries) {
- if ((s.getDesiredState() == State.INSTALLED || s.getDesiredState() == State.STARTED) && State.STARTED != s.getCurrentState()) {
- failedServiceNames.add(service.getName());
- String message = MessageFormat.format("{0}: {1} (in {2} on host {3})", service.getName(), serviceComponent.getName(), s.getCurrentState(), s.getHostName());
- errorMessages.add(message);
- break;
- }
- }
+ } else {
+ for (HostComponentSummary summary : hostComponentSummaries) {
+ if (isConsideredDown(cluster, serviceComponent, summary)) {
+ failedServiceNames.add(service.getName());
+ String message = MessageFormat.format("{0}: {1} (in {2} on host {3})",
+ service.getName(), serviceComponent.getName(), summary.getCurrentState(),
+ summary.getHostName());
+ errorMessages.add(message);
+ break;
}
}
}
@@ -146,8 +180,48 @@ public class ServicesUpCheck extends AbstractCheckDescriptor {
if (!errorMessages.isEmpty()) {
prerequisiteCheck.setFailedOn(new LinkedHashSet<String>(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. " + StringUtils.join(errorMessages, ", "));
+ prerequisiteCheck.setFailReason(
+ "The following Service Components should be in a started state. Please invoke a service Stop and full Start and try again. "
+ + StringUtils.join(errorMessages, ", "));
}
}
+ /**
+ * Gets whether this component should be considered as being "down" for the
+ * purposes of this check. Component type, maintenance mode, and state are
+ * taken into account.
+ *
+ * @param clusters
+ * the clusters instance
+ * @param cluster
+ * the cluster
+ * @param serviceComponent
+ * the component
+ * @param summary
+ * a summary of the state of the component on a host
+ * @return {@code true} if the host component should be considered as failing
+ * this test.
+ * @throws AmbariException
+ */
+ private boolean isConsideredDown(Cluster cluster, ServiceComponent serviceComponent,
+ HostComponentSummary summary) throws AmbariException {
+ Host host = clustersProvider.get().getHostById(summary.getHostId());
+ MaintenanceState maintenanceState = host.getMaintenanceState(cluster.getClusterId());
+
+ // non-MASTER components in maintenance mode should not count
+ if (maintenanceState == MaintenanceState.ON && !serviceComponent.isMasterComponent()) {
+ return false;
+ }
+
+ State desiredState = summary.getDesiredState();
+ State currentState = summary.getCurrentState();
+
+ switch (desiredState) {
+ case INSTALLED:
+ case STARTED:
+ return currentState != State.STARTED;
+ default:
+ return false;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2491dee6/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
index 2153113..2a627dd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
@@ -80,16 +80,18 @@ public class StackVersionListener {
Cluster cluster = event.getCluster();
ServiceComponentHost sch = event.getServiceComponentHost();
+
String newVersion = event.getVersion();
+ if (StringUtils.isEmpty(newVersion)) {
+ return;
+ }
m_stackVersionLock.lock();
// Update host component version value if needed
try {
ServiceComponent sc = cluster.getService(sch.getServiceName()).getServiceComponent(sch.getServiceComponentName());
- if (newVersion == null) {
- processComponentVersionNotAdvertised(sc, sch);
- } else if (UNKNOWN_VERSION.equals(sc.getDesiredVersion())) {
+ if (UNKNOWN_VERSION.equals(sc.getDesiredVersion())) {
processUnknownDesiredVersion(cluster, sc, sch, newVersion);
} else if (StringUtils.isNotBlank(newVersion)) {
String previousVersion = sch.getVersion();
@@ -175,17 +177,4 @@ public class StackVersionListener {
}
sch.setVersion(newVersion);
}
-
- /**
- * Focuses on cases when component does not advertise it's version
- */
- private void processComponentVersionNotAdvertised(ServiceComponent sc, ServiceComponentHost sch) {
- if (UpgradeState.ONGOING_UPGRADE_STATES.contains(sch.getUpgradeState())) {
- sch.setUpgradeState(UpgradeState.FAILED);
- } else if (!sc.isVersionAdvertised()) {
- sch.setUpgradeState(UpgradeState.NONE);
- } else {
- sch.setUpgradeState(UpgradeState.VERSION_MISMATCH);
- }
- }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2491dee6/ambari-server/src/main/java/org/apache/ambari/server/orm/models/HostComponentSummary.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/models/HostComponentSummary.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/models/HostComponentSummary.java
index c79ec8a..cdc06fe 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/models/HostComponentSummary.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/models/HostComponentSummary.java
@@ -18,7 +18,9 @@
package org.apache.ambari.server.orm.models;
-import com.google.inject.Inject;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.ambari.server.StaticallyInject;
import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
@@ -28,8 +30,7 @@ import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.state.State;
-import java.util.ArrayList;
-import java.util.List;
+import com.google.inject.Inject;
@StaticallyInject
public class HostComponentSummary {
@@ -56,15 +57,19 @@ public class HostComponentSummary {
HostEntity host = hostDao.findById(hostId);
if (host != null) {
- this.hostName = host.getHostName();
+ hostName = host.getHostName();
}
this.desiredState = desiredState;
this.currentState = currentState;
}
+ public long getHostId() {
+ return hostId;
+ }
+
public String getHostName() {
- return (this.hostName == null || this.hostName.isEmpty()) ? "" : this.hostName;
+ return (hostName == null || hostName.isEmpty()) ? "" : hostName;
}
public State getDesiredState() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/2491dee6/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java
index 889e92d..d5939cc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeState.java
@@ -48,10 +48,4 @@ public enum UpgradeState {
* States when new/correct version has not been yet advertised
*/
public static final EnumSet<UpgradeState> VERSION_NON_ADVERTISED_STATES = EnumSet.of(IN_PROGRESS, FAILED, VERSION_MISMATCH);
-
- /**
- * States when component is believed to participate in upgrade
- */
- public static final EnumSet<UpgradeState> ONGOING_UPGRADE_STATES = EnumSet.of(IN_PROGRESS, FAILED, COMPLETE);
-
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2491dee6/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
index 3dd3beb..dcbf5a5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
@@ -401,11 +401,11 @@ public class ClustersImpl implements Clusters {
public Host getHostById(Long hostId) throws AmbariException {
checkLoaded();
- if (!hosts.containsKey(hostId)) {
+ if (!hostsById.containsKey(hostId)) {
throw new HostNotFoundException("Host Id = " + hostId);
}
- return hosts.get(hostId);
+ return hostsById.get(hostId);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/2491dee6/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
index 88826a0..65505fa 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
@@ -30,6 +30,8 @@ import org.apache.ambari.server.orm.models.HostComponentSummary;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
+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;
@@ -93,11 +95,23 @@ public class ServicesUpCheckTest {
};
+ Host host1 = Mockito.mock(Host.class);
+ Host host2 = Mockito.mock(Host.class);
+ Host host3 = Mockito.mock(Host.class);
+
+ Mockito.when(host1.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.OFF);
+ Mockito.when(host2.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.OFF);
+ Mockito.when(host3.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.OFF);
+
final Cluster cluster = Mockito.mock(Cluster.class);
Mockito.when(cluster.getClusterId()).thenReturn(1L);
Mockito.when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP", "2.2"));
Mockito.when(clusters.getCluster("cluster")).thenReturn(cluster);
+ Mockito.when(clusters.getHostById(Long.valueOf(1))).thenReturn(host1);
+ Mockito.when(clusters.getHostById(Long.valueOf(2))).thenReturn(host2);
+ Mockito.when(clusters.getHostById(Long.valueOf(3))).thenReturn(host3);
+
final Service hdfsService = Mockito.mock(Service.class);
final Service tezService = Mockito.mock(Service.class);
final Service amsService = Mockito.mock(Service.class);
@@ -199,6 +213,16 @@ public class ServicesUpCheckTest {
final HostComponentSummary hcsMetricsCollector = Mockito.mock(HostComponentSummary.class);
final HostComponentSummary hcsMetricsMonitor = Mockito.mock(HostComponentSummary.class);
+ // set hosts for the summaries
+ Mockito.when(hcsNameNode.getHostId()).thenReturn(Long.valueOf(1));
+ Mockito.when(hcsDataNode1.getHostId()).thenReturn(Long.valueOf(1));
+ Mockito.when(hcsDataNode2.getHostId()).thenReturn(Long.valueOf(2));
+ Mockito.when(hcsDataNode3.getHostId()).thenReturn(Long.valueOf(3));
+ Mockito.when(hcsZKFC.getHostId()).thenReturn(Long.valueOf(1));
+ Mockito.when(hcsTezClient.getHostId()).thenReturn(Long.valueOf(2));
+ Mockito.when(hcsMetricsCollector.getHostId()).thenReturn(Long.valueOf(1));
+ Mockito.when(hcsMetricsMonitor.getHostId()).thenReturn(Long.valueOf(1));
+
List<HostComponentSummary> allHostComponentSummaries = new ArrayList<HostComponentSummary>();
allHostComponentSummaries.add(hcsNameNode);
allHostComponentSummaries.add(hcsDataNode1);
@@ -266,5 +290,29 @@ public class ServicesUpCheckTest {
servicesUpCheck.perform(check, new PrereqCheckRequest("cluster"));
Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
Assert.assertTrue(check.getFailReason().indexOf("50%") > -1);
+
+ // place the DN slaves into MM which will allow them to be skipped
+ Mockito.when(host1.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.ON);
+ Mockito.when(host3.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.ON);
+ check = new PrerequisiteCheck(null, null);
+ servicesUpCheck.perform(check, new PrereqCheckRequest("cluster"));
+ Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+
+ // put everything back to normal, then fail NN
+ Mockito.when(hcsNameNode.getCurrentState()).thenReturn(State.INSTALLED);
+ Mockito.when(hcsDataNode1.getCurrentState()).thenReturn(State.STARTED);
+ Mockito.when(hcsDataNode2.getCurrentState()).thenReturn(State.STARTED);
+ Mockito.when(host1.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.OFF);
+ Mockito.when(host3.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.OFF);
+
+ check = new PrerequisiteCheck(null, null);
+ servicesUpCheck.perform(check, new PrereqCheckRequest("cluster"));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+
+ // put NN into MM; should still fail since it's a master
+ Mockito.when(host1.getMaintenanceState(Mockito.anyLong())).thenReturn(MaintenanceState.ON);
+ check = new PrerequisiteCheck(null, null);
+ servicesUpCheck.perform(check, new PrereqCheckRequest("cluster"));
+ Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2491dee6/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
index 12f1f83..784830d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
@@ -31,7 +31,6 @@ import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.UpgradeState;
import org.easymock.EasyMockSupport;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -158,55 +157,9 @@ public class StackVersionListenerTest extends EasyMockSupport {
}
@Test
- public void testSetUpgradeStateToFailedWhenNewVersionIsNullAndUpgradeIsInProgress() {
- expect(sch.getUpgradeState()).andReturn(UpgradeState.IN_PROGRESS);
- sch.setUpgradeState(UpgradeState.FAILED);
- expectLastCall().once();
-
- replayAll();
-
- sendEventAndVerify(null);
- }
-
- @Test
- public void testSetUpgradeStateToFailedWhenNewVersionIsNullAndUpgradeHasComplete() {
- expect(sch.getUpgradeState()).andReturn(UpgradeState.COMPLETE);
- sch.setUpgradeState(UpgradeState.FAILED);
- expectLastCall().once();
-
- replayAll();
-
- sendEventAndVerify(null);
- }
-
- @Test
- public void testSetUpgradeStateToFailedWhenNewVersionIsNullAndUpgradeHasFailed() {
- expect(sch.getUpgradeState()).andReturn(UpgradeState.FAILED);
- sch.setUpgradeState(UpgradeState.FAILED);
- expectLastCall().once();
-
- replayAll();
-
- sendEventAndVerify(null);
- }
-
- @Test
- public void testSetUpgradeStateToNoneWhenNewVersionIsNullAndComponentVersionIsNotAdvertised() {
- expect(serviceComponent.isVersionAdvertised()).andReturn(false);
- sch.setUpgradeState(UpgradeState.NONE);
- expectLastCall().once();
-
- replayAll();
-
- sendEventAndVerify(null);
- }
-
- @Test
- public void testSetUpgradeStateToVersionMismatchByDefaultWhenNewVersionIsNull() {
+ public void testNoActionTakenOnNullVersion() {
expect(serviceComponent.isVersionAdvertised()).andReturn(true);
- sch.setUpgradeState(UpgradeState.VERSION_MISMATCH);
- expectLastCall().once();
-
+ resetAll();
replayAll();
sendEventAndVerify(null);