[
https://issues.apache.org/jira/browse/TWILL-116?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14623232#comment-14623232
]
ASF GitHub Bot commented on TWILL-116:
--------------------------------------
Github user hsaputra commented on a diff in the pull request:
https://github.com/apache/incubator-twill/pull/52#discussion_r34409623
--- Diff:
twill-yarn/src/test/java/org/apache/twill/yarn/EchoServerTestRun.java ---
@@ -107,6 +112,30 @@ public void run() {
controller.changeInstances("EchoServer", 2);
Assert.assertTrue(waitForSize(echoServices, 2, 120));
+ // Test restart on instances for runnable
+
+ TimeUnit.SECONDS.sleep(6L);
--- End diff --
Something like:
```
ResourceReport resourceReport = waitForResourceReport(controller,
"EchoServer", 5L, TimeUnit.SECONDS, 2);
Collection<TwillRunResources> runResources =
resourceReport.getRunnableResources("EchoServer");
for (TwillRunResources twillRunResources : runResources) {
instanceIdToContainerId.put(twillRunResources.getInstanceId(),
twillRunResources.getContainerId());
}
controller.restartAllInstances("EchoServer");
Assert.assertTrue(waitForSize(echoServices, 2, 120));
// Need to sleep here since wait for size could still return the same
containers.
TimeUnit.SECONDS.sleep(3L);
resourceReport = waitForResourceReport(controller, "EchoServer", 5L,
TimeUnit.SECONDS, 2);
runResources = resourceReport.getRunnableResources("EchoServer");
for (TwillRunResources twillRunResources : runResources) {
int instanceId = twillRunResources.getInstanceId();
Assert.assertNotEquals(twillRunResources.getContainerId(),
instanceIdToContainerId.get(instanceId));
}
// Need helper method here to wait for getting resource report because
{@link TwillController#getResourceReport()}
// could return null if the application has not fully started.
private ResourceReport waitForResourceReport(TwillController controller,
String runnable,
long timeout, TimeUnit
timeoutUnit, int numOfResources) {
Stopwatch stopwatch = new Stopwatch();
stopwatch.start();
do {
ResourceReport report = controller.getResourceReport();
if (report == null || report.getRunnableResources(runnable) == null) {
continue;
} else if (report.getRunnableResources(runnable) != null &&
report.getRunnableResources(runnable).size() == numOfResources) {
return report;
}
Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS);
} while (stopwatch.elapsedTime(timeoutUnit) < timeout);
return null;
}
```
> Support for restart instances of runnable in an application
> -----------------------------------------------------------
>
> Key: TWILL-116
> URL: https://issues.apache.org/jira/browse/TWILL-116
> Project: Apache Twill
> Issue Type: New Feature
> Components: core
> Reporter: Albert Shau
> Assignee: Henry Saputra
> Fix For: 0.6.0-incubating
>
> Attachments: TWILL-116-design-4.pdf, TWILL-116-design-5.pdf,
> TWILL-116-design-6.pdf, TWILL-116-design-7.pdf, TWILL-116-design-final-2.pdf
>
>
> Once an application is running, it would be good to be able to stop, start,
> and restart a specific runnable of the application without affecting other
> runnables.
> For example, I may be running multiple services in a single application, with
> each service as a different runnable. One of my services gets into an invalid
> state. I now want to restart just that runnable and not the other ones that
> are running properly.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)