You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jl...@apache.org on 2015/09/11 00:33:21 UTC
ambari git commit: AMBARI-13018: Upgrade API Endpoint Should Rely on
Prerequisite Endpoint Before Running (jluniya)
Repository: ambari
Updated Branches:
refs/heads/trunk 129741c59 -> d4182e13d
AMBARI-13018: Upgrade API Endpoint Should Rely on Prerequisite Endpoint Before Running (jluniya)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d4182e13
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d4182e13
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d4182e13
Branch: refs/heads/trunk
Commit: d4182e13d199be5a3870e3649088a3bd682f5bb3
Parents: 129741c
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Thu Sep 10 15:30:24 2015 -0700
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Thu Sep 10 15:30:24 2015 -0700
----------------------------------------------------------------------
.../internal/AbstractResourceProvider.java | 3 +-
.../PreUpgradeCheckResourceProvider.java | 6 +-
.../internal/UpgradeResourceProvider.java | 67 ++++++++++++++++++++
.../UpgradeResourceProviderHDP22Test.java | 1 +
4 files changed, 70 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/d4182e13/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java
index 753f9f9..273aba3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java
@@ -150,8 +150,7 @@ public abstract class AbstractResourceProvider extends BaseProvider implements R
*
* @return the set of properties used to build request objects
*/
- protected Set<Map<String, Object>> getPropertyMaps(Predicate givenPredicate)
- throws UnsupportedPropertyException, SystemException, NoSuchResourceException, NoSuchParentResourceException {
+ protected Set<Map<String, Object>> getPropertyMaps(Predicate givenPredicate) {
SimplifyingPredicateVisitor visitor = new SimplifyingPredicateVisitor(this);
PredicateHelper.visit(givenPredicate, visitor);
http://git-wip-us.apache.org/repos/asf/ambari/blob/d4182e13/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 c394498..ce58e1e 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
@@ -28,14 +28,11 @@ import org.apache.ambari.server.StaticallyInject;
import org.apache.ambari.server.checks.UpgradeCheckRegistry;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.PrereqCheckRequest;
-import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
import org.apache.ambari.server.controller.spi.NoSuchResourceException;
import org.apache.ambari.server.controller.spi.Predicate;
import org.apache.ambari.server.controller.spi.Request;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.Resource.Type;
-import org.apache.ambari.server.controller.spi.SystemException;
-import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@ -110,8 +107,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
}
@Override
- public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException,
- NoSuchResourceException, NoSuchParentResourceException {
+ public Set<Resource> getResources(Request request, Predicate predicate) throws NoSuchResourceException {
final Set<Resource> resources = new HashSet<Resource>();
final Set<String> requestedIds = getRequestPropertyIds(request, predicate);
http://git-wip-us.apache.org/repos/asf/ambari/blob/d4182e13/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index d087945..b45f1ac 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -28,12 +28,14 @@ import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import com.google.gson.Gson;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.Role;
import org.apache.ambari.server.RoleCommand;
@@ -62,6 +64,8 @@ import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
import org.apache.ambari.server.orm.dao.HostRoleCommandStatusSummaryDTO;
@@ -85,6 +89,7 @@ import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.UpgradeHelper;
import org.apache.ambari.server.state.UpgradeHelper.UpgradeGroupHolder;
+import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.ConfigureTask;
import org.apache.ambari.server.state.stack.upgrade.Direction;
@@ -116,6 +121,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
protected static final String UPGRADE_DIRECTION = "Upgrade/direction";
protected static final String UPGRADE_REQUEST_STATUS = "Upgrade/request_status";
protected static final String UPGRADE_ABORT_REASON = "Upgrade/abort_reason";
+ protected static final String UPGRADE_SKIP_PREREQUISITE_CHECKS = "Upgrade/skip_prerequisite_checks";
+ protected static final String UPGRADE_FAIL_ON_CHECK_WARNINGS = "Upgrade/fail_on_check_warnings";
/**
* Skip slave/client component failures if the tasks are skippable.
@@ -219,6 +226,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
PROPERTY_IDS.add(UPGRADE_DIRECTION);
PROPERTY_IDS.add(UPGRADE_SKIP_FAILURES);
PROPERTY_IDS.add(UPGRADE_SKIP_SC_FAILURES);
+ PROPERTY_IDS.add(UPGRADE_SKIP_PREREQUISITE_CHECKS);
+ PROPERTY_IDS.add(UPGRADE_FAIL_ON_CHECK_WARNINGS);
PROPERTY_IDS.add(REQUEST_CONTEXT_ID);
PROPERTY_IDS.add(REQUEST_CREATE_TIME_ID);
@@ -453,6 +462,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
String clusterName = (String) requestMap.get(UPGRADE_CLUSTER_NAME);
String version = (String) requestMap.get(UPGRADE_VERSION);
String versionForUpgradePack = (String) requestMap.get(UPGRADE_FROM_VERSION);
+ boolean skipPrereqChecks = Boolean.parseBoolean((String) requestMap.get(UPGRADE_SKIP_PREREQUISITE_CHECKS));
+ boolean failOnCheckWarnings = Boolean.parseBoolean((String) requestMap.get(UPGRADE_FAIL_ON_CHECK_WARNINGS));
if (null == clusterName) {
throw new AmbariException(String.format("%s is required", UPGRADE_CLUSTER_NAME));
@@ -503,6 +514,62 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
direction.getText(false), versionEntity.getUpgradePackage(), repoVersion));
}
+ // Validate there isn't an direction == upgrade/downgrade already in progress.
+ List<UpgradeEntity> upgrades = s_upgradeDAO.findUpgrades(cluster.getClusterId());
+ for (UpgradeEntity entity : upgrades) {
+ if(entity.getDirection() == direction) {
+ Map<Long, HostRoleCommandStatusSummaryDTO> summary = s_hostRoleCommandDAO.findAggregateCounts(
+ entity.getRequestId());
+ CalculatedStatus calc = CalculatedStatus.statusFromStageSummary(summary, summary.keySet());
+ HostRoleStatus status = calc.getStatus();
+ if(!HostRoleStatus.getCompletedStates().contains(status)) {
+ throw new AmbariException(
+ String.format("Unable to perform %s as another %s is in progress. %s %d is in %s",
+ direction.getText(false), direction.getText(false), direction.getText(true),
+ entity.getRequestId().longValue(), status)
+ );
+ }
+ }
+ }
+
+ if(direction.isUpgrade() && !skipPrereqChecks) {
+ // Validate pre-req checks pass
+ PreUpgradeCheckResourceProvider preUpgradeCheckResourceProvider = (PreUpgradeCheckResourceProvider)
+ getResourceProvider(Resource.Type.PreUpgradeCheck);
+ Predicate preUpgradeCheckPredicate = new PredicateBuilder().property(
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID).equals(clusterName).and().property(
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID).equals(repoVersion).toPredicate();
+ Request preUpgradeCheckRequest = PropertyHelper.getReadRequest();
+
+ Set<Resource> preUpgradeCheckResources;
+ try {
+ preUpgradeCheckResources = preUpgradeCheckResourceProvider.getResources(
+ preUpgradeCheckRequest, preUpgradeCheckPredicate);
+ } catch (NoSuchResourceException e) {
+ throw new AmbariException(
+ String.format("Unable to perform %s. Prerequisite checks could not be run",
+ direction.getText(false)));
+ }
+ List<Resource> failedResources = new LinkedList<Resource>();
+ if (preUpgradeCheckResources != null) {
+ for(Resource res : preUpgradeCheckResources) {
+ String id = (String) res.getPropertyValue((PreUpgradeCheckResourceProvider.UPGRADE_CHECK_ID_PROPERTY_ID));
+ PrereqCheckStatus prereqCheckStatus = (PrereqCheckStatus) res.getPropertyValue(
+ PreUpgradeCheckResourceProvider.UPGRADE_CHECK_STATUS_PROPERTY_ID);
+ if(prereqCheckStatus == PrereqCheckStatus.FAIL
+ || (failOnCheckWarnings && prereqCheckStatus == PrereqCheckStatus.WARNING)) {
+ failedResources.add(res);
+ }
+ }
+ }
+ if(!failedResources.isEmpty()) {
+ Gson gson = new Gson();
+ throw new AmbariException(
+ String.format("Unable to perform %s. Prerequisite checks failed %s",
+ direction.getText(false), gson.toJson(failedResources)));
+ }
+ }
+
return up;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/d4182e13/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
index 166b665..3cefab1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
@@ -261,6 +261,7 @@ public class UpgradeResourceProviderHDP22Test {
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.4.2");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
ResourceProvider upgradeResourceProvider = createProvider(amc);