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));
                   }
                 }
               }

Reply via email to