Repository: ambari Updated Branches: refs/heads/branch-2.5 d6a654e19 -> c12fbcc2d
AMBARI-19749. Run ru_set_all script after installing packages on single host not belonging to any cluster (magyari_sandor) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c12fbcc2 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c12fbcc2 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c12fbcc2 Branch: refs/heads/branch-2.5 Commit: c12fbcc2d72a120df9abee1d8fe947a7f1fbd72d Parents: d6a654e Author: Sandor Magyari <smagy...@hortonworks.com> Authored: Fri Jan 27 19:23:10 2017 +0100 Committer: Sandor Magyari <smagy...@hortonworks.com> Committed: Mon Jan 30 17:10:41 2017 +0100 ---------------------------------------------------------------------- .../HostStackVersionResourceProvider.java | 46 +++++++++++++++++++- .../HostStackVersionResourceProviderTest.java | 11 +++++ 2 files changed, 56 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/c12fbcc2/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java ---------------------------------------------------------------------- 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 364a61e..8f2d4e6 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 @@ -94,6 +94,7 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource /** * Whether to force creating of install command on a host which is not member of any cluster yet. + * This will also run hdp-select for specified stack version. */ protected static final String HOST_STACK_VERSION_FORCE_INSTALL_ON_NON_MEMBER_HOST_PROPERTY_ID = PropertyHelper .getPropertyId("HostStackVersions", "force_non_member_install"); @@ -105,6 +106,7 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource protected static final String COMPONENT_NAME_PROPERTY_ID = "name"; protected static final String INSTALL_PACKAGES_ACTION = "install_packages"; + protected static final String STACK_SELECT_ACTION = "ru_set_all"; protected static final String INSTALL_PACKAGES_FULL_NAME = "Install version"; @@ -303,7 +305,7 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource private RequestStageContainer createInstallPackagesRequest(String hostName, final String desiredRepoVersion, String stackName, String stackVersion, String clName, - boolean forceInstallOnNonMemberHost, + final boolean forceInstallOnNonMemberHost, Set<Map<String, String>> componentNames) throws NoSuchParentResourceException, SystemException { @@ -523,6 +525,11 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource throw new SystemException("Can not modify stage", e); } + if (forceInstallOnNonMemberHost) { + addSelectStackStage(desiredRepoVersion, forceInstallOnNonMemberHost, cluster, filter, caption, req, + hostLevelParams, clusterHostInfoJson); + } + try { if (!forceInstallOnNonMemberHost) { hostVersEntity.setState(RepositoryVersionState.INSTALLING); @@ -536,6 +543,43 @@ 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); + + stage = stageFactory.createNew(req.getId(), + "/tmp/ambari", + cluster.getClusterName(), + cluster.getClusterId(), + caption, + clusterHostInfoJson, + StageUtils.getGson().toJson(commandParams), + StageUtils.getGson().toJson(hostLevelParams)); + + stageId = req.getLastStageId() + 1; + if (0L == stageId) { + stageId = 1L; + } + stage.setStageId(stageId); + 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))); + + try { + actionExecutionHelper.get().addExecutionCommandsToStage(actionContext, stage, null, !forceInstallOnNonMemberHost); + } catch (AmbariException e) { + throw new SystemException("Can not modify stage", e); + } + } + private RequestStageContainer createRequest(String caption) { ActionManager actionManager = getManagementController().getActionManager(); http://git-wip-us.apache.org/repos/asf/ambari/blob/c12fbcc2/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java ---------------------------------------------------------------------- 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 ecbd273..406d70b 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 @@ -21,11 +21,13 @@ package org.apache.ambari.server.controller.internal; import static junit.framework.Assert.assertEquals; import static org.easymock.EasyMock.anyLong; import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.capture; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.isA; +import static org.easymock.EasyMock.newCapture; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; @@ -44,6 +46,7 @@ import org.apache.ambari.server.actionmanager.HostRoleCommand; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.controller.ExecuteActionRequest; import org.apache.ambari.server.controller.RequestStatusResponse; import org.apache.ambari.server.controller.ResourceProviderFactory; import org.apache.ambari.server.controller.spi.Predicate; @@ -72,6 +75,7 @@ import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.cluster.ClusterImpl; import org.apache.ambari.server.topology.TopologyManager; import org.apache.ambari.server.utils.StageUtils; +import org.easymock.Capture; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -99,6 +103,8 @@ public class HostStackVersionResourceProviderTest { private ResourceProviderFactory resourceProviderFactory; private ResourceProvider csvResourceProvider; private ActionManager actionManager; + private Capture<org.apache.ambari.server.actionmanager.Request> requestCapture; + private Capture<ExecuteActionRequest> executeActionRequestCapture; private HostVersionEntity hostVersionEntityMock; private RepositoryVersionEntity repoVersion; private Resource.Type type = Resource.Type.HostStackVersion; @@ -337,6 +343,9 @@ public class HostStackVersionResourceProviderTest { anyObject(String.class))).andReturn(repoVersion); expect(actionManager.getRequestTasks(anyLong())).andReturn(Collections.<HostRoleCommand>emptyList()).anyTimes(); + requestCapture = newCapture(); + executeActionRequestCapture = newCapture(); + actionManager.sendActions(capture(requestCapture), capture(executeActionRequestCapture)); StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class)); StageUtils.setConfiguration(injector.getInstance(Configuration.class)); @@ -384,6 +393,8 @@ public class HostStackVersionResourceProviderTest { // verify verify(managementController, response, clusters); + + assertEquals(requestCapture.getValue().getStages().size(), 2); } @Test