You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by sm...@apache.org on 2014/08/24 04:58:24 UTC
[10/32] git commit: SLIDER-348. Use command timeout specified in the
metainfo
SLIDER-348. Use command timeout specified in the metainfo
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/d66d4444
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/d66d4444
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/d66d4444
Branch: refs/heads/feature/hbase_win_package
Commit: d66d4444fd0a3da9aa0f34b354c530a323081ff2
Parents: 111e03f
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Thu Aug 21 23:30:17 2014 -0700
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Thu Aug 21 23:30:17 2014 -0700
----------------------------------------------------------------------
.../providers/agent/AgentProviderService.java | 44 +++++++++++++-------
.../agent/application/metadata/Component.java | 6 +++
.../agent/TestAgentProviderService.java | 32 ++++++++++----
3 files changed, 59 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d66d4444/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
index ec5425a..562ca1f 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
@@ -56,6 +56,7 @@ import org.apache.slider.providers.ProviderCore;
import org.apache.slider.providers.ProviderRole;
import org.apache.slider.providers.ProviderUtils;
import org.apache.slider.providers.agent.application.metadata.Application;
+import org.apache.slider.providers.agent.application.metadata.CommandScript;
import org.apache.slider.providers.agent.application.metadata.Component;
import org.apache.slider.providers.agent.application.metadata.ComponentExport;
import org.apache.slider.providers.agent.application.metadata.ConfigFile;
@@ -454,13 +455,20 @@ public class AgentProviderService extends AbstractProviderService implements
String containerId = getContainerId(label);
StateAccessForProviders accessor = getAmState();
- String scriptPath = getScriptPathFromMetainfo(roleName);
+ CommandScript cmdScript = getScriptPathFromMetainfo(roleName);
- if (scriptPath == null) {
+ if (cmdScript == null || cmdScript.getScript() == null) {
log.error("role.script is unavailable for " + roleName + ". Commands will not be sent.");
return response;
}
+ String scriptPath = cmdScript.getScript();
+ long timeout = cmdScript.getTimeout();
+
+ if(timeout == 0L) {
+ timeout = 600L;
+ }
+
if (!getComponentStatuses().containsKey(label)) {
return response;
}
@@ -502,14 +510,14 @@ public class AgentProviderService extends AbstractProviderService implements
if (Command.NOP != command) {
if (command == Command.INSTALL) {
log.info("Installing {} on {}.", roleName, containerId);
- addInstallCommand(roleName, containerId, response, scriptPath);
+ addInstallCommand(roleName, containerId, response, scriptPath, timeout);
componentStatus.commandIssued(command);
} else if (command == Command.START) {
// check against dependencies
boolean canExecute = commandOrder.canExecute(roleName, command, getComponentStatuses().values());
if (canExecute) {
log.info("Starting {} on {}.", roleName, containerId);
- addStartCommand(roleName, containerId, response, scriptPath, isMarkedAutoRestart(roleName));
+ addStartCommand(roleName, containerId, response, scriptPath, timeout, isMarkedAutoRestart(roleName));
componentStatus.commandIssued(command);
} else {
log.info("Start of {} on {} delayed as dependencies have not started.", roleName, containerId);
@@ -1037,10 +1045,10 @@ public class AgentProviderService extends AbstractProviderService implements
*
* @return
*/
- protected String getScriptPathFromMetainfo(String roleName) {
+ protected CommandScript getScriptPathFromMetainfo(String roleName) {
Component component = getApplicationComponent(roleName);
if (component != null) {
- return component.getCommandScript().getScript();
+ return component.getCommandScript();
}
return null;
}
@@ -1134,7 +1142,11 @@ public class AgentProviderService extends AbstractProviderService implements
* @throws SliderException
*/
@VisibleForTesting
- protected void addInstallCommand(String roleName, String containerId, HeartBeatResponse response, String scriptPath)
+ protected void addInstallCommand(String roleName,
+ String containerId,
+ HeartBeatResponse response,
+ String scriptPath,
+ long timeout)
throws SliderException {
assert getAmState().isApplicationLive();
ConfTreeOperations appConf = getAmState().getAppConfSnapshot();
@@ -1155,7 +1167,7 @@ public class AgentProviderService extends AbstractProviderService implements
setInstallCommandConfigurations(cmd, containerId);
- cmd.setCommandParams(setCommandParameters(scriptPath, false));
+ cmd.setCommandParams(setCommandParameters(scriptPath, timeout, false));
cmd.setHostname(getClusterInfoPropertyValue(StatusKeys.INFO_AM_HOSTNAME));
response.addExecutionCommand(cmd);
@@ -1191,13 +1203,13 @@ public class AgentProviderService extends AbstractProviderService implements
cmd.setCommandId(cmd.getTaskId() + "-1");
}
- private Map<String, String> setCommandParameters(String scriptPath, boolean recordConfig) {
+ private Map<String, String> setCommandParameters(String scriptPath, long timeout, boolean recordConfig) {
Map<String, String> cmdParams = new TreeMap<String, String>();
cmdParams.put("service_package_folder",
"${AGENT_WORK_ROOT}/work/app/definition/package");
cmdParams.put("script", scriptPath);
cmdParams.put("schema_version", "2.0");
- cmdParams.put("command_timeout", "300");
+ cmdParams.put("command_timeout", Long.toString(timeout));
cmdParams.put("script_type", "PYTHON");
cmdParams.put("record_config", Boolean.toString(recordConfig));
return cmdParams;
@@ -1210,7 +1222,11 @@ public class AgentProviderService extends AbstractProviderService implements
}
@VisibleForTesting
- protected void addStatusCommand(String roleName, String containerId, HeartBeatResponse response, String scriptPath)
+ protected void addStatusCommand(String roleName,
+ String containerId,
+ HeartBeatResponse response,
+ String scriptPath,
+ long timeout)
throws SliderException {
assert getAmState().isApplicationLive();
ConfTreeOperations appConf = getAmState().getAppConfSnapshot();
@@ -1229,7 +1245,7 @@ public class AgentProviderService extends AbstractProviderService implements
hostLevelParams.put(CONTAINER_ID, containerId);
cmd.setHostLevelParams(hostLevelParams);
- cmd.setCommandParams(setCommandParameters(scriptPath, false));
+ cmd.setCommandParams(setCommandParameters(scriptPath, timeout, false));
Map<String, Map<String, String>> configurations = buildCommandConfigurations(appConf, containerId);
@@ -1262,7 +1278,7 @@ public class AgentProviderService extends AbstractProviderService implements
@VisibleForTesting
protected void addStartCommand(String roleName, String containerId, HeartBeatResponse response,
- String scriptPath, boolean isMarkedAutoRestart)
+ String scriptPath, long timeout, boolean isMarkedAutoRestart)
throws
SliderException {
assert getAmState().isApplicationLive();
@@ -1288,7 +1304,7 @@ public class AgentProviderService extends AbstractProviderService implements
cmd.setRoleParams(roleParams);
cmd.getRoleParams().put("auto_restart", Boolean.toString(isMarkedAutoRestart));
- cmd.setCommandParams(setCommandParameters(scriptPath, true));
+ cmd.setCommandParams(setCommandParameters(scriptPath, timeout, true));
Map<String, Map<String, String>> configurations = buildCommandConfigurations(appConf, containerId);
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d66d4444/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java
index 03c64d4..1117ff1 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java
@@ -124,4 +124,10 @@ public class Component {
sb.append('}');
return sb.toString();
}
+
+ class AutoRestartSettings {
+ private boolean requiresAutoRestart;
+ private int maxFailures;
+ private int inThisManyMinutes;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d66d4444/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
----------------------------------------------------------------------
diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
index e0a9214..b0b059d 100644
--- a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
+++ b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
@@ -42,6 +42,7 @@ import org.apache.slider.core.exceptions.SliderException;
import org.apache.slider.core.launch.ContainerLauncher;
import org.apache.slider.providers.agent.application.metadata.Application;
import org.apache.slider.providers.agent.application.metadata.CommandOrder;
+import org.apache.slider.providers.agent.application.metadata.CommandScript;
import org.apache.slider.providers.agent.application.metadata.Component;
import org.apache.slider.providers.agent.application.metadata.ComponentExport;
import org.apache.slider.providers.agent.application.metadata.ConfigFile;
@@ -83,6 +84,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import static org.easymock.EasyMock.anyLong;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
@@ -278,7 +280,9 @@ public class TestAgentProviderService {
AgentProviderService mockAps = Mockito.spy(aps);
doReturn(access).when(mockAps).getAmState();
- doReturn("scripts/hbase_master.py").when(mockAps).getScriptPathFromMetainfo(anyString());
+ CommandScript cs = new CommandScript();
+ cs.setScript("scripts/hbase_master.py");
+ doReturn(cs).when(mockAps).getScriptPathFromMetainfo(anyString());
Metainfo metainfo = new Metainfo();
metainfo.setApplication(new Application());
doReturn(metainfo).when(mockAps).getApplicationMetainfo(any(SliderFileSystem.class), anyString());
@@ -293,7 +297,8 @@ public class TestAgentProviderService {
eq("HBASE_MASTER"),
eq("mockcontainer_1"),
any(HeartBeatResponse.class),
- eq("scripts/hbase_master.py"));
+ eq("scripts/hbase_master.py"),
+ eq(600L));
doReturn(conf).when(mockAps).getConfig();
} catch (SliderException e) {
}
@@ -612,8 +617,8 @@ public class TestAgentProviderService {
AgentProviderService aps = new AgentProviderService();
AgentProviderService mockAps = Mockito.spy(aps);
doReturn(metainfo).when(mockAps).getMetainfo();
- String scriptPath = mockAps.getScriptPathFromMetainfo("HBASE_MASTER");
- Assert.assertEquals(scriptPath, "scripts/hbase_master.py");
+ CommandScript script = mockAps.getScriptPathFromMetainfo("HBASE_MASTER");
+ Assert.assertEquals(script.getScript(), "scripts/hbase_master.py");
String metainfo_1_str_bad = "<metainfo>\n"
+ " <schemaVersion>2.0</schemaVersion>\n"
@@ -712,12 +717,14 @@ public class TestAgentProviderService {
anyString(),
anyString(),
any(HeartBeatResponse.class),
- anyString());
+ anyString(),
+ Mockito.anyLong());
doNothing().when(mockAps).addStartCommand(
anyString(),
anyString(),
any(HeartBeatResponse.class),
anyString(),
+ Mockito.anyLong(),
Matchers.anyBoolean());
doNothing().when(mockAps).addGetConfigCommand(
anyString(),
@@ -792,7 +799,8 @@ public class TestAgentProviderService {
Mockito.verify(mockAps, Mockito.times(1)).addInstallCommand(anyString(),
anyString(),
any(HeartBeatResponse.class),
- anyString());
+ anyString(),
+ Mockito.anyLong());
hb = new HeartBeat();
hb.setResponseId(1);
@@ -802,7 +810,8 @@ public class TestAgentProviderService {
Mockito.verify(mockAps, Mockito.times(2)).addInstallCommand(anyString(),
anyString(),
any(HeartBeatResponse.class),
- anyString());
+ anyString(),
+ Mockito.anyLong());
// RS succeeds install but does not start
hb = new HeartBeat();
hb.setResponseId(2);
@@ -821,6 +830,7 @@ public class TestAgentProviderService {
anyString(),
any(HeartBeatResponse.class),
anyString(),
+ Mockito.anyLong(),
Matchers.anyBoolean());
// RS still does not start
hb = new HeartBeat();
@@ -832,6 +842,7 @@ public class TestAgentProviderService {
anyString(),
any(HeartBeatResponse.class),
anyString(),
+ Mockito.anyLong(),
Matchers.anyBoolean());
// MASTER succeeds install and issues start
@@ -852,6 +863,7 @@ public class TestAgentProviderService {
anyString(),
any(HeartBeatResponse.class),
anyString(),
+ Mockito.anyLong(),
Matchers.anyBoolean());
Map<String, String> allocatedPorts = mockAps.getAllocatedPorts();
Assert.assertTrue(allocatedPorts != null);
@@ -868,6 +880,7 @@ public class TestAgentProviderService {
anyString(),
any(HeartBeatResponse.class),
anyString(),
+ Mockito.anyLong(),
Matchers.anyBoolean());
// MASTER succeeds start
hb = new HeartBeat();
@@ -893,6 +906,7 @@ public class TestAgentProviderService {
anyString(),
any(HeartBeatResponse.class),
anyString(),
+ Mockito.anyLong(),
Matchers.anyBoolean());
// JDK7
} catch (SliderException he) {
@@ -987,7 +1001,7 @@ public class TestAgentProviderService {
replay(access);
- mockAps.addInstallCommand("HBASE_MASTER", "cid1", hbr, "");
+ mockAps.addInstallCommand("HBASE_MASTER", "cid1", hbr, "", 0);
ExecutionCommand cmd = hbr.getExecutionCommands().get(0);
String pkgs = cmd.getHostLevelParams().get(AgentKeys.PACKAGE_LIST);
Assert.assertEquals("[{\"type\":\"tarball\",\"name\":\"files/hbase-0.96.1-hadoop2-bin.tar.gz\"}]", pkgs);
@@ -1062,7 +1076,7 @@ public class TestAgentProviderService {
replay(access);
- mockAps.addStartCommand("HBASE_MASTER", "cid1", hbr, "", Boolean.FALSE);
+ mockAps.addStartCommand("HBASE_MASTER", "cid1", hbr, "", 0, Boolean.FALSE);
Assert.assertTrue(hbr.getExecutionCommands().get(0).getConfigurations().containsKey("hbase-site"));
Map<String, String> hbaseSiteConf = hbr.getExecutionCommands().get(0).getConfigurations().get("hbase-site");
Assert.assertTrue(hbaseSiteConf.containsKey("a.port"));