brooklyn-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (BROOKLYN-264) Stop app while VM still being provisioned: vm is left running when app is expunged
Date Wed, 29 Jun 2016 12:45:37 GMT

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

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

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

    https://github.com/apache/brooklyn-server/pull/211#discussion_r68938644
  
    --- Diff: software/base/src/test/java/org/apache/brooklyn/entity/EC2ExpungeLiveTest.java
---
    @@ -0,0 +1,144 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing,
    + * software distributed under the License is distributed on an
    + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    + * KIND, either express or implied.  See the License for the
    + * specific language governing permissions and limitations
    + * under the License.
    + */
    +package org.apache.brooklyn.entity;
    +
    +import com.google.common.base.Predicate;
    +import com.google.common.collect.ImmutableList;
    +import com.google.common.collect.ImmutableMap;
    +import com.google.common.collect.Iterables;
    +import org.apache.brooklyn.api.entity.EntitySpec;
    +import org.apache.brooklyn.api.location.Location;
    +import org.apache.brooklyn.core.entity.Entities;
    +import org.apache.brooklyn.core.internal.BrooklynProperties;
    +import org.apache.brooklyn.core.location.LocationConfigKeys;
    +import org.apache.brooklyn.core.location.cloud.CloudLocationConfig;
    +import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
    +import org.apache.brooklyn.core.test.BrooklynAppLiveTestSupport;
    +import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
    +import org.apache.brooklyn.core.test.entity.TestApplication;
    +import org.apache.brooklyn.core.test.entity.TestEntity;
    +import org.apache.brooklyn.entity.software.base.EmptySoftwareProcess;
    +import org.apache.brooklyn.location.jclouds.JcloudsLocation;
    +import org.apache.brooklyn.test.Asserts;
    +import org.apache.brooklyn.util.collections.MutableMap;
    +import org.apache.brooklyn.util.core.config.ConfigBag;
    +import org.apache.brooklyn.util.exceptions.Exceptions;
    +import org.jclouds.aws.ec2.compute.AWSEC2ComputeService;
    +import org.jclouds.compute.domain.ComputeMetadata;
    +import org.jclouds.compute.domain.NodeMetadata;
    +import org.slf4j.Logger;
    +import org.slf4j.LoggerFactory;
    +import org.testng.annotations.BeforeMethod;
    +import org.testng.annotations.Test;
    +
    +import javax.annotation.Nullable;
    +import java.util.Map;
    +import java.util.concurrent.*;
    +import java.util.regex.Pattern;
    +
    +public class EC2ExpungeLiveTest extends BrooklynAppLiveTestSupport {
    +    private static final Logger LOG = LoggerFactory.getLogger(EC2ExpungeLiveTest.class);
    +
    +    public static final String PROVIDER = "aws-ec2";
    +    public static final String SMALL_HARDWARE_ID = "m1.small";
    +
    +    public static final String REGION_NAME = "us-west-2";
    +    public static final String LOCATION_SPEC = PROVIDER + (REGION_NAME == null ? "" :
":" + REGION_NAME);
    +
    +    protected BrooklynProperties brooklynProperties;
    +
    +    protected Location jcloudsLocation;
    +
    +    @BeforeMethod(alwaysRun=true)
    +    @Override
    +    public void setUp() throws Exception {
    +        // Don't let any defaults from brooklyn.properties (except credentials) interfere
with test
    +        brooklynProperties = BrooklynProperties.Factory.newDefault();
    +
    +        // Also removes scriptHeader (e.g. if doing `. ~/.bashrc` and `. ~/.profile`,
then that can cause "stdin: is not a tty")
    +        brooklynProperties.remove("brooklyn.ssh.config.scriptHeader");
    +
    +        mgmt = new LocalManagementContextForTests(brooklynProperties);
    +        super.setUp();
    +    }
    +
    +    /**
    +     Verifies that when {@link org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks#doStop(ConfigBag,
Callable<?>)} is called
    +     it will not retry and wait for a MachineLocation to appear.
    +     */
    +    @Test
    +    public void testExpungeNonJcloudsLocation() throws Exception {
    --- End diff --
    
    This test is for simple entities used in unit tests (have to improve naming here).
    I am trying to add a similar Integration test for a BYON location.


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

Mime
View raw message