You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sm...@apache.org on 2016/06/30 00:10:25 UTC
ambari git commit: AMBARI-17443. Allow commands to specify if they
should be auto-retried upon failure (smohanty)
Repository: ambari
Updated Branches:
refs/heads/trunk 850a29593 -> 4db43122f
AMBARI-17443. Allow commands to specify if they should be auto-retried upon failure (smohanty)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4db43122
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4db43122
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4db43122
Branch: refs/heads/trunk
Commit: 4db43122f20851bb59893b3575c3a590e6da8cc5
Parents: 850a295
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Wed Jun 29 17:10:06 2016 -0700
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Wed Jun 29 17:10:06 2016 -0700
----------------------------------------------------------------------
.../AmbariCustomCommandExecutionHelper.java | 15 ++++++++
.../ambari/server/state/ConfigHelper.java | 3 +-
.../AmbariManagementControllerTest.java | 38 ++++++++++++++++++++
3 files changed, 55 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/4db43122/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index 9526077..8bb6225 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
@@ -72,6 +72,7 @@ import org.apache.ambari.server.state.stack.OsFamily;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpInProgressEvent;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -990,6 +991,20 @@ public class AmbariCustomCommandExecutionHelper {
actionExecutionContext.getParameters().put(KeyNames.REFRESH_ADITIONAL_COMPONENT_TAGS, requestParams.get(KeyNames.REFRESH_ADITIONAL_COMPONENT_TAGS));
}
+ // If command should be retried upon failure then add the option and also the default duration for retry
+ if (requestParams.containsKey(KeyNames.COMMAND_RETRY_ENABLED)) {
+ extraParams.put(KeyNames.COMMAND_RETRY_ENABLED, requestParams.get(KeyNames.COMMAND_RETRY_ENABLED));
+ String commandRetryDuration = ConfigHelper.COMMAND_RETRY_MAX_TIME_IN_SEC_DEFAULT;
+ if (requestParams.containsKey(KeyNames.MAX_DURATION_OF_RETRIES)) {
+ String commandRetryDurationStr = requestParams.get(KeyNames.MAX_DURATION_OF_RETRIES);
+ Integer commandRetryDurationInt = NumberUtils.toInt(commandRetryDurationStr, 0);
+ if (commandRetryDurationInt > 0) {
+ commandRetryDuration = Integer.toString(commandRetryDurationInt);
+ }
+ }
+ extraParams.put(KeyNames.MAX_DURATION_OF_RETRIES, commandRetryDuration);
+ }
+
if(requestParams.containsKey(KeyNames.REFRESH_CONFIG_TAGS_BEFORE_EXECUTION)){
actionExecutionContext.getParameters().put(KeyNames.REFRESH_CONFIG_TAGS_BEFORE_EXECUTION, requestParams.get(KeyNames.REFRESH_CONFIG_TAGS_BEFORE_EXECUTION));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/4db43122/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
index ecb4a75..46a3f3e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
@@ -101,6 +101,7 @@ public class ConfigHelper {
public static final String CLUSTER_ENV_RETRY_ENABLED = "command_retry_enabled";
public static final String CLUSTER_ENV_RETRY_COMMANDS = "commands_to_retry";
public static final String CLUSTER_ENV_RETRY_MAX_TIME_IN_SEC = "command_retry_max_time_in_sec";
+ public static final String COMMAND_RETRY_MAX_TIME_IN_SEC_DEFAULT = "600";
public static final String CLUSTER_ENV_STACK_FEATURES_PROPERTY = "stack_features";
public static final String CLUSTER_ENV_STACK_TOOLS_PROPERTY = "stack_tools";
@@ -565,7 +566,7 @@ public class ConfigHelper {
*/
public Set<String> findConfigTypesByPropertyName(StackId stackId, String propertyName, String clusterName) throws AmbariException {
StackInfo stack = ambariMetaInfo.getStack(stackId.getStackName(),
- stackId.getStackVersion());
+ stackId.getStackVersion());
Set<String> result = new HashSet<String>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/4db43122/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 29cdbdf..4aa5ea4 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
@@ -6675,6 +6675,7 @@ public class AmbariManagementControllerTest {
Map<String, String> requestProperties = new HashMap<String, String>();
requestProperties.put(REQUEST_CONTEXT_PROPERTY, "Called from a test");
+ requestProperties.put("command_retry_enabled", "true");
// Test multiple restarts
List<RequestResourceFilter> resourceFilters = new ArrayList<RequestResourceFilter>();
@@ -6696,6 +6697,12 @@ public class AmbariManagementControllerTest {
for (HostRoleCommand hrc : storedTasks) {
Assert.assertEquals("RESTART", hrc.getCustomCommandName());
+ Map<String, String> cParams = hrc.getExecutionCommandWrapper().getExecutionCommand().getCommandParams();
+ Assert.assertEquals("Expect retry to be set", true, cParams.containsKey("command_retry_enabled"));
+ Assert.assertEquals("Expect max duration to be set", true, cParams.containsKey("max_duration_for_retries"));
+ Assert.assertEquals("Expect max duration to be 600", "600", cParams.get("max_duration_for_retries"));
+ Assert.assertEquals("Expect retry to be true", "true", cParams.get("command_retry_enabled"));
+
if (hrc.getHostName().equals(host1) && hrc.getRole().equals(Role.DATANODE)) {
expectedRestartCount++;
} else if(hrc.getHostName().equals(host2)) {
@@ -6711,6 +6718,37 @@ public class AmbariManagementControllerTest {
expectedRestartCount);
Assert.assertEquals(requestProperties.get(REQUEST_CONTEXT_PROPERTY), response.getRequestContext());
+ requestProperties.put("max_duration_for_retries", "423");
+ response = controller.createAction(request, requestProperties);
+ Assert.assertEquals(3, response.getTasks().size());
+ storedTasks = actionDB.getRequestTasks(response.getRequestId());
+
+ Assert.assertNotNull(storedTasks);
+ for (HostRoleCommand hrc : storedTasks) {
+ Assert.assertEquals("RESTART", hrc.getCustomCommandName());
+
+ Map<String, String> cParams = hrc.getExecutionCommandWrapper().getExecutionCommand().getCommandParams();
+ Assert.assertEquals("Expect retry to be set", true, cParams.containsKey("command_retry_enabled"));
+ Assert.assertEquals("Expect max duration to be set", true, cParams.containsKey("max_duration_for_retries"));
+ Assert.assertEquals("Expect max duration to be 423", "423", cParams.get("max_duration_for_retries"));
+ Assert.assertEquals("Expect retry to be true", "true", cParams.get("command_retry_enabled"));
+ }
+
+ requestProperties.remove("max_duration_for_retries");
+ requestProperties.remove("command_retry_enabled");
+ response = controller.createAction(request, requestProperties);
+ Assert.assertEquals(3, response.getTasks().size());
+ storedTasks = actionDB.getRequestTasks(response.getRequestId());
+
+ Assert.assertNotNull(storedTasks);
+ for (HostRoleCommand hrc : storedTasks) {
+ Assert.assertEquals("RESTART", hrc.getCustomCommandName());
+
+ Map<String, String> cParams = hrc.getExecutionCommandWrapper().getExecutionCommand().getCommandParams();
+ Assert.assertEquals("Expect retry to be set", false, cParams.containsKey("command_retry_enabled"));
+ Assert.assertEquals("Expect max duration to be set", false, cParams.containsKey("max_duration_for_retries"));
+ }
+
// Test service checks - specific host
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS", null,