Repository: ambari
Updated Branches:
  refs/heads/branch-2.1 b8a8a1be0 -> b9985a0d3


AMBARI-13405. Improve update repo custom action.(vbrodetskyi)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b9985a0d
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b9985a0d
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b9985a0d

Branch: refs/heads/branch-2.1
Commit: b9985a0d3e765dd35c43b73c8b90ab97d6cb70e7
Parents: b8a8a1b
Author: Vitaly Brodetskyi <[email protected]>
Authored: Thu Oct 15 14:04:39 2015 +0300
Committer: Vitaly Brodetskyi <[email protected]>
Committed: Thu Oct 15 14:04:39 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/ambari/server/Role.java     |  1 +
 .../controller/AmbariActionExecutionHelper.java | 35 ++++++++++++++++++--
 .../AmbariManagementControllerTest.java         | 14 ++++++++
 3 files changed, 48 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b9985a0d/ambari-server/src/main/java/org/apache/ambari/server/Role.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/Role.java 
b/ambari-server/src/main/java/org/apache/ambari/server/Role.java
index c684981..df60988 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/Role.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/Role.java
@@ -114,6 +114,7 @@ public class Role {
   public static final Role AMS_SERVICE_CHECK = 
valueOf("AMBARI_METRICS_SERVICE_CHECK");
   public static final Role ACCUMULO_CLIENT = valueOf("ACCUMULO_CLIENT");
   public static final Role INSTALL_PACKAGES = valueOf("install_packages");
+  public static final Role UPDATE_REPO = valueOf("update_repo");
 
   private String name = null;
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/b9985a0d/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
index 564a288..d834731 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
@@ -71,6 +71,10 @@ public class AmbariActionExecutionHelper {
   private final static Logger LOG =
       LoggerFactory.getLogger(AmbariActionExecutionHelper.class);
   private static final String TYPE_PYTHON = "PYTHON";
+  private static final String ACTION_UPDATE_REPO = "update_repo";
+  private static final String SUCCESS_FACTOR_PARAMETER = "success_factor";
+
+  private static final float UPDATE_REPO_SUCCESS_FACTOR_DEFAULT = 0f;
 
   @Inject
   private Clusters clusters;
@@ -224,8 +228,6 @@ public class AmbariActionExecutionHelper {
    *
    * @param actionContext  the context associated with the action
    * @param stage          stage into which tasks must be inserted
-   * @param retryAllowed   indicates whether retry is allowed on failure
-   *
    * @throws AmbariException if the task can not be added
    */
   public void addExecutionCommandsToStage(final ActionExecutionContext 
actionContext, Stage stage)
@@ -346,6 +348,8 @@ public class AmbariActionExecutionHelper {
       }
     }
 
+    setAdditionalParametersForStageAccordingToAction(stage, actionContext);
+
     // create tasks for each host
     for (String hostName : targetHosts) {
       stage.addHostRoleExecutionCommand(hostName, 
Role.valueOf(actionContext.getActionName()),
@@ -429,6 +433,33 @@ public class AmbariActionExecutionHelper {
     }
   }
 
+  /*
+  * This method adds additional properties
+  * to action params. For example: success factor.
+  *
+  * */
+
+  private void setAdditionalParametersForStageAccordingToAction(Stage stage, 
ActionExecutionContext actionExecutionContext) throws AmbariException {
+    if (actionExecutionContext.getActionName().equals(ACTION_UPDATE_REPO)) {
+      Map<String, String> params = actionExecutionContext.getParameters();
+      float successFactor = UPDATE_REPO_SUCCESS_FACTOR_DEFAULT;
+      if (params != null && params.containsKey(SUCCESS_FACTOR_PARAMETER)) {
+        try{
+          successFactor = Float.valueOf(params.get(SUCCESS_FACTOR_PARAMETER));
+        } catch (Exception ex) {
+          throw new AmbariException("Failed to cast success_factor value to 
float!", ex.getCause());
+        }
+      }
+      stage.getSuccessFactors().put(Role.UPDATE_REPO, successFactor);
+    }
+  }
+
+  /*
+  * This method builds and adds repo info
+  * to hostLevelParams of action
+  *
+  * */
+
   private void addRepoInfoToHostLevelParams(Cluster cluster, Map<String, 
String> hostLevelParams, String hostName) throws AmbariException {
     if (cluster != null) {
       JsonObject rootJsonObject = new JsonObject();

http://git-wip-us.apache.org/repos/asf/ambari/blob/b9985a0d/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index eed4379..092ad00 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -4515,6 +4515,10 @@ public class AmbariManagementControllerTest {
         TargetHostType.ANY, Short.valueOf("100")));
 
     controller.getAmbariMetaInfo().addActionDefinition(new ActionDefinition(
+            "update_repo", ActionType.SYSTEM, "", "HDFS", "DATANODE", "Does 
file exist",
+            TargetHostType.ANY, Short.valueOf("100")));
+
+    controller.getAmbariMetaInfo().addActionDefinition(new ActionDefinition(
         "a3", ActionType.SYSTEM, "", "MAPREDUCE", "MAPREDUCE_CLIENT", "Does 
file exist",
         TargetHostType.ANY, Short.valueOf("100")));
 
@@ -4594,6 +4598,16 @@ public class AmbariManagementControllerTest {
     expectActionCreationErrorWithMessage(actionRequest, requestProperties,
         "Request specifies host h6 but its not a valid host based on the 
target service=HDFS and component=DATANODE");
 
+    hosts.clear();
+    hosts.add("h1");
+    resourceFilters.clear();
+    resourceFilter = new RequestResourceFilter("", "", hosts);
+    resourceFilters.add(resourceFilter);
+    params.put("success_factor", "1r");
+    actionRequest = new ExecuteActionRequest("c1", null, "update_repo", 
resourceFilters, null, params, false);
+    expectActionCreationErrorWithMessage(actionRequest, requestProperties,
+            "Failed to cast success_factor value to float!");
+
     resourceFilters.clear();
     resourceFilter = new RequestResourceFilter("HIVE", "", null);
     resourceFilters.add(resourceFilter);

Reply via email to