[
https://issues.apache.org/jira/browse/TWILL-116?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14625423#comment-14625423
]
ASF GitHub Bot commented on TWILL-116:
--------------------------------------
Github user chtyim commented on a diff in the pull request:
https://github.com/apache/incubator-twill/pull/52#discussion_r34516287
--- Diff:
twill-yarn/src/test/java/org/apache/twill/yarn/EchoServerTestRun.java ---
@@ -132,4 +156,51 @@ public void run() {
// Sleep a bit before exiting.
TimeUnit.SECONDS.sleep(2);
}
+
+ /**
+ * Need helper method here to wait for getting resource report because
{@link TwillController#getResourceReport()}
+ * could return null if the application has not fully started.
+ *
+ * This method helps validate restart scenario.
+ *
+ * To avoid long sleep if instanceIdToContainerId is passed, then
compare the container ids to ones before.
+ * Otherwise just return the valid resource report.
+ */
+ @Nullable
+ private ResourceReport waitForAfterRestartResourceReport(TwillController
controller, String runnable, long timeout,
+ TimeUnit
timeoutUnit, int numOfResources,
+ @Nullable
Map<Integer, String> instanceIdToContainerId) {
+ Stopwatch stopwatch = new Stopwatch();
+ stopwatch.start();
+ do {
+ ResourceReport report = controller.getResourceReport();
+ if (report == null || report.getRunnableResources(runnable) == null)
{
+ Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS);
+ } else if (report.getRunnableResources(runnable) == null ||
+ report.getRunnableResources(runnable).size() != numOfResources) {
+ Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS);
+ } else {
+ if (instanceIdToContainerId == null) {
+ return report;
+ } else {
+ Collection<TwillRunResources> runResources =
report.getRunnableResources(runnable);
+ boolean isSameContainer = false;
+ for (TwillRunResources twillRunResources : runResources) {
+ int instanceId = twillRunResources.getInstanceId();
+ if
(twillRunResources.getContainerId().equals(instanceIdToContainerId.get(instanceId)))
{
+ // found same container id lets wait again.
+ isSameContainer = true;
+ break;
+ }
+ }
+ if (!isSameContainer) {
+ return report;
+ } else {
--- End diff --
same as above.
> 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)