[ 
https://issues.apache.org/jira/browse/BROOKLYN-264?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15374671#comment-15374671
 ] 

ASF GitHub Bot commented on BROOKLYN-264:
-----------------------------------------

Github user aledsage commented on a diff in the pull request:

    https://github.com/apache/brooklyn-server/pull/211#discussion_r70590868
  
    --- Diff: 
software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
 ---
    @@ -709,7 +712,26 @@ protected void doStop(ConfigBag parameters, 
Callable<StopMachineDetails<Integer>
     
             DynamicTasks.queue("pre-stop", new PreStopCustomTask());
     
    +        // BROOKLYN-263:
    +        // With this change the stop effector will wait for Location to 
provision so it can stop it.
    +        // It will not retry if non-jclouds location is used in the entity.
             Maybe<MachineLocation> machine = 
Machines.findUniqueMachineLocation(entity().getLocations());
    +        if 
(Boolean.TRUE.equals(entity().sensors().get(Attributes.JCLOUDS_PROVISIONING_STARTED))
    +                && machine.isAbsent()) {
    +            
entity().sensors().set(Attributes.JCLOUDS_PROVISIONING_STARTED, null);
    --- End diff --
    
    This name feels misleading. It's sort-of more about whether the 
provisioning is running, rather than started. I'd be inclined to use an enum to 
indicate the exact state. The value could be one of PROVISIONING, ABORTING, or 
null.
    
    See later comment (not added yet!) about telling the jclouds provisioning 
to not do anything else (e.g. currently it will wait for ssh'able etc, which we 
can abort earlier).


> Stop app while VM still being provisioned: vm is left running when app is 
> expunged
> ----------------------------------------------------------------------------------
>
>                 Key: BROOKLYN-264
>                 URL: https://issues.apache.org/jira/browse/BROOKLYN-264
>             Project: Brooklyn
>          Issue Type: Bug
>    Affects Versions: 0.9.0
>            Reporter: Aled Sage
>
> A customer deployed an app to AWS, but while the VM was still starting up 
> they stopped (and thus expunged) the app. The app disappeared from the 
> Brooklyn web-console, but the starting VM was left behind in AWS.
> This is simple to reproduce:
> 1. deploy a simple blueprint, such as:
> {noformat}
> location: aws-ec2:us-east-1
> services:
> - type: org.apache.brooklyn.entity.machine.MachineEntity
> {noformat}
> 2. wait for the VM to appear in the AWS web-console (with state 
> "initialising")
> 3. call the {{stop}} effector on the top-level app.
> ---
> Looking at the {{start}} task that was executing at the time when {{stop}} 
> was called, below is the thread's stack trace:
> {noformat}
> Provisioning machine in JcloudsLocation[AWS 
> Virginia:AAAAAAAAAAAAAAAAAAAA/aws-ec2:us-east-1@eyNrLIo5]
> Task[provisioning (AWS Virginia)]@MJITkjw0
> Submitted by SoftlyPresent[value=Task[start]@tKw0qJET]
> In progress, thread waiting (notify) on 
> java.util.concurrent.CountDownLatch$Sync@2ed5be36
> At: 
> org.jclouds.concurrent.FutureIterables.awaitCompletion(FutureIterables.java:149)
>     
> org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:214)
>     
> org.jclouds.ec2.compute.EC2ComputeService.createNodesInGroup(EC2ComputeService.java:149)
>     
> org.apache.brooklyn.location.jclouds.JcloudsLocation.obtainOnce(JcloudsLocation.java:726)
>     
> org.apache.brooklyn.location.jclouds.JcloudsLocation.obtain(JcloudsLocation.java:616)
>     
> org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks$ObtainLocationTask.call(MachineLifecycleEffectorTasks.java:406)
>     
> org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks$ObtainLocationTask.call(MachineLifecycleEffectorTasks.java:396)
>     
> org.apache.brooklyn.util.core.task.Tasks.withBlockingDetails(Tasks.java:98)
>     
> org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks$ProvisionMachineTask.call(MachineLifecycleEffectorTasks.java:380)
>     
> org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks$ProvisionMachineTask.call(MachineLifecycleEffectorTasks.java:364)
>     
> org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:359)
>     
> org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:519)
> {noformat}
> From this, we can see that we are still calling jclouds. This means that 
> jclouds has not yet returned to Brooklyn the VM's id. It also means that the 
> {{MachineEntity}} will not have been given a {{JcloudsSshMachineLocation}} 
> instance. 
> When {{stop}} is called on the {{MachineEntity}}, it doesn't have a machine 
> location instance so it doesn't have anything to ask to stop. This is why the 
> VM is left running.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to