فهرست منبع

AMBARI-9752. Increase Install New Stack Version timeout (dlysnichenko)

Lisnichenko Dmitro 10 سال پیش
والد
کامیت
46f1ffbec1

+ 2 - 0
ambari-server/conf/unix/ambari.properties

@@ -68,6 +68,8 @@ server.execution.scheduler.misfire.toleration.minutes=480
 
 # Default timeout in seconds before task is killed
 agent.task.timeout=900
+# Default timeout in seconds before package installation task is killed
+agent.package.install.task.timeout=1800
 
 # thread pool maximums
 client.threadpool.size.max=25

+ 2 - 0
ambari-server/conf/windows/ambari.properties

@@ -58,6 +58,8 @@ ambari.python.wrap=python.exe
 
 # Default timeout in seconds before task is killed
 agent.task.timeout=600
+# Default timeout in seconds before package installation task is killed
+agent.package.install.task.timeout=1800
 
 # thread pool maximums
 client.threadpool.size.max=25

+ 1 - 1
ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java

@@ -297,7 +297,7 @@ public class HeartbeatMonitor implements Runnable {
     // Fill command params
     Map<String, String> commandParams = statusCmd.getCommandParams();
 
-    String commandTimeout = configuration.getDefaultAgentTaskTimeout();
+    String commandTimeout = configuration.getDefaultAgentTaskTimeout(false);
     CommandScriptDefinition script = componentInfo.getCommandScript();
     if (serviceInfo.getSchemaVersion().equals(AmbariMetaInfo.SCHEMA_VERSION_2)) {
       if (script != null) {

+ 9 - 4
ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java

@@ -240,7 +240,9 @@ public class Configuration {
    */
   public static final String PARALLEL_STAGE_EXECUTION_KEY = "server.stages.parallel";
   public static final String AGENT_TASK_TIMEOUT_KEY = "agent.task.timeout";
+  public static final String AGENT_PACKAGE_INSTALL_TASK_TIMEOUT_KEY = "agent.package.install.task.timeout";
   public static final String AGENT_TASK_TIMEOUT_DEFAULT = "900";
+  public static final String AGENT_PACKAGE_INSTALL_TASK_TIMEOUT_DEFAULT = "1800";
 
   public static final String CUSTOM_ACTION_DEFINITION_KEY = "custom.action.definitions";
   public static final String SHARED_RESOURCES_DIR_KEY = "shared.resources.dir";
@@ -1197,18 +1199,21 @@ public class Configuration {
   }
 
   /**
+   * @param isPackageInstallationTask true, if task is for installing packages
    * @return default task timeout in seconds (string representation). This value
    *         is used at python (agent) code.
    */
-  public String getDefaultAgentTaskTimeout() {
-    String value = properties.getProperty(AGENT_TASK_TIMEOUT_KEY, AGENT_TASK_TIMEOUT_DEFAULT);
+  public String getDefaultAgentTaskTimeout(boolean isPackageInstallationTask) {
+    String key = isPackageInstallationTask ? AGENT_PACKAGE_INSTALL_TASK_TIMEOUT_KEY : AGENT_TASK_TIMEOUT_KEY;
+    String defaultValue = isPackageInstallationTask ? AGENT_PACKAGE_INSTALL_TASK_TIMEOUT_DEFAULT : AGENT_TASK_TIMEOUT_DEFAULT;
+    String value = properties.getProperty(key, defaultValue);
     if (StringUtils.isNumeric(value)) {
       return value;
     } else {
       LOG.warn(String.format("Value of %s (%s) should be a number, " +
           "falling back to default value (%s)",
-          AGENT_TASK_TIMEOUT_KEY, value, AGENT_TASK_TIMEOUT_DEFAULT));
-      return AGENT_TASK_TIMEOUT_DEFAULT;
+          key, value, defaultValue));
+      return defaultValue;
     }
   }
 

+ 4 - 2
ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java

@@ -140,6 +140,7 @@ public class AmbariCustomCommandExecutionHelper {
   private OsFamily os_family;
 
   protected static final String SERVICE_CHECK_COMMAND_NAME = "SERVICE_CHECK";
+  protected static final String INSTALL_COMMAND_NAME = "INSTALL";
   public static final String DECOMMISSION_COMMAND_NAME = "DECOMMISSION";
 
 
@@ -338,7 +339,8 @@ public class AmbariCustomCommandExecutionHelper {
         }
       }
 
-      String commandTimeout = configs.getDefaultAgentTaskTimeout();
+      boolean isInstallCommand = commandName.equals(RoleCommand.INSTALL.toString());
+      String commandTimeout = configs.getDefaultAgentTaskTimeout(isInstallCommand);
 
       ComponentInfo componentInfo = ambariMetaInfo.getComponent(
           stackId.getStackName(), stackId.getStackVersion(),
@@ -534,7 +536,7 @@ public class AmbariCustomCommandExecutionHelper {
 
     Map<String, String> commandParams = new TreeMap<String, String>();
 
-    String commandTimeout = configs.getDefaultAgentTaskTimeout();
+    String commandTimeout = configs.getDefaultAgentTaskTimeout(false);
 
 
     if (serviceInfo.getSchemaVersion().equals(AmbariMetaInfo.SCHEMA_VERSION_2)) {

+ 2 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java

@@ -1660,7 +1660,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
     if (commandParams == null) { // if not defined
       commandParams = new TreeMap<String, String>();
     }
-    String agentDefaultCommandTimeout = configs.getDefaultAgentTaskTimeout();
+    boolean isInstallCommand = roleCommand.equals(RoleCommand.INSTALL);
+    String agentDefaultCommandTimeout = configs.getDefaultAgentTaskTimeout(isInstallCommand);
     String scriptCommandTimeout = "";
     /*
      * This script is only used for

+ 1 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java

@@ -361,7 +361,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
               cluster.getClusterName(), INSTALL_PACKAGES_ACTION,
               Collections.singletonList(filter),
               params);
-      actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout()));
+      actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout(true)));
 
       try {
         actionExecutionHelper.get().addExecutionCommandsToStage(actionContext, stage, false);

+ 1 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java

@@ -399,7 +399,7 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
             cluster.getClusterName(), INSTALL_PACKAGES_ACTION,
             Collections.singletonList(filter),
             params);
-    actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout()));
+    actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout(true)));
 
     String caption = String.format(INSTALL_PACKAGES_FULL_NAME + " on host %s", hostName);
     RequestStageContainer req = createRequest(caption);

+ 3 - 3
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java

@@ -618,7 +618,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
         Collections.singletonList(filter),
         params);
     actionContext.setIgnoreMaintenance(true);
-    actionContext.setTimeout(Short.valueOf(s_configuration.getDefaultAgentTaskTimeout()));
+    actionContext.setTimeout(Short.valueOf(s_configuration.getDefaultAgentTaskTimeout(false)));
 
     Map<String, String> hostLevelParams = new HashMap<String, String>();
     hostLevelParams.put(JDK_LOCATION, getManagementController().getJdkResourceUrl());
@@ -679,7 +679,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
         cluster.getClusterName(), "RESTART",
         filters,
         restartCommandParams);
-    actionContext.setTimeout(Short.valueOf(s_configuration.getDefaultAgentTaskTimeout()));
+    actionContext.setTimeout(Short.valueOf(s_configuration.getDefaultAgentTaskTimeout(false)));
     actionContext.setIgnoreMaintenance(true);
 
     ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(
@@ -731,7 +731,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
         cluster.getClusterName(), "SERVICE_CHECK",
         filters,
         commandParams);
-    actionContext.setTimeout(Short.valueOf(s_configuration.getDefaultAgentTaskTimeout()));
+    actionContext.setTimeout(Short.valueOf(s_configuration.getDefaultAgentTaskTimeout(false)));
     actionContext.setIgnoreMaintenance(true);
 
     ExecuteCommandJson jsons = s_commandExecutionHelper.get().getCommandJson(

+ 19 - 0
ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java

@@ -295,6 +295,25 @@ public class ConfigurationTest {
     Assert.assertEquals(6000L, conf.getViewExtractionThreadPoolTimeout());
   }
 
+  @Test()
+  public void testGetDefaultAgentTaskTimeout() {
+    Properties ambariProperties = new Properties();
+    Configuration conf = new Configuration(ambariProperties);
+
+    Assert.assertEquals("900", conf.getDefaultAgentTaskTimeout(false));
+    Assert.assertEquals("1800", conf.getDefaultAgentTaskTimeout(true));
+
+    ambariProperties = new Properties();
+    ambariProperties.setProperty("agent.task.timeout", "4");
+    ambariProperties.setProperty("agent.package.install.task.timeout", "82");
+
+    conf = new Configuration(ambariProperties);
+
+    Assert.assertEquals("4", conf.getDefaultAgentTaskTimeout(false));
+    Assert.assertEquals("82", conf.getDefaultAgentTaskTimeout(true));
+  }
+
+
   @Test
   public void testGetLdapServerProperties_WrongManagerPassword() throws Exception {
     final Properties ambariProperties = new Properties();