[
https://issues.apache.org/jira/browse/TWILL-116?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14621913#comment-14621913
]
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_r34333557
--- Diff:
twill-core/src/main/java/org/apache/twill/internal/AbstractTwillController.java
---
@@ -109,6 +123,74 @@ public final ServiceDiscovered discoverService(String
serviceName) {
return sendMessage(SystemMessages.setInstances(runnable, newCount),
newCount);
}
+ @Override
+ public final ListenableFuture<String> restartAllInstances(String
runnableName) {
+ Command updateStateCommand =
Command.Builder.of(Constants.RESTART_ALL_RUNNABLE_INSTANCES).
+ build();
+ Message message =
SystemMessages.updateRunnableInstances(updateStateCommand, runnableName);
+ return sendMessage(message, updateStateCommand.getCommand());
+ }
+
+ @Override
+ public final ListenableFuture<Map<String, Set<Integer>>>
restartInstances(Map<String,
+ Set<Integer>> runnableToInstanceIds) {
+ for (Map.Entry<String, Set<Integer>> entry :
runnableToInstanceIds.entrySet()) {
+ validateInstanceIds(entry.getKey(), entry.getValue());
+ }
+
+ Map<String, String> runnableToStringInstanceIds =
+ Maps.transformEntries(runnableToInstanceIds, new
Maps.EntryTransformer<String, Set<Integer>, String>() {
+ @Override
+ public String transformEntry(String key, Set<Integer> value) {
+ return GSON.toJson(value, new TypeToken<Set<Integer>>()
{}.getType());
+ }
+ });
+
+ Command updateStateCommand =
Command.Builder.of(Constants.RESTART_RUNNABLES_INSTANCES).
+ addOptions(runnableToStringInstanceIds).build();
+ Message message =
SystemMessages.updateRunnablesInstances(updateStateCommand);
+
+ return sendMessage(message, runnableToInstanceIds);
+ }
+
+ @Override
+ public ListenableFuture<String> restartInstances(String runnable, int
instanceId, int... moreInstanceIds) {
+ Set<Integer> instanceIds = Sets.newLinkedHashSet();
+ instanceIds.add(instanceId);
+ for (int id : moreInstanceIds) {
+ instanceIds.add(id);
+ }
+
+ validateInstanceIds(runnable, instanceIds);
+
+ Map<String, String> runnableToStringInstanceIds = Maps.newHashMap();
+ runnableToStringInstanceIds.put(runnable, GSON.toJson(instanceIds, new
TypeToken<Set<Integer>>() {}.getType()));
+
+ Command updateStateCommand =
Command.Builder.of(Constants.RESTART_RUNNABLES_INSTANCES).
+ addOptions(runnableToStringInstanceIds).build();
+ Message message =
SystemMessages.updateRunnablesInstances(updateStateCommand);
+
+ return sendMessage(message, runnable);
+ }
+
+ private void validateInstanceIds(String runnable, Set<Integer>
instanceIds) {
+ ResourceReport rr = getResourceReport();
+ Collection<TwillRunResources> runnableResources =
rr.getRunnableResources(runnable);
+ if (runnableResources != null) {
+ Set<Integer> existingInstanceIds = Sets.newHashSet();
+ for (TwillRunResources trr : runnableResources) {
+ existingInstanceIds.add(trr.getInstanceId());
+ }
+ for (int instanceId : instanceIds) {
+ if (!existingInstanceIds.contains(instanceId)) {
+ throw new IllegalArgumentException("Unable to find instance id "
+ instanceId + " for " + runnable);
--- End diff --
The alignment is off by one space.
> 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)