AMBARI-22411. Restart all required services failed when running cluster with several patch upgrades applied (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/068d82f7 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/068d82f7 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/068d82f7 Branch: refs/heads/branch-feature-AMBARI-21674 Commit: 068d82f700432cf5cfa75d20924443e998d8fe87 Parents: ec02a14 Author: Nate Cole <[email protected]> Authored: Fri Nov 10 11:23:13 2017 -0500 Committer: Nate Cole <[email protected]> Committed: Fri Nov 10 12:00:14 2017 -0500 ---------------------------------------------------------------------- .../AmbariCustomCommandExecutionHelper.java | 23 ++++---- .../AmbariManagementControllerImpl.java | 60 +++----------------- .../internal/UpgradeResourceProvider.java | 8 +-- .../HDP/2.0.6/properties/stack_packages.json | 3 +- .../AmbariManagementControllerImplTest.java | 2 +- 5 files changed, 25 insertions(+), 71 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/068d82f7/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java index e8febbb..dc6bbb7 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java @@ -1425,27 +1425,23 @@ public class AmbariCustomCommandExecutionHelper { * * @param actionExecContext the context * @param cluster the cluster for the command + * @param stackId the stack id used to load service metainfo. * * @return a wrapper of the important JSON structures to add to a stage */ public ExecuteCommandJson getCommandJson(ActionExecutionContext actionExecContext, - Cluster cluster, RepositoryVersionEntity repositoryVersion, String requestContext) throws AmbariException { + Cluster cluster, StackId stackId, String requestContext) throws AmbariException { Map<String, String> commandParamsStage = StageUtils.getCommandParamsStage(actionExecContext, requestContext); Map<String, String> hostParamsStage = new HashMap<>(); Map<String, Set<String>> clusterHostInfo; String clusterHostInfoJson = "{}"; - StackId stackId = null; - if (null != repositoryVersion) { - stackId = repositoryVersion.getStackId(); - } - if (null != cluster) { clusterHostInfo = StageUtils.getClusterHostInfo(cluster); // Important, because this runs during Stack Uprade, it needs to use the effective Stack Id. - hostParamsStage = createDefaultHostParams(cluster, repositoryVersion); + hostParamsStage = createDefaultHostParams(cluster, stackId); String componentName = null; String serviceName = null; @@ -1454,7 +1450,7 @@ public class AmbariCustomCommandExecutionHelper { serviceName = actionExecContext.getOperationLevel().getServiceName(); } - if (serviceName != null && componentName != null && null != stackId) { + if (serviceName != null && componentName != null) { Service service = cluster.getService(serviceName); ServiceComponent component = service.getServiceComponent(componentName); stackId = component.getDesiredStackId(); @@ -1473,6 +1469,10 @@ public class AmbariCustomCommandExecutionHelper { clusterHostInfoJson = StageUtils.getGson().toJson(clusterHostInfo); + if (null == stackId && null != cluster) { + stackId = cluster.getDesiredStackVersion(); + } + //Propogate HCFS service type info to command params if (null != stackId) { Map<String, ServiceInfo> serviceInfos = ambariMetaInfo.getServices(stackId.getStackName(), @@ -1497,11 +1497,10 @@ public class AmbariCustomCommandExecutionHelper { hostParamsStageJson); } - Map<String, String> createDefaultHostParams(Cluster cluster, RepositoryVersionEntity repositoryVersion) throws AmbariException { - return createDefaultHostParams(cluster, repositoryVersion.getStackId()); - } - Map<String, String> createDefaultHostParams(Cluster cluster, StackId stackId) throws AmbariException { + if (null == stackId) { + stackId = cluster.getDesiredStackVersion(); + } TreeMap<String, String> hostLevelParams = new TreeMap<>(); StageUtils.useStackJdkIfExists(hostLevelParams, configs); http://git-wip-us.apache.org/repos/asf/ambari/blob/068d82f7/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 380e1b4..4c00f1f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -68,6 +68,8 @@ import java.util.concurrent.TimeUnit; import javax.persistence.RollbackException; +import org.apache.ambari.annotations.Experimental; +import org.apache.ambari.annotations.ExperimentalFeature; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ClusterNotFoundException; import org.apache.ambari.server.DuplicateResourceException; @@ -2838,7 +2840,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle if (StringUtils.isBlank(stage.getHostParamsStage())) { RepositoryVersionEntity repositoryVersion = serviceComponent.getDesiredRepositoryVersion(); stage.setHostParamsStage(StageUtils.getGson().toJson( - customCommandExecutionHelper.createDefaultHostParams(cluster, repositoryVersion))); + customCommandExecutionHelper.createDefaultHostParams(cluster, repositoryVersion.getStackId()))); } @@ -3186,7 +3188,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle Map<String, String> hostParamsCmd = customCommandExecutionHelper.createDefaultHostParams( - cluster, scHost.getServiceComponent().getDesiredRepositoryVersion()); + cluster, scHost.getServiceComponent().getDesiredStackId()); Stage stage = createNewStage(0, cluster, 1, "", clusterHostInfoJson, "{}", ""); @@ -4154,56 +4156,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle actionManager, actionRequest); - RepositoryVersionEntity desiredRepositoryVersion = null; - - RequestOperationLevel operationLevel = actionExecContext.getOperationLevel(); - if (null != operationLevel && StringUtils.isNotBlank(operationLevel.getServiceName())) { - Service service = cluster.getService(operationLevel.getServiceName()); - if (null != service) { - desiredRepositoryVersion = service.getDesiredRepositoryVersion(); - } - } - - if (null == desiredRepositoryVersion && CollectionUtils.isNotEmpty(actionExecContext.getResourceFilters())) { - Set<RepositoryVersionEntity> versions = new HashSet<>(); - - for (RequestResourceFilter filter : actionExecContext.getResourceFilters()) { - RepositoryVersionEntity repoVersion = null; - - if (StringUtils.isNotBlank(filter.getServiceName())) { - Service service = cluster.getService(filter.getServiceName()); - - if (StringUtils.isNotBlank(filter.getComponentName())) { - ServiceComponent serviceComponent = service.getServiceComponent(filter.getComponentName()); - - repoVersion = serviceComponent.getDesiredRepositoryVersion(); - } - - if (null == repoVersion) { - repoVersion = service.getDesiredRepositoryVersion(); - } - } - - if (null != repoVersion) { - versions.add(repoVersion); - } - } - - if (1 == versions.size()) { - desiredRepositoryVersion = versions.iterator().next(); - } else if (versions.size() > 1) { - Set<String> errors = new HashSet<>(); - for (RepositoryVersionEntity version : versions) { - errors.add(String.format("%s/%s", version.getStackId(), version.getVersion())); - } - throw new IllegalArgumentException(String.format("More than one repository is resolved with this Action: %s", - StringUtils.join(errors, ';'))); - } - } - - - ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext, - cluster, desiredRepositoryVersion, requestContext); + @Experimental(feature=ExperimentalFeature.MULTI_SERVICE, + comment = "This must change with Multi-Service since the cluster won't have a desired stack version") + ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext, cluster, + null == cluster ? null : cluster.getDesiredStackVersion(), requestContext); String commandParamsForStage = jsons.getCommandParamsForStage(); http://git-wip-us.apache.org/repos/asf/ambari/blob/068d82f7/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 14b1b86..d4111d6 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 @@ -1073,7 +1073,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider actionContext.setAutoSkipFailures(context.isComponentFailureAutoSkipped()); ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext, - cluster, effectiveRepositoryVersion, null); + cluster, effectiveRepositoryVersion.getStackId(), null); Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari", cluster.getClusterName(), cluster.getClusterId(), entity.getText(), jsons.getCommandParamsForStage(), @@ -1155,7 +1155,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider actionContext.setMaintenanceModeHostExcluded(true); ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext, - cluster, effectiveRepositoryVersion, null); + cluster, effectiveRepositoryVersion.getStackId(), null); Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari", cluster.getClusterName(), cluster.getClusterId(), entity.getText(), jsons.getCommandParamsForStage(), @@ -1220,7 +1220,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider actionContext.setMaintenanceModeHostExcluded(true); ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext, - cluster, effectiveRepositoryVersion, null); + cluster, effectiveRepositoryVersion.getStackId(), null); Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari", cluster.getClusterName(), cluster.getClusterId(), entity.getText(), jsons.getCommandParamsForStage(), @@ -1361,7 +1361,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider actionContext.setMaintenanceModeHostExcluded(true); ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(actionContext, - cluster, context.getRepositoryVersion(), null); + cluster, context.getRepositoryVersion().getStackId(), null); Stage stage = s_stageFactory.get().createNew(request.getId().longValue(), "/tmp/ambari", cluster.getClusterName(), cluster.getClusterId(), stageText, jsons.getCommandParamsForStage(), http://git-wip-us.apache.org/repos/asf/ambari/blob/068d82f7/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json b/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json index 23c6d32..68e6bf8 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json +++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json @@ -1277,8 +1277,7 @@ } }, "upgrade-dependencies" : { - "YARN": ["TEZ"], - "TEZ": ["YARN"], + "HIVE": ["TEZ"], "MAHOUT": ["MAPREDUCE2"] } } http://git-wip-us.apache.org/repos/asf/ambari/blob/068d82f7/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java index 9547271..94c5ebe 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java @@ -2138,7 +2138,7 @@ public class AmbariManagementControllerImplTest { f.setAccessible(true); f.set(helper, gson); - Map<String, String> defaultHostParams = helper.createDefaultHostParams(cluster, repositoryVersionEntity); + Map<String, String> defaultHostParams = helper.createDefaultHostParams(cluster, repositoryVersionEntity.getStackId()); assertEquals(15, defaultHostParams.size()); assertEquals(MYSQL_JAR, defaultHostParams.get(DB_DRIVER_FILENAME));
