Repository: ambari Updated Branches: refs/heads/trunk 53f028e92 -> c924ebdb6
AMBARI-22254. RU: RU failed on 'Updating configuration sqoop-atlas-application.properties' (ncole) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c924ebdb Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c924ebdb Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c924ebdb Branch: refs/heads/trunk Commit: c924ebdb6da802ab70f95c6f974087645a600b78 Parents: 53f028e Author: Nate Cole <[email protected]> Authored: Tue Oct 17 13:38:10 2017 -0400 Committer: Nate Cole <[email protected]> Committed: Tue Oct 17 14:18:24 2017 -0400 ---------------------------------------------------------------------- .../serveraction/upgrades/ConfigureAction.java | 5 ++++ .../ambari/server/state/stack/UpgradePack.java | 30 +++++++++++++++++++- .../state/stack/upgrade/ClusterGrouping.java | 13 +++++++++ .../state/stack/upgrade/ConfigureTask.java | 16 +++++++++++ .../internal/UpgradeResourceProviderTest.java | 13 +++++++++ .../state/stack/ConfigUpgradeValidityTest.java | 10 +++++++ 6 files changed, 86 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/c924ebdb/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java index a7f910f..f15a507 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java @@ -183,6 +183,11 @@ public class ConfigureAction extends AbstractUpgradeServerAction { String configType = commandParameters.get(ConfigureTask.PARAMETER_CONFIG_TYPE); String serviceName = cluster.getServiceByConfigType(configType); + // !!! we couldn't get the service based on its config type, so try the associated + if (StringUtils.isBlank(serviceName)) { + serviceName = commandParameters.get(ConfigureTask.PARAMETER_ASSOCIATED_SERVICE); + } + RepositoryVersionEntity sourceRepoVersion = upgradeContext.getSourceRepositoryVersion(serviceName); RepositoryVersionEntity targetRepoVersion = upgradeContext.getTargetRepositoryVersion(serviceName); StackId sourceStackId = sourceRepoVersion.getStackId(); http://git-wip-us.apache.org/repos/asf/ambari/blob/c924ebdb/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java index 256b71d..7c32f37 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java @@ -37,11 +37,13 @@ import javax.xml.bind.annotation.XmlValue; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.state.stack.upgrade.ClusterGrouping; +import org.apache.ambari.server.state.stack.upgrade.ConfigureTask; import org.apache.ambari.server.state.stack.upgrade.Direction; import org.apache.ambari.server.state.stack.upgrade.Grouping; import org.apache.ambari.server.state.stack.upgrade.ServiceCheckGrouping; import org.apache.ambari.server.state.stack.upgrade.Task; import org.apache.ambari.server.state.stack.upgrade.UpgradeType; +import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -446,7 +448,7 @@ public class UpgradePack { private void initializeProcessingComponentMappings() { m_process = new LinkedHashMap<>(); - if (null == processing || processing.isEmpty()) { + if (CollectionUtils.isEmpty(processing)) { return; } @@ -574,6 +576,32 @@ public class UpgradePack { throw new RuntimeException(error); } + + // !!! check for config tasks and mark the associated service + initializeTasks(service.name, preTasks); + initializeTasks(service.name, postTasks); + initializeTasks(service.name, tasks); + initializeTasks(service.name, preDowngradeTasks); + initializeTasks(service.name, postDowngradeTasks); + } + + /** + * Checks for config tasks and marks the associated service. + * @param service + * the service name + * @param tasks + * the list of tasks to check + */ + private void initializeTasks(String service, List<Task> tasks) { + if (CollectionUtils.isEmpty(tasks)) { + return; + } + + for (Task task : tasks) { + if (Task.Type.CONFIGURE == task.getType()) { + ((ConfigureTask) task).associatedService = service; + } + } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c924ebdb/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java index 65038e2..5bc3d8f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; @@ -126,6 +127,18 @@ public class ClusterGrouping extends Grouping { return Objects.toStringHelper(this).add("id", id).add("title", title).omitNullValues().toString(); } + + /** + * If a task is found that is configure, set its associated service. This is used + * if the configuration type cannot be isolated by service. + */ + void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { + if (task.getType().equals(Task.Type.CONFIGURE) && StringUtils.isNotEmpty(service)) { + ((ConfigureTask) task).associatedService = service; + } + } + + } public class ClusterBuilder extends StageWrapperBuilder { http://git-wip-us.apache.org/repos/asf/ambari/blob/c924ebdb/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java index f88691d..75b5f59 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java @@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; import org.apache.ambari.server.serveraction.upgrades.ConfigureAction; @@ -91,6 +92,11 @@ public class ConfigureTask extends ServerSideActionTask { */ public static final String PARAMETER_INSERTIONS = "configure-task-insertions"; + /** + * The associated service for the config task + */ + public static final String PARAMETER_ASSOCIATED_SERVICE = "configure-task-associated-service"; + public static final String actionVerb = "Configuring"; /** @@ -114,6 +120,12 @@ public class ConfigureTask extends ServerSideActionTask { public boolean supportsPatch = false; /** + * The associated service is the service where this config task is specified + */ + @XmlTransient + public String associatedService; + + /** * {@inheritDoc} */ @Override @@ -236,6 +248,10 @@ public class ConfigureTask extends ServerSideActionTask { configParameters.put(ConfigureTask.PARAMETER_INSERTIONS, m_gson.toJson(insertions)); } + if (StringUtils.isNotEmpty(associatedService)) { + configParameters.put(ConfigureTask.PARAMETER_ASSOCIATED_SERVICE, associatedService); + } + return configParameters; } http://git-wip-us.apache.org/repos/asf/ambari/blob/c924ebdb/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java index 20adac2..d6b1ab3 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java @@ -45,6 +45,7 @@ import org.apache.ambari.server.Role; import org.apache.ambari.server.RoleCommand; import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper; +import org.apache.ambari.server.actionmanager.ExecutionCommandWrapperFactory; import org.apache.ambari.server.actionmanager.HostRoleCommand; import org.apache.ambari.server.actionmanager.HostRoleStatus; import org.apache.ambari.server.actionmanager.Stage; @@ -67,12 +68,14 @@ import org.apache.ambari.server.controller.utilities.PropertyHelper; import org.apache.ambari.server.events.publishers.AmbariEventPublisher; import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; +import org.apache.ambari.server.orm.dao.ExecutionCommandDAO; import org.apache.ambari.server.orm.dao.HostRoleCommandDAO; import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; import org.apache.ambari.server.orm.dao.RequestDAO; import org.apache.ambari.server.orm.dao.StackDAO; import org.apache.ambari.server.orm.dao.StageDAO; import org.apache.ambari.server.orm.dao.UpgradeDAO; +import org.apache.ambari.server.orm.entities.ExecutionCommandEntity; import org.apache.ambari.server.orm.entities.HostRoleCommandEntity; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; import org.apache.ambari.server.orm.entities.RequestEntity; @@ -100,6 +103,7 @@ import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.UpgradeContext; import org.apache.ambari.server.state.UpgradeHelper; import org.apache.ambari.server.state.UpgradeState; +import org.apache.ambari.server.state.stack.upgrade.ConfigureTask; import org.apache.ambari.server.state.stack.upgrade.Direction; import org.apache.ambari.server.state.stack.upgrade.UpgradeType; import org.apache.ambari.server.topology.TopologyManager; @@ -1832,6 +1836,15 @@ public class UpgradeResourceProviderTest extends EasyMockSupport { if (StringUtils.isNotBlank(command.getCustomCommandName()) && command.getCustomCommandName().equals(ConfigureAction.class.getName())) { foundConfigTask = true; + + ExecutionCommandDAO dao = injector.getInstance(ExecutionCommandDAO.class); + ExecutionCommandEntity entity = dao.findByPK(command.getTaskId()); + ExecutionCommandWrapperFactory factory = injector.getInstance(ExecutionCommandWrapperFactory.class); + ExecutionCommandWrapper wrapper = factory.createFromJson(new String(entity.getCommand())); + Map<String, String> params = wrapper.getExecutionCommand().getCommandParams(); + assertTrue(params.containsKey(ConfigureTask.PARAMETER_ASSOCIATED_SERVICE)); + assertEquals("ZOOKEEPER", params.get(ConfigureTask.PARAMETER_ASSOCIATED_SERVICE)); + break; } } http://git-wip-us.apache.org/repos/asf/ambari/blob/c924ebdb/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java index 2259e30..2930590 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java @@ -45,6 +45,7 @@ import org.apache.ambari.server.state.stack.upgrade.Task.Type; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.io.filefilter.IOFileFilter; +import org.apache.commons.lang.StringUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -128,6 +129,12 @@ public class ConfigUpgradeValidityTest { ConfigureTask configureTask = (ConfigureTask) executionStage.task; assertIdDefinitionExists(configureTask.id, configUpgradePack, upgradePack, sourceStack); + + if (StringUtils.isNotBlank(executionStage.service)) { + Assert.assertEquals(executionStage.service, configureTask.associatedService); + } else { + Assert.assertTrue(null == configureTask.associatedService); + } } } } @@ -144,6 +151,7 @@ public class ConfigUpgradeValidityTest { ConfigureTask configureTask = (ConfigureTask) preTask; assertIdDefinitionExists(configureTask.id, configUpgradePack, upgradePack, sourceStack); + Assert.assertTrue(StringUtils.isNotBlank(configureTask.associatedService)); } } @@ -153,6 +161,7 @@ public class ConfigUpgradeValidityTest { ConfigureTask configureTask = (ConfigureTask) task; assertIdDefinitionExists(configureTask.id, configUpgradePack, upgradePack, sourceStack); + Assert.assertTrue(StringUtils.isNotBlank(configureTask.associatedService)); } } } @@ -163,6 +172,7 @@ public class ConfigUpgradeValidityTest { ConfigureTask configureTask = (ConfigureTask) postTask; assertIdDefinitionExists(configureTask.id, configUpgradePack, upgradePack, sourceStack); + Assert.assertTrue(StringUtils.isNotBlank(configureTask.associatedService)); } } }
