[ 
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)

Reply via email to