You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2017/06/06 10:39:29 UTC
[2/2] ambari git commit: AMBARI-21164. Upgrades (RU/EU) :
"stack.upgrade.bypass.prechecks" config is not honored while doing upgrades
with bad entries in "execution_command" table. (aonishuk)
AMBARI-21164. Upgrades (RU/EU) : "stack.upgrade.bypass.prechecks" config is not honored while doing upgrades with bad entries in "execution_command" table. (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c51e0b86
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c51e0b86
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c51e0b86
Branch: refs/heads/branch-2.5
Commit: c51e0b865b54b67b04b848ab371510248c903c1e
Parents: 07af734
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Tue Jun 6 13:39:26 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Tue Jun 6 13:39:26 2017 +0300
----------------------------------------------------------------------
.../server/checks/AbstractCheckDescriptor.java | 7 ----
.../checks/ServiceCheckValidityCheck.java | 9 +++--
.../PreUpgradeCheckResourceProvider.java | 6 ++-
.../apache/ambari/server/state/CheckHelper.java | 39 +++++++++-----------
.../checks/ServiceCheckValidityCheckTest.java | 39 +++++++++++++++++++-
.../PreUpgradeCheckResourceProviderTest.java | 15 +++++++-
.../sample/checks/SampleServiceCheck.java | 4 --
.../ambari/server/state/CheckHelperTest.java | 36 ++++++++++++------
8 files changed, 105 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/c51e0b86/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 27fc2c0..d9d8b42 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
@@ -303,11 +303,4 @@ public abstract class AbstractCheckDescriptor {
return false;
}
- /**
- * Return a boolean indicating whether or not configs allow bypassing errors during the RU/EU PreChecks.
- * @return
- */
- public boolean isStackUpgradeAllowedToBypassPreChecks() {
- return config.isUpgradePrecheckBypass();
- }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c51e0b86/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
index 34b45bd..2a8e23fd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java
@@ -77,8 +77,10 @@ public class ServiceCheckValidityCheck extends AbstractCheckDescriptor {
private static SortRequest sortRequest = new SortRequestImpl(sortRequestProperties);
private static final PageRequestImpl PAGE_REQUEST = new PageRequestImpl(PageRequest.StartingPoint.End, 1000, 0, null, null);
private static final RequestImpl REQUEST = new RequestImpl(null, null, null, null, sortRequest, PAGE_REQUEST);
- private static final Predicate PREDICATE = new PredicateBuilder().property(TaskResourceProvider.TASK_COMMAND_PROPERTY_ID)
- .equals(RoleCommand.SERVICE_CHECK.name()).toPredicate();
+ private static final Predicate PREDICATE = new PredicateBuilder()
+ .property(TaskResourceProvider.TASK_COMMAND_PROPERTY_ID).equals(RoleCommand.SERVICE_CHECK.name())
+ .and().property(TaskResourceProvider.TASK_START_TIME_PROPERTY_ID).greaterThan(-1)
+ .toPredicate();
@@ -88,6 +90,7 @@ public class ServiceCheckValidityCheck extends AbstractCheckDescriptor {
@Inject
Provider<HostRoleCommandDAO> hostRoleCommandDAOProvider;
+
/**
* Constructor.
*/
@@ -140,7 +143,7 @@ public class ServiceCheckValidityCheck extends AbstractCheckDescriptor {
boolean serviceCheckWasExecuted = false;
for (HostRoleCommandEntity command : latestTimestamps.values()) {
- if (command.getCommandDetail().contains(serviceName)) {
+ if (null != command.getCommandDetail() && command.getCommandDetail().contains(serviceName)) {
serviceCheckWasExecuted = true;
Long serviceCheckTimestamp = command.getStartTime();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c51e0b86/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 adbd7cb..7ccafb7 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
@@ -29,6 +29,7 @@ import org.apache.ambari.server.ParentObjectNotFoundException;
import org.apache.ambari.server.StaticallyInject;
import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.UpgradeCheckRegistry;
+import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
@@ -96,6 +97,9 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
private static Provider<UpgradeHelper> upgradeHelper;
@Inject
+ private static Provider<Configuration> config;
+
+ @Inject
private static CheckHelper checkHelper;
private static Set<String> pkPropertyIds = Collections.singleton(UPGRADE_CHECK_ID_PROPERTY_ID);
@@ -207,7 +211,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
LOG.error("Failed to register custom prechecks for the services", e);
}
- for (PrerequisiteCheck prerequisiteCheck : checkHelper.performChecks(upgradeCheckRequest, upgradeChecksToRun)) {
+ for (PrerequisiteCheck prerequisiteCheck : checkHelper.performChecks(upgradeCheckRequest, upgradeChecksToRun, config.get())) {
final Resource resource = new ResourceImpl(Resource.Type.PreUpgradeCheck);
setResourceProperty(resource, UPGRADE_CHECK_ID_PROPERTY_ID, prerequisiteCheck.getId(), requestedIds);
setResourceProperty(resource, UPGRADE_CHECK_CHECK_PROPERTY_ID, prerequisiteCheck.getDescription(), requestedIds);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c51e0b86/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 9192285..f3fbc63 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
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.ambari.server.ClusterNotFoundException;
import org.apache.ambari.server.checks.AbstractCheckDescriptor;
+import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
@@ -86,44 +87,38 @@ public class CheckHelper {
* @return list of pre-requisite check results
*/
public List<PrerequisiteCheck> performChecks(PrereqCheckRequest request,
- List<AbstractCheckDescriptor> checksRegistry) {
+ List<AbstractCheckDescriptor> checksRegistry, Configuration config) {
final String clusterName = request.getClusterName();
- final List<PrerequisiteCheck> prerequisiteCheckResults = new ArrayList<PrerequisiteCheck>();
+ final List<PrerequisiteCheck> prerequisiteCheckResults = new ArrayList<>();
+ final boolean canBypassPreChecks = config.isUpgradePrecheckBypass();
List<DescriptorPreCheck> applicablePreChecks = getApplicablePrerequisiteChecks(request, checksRegistry);
+
for (DescriptorPreCheck descriptorPreCheck : applicablePreChecks) {
AbstractCheckDescriptor checkDescriptor = descriptorPreCheck.descriptor;
PrerequisiteCheck prerequisiteCheck = descriptorPreCheck.check;
try {
checkDescriptor.perform(prerequisiteCheck, request);
-
- boolean canBypassPreChecks = checkDescriptor.isStackUpgradeAllowedToBypassPreChecks();
-
- if (prerequisiteCheck.getStatus() == PrereqCheckStatus.FAIL && canBypassPreChecks) {
- LOG.error("Check {} failed but stack upgrade is allowed to bypass failures. Error to bypass: {}. Failed on: {}",
- checkDescriptor.getDescription().name(),
- prerequisiteCheck.getFailReason(),
- StringUtils.join(prerequisiteCheck.getFailedOn(), ", "));
- prerequisiteCheck.setStatus(PrereqCheckStatus.BYPASS);
- }
- 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());
+ prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
} catch (Exception ex) {
LOG.error("Check " + checkDescriptor.getDescription().name() + " failed", ex);
- prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
prerequisiteCheck.setFailReason("Unexpected server error happened");
- prerequisiteCheckResults.add(prerequisiteCheck);
+ prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
+ }
- request.addResult(checkDescriptor.getDescription(), prerequisiteCheck.getStatus());
+ if (prerequisiteCheck.getStatus() == PrereqCheckStatus.FAIL && canBypassPreChecks) {
+ LOG.error("Check {} failed but stack upgrade is allowed to bypass failures. Error to bypass: {}. Failed on: {}",
+ checkDescriptor.getDescription().name(),
+ prerequisiteCheck.getFailReason(),
+ StringUtils.join(prerequisiteCheck.getFailedOn(), ", "));
+ prerequisiteCheck.setStatus(PrereqCheckStatus.BYPASS);
}
+
+ prerequisiteCheckResults.add(prerequisiteCheck);
+ request.addResult(checkDescriptor.getDescription(), prerequisiteCheck.getStatus());
}
return prerequisiteCheckResults;
http://git-wip-us.apache.org/repos/asf/ambari/blob/c51e0b86/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
index dd843a8..1ba0d70 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
@@ -102,6 +103,42 @@ public class ServiceCheckValidityCheckTest {
}
@Test
+ public void testWithNullCommandDetailAtCommand() throws AmbariException {
+ ServiceComponent serviceComponent = mock(ServiceComponent.class);
+ when(serviceComponent.isVersionAdvertised()).thenReturn(true);
+
+ when(service.getMaintenanceState()).thenReturn(MaintenanceState.OFF);
+ when(service.getServiceComponents()).thenReturn(ImmutableMap.of(SERVICE_COMPONENT_NAME, serviceComponent));
+
+ ServiceConfigEntity serviceConfigEntity = new ServiceConfigEntity();
+ serviceConfigEntity.setServiceName(SERVICE_NAME);
+ serviceConfigEntity.setCreateTimestamp(CONFIG_CREATE_TIMESTAMP);
+
+ HostRoleCommandEntity hostRoleCommandEntity1 = new HostRoleCommandEntity();
+ hostRoleCommandEntity1.setRoleCommand(RoleCommand.SERVICE_CHECK);
+ hostRoleCommandEntity1.setCommandDetail(null);
+ hostRoleCommandEntity1.setStartTime(SERVICE_CHECK_START_TIME);
+ hostRoleCommandEntity1.setRole(Role.ZOOKEEPER_SERVER);
+
+ HostRoleCommandEntity hostRoleCommandEntity2 = new HostRoleCommandEntity();
+ hostRoleCommandEntity2.setRoleCommand(RoleCommand.SERVICE_CHECK);
+ hostRoleCommandEntity2.setCommandDetail(COMMAND_DETAIL);
+ hostRoleCommandEntity2.setStartTime(SERVICE_CHECK_START_TIME);
+ hostRoleCommandEntity2.setRole(Role.HDFS_SERVICE_CHECK);
+
+ when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), eq(SERVICE_NAME))).thenReturn(serviceConfigEntity);
+ when(hostRoleCommandDAO.findAll(any(Request.class), any(Predicate.class))).thenReturn(asList(hostRoleCommandEntity1, hostRoleCommandEntity2));
+
+ PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
+ try {
+ serviceCheckValidityCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
+ } catch (NullPointerException ex){
+ Assert.fail("serviceCheckValidityCheck failed due to null at start_time were not handled");
+ }
+ Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ }
+
+ @Test
public void testFailWhenServiceWithOutdatedServiceCheckExists() throws AmbariException {
ServiceComponent serviceComponent = mock(ServiceComponent.class);
when(serviceComponent.isVersionAdvertised()).thenReturn(true);
@@ -173,7 +210,7 @@ public class ServiceCheckValidityCheckTest {
hostRoleCommandEntity2.setRole(Role.HDFS_SERVICE_CHECK);
when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), eq(SERVICE_NAME))).thenReturn(serviceConfigEntity);
- when(hostRoleCommandDAO.findAll(any(Request.class), any(Predicate.class))).thenReturn(Arrays.asList(hostRoleCommandEntity1, hostRoleCommandEntity2));
+ when(hostRoleCommandDAO.findAll(any(Request.class), any(Predicate.class))).thenReturn(asList(hostRoleCommandEntity1, hostRoleCommandEntity2));
PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
serviceCheckValidityCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME));
http://git-wip-us.apache.org/repos/asf/ambari/blob/c51e0b86/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProviderTest.java
index de93ff4..47bba34 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProviderTest.java
@@ -38,6 +38,7 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.UpgradeCheckRegistry;
+import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.spi.Predicate;
import org.apache.ambari.server.controller.spi.Request;
@@ -84,6 +85,7 @@ public class PreUpgradeCheckResourceProviderTest {
Clusters clusters = injector.getInstance(Clusters.class);
UpgradeHelper upgradeHelper = injector.getInstance(UpgradeHelper.class);
+ Configuration configuration = injector.getInstance(Configuration.class);
RepositoryVersionDAO repoDao = injector.getInstance(RepositoryVersionDAO.class);
RepositoryVersionEntity repo = createNiceMock(RepositoryVersionEntity.class);
@@ -104,6 +106,7 @@ public class PreUpgradeCheckResourceProviderTest {
Map<String, ServiceInfo> allServiceInfoMap = new HashMap<String, ServiceInfo>();
allServiceInfoMap.put("Service100", serviceInfo);
+ expect(configuration.isUpgradePrecheckBypass()).andReturn(false).anyTimes();
// set expectations
expect(managementController.getClusters()).andReturn(clusters).anyTimes();
expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
@@ -135,7 +138,7 @@ public class PreUpgradeCheckResourceProviderTest {
// replay
replay(managementController, clusters, cluster, service, serviceInfo, repoDao, repo, upgradeHelper,
- ambariMetaInfo, upgradePack, config, currentStackId, targetStackId, serviceFactory);
+ ambariMetaInfo, upgradePack, config, currentStackId, targetStackId, serviceFactory, configuration);
ResourceProvider provider = getPreUpgradeCheckResourceProvider(managementController, injector);
// create the request
@@ -198,6 +201,15 @@ public class PreUpgradeCheckResourceProviderTest {
}
}
+ static class TestConfigurationProvider implements Provider<Configuration> {
+ private static Configuration configuration = createNiceMock(Configuration.class);
+
+ @Override
+ public Configuration get(){
+ return configuration;
+ }
+ }
+
static class TestUpgradeHelperProvider implements Provider<UpgradeHelper> {
private static UpgradeHelper upgradeHelper = createNiceMock(UpgradeHelper.class);
@@ -216,6 +228,7 @@ public class PreUpgradeCheckResourceProviderTest {
CheckHelper checkHelper = new CheckHelper();
UpgradeCheckRegistry registry = new UpgradeCheckRegistry();
+ bind(Configuration.class).toProvider(TestConfigurationProvider.class);
bind(AmbariManagementController.class).toInstance(createNiceMock(AmbariManagementController.class));
bind(CheckHelper.class).toInstance(checkHelper);
bind(Clusters.class).toProvider(TestClustersProvider.class);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c51e0b86/ambari-server/src/test/java/org/apache/ambari/server/sample/checks/SampleServiceCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/sample/checks/SampleServiceCheck.java b/ambari-server/src/test/java/org/apache/ambari/server/sample/checks/SampleServiceCheck.java
index 1c16040..3a07928 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/sample/checks/SampleServiceCheck.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/sample/checks/SampleServiceCheck.java
@@ -44,9 +44,5 @@ public class SampleServiceCheck extends AbstractCheckDescriptor {
prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
}
- @Override
- public boolean isStackUpgradeAllowedToBypassPreChecks() {
- return false;
- }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c51e0b86/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
index deca9b8..bfb1db4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
@@ -30,6 +30,7 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.CheckDescription;
import org.apache.ambari.server.checks.ServicesUpCheck;
+import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
@@ -67,15 +68,18 @@ public class CheckHelperTest {
@Test
public void testPreUpgradeCheck() throws Exception {
final CheckHelper helper = new CheckHelper();
+ Configuration configuration = EasyMock.createNiceMock(Configuration.class);
List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<AbstractCheckDescriptor>();
AbstractCheckDescriptor descriptor = EasyMock.createNiceMock(AbstractCheckDescriptor.class);
+
+ EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
descriptor.perform(EasyMock.<PrerequisiteCheck> anyObject(), EasyMock.<PrereqCheckRequest> anyObject());
EasyMock.expectLastCall().times(1);
EasyMock.expect(descriptor.isApplicable(EasyMock.<PrereqCheckRequest> anyObject())).andReturn(true);
- EasyMock.replay(descriptor);
+ EasyMock.replay(descriptor, configuration);
updateChecksRegistry.add(descriptor);
- helper.performChecks(new PrereqCheckRequest("cluster"), updateChecksRegistry);
+ helper.performChecks(new PrereqCheckRequest("cluster"), updateChecksRegistry, configuration);
EasyMock.verify(descriptor);
}
@@ -85,12 +89,14 @@ public class CheckHelperTest {
@Test
public void testPreUpgradeCheckNotApplicable() throws Exception {
final CheckHelper helper = new CheckHelper();
+ Configuration configuration = EasyMock.createNiceMock(Configuration.class);
List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<AbstractCheckDescriptor>();
AbstractCheckDescriptor descriptor = EasyMock.createNiceMock(AbstractCheckDescriptor.class);
+ EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
EasyMock.expect(descriptor.isApplicable(EasyMock.<PrereqCheckRequest> anyObject())).andReturn(false);
- EasyMock.replay(descriptor);
+ EasyMock.replay(descriptor, configuration);
updateChecksRegistry.add(descriptor);
- helper.performChecks(new PrereqCheckRequest("cluster"), updateChecksRegistry);
+ helper.performChecks(new PrereqCheckRequest("cluster"), updateChecksRegistry, configuration);
EasyMock.verify(descriptor);
}
@@ -101,15 +107,17 @@ public class CheckHelperTest {
public void testPreUpgradeCheckThrowsException() throws Exception {
final CheckHelper helper = new CheckHelper();
List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<AbstractCheckDescriptor>();
+ Configuration configuration = EasyMock.createNiceMock(Configuration.class);
AbstractCheckDescriptor descriptor = EasyMock.createNiceMock(AbstractCheckDescriptor.class);
+ EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
descriptor.perform(EasyMock.<PrerequisiteCheck> anyObject(), EasyMock.<PrereqCheckRequest> anyObject());
EasyMock.expectLastCall().andThrow(new AmbariException("error"));
EasyMock.expect(descriptor.isApplicable(EasyMock.<PrereqCheckRequest> anyObject())).andReturn(true);
EasyMock.expect(descriptor.getDescription()).andReturn(CheckDescription.HOSTS_HEARTBEAT).anyTimes();
- EasyMock.replay(descriptor);
+ EasyMock.replay(descriptor, configuration);
updateChecksRegistry.add(descriptor);
- final List<PrerequisiteCheck> upgradeChecks = helper.performChecks(new PrereqCheckRequest("cluster"), updateChecksRegistry);
+ final List<PrerequisiteCheck> upgradeChecks = helper.performChecks(new PrereqCheckRequest("cluster"), updateChecksRegistry, configuration);
EasyMock.verify(descriptor);
Assert.assertEquals(PrereqCheckStatus.FAIL, upgradeChecks.get(0).getStatus());
}
@@ -122,13 +130,15 @@ public class CheckHelperTest {
// This mock class extends CheckHelper and overrides the getPrerequisiteChecks method in order to return
// a PrerequisiteCheck object whose status is FAIL.
final CheckHelperMock helper = new CheckHelperMock();
+ Configuration configuration = EasyMock.createNiceMock(Configuration.class);
List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<AbstractCheckDescriptor>();
PrereqCheckRequest checkRequest = EasyMock.createNiceMock(PrereqCheckRequest.class);
+ EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(true);
EasyMock.expect(checkRequest.getClusterName()).andReturn("c1").anyTimes();
- EasyMock.replay(checkRequest);
+ EasyMock.replay(checkRequest, configuration);
- final List<PrerequisiteCheck> upgradeChecks = helper.performChecks(checkRequest, updateChecksRegistry);
+ final List<PrerequisiteCheck> upgradeChecks = helper.performChecks(checkRequest, updateChecksRegistry, configuration);
Assert.assertEquals(1, upgradeChecks.size());
Assert.assertEquals(PrereqCheckStatus.BYPASS, upgradeChecks.get(0).getStatus());
}
@@ -136,6 +146,7 @@ public class CheckHelperTest {
@Test
public void testPreUpgradeCheckClusterMissing() throws Exception {
final Clusters clusters = Mockito.mock(Clusters.class);
+ Configuration configuration = EasyMock.createNiceMock(Configuration.class);
Mockito.when(clusters.getCluster(Mockito.anyString())).thenAnswer(new Answer<Cluster>() {
@Override
public Cluster answer(InvocationOnMock invocation) throws Throwable {
@@ -169,11 +180,15 @@ public class CheckHelperTest {
final CheckHelper helper = injector.getInstance(CheckHelper.class);
List<AbstractCheckDescriptor> updateChecksRegistry = new ArrayList<AbstractCheckDescriptor>();
+ EasyMock.expect(configuration.isUpgradePrecheckBypass()).andReturn(false);
+
+ EasyMock.replay(configuration);
+
// mocked Cluster has no services, so the check should always be PASS
updateChecksRegistry.add(injector.getInstance(ServicesUpCheck.class));
- List<PrerequisiteCheck> upgradeChecks = helper.performChecks(new PrereqCheckRequest("existing"), updateChecksRegistry);
+ List<PrerequisiteCheck> upgradeChecks = helper.performChecks(new PrereqCheckRequest("existing"), updateChecksRegistry, configuration);
Assert.assertEquals(PrereqCheckStatus.PASS, upgradeChecks.get(0).getStatus());
- upgradeChecks = helper.performChecks(new PrereqCheckRequest("non-existing"), updateChecksRegistry);
+ upgradeChecks = helper.performChecks(new PrereqCheckRequest("non-existing"), updateChecksRegistry, configuration);
Assert.assertEquals(PrereqCheckStatus.FAIL, upgradeChecks.get(0).getStatus());
//non existing cluster is an expected error
Assert.assertTrue(!upgradeChecks.get(0).getFailReason().equals("Unexpected server error happened"));
@@ -196,7 +211,6 @@ public class CheckHelperTest {
EasyMock.expect(descriptor.getDescription()).andReturn(description).anyTimes();
// Allow bypassing failures
- EasyMock.expect(descriptor.isStackUpgradeAllowedToBypassPreChecks()).andReturn(true);
EasyMock.replay(descriptor);
applicablePreChecks.add(new DescriptorPreCheck(descriptor, check));