Repository: ambari Updated Branches: refs/heads/branch-2.6 77491d283 -> 6836152c4
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/6836152c Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6836152c Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6836152c Branch: refs/heads/branch-2.6 Commit: 6836152c45c2268c616bd562b9d2908eb07f203f Parents: 77491d2 Author: Nate Cole <[email protected]> Authored: Tue Oct 17 10:17:36 2017 -0400 Committer: Nate Cole <[email protected]> Committed: Tue Oct 17 13:30:40 2017 -0400 ---------------------------------------------------------------------- .../serveraction/upgrades/ConfigureAction.java | 5 ++ .../ambari/server/state/stack/UpgradePack.java | 56 +++++++++++++++----- .../state/stack/upgrade/ClusterGrouping.java | 13 +++++ .../state/stack/upgrade/ConfigureTask.java | 16 ++++++ .../internal/UpgradeResourceProviderTest.java | 13 +++++ .../state/stack/ConfigUpgradeValidityTest.java | 10 ++++ 6 files changed, 99 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/6836152c/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 5c65911..fbcde51 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 @@ -190,6 +190,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/6836152c/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 d8676bd..56f13ab 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; @@ -148,7 +150,7 @@ public class UpgradePack { * @return the preCheck name, e.g. "CheckDescription" */ public List<String> getPrerequisiteChecks() { - return new ArrayList<String>(prerequisiteChecks.checks); + return new ArrayList<>(prerequisiteChecks.checks); } /** @@ -179,7 +181,7 @@ public class UpgradePack { } if (prerequisiteChecks.checks == null) { - prerequisiteChecks.checks = new ArrayList<String>(); + prerequisiteChecks.checks = new ArrayList<>(); } if (newPrereqChecks.checks != null) { prerequisiteChecks.checks.addAll(newPrereqChecks.checks); @@ -194,10 +196,10 @@ public class UpgradePack { return; } if (prerequisiteChecks.configuration.globalProperties == null) { - prerequisiteChecks.configuration.globalProperties = new ArrayList<PrerequisiteProperty>(); + prerequisiteChecks.configuration.globalProperties = new ArrayList<>(); } if (prerequisiteChecks.configuration.prerequisiteCheckProperties == null) { - prerequisiteChecks.configuration.prerequisiteCheckProperties = new ArrayList<PrerequisiteCheckProperties>(); + prerequisiteChecks.configuration.prerequisiteCheckProperties = new ArrayList<>(); } if (newPrereqChecks.configuration.globalProperties != null) { prerequisiteChecks.configuration.globalProperties.addAll(newPrereqChecks.configuration.globalProperties); @@ -285,7 +287,7 @@ public class UpgradePack { * @return the list of groups */ public List<Grouping> getGroups(Direction direction) { - List<Grouping> list = new ArrayList<Grouping>(); + List<Grouping> list = new ArrayList<>(); if (direction.isUpgrade()) { list = groups; } else { @@ -301,7 +303,7 @@ public class UpgradePack { } } - List<Grouping> checked = new ArrayList<Grouping>(); + List<Grouping> checked = new ArrayList<>(); for (Grouping group : list) { if (null == group.intendedDirection || direction == group.intendedDirection) { checked.add(group); @@ -361,7 +363,7 @@ public class UpgradePack { * @return the list of groups, reversed appropriately for a downgrade. */ private List<Grouping> getDowngradeGroupsForRolling() { - List<Grouping> reverse = new ArrayList<Grouping>(); + List<Grouping> reverse = new ArrayList<>(); // !!! Testing exposed groups.size() == 1 issue. Normally there's no precedent for // a one-group upgrade pack, so take it into account anyway. @@ -397,7 +399,7 @@ public class UpgradePack { } private List<Grouping> getDowngradeGroupsForNonrolling() { - List<Grouping> list = new ArrayList<Grouping>(); + List<Grouping> list = new ArrayList<>(); for (Grouping g : groups) { list.add(g); } @@ -438,9 +440,9 @@ public class UpgradePack { * maps those to service name, initializing {@link #m_process} to the result. */ private void initializeProcessingComponentMappings() { - m_process = new LinkedHashMap<String, Map<String, ProcessingComponent>>(); + m_process = new LinkedHashMap<>(); - if (null == processing || processing.isEmpty()) { + if (CollectionUtils.isEmpty(processing)) { return; } @@ -449,7 +451,7 @@ public class UpgradePack { // initialize mapping if not present for the given service name if (null == componentMap) { - componentMap = new LinkedHashMap<String, ProcessingComponent>(); + componentMap = new LinkedHashMap<>(); m_process.put(svc.name, componentMap); } @@ -568,6 +570,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; + } + } } } @@ -590,7 +618,7 @@ public class UpgradePack { * List of additional prerequisite checks to run in addition to required prerequisite checks */ @XmlElement(name="check", type=String.class) - public List<String> checks = new ArrayList<String>(); + public List<String> checks = new ArrayList<>(); /** * Prerequisite checks configuration @@ -623,7 +651,7 @@ public class UpgradePack { if(globalProperties == null) { return null; } - Map<String, String> result = new HashMap<String, String>(); + Map<String, String> result = new HashMap<>(); for (PrerequisiteProperty property : globalProperties) { result.put(property.name, property.value); } @@ -673,7 +701,7 @@ public class UpgradePack { return null; } - Map<String, String> result = new HashMap<String, String>(); + Map<String, String> result = new HashMap<>(); for (PrerequisiteProperty property : properties) { result.put(property.name, property.value); } http://git-wip-us.apache.org/repos/asf/ambari/blob/6836152c/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 7ad0257..63d0993 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/6836152c/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 9f4440f..6264764 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/6836152c/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 d789ab4..aef44a5 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/6836152c/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 44f72bd..d81f420 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)); } } }
