[
https://issues.apache.org/jira/browse/STRATOS-1641?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15046450#comment-15046450
]
ASF GitHub Bot commented on STRATOS-1641:
-----------------------------------------
Github user swgkg commented on a diff in the pull request:
https://github.com/apache/stratos/pull/501#discussion_r46919246
--- Diff:
components/org.apache.stratos.rest.endpoint/src/test/java/org/apache/stratos/rest/endpoint/test/UndeployApplicationTest.java
---
@@ -0,0 +1,212 @@
+/*
+ * 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.stratos.rest.endpoint.test;
+
+import org.apache.activemq.broker.BrokerService;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.domain.LoadBalancingIPType;
+import org.apache.stratos.common.threading.StratosThreadPool;
+import org.apache.stratos.messaging.broker.publish.EventPublisher;
+import org.apache.stratos.messaging.broker.publish.EventPublisherPool;
+import org.apache.stratos.messaging.domain.application.Application;
+import org.apache.stratos.messaging.domain.application.Applications;
+import org.apache.stratos.messaging.domain.application.ClusterDataHolder;
+import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
+import org.apache.stratos.messaging.domain.topology.*;
+import org.apache.stratos.messaging.event.Event;
+import
org.apache.stratos.messaging.event.application.CompleteApplicationsEvent;
+import org.apache.stratos.messaging.event.topology.CompleteTopologyEvent;
+import org.apache.stratos.messaging.event.topology.MemberInitializedEvent;
+import
org.apache.stratos.messaging.listener.topology.MemberInitializedEventListener;
+import
org.apache.stratos.messaging.message.receiver.application.ApplicationManager;
+import
org.apache.stratos.messaging.message.receiver.application.ApplicationsEventReceiver;
+import
org.apache.stratos.messaging.message.receiver.topology.TopologyEventReceiver;
+import
org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
+import org.apache.stratos.messaging.util.MessagingUtil;
+import org.apache.stratos.rest.endpoint.api.StratosApiV41Utils;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class UndeployApplicationTest {
+ public static final String APPLICATION_ID = "test-app-1";
+ public static final String APPLICATION_ALIAS = "test-app-alias-1";
+ public static final String APPLICATION_INSTANCE_ID =
"test-app-instance-1";
+ public static final String SERVICE_NAME = "test-service-1";
+ public static final String CLUSTER_ID = "test-cluster-1";
+ public static final String CLUSTER_INSTANCE_ID =
"test-cluster-instance-1";
+ public static final String DEPLOYMENT_POLICY_ID =
"test-deployment-policy-1";
+ public static final String AUTOSCALE_POLICY_ID =
"test-autoscale-policy-1";
+ public static final String NETWORK_PARTITION_ID =
"test-network-partition-1";
+ public static final String PARTITION_ID = "test-partition-1";
+ public static final String TEST_MEMBER_ID_1 = "test-member-1";
+ public static final String TEST_MEMBER_INSTANCE_ID_1 = "test-member-1";
+ private static final Log log =
LogFactory.getLog(UndeployApplicationTest.class);
+ private final ExecutorService executorService = StratosThreadPool
+ .getExecutorService("org.apache.stratos.rest.endpoint.test",
20);
+ private BrokerService broker;
+ private boolean memberInitializedEventPublished = false;
+
+ private static String getResourcesFolderPath() {
+ String path =
UndeployApplicationTest.class.getResource("/").getPath();
+ return StringUtils.removeEnd(path, File.separator);
+ }
+
+ @BeforeClass
+ public static void setUp() {
+ // Set jndi.properties.dir system property for initializing event
receivers
+ System.setProperty("jndi.properties.dir",
getResourcesFolderPath());
+ }
+
+ private void initializeActiveMQ() {
+ try {
+ log.info("Initializing ActiveMQ...");
+ broker = new BrokerService();
+
broker.setDataDirectory(UndeployApplicationTest.class.getResource("/").getPath()
+
+ File.separator + ".." + File.separator +
"activemq-data");
+ broker.setBrokerName("testBroker");
+ broker.addConnector("tcp://localhost:61617");
+ } catch (Exception e) {
+ throw new RuntimeException("Could not initialize ActiveMQ", e);
+ }
+ }
+
+ private void startActiveMQ() {
+ try {
+ long time1 = System.currentTimeMillis();
+ broker.start();
+ long time2 = System.currentTimeMillis();
+ log.info(String.format("ActiveMQ started in %d sec", (time2 -
time1) / 1000));
+ } catch (Exception e) {
+ throw new RuntimeException("Could not start ActiveMQ", e);
+ }
+ }
+
+ private void stopActiveMQ() {
+ try {
+ broker.stop();
+ } catch (Exception e) {
+ throw new RuntimeException("Could not stop ActiveMQ", e);
+ }
+ }
+
+ private void sleep(long time) {
+ try {
+ Thread.sleep(time);
+ } catch (InterruptedException ignore) {
+ }
+ }
+
+ @Test(timeout = 60000)
+ public void testSubscriberReconnection() throws Exception {
+ initializeActiveMQ();
+ startActiveMQ();
+
+ TopologyEventReceiver topologyEventReceiver = new
TopologyEventReceiver();
+ topologyEventReceiver.setExecutorService(executorService);
+ topologyEventReceiver.execute();
+
+ ApplicationsEventReceiver applicationsEventReceiver = new
ApplicationsEventReceiver();
+ applicationsEventReceiver.setExecutorService(executorService);
+ applicationsEventReceiver.execute();
+
+ publishCompleteTopologyEvent();
+ publishCompleteApplicationsEvent();
+
+ while (!TopologyManager.getTopology().isInitialized() ||
!ApplicationManager.getApplications()
+ .isInitialized()) {
+ log.info("Waiting until topology and application model is
initialized...");
+ sleep(1000);
+ }
+
+ assertFalse("Member initialized status check failed",
StratosApiV41Utils.hasMembersInitialized(APPLICATION_ID));
+
+ topologyEventReceiver.addEventListener(new
MemberInitializedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+ log.info("MemberInitializedEvent received");
+ memberInitializedEventPublished = true;
+ }
+ });
+
+ publishMemberInitializedEvent();
+
+ while (!memberInitializedEventPublished) {
+ log.info("Waiting until member initialized event is
received...");
+ sleep(1000);
+ }
+ assertTrue("Member initialized status check failed",
StratosApiV41Utils.hasMembersInitialized(APPLICATION_ID));
+ }
+
+ private void publishMemberInitializedEvent() {
+ MemberInitializedEvent memberInitializedEvent = new
MemberInitializedEvent(SERVICE_NAME, CLUSTER_ID,
+ CLUSTER_INSTANCE_ID, TEST_MEMBER_ID_1,
NETWORK_PARTITION_ID, PARTITION_ID, TEST_MEMBER_INSTANCE_ID_1);
+ EventPublisher publisher = EventPublisherPool
+
.getPublisher(MessagingUtil.getMessageTopicName(memberInitializedEvent));
+ publisher.publish(memberInitializedEvent);
+ log.info("MemberInitializedEvent published");
+ }
+
+ private void publishCompleteApplicationsEvent() {
+ Map<String, ClusterDataHolder> clusterDataHolderMap = new
HashMap<>();
+ ClusterDataHolder clusterDataHolder = new
ClusterDataHolder(SERVICE_NAME, CLUSTER_ID);
+ clusterDataHolderMap.put("alias", clusterDataHolder);
+
+ Application application = new Application(APPLICATION_ID);
+ ApplicationInstance applicationInstance = new
ApplicationInstance(APPLICATION_ALIAS, APPLICATION_INSTANCE_ID);
+ application.addInstance("", applicationInstance);
+ application.setClusterData(clusterDataHolderMap);
+
+ Applications applications = new Applications();
+ applications.addApplication(application);
+ CompleteApplicationsEvent completeApplicationsEvent = new
CompleteApplicationsEvent(applications);
+ EventPublisher publisher = EventPublisherPool
+
.getPublisher(MessagingUtil.getMessageTopicName(completeApplicationsEvent));
+ publisher.publish(completeApplicationsEvent);
+ log.info("CompleteApplicationsEvent published");
+ }
+
+ private void publishCompleteTopologyEvent() {
+ Service service = new Service(SERVICE_NAME,
ServiceType.SingleTenant);
+ Cluster cluster = new Cluster(service.getServiceName(),
CLUSTER_ID, DEPLOYMENT_POLICY_ID, AUTOSCALE_POLICY_ID,
+ APPLICATION_ID);
+ Member member = new Member(service.getServiceName(),
cluster.getClusterId(), TEST_MEMBER_ID_1,
+ CLUSTER_INSTANCE_ID, NETWORK_PARTITION_ID, PARTITION_ID,
LoadBalancingIPType.Private,
+ System.currentTimeMillis());
+ member.setStatus(MemberStatus.Created);
+ cluster.addMember(member);
+ service.addCluster(cluster);
+ Topology topology = new Topology();
+ topology.addService(service);
+ CompleteTopologyEvent completeTopologyEvent = new
CompleteTopologyEvent(topology);
+ String topologyTopicName =
MessagingUtil.getMessageTopicName(completeTopologyEvent);
+ EventPublisher publisher =
EventPublisherPool.getPublisher(topologyTopicName);
+ publisher.publish(completeTopologyEvent);
+ log.info("CompleteTopologyEvent published");
+ }
--- End diff --
I didn't notice that we stop the ActiveMQ after the test
> Instances are not terminated if an application is deployed and immediately
> undeployed
> -------------------------------------------------------------------------------------
>
> Key: STRATOS-1641
> URL: https://issues.apache.org/jira/browse/STRATOS-1641
> Project: Stratos
> Issue Type: Bug
> Components: Stratos Manager
> Affects Versions: 4.1.5
> Reporter: Akila
> Assignee: Akila
> Fix For: FUTURE
>
>
> Steps to reproduce;
> 1. Deploy an application on EC2 or OpenStack
> 2. Wait until Stratos spins up an instance.
> 3. Undeploy the app immediately
> 3. Following error is seen in the log
> [2015-12-06 00:29:51,313] ERROR
> {org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceImpl}
> - Could not terminate instance, instance id is blank: [member-id]
> single-cartridge-app-ec2.my-php-app-ec2.php-ec2.domain5545861a-0a1b-4532-830e-1c9beb2d8545
> , removing member from topology...
> 4. Stratos fails to terminate the spawned instance
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)