You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ad...@apache.org on 2018/06/19 03:23:37 UTC
[ambari] branch branch-2.6 updated: AMBARI-24139. Failed to
force_non_member_install a stack version on hosts (#1574)
This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch branch-2.6
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-2.6 by this push:
new dcd9f52 AMBARI-24139. Failed to force_non_member_install a stack version on hosts (#1574)
dcd9f52 is described below
commit dcd9f521ef3d1f0daca95cfe94120f894ca06e1f
Author: Doroszlai, Attila <64...@users.noreply.github.com>
AuthorDate: Tue Jun 19 05:23:33 2018 +0200
AMBARI-24139. Failed to force_non_member_install a stack version on hosts (#1574)
---
.../internal/HostStackVersionResourceProvider.java | 81 +++++++++-------------
.../HostStackVersionResourceProviderTest.java | 39 ++++++++---
2 files changed, 63 insertions(+), 57 deletions(-)
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
index d4c0116..3b22493 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
@@ -66,6 +66,7 @@ import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -437,13 +438,7 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
RequestResourceFilter filter = new RequestResourceFilter(null, null,
Collections.singletonList(hostName));
- ActionExecutionContext actionContext = new ActionExecutionContext(
- cluster.getClusterName(), INSTALL_PACKAGES_ACTION,
- Collections.singletonList(filter),
- roleParams);
- actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout(true)));
- actionContext.setRepositoryVersion(repoVersionEnt);
-
+ ActionExecutionContext actionContext = createActionExecutionContext(cluster, repoVersionEnt, roleParams, filter, INSTALL_PACKAGES_ACTION);
repoVersionHelper.addCommandRepositoryToContext(actionContext, osEntity);
String caption = String.format(INSTALL_PACKAGES_FULL_NAME + " on host %s", hostName);
@@ -461,31 +456,21 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
throw new SystemException("Could not build cluster topology", e);
}
- Stage stage = stageFactory.createNew(req.getId(),
- "/tmp/ambari",
- cluster.getClusterName(),
- cluster.getClusterId(),
- caption,
- "{}",
- StageUtils.getGson().toJson(hostLevelParams));
+ String hostLevelParamsJson = StageUtils.getGson().toJson(hostLevelParams);
+ Stage stage = createStage(cluster, req, caption, "{}", hostLevelParamsJson, clusterHostInfoJson);
+ addToStage(actionContext, stage, forceInstallOnNonMemberHost);
- long stageId = req.getLastStageId() + 1;
- if (0L == stageId) {
- stageId = 1L;
- }
- stage.setStageId(stageId);
- req.setClusterHostInfo(clusterHostInfoJson);
- req.addStages(Collections.singletonList(stage));
+ if (forceInstallOnNonMemberHost) {
+ Map<String, String> stackSelectRoleParams = Collections.emptyMap();
+ actionContext = createActionExecutionContext(cluster, repoVersionEnt, stackSelectRoleParams, filter, STACK_SELECT_ACTION);
- try {
- actionExecutionHelper.get().addExecutionCommandsToStage(actionContext, stage, null, !forceInstallOnNonMemberHost);
- } catch (AmbariException e) {
- throw new SystemException("Can not modify stage", e);
- }
+ ImmutableMap<String, String> commandParams = ImmutableMap.of(
+ "version", desiredRepoVersion
+ );
+ String commandParamsJson = StageUtils.getGson().toJson(commandParams);
+ stage = createStage(cluster, req, caption, commandParamsJson, hostLevelParamsJson, clusterHostInfoJson);
- if (forceInstallOnNonMemberHost) {
- addSelectStackStage(desiredRepoVersion, forceInstallOnNonMemberHost, cluster, filter, caption, req,
- hostLevelParams, clusterHostInfoJson);
+ addToStage(actionContext, stage, true);
}
try {
@@ -500,23 +485,28 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
return req;
}
- private void addSelectStackStage(String desiredRepoVersion, boolean forceInstallOnNonMemberHost, Cluster cluster,
- RequestResourceFilter filter, String caption, RequestStageContainer req, Map<String, String> hostLevelParams, String clusterHostInfoJson) throws SystemException {
- Stage stage;
- long stageId;
- ActionExecutionContext actionContext;
- Map<String, String> commandParams = new HashMap<>();
- commandParams.put("version", desiredRepoVersion);
+ private ActionExecutionContext createActionExecutionContext(Cluster cluster, RepositoryVersionEntity repoVersionEntity, Map<String, String> roleParams, RequestResourceFilter filter, String action) {
+ List<RequestResourceFilter> resourceFilters = Collections.singletonList(filter);
+ ActionExecutionContext actionContext = new ActionExecutionContext(cluster.getClusterName(), action, resourceFilters, roleParams);
+ Short timeout = Short.valueOf(configuration.getDefaultAgentTaskTimeout(true));
+ actionContext.setTimeout(timeout);
+ actionContext.setRepositoryVersion(repoVersionEntity);
+ return actionContext;
+ }
- stage = stageFactory.createNew(req.getId(),
+ private Stage createStage(Cluster cluster, RequestStageContainer req, String caption,
+ String commandParamsJson, String hostLevelParamsJson, String clusterHostInfoJson
+ ) {
+ Stage stage = stageFactory.createNew(req.getId(),
"/tmp/ambari",
cluster.getClusterName(),
cluster.getClusterId(),
caption,
- StageUtils.getGson().toJson(commandParams),
- StageUtils.getGson().toJson(hostLevelParams));
+ commandParamsJson,
+ hostLevelParamsJson
+ );
- stageId = req.getLastStageId() + 1;
+ long stageId = req.getLastStageId() + 1;
if (0L == stageId) {
stageId = 1L;
}
@@ -524,20 +514,17 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
req.setClusterHostInfo(clusterHostInfoJson);
req.addStages(Collections.singletonList(stage));
- actionContext = new ActionExecutionContext(
- cluster.getClusterName(), STACK_SELECT_ACTION,
- Collections.singletonList(filter),
- Collections.<String, String>emptyMap());
- actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout(true)));
+ return stage;
+ }
+ private void addToStage(ActionExecutionContext context, Stage stage, boolean forceInstallOnNonMemberHost) throws SystemException {
try {
- actionExecutionHelper.get().addExecutionCommandsToStage(actionContext, stage, null, !forceInstallOnNonMemberHost);
+ actionExecutionHelper.get().addExecutionCommandsToStage(context, stage, null, !forceInstallOnNonMemberHost);
} catch (AmbariException e) {
throw new SystemException("Can not modify stage", e);
}
}
-
private RequestStageContainer createRequest(String caption) {
ActionManager actionManager = getManagementController().getActionManager();
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
index 26b89d3..ed3221e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
@@ -45,7 +45,10 @@ import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.H2DatabaseCleaner;
import org.apache.ambari.server.actionmanager.ActionManager;
+import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
import org.apache.ambari.server.actionmanager.HostRoleCommand;
+import org.apache.ambari.server.actionmanager.Stage;
+import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariManagementController;
@@ -303,7 +306,9 @@ public class HostStackVersionResourceProviderTest {
@Test
public void testCreateResources_on_host_not_belonging_To_any_cluster() throws Exception {
- StackId stackId = new StackId("HDP", "2.0.1");
+ String stackName = "HDP";
+ String stackVersion = "2.0.1";
+ StackId stackId = new StackId(stackName, stackVersion);
final Host host1 = createNiceMock("host1", Host.class);
expect(host1.getHostName()).andReturn("host1").anyTimes();
@@ -330,10 +335,12 @@ public class HostStackVersionResourceProviderTest {
expect(managementController.getActionManager()).andReturn(actionManager).anyTimes();
expect(managementController.getJdkResourceUrl()).andReturn("/JdkResourceUrl").anyTimes();
expect(managementController.getPackagesForServiceHost(anyObject(ServiceInfo.class),
- anyObject(Map.class), anyObject(String.class))).andReturn(packages).anyTimes();
+ anyObject(Map.class), anyObject(String.class)
+ )).andReturn(packages).anyTimes();
expect(resourceProviderFactory.getHostResourceProvider(anyObject(Set.class), anyObject(Map.class),
- eq(managementController))).andReturn(csvResourceProvider).anyTimes();
+ eq(managementController)
+ )).andReturn(csvResourceProvider).anyTimes();
expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster);
expect(clusters.getHost(anyObject(String.class))).andReturn(host1);
@@ -344,7 +351,8 @@ public class HostStackVersionResourceProviderTest {
expect(
repositoryVersionDAOMock.findByStackAndVersion(
anyObject(StackId.class),
- anyObject(String.class))).andReturn(repoVersion);
+ anyObject(String.class)
+ )).andReturn(repoVersion);
expect(actionManager.getRequestTasks(anyLong())).andReturn(Collections.<HostRoleCommand>emptyList()).anyTimes();
requestCapture = newCapture();
@@ -356,13 +364,15 @@ public class HostStackVersionResourceProviderTest {
// replay
replay(managementController, response, clusters, resourceProviderFactory, csvResourceProvider,
- cluster, repositoryVersionDAOMock, configHelper, sch, actionManager, hostVersionEntityMock, hostVersionDAOMock);
+ cluster, repositoryVersionDAOMock, configHelper, sch, actionManager, hostVersionEntityMock, hostVersionDAOMock
+ );
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
- managementController);
+ managementController
+ );
injector.injectMembers(provider);
@@ -374,8 +384,8 @@ public class HostStackVersionResourceProviderTest {
// add properties to the request map
properties.put(HostStackVersionResourceProvider.HOST_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
properties.put(HostStackVersionResourceProvider.HOST_STACK_VERSION_REPO_VERSION_PROPERTY_ID, "2.2.0.1-885");
- properties.put(HostStackVersionResourceProvider.HOST_STACK_VERSION_STACK_PROPERTY_ID, "HDP");
- properties.put(HostStackVersionResourceProvider.HOST_STACK_VERSION_VERSION_PROPERTY_ID, "2.0.1");
+ properties.put(HostStackVersionResourceProvider.HOST_STACK_VERSION_STACK_PROPERTY_ID, stackName);
+ properties.put(HostStackVersionResourceProvider.HOST_STACK_VERSION_VERSION_PROPERTY_ID, stackVersion);
properties.put(HostStackVersionResourceProvider.HOST_STACK_VERSION_HOST_NAME_PROPERTY_ID, "host1");
Set<Map<String, String>> components = new HashSet<>();
Map<String, String> hiveMetastoreComponent = new HashMap<>();
@@ -386,7 +396,8 @@ public class HostStackVersionResourceProviderTest {
components.add(hiveServerstoreComponent);
properties.put(HostStackVersionResourceProvider.HOST_STACK_VERSION_COMPONENT_NAMES_PROPERTY_ID, components);
properties.put(HostStackVersionResourceProvider.HOST_STACK_VERSION_FORCE_INSTALL_ON_NON_MEMBER_HOST_PROPERTY_ID,
- "true");
+ "true"
+ );
propertySet.add(properties);
@@ -398,7 +409,15 @@ public class HostStackVersionResourceProviderTest {
// verify
verify(managementController, response, clusters);
- assertEquals(requestCapture.getValue().getStages().size(), 2);
+ org.apache.ambari.server.actionmanager.Request capturedRequest = requestCapture.getValue();
+ assertEquals(capturedRequest.getStages().size(), 2);
+ for (Stage stage : capturedRequest.getStages()) {
+ for (ExecutionCommandWrapper cmdWrapper : stage.getExecutionCommands(host1.getHostName())) {
+ Map<String, String> hostLevelParams = cmdWrapper.getExecutionCommand().getHostLevelParams();
+ assertEquals(stackName, hostLevelParams.get(ExecutionCommand.KeyNames.STACK_NAME));
+ assertEquals(stackVersion, hostLevelParams.get(ExecutionCommand.KeyNames.STACK_VERSION));
+ }
+ }
}
@Test