Repository: stratos Updated Branches: refs/heads/tenant-isolation 7575faa30 -> 2f2debf5b
. Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/3ab657aa Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/3ab657aa Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/3ab657aa Branch: refs/heads/tenant-isolation Commit: 3ab657aad60b599309101539745ed147e6f4ccf8 Parents: 7575faa Author: reka <[email protected]> Authored: Tue Aug 18 17:06:11 2015 +0530 Committer: gayangunarathne <[email protected]> Committed: Thu Aug 20 20:42:35 2015 +0530 ---------------------------------------------------------------------- .../common/threading/StratosThreadPool.java | 10 +-- .../iaas/services/impl/MockIaasServiceImpl.java | 2 +- extensions/das/pom.xml | 2 +- .../integration/tests/TopologyHandler.java | 19 ++++-- .../application/GroupStartupOrderTest.java | 34 ++++++++++- .../GroupTerminationBehaviorTest.java | 64 ++++++++++++++------ 6 files changed, 99 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/3ab657aa/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java index c0ae8ae..c72499f 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java @@ -24,10 +24,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.*; /** * Utility class for Stratos thread pool @@ -53,7 +50,10 @@ public class StratosThreadPool { if (executorService == null) { synchronized (executorServiceMapLock) { if (executorService == null) { - executorService = Executors.newFixedThreadPool(threadPoolSize); + final BlockingQueue<Runnable> queue = new ArrayBlockingQueue(threadPoolSize); + executorService =new ThreadPoolExecutor(threadPoolSize, 1000, + 0L, TimeUnit.MILLISECONDS, + queue);// Executors.newFixedThreadPool(threadPoolSize); executorServiceMap.put(identifier, executorService); log.info(String.format("Thread pool created: [type] Executor Service [id] %s [size] %d", identifier, threadPoolSize)); } http://git-wip-us.apache.org/repos/asf/stratos/blob/3ab657aa/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/services/impl/MockIaasServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/services/impl/MockIaasServiceImpl.java b/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/services/impl/MockIaasServiceImpl.java index 81cbfbe..4d2ff12 100644 --- a/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/services/impl/MockIaasServiceImpl.java +++ b/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/services/impl/MockIaasServiceImpl.java @@ -102,7 +102,7 @@ public class MockIaasServiceImpl implements MockIaasService { } // Generate instance id - String instanceId = UUID.randomUUID().toString(); + String instanceId = mockInstanceContext.getMemberId(); mockInstanceContext.setInstanceId(instanceId); MockInstance mockInstance = new MockInstance(mockInstanceContext); http://git-wip-us.apache.org/repos/asf/stratos/blob/3ab657aa/extensions/das/pom.xml ---------------------------------------------------------------------- diff --git a/extensions/das/pom.xml b/extensions/das/pom.xml index d21d1be..5231674 100644 --- a/extensions/das/pom.xml +++ b/extensions/das/pom.xml @@ -23,7 +23,7 @@ <parent> <artifactId>stratos-extensions</artifactId> <groupId>org.apache.stratos</groupId> - <version>4.1.1-SNAPSHOT</version> + <version>4.1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> http://git-wip-us.apache.org/repos/asf/stratos/blob/3ab657aa/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java index ee29b94..a8e516f 100644 --- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java @@ -58,9 +58,11 @@ import static junit.framework.Assert.*; public class TopologyHandler { private static final Log log = LogFactory.getLog(TopologyHandler.class); + public static final int APPLICATION_ACTIVATION_TIMEOUT = 400000; public static final int APPLICATION_UNDEPLOYMENT_TIMEOUT = 60000; public static final int APPLICATION_TOPOLOGY_TIMEOUT = 60000; + public static final String APPLICATION_STATUS_CREATED = "Created"; public static final String APPLICATION_STATUS_UNDEPLOYING = "Undeploying"; private ApplicationsEventReceiver applicationsEventReceiver; @@ -183,6 +185,10 @@ public class TopologyHandler { status, application.getStatus()); } + public Application getApplication(String applicationName, int tenantId) { + return ApplicationManager.getApplications().getApplicationByTenant(applicationName, tenantId); + } + public void assertApplicationForNonAvailability(String applicationName, int tenantId) { Application application = ApplicationManager.getApplications().getApplicationByTenant(applicationName, tenantId); @@ -257,6 +263,7 @@ public class TopologyHandler { * @param tenantId * @param applicationName */ + public void terminateMemberFromCluster(String cartridgeName, String applicationName, IntegrationMockClient mockIaasApiClient, int tenantId) { Application application = ApplicationManager.getApplications().getApplicationByTenant(applicationName, tenantId); assertNotNull(String.format("Application is not found: [application-id] %s", @@ -264,16 +271,16 @@ public class TopologyHandler { Set<ClusterDataHolder> clusterDataHolderSet = application.getClusterDataRecursively(); for (ClusterDataHolder clusterDataHolder : clusterDataHolderSet) { - String serviceName = clusterDataHolder.getServiceType(); - if(cartridgeName.equals(serviceName)) { + String serviceUuid = clusterDataHolder.getServiceUuid(); + if(cartridgeName.equals(serviceUuid)) { String clusterId = clusterDataHolder.getClusterId(); - Service service = TopologyManager.getTopology().getService(serviceName); - assertNotNull(String.format("Service is not found: [application-id] %s [service] %s", - applicationName, serviceName), service); + Service service = TopologyManager.getTopology().getService(serviceUuid); + assertNotNull(String.format("Service is not found: [application-id] %s [service uuid] %s", + applicationName, serviceUuid), service); Cluster cluster = service.getCluster(clusterId); assertNotNull(String.format("Cluster is not found: [application-id] %s [service] %s [cluster-id] %s", - applicationName, serviceName, clusterId), cluster); + applicationName, serviceUuid, clusterId), cluster); boolean memberTerminated = false; for (ClusterInstance instance : cluster.getInstanceIdToInstanceContextMap().values()) { http://git-wip-us.apache.org/repos/asf/stratos/blob/3ab657aa/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java index c8dd1cc..07af23d 100644 --- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java @@ -29,9 +29,13 @@ import org.apache.stratos.integration.tests.TopologyHandler; import org.apache.stratos.messaging.domain.application.ApplicationStatus; import org.testng.annotations.Test; + import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; + + + /** * Handling the startup order of the group */ @@ -63,8 +67,25 @@ public class GroupStartupOrderTest extends StratosTestServerManager { RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME); assertEquals(addedC3, true); + + boolean addedC5 = restClientTenant1.addEntity(RESOURCES_PATH + RestConstants.CARTRIDGES_PATH + "/" + "tomcat1-group-startup-order-test.json", + RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME); + assertTrue(addedC5); + + boolean addedC6 = restClientTenant1.addEntity(RESOURCES_PATH + RestConstants.CARTRIDGES_PATH + "/" + "tomcat2-group-startup-order-test.json", + RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME); + assertTrue(addedC6); + + boolean addedC7 = restClientTenant1.addEntity(RESOURCES_PATH + RestConstants.CARTRIDGES_PATH + "/" + "tomcat3-group-startup-order-test.json", + RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME); + assertTrue(addedC7); + + boolean addedC8 = restClientTenant1.addEntity(RESOURCES_PATH + RestConstants.CARTRIDGES_PATH + "/" + "tomcat-group-startup-order-test.json", + RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME); + assertTrue(addedC8); + boolean addedG1 = restClientTenant1.addEntity(RESOURCES_PATH + RestConstants.CARTRIDGE_GROUPS_PATH + - "/" + "esb-php-group-application-bursting-test.json", RestConstants.CARTRIDGE_GROUPS, + "/" + "esb-php-group-startup-order-test.json", RestConstants.CARTRIDGE_GROUPS, RestConstants.CARTRIDGE_GROUPS_NAME); assertEquals(addedG1, true); @@ -73,11 +94,22 @@ public class GroupStartupOrderTest extends StratosTestServerManager { CartridgeGroupBean.class, RestConstants.CARTRIDGE_GROUPS_NAME); assertEquals(beanG1.getName(), "esb-php-group-application-bursting-test"); + boolean addedG2 = restClientTenant1.addEntity(RESOURCES_PATH + RestConstants.CARTRIDGE_GROUPS_PATH + + "/" + "group6-group-startup-order-test.json", RestConstants.CARTRIDGE_GROUPS, + RestConstants.CARTRIDGE_GROUPS_NAME); + assertTrue(addedG2); + + boolean addedG3 = restClientTenant1.addEntity(RESOURCES_PATH + RestConstants.CARTRIDGE_GROUPS_PATH + + "/" + "group8-group-startup-order-test.json", RestConstants.CARTRIDGE_GROUPS, + RestConstants.CARTRIDGE_GROUPS_NAME); + assertTrue(addedG3); + boolean addedN1 = restClientTenant1.addEntity(RESOURCES_PATH + RestConstants.NETWORK_PARTITIONS_PATH + "/" + "network-partition-application-bursting-test-1.json", RestConstants.NETWORK_PARTITIONS, RestConstants.NETWORK_PARTITIONS_NAME); assertEquals(addedN1, true); + boolean addedN2 = restClientTenant1.addEntity(RESOURCES_PATH + RestConstants.NETWORK_PARTITIONS_PATH + "/" + "network-partition-application-bursting-test-2.json", RestConstants.NETWORK_PARTITIONS, RestConstants.NETWORK_PARTITIONS_NAME); http://git-wip-us.apache.org/repos/asf/stratos/blob/3ab657aa/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java index 9873f05..cbc5a65 100644 --- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java @@ -28,8 +28,6 @@ import org.apache.stratos.integration.tests.StratosTestServerManager; import org.apache.stratos.integration.tests.TopologyHandler; import org.apache.stratos.messaging.domain.application.Application; import org.apache.stratos.messaging.domain.application.ApplicationStatus; -import org.apache.stratos.messaging.domain.application.Group; -import org.apache.stratos.messaging.message.receiver.application.ApplicationManager; import org.testng.annotations.Test; import java.util.ArrayList; @@ -124,9 +122,10 @@ public class GroupTerminationBehaviorTest extends StratosTestServerManager { //Application active handling topologyHandler.assertApplicationStatus(bean.getApplicationId(), ApplicationStatus.Active,tenant1Id); - Application application = ApplicationManager.getApplications().getApplicationByTenant(bean.getApplicationId(), tenant1Id); - String groupId = topologyHandler.generateId(application.getUniqueIdentifier(), - "g-G1-1x0-group-termination-behavior-test", application.getUniqueIdentifier() + "-1"); + + Application depApplication= topologyHandler.getApplication(bean.getApplicationId(), tenant1Id); + String groupId = topologyHandler.generateId(depApplication.getUniqueIdentifier(), + "g-G1-1x0-group-termination-behavior-test", depApplication.getUniqueIdentifier() + "-1"); String clusterIdC3 = topologyHandler. getClusterIdFromAlias(bean.getApplicationId(), @@ -143,28 +142,36 @@ public class GroupTerminationBehaviorTest extends StratosTestServerManager { assertCreationOfNodes(groupId, clusterIdC2); assertCreationOfNodes(clusterIdC3, clusterIdC4); + //Group active handling topologyHandler.assertGroupActivation(bean.getApplicationId(),tenant1Id); //Cluster active handling topologyHandler.assertClusterActivation(bean.getApplicationId(),tenant1Id); + //Terminate one member in the cluster + TopologyHandler.getInstance().terminateMemberFromCluster( + "c3-group-termination-behavior-test", + bean.getApplicationId(), + mockIaasApiClient,tenant1Id); + List<String> clusterIds = new ArrayList<String>(); clusterIds.add(clusterIdC3); clusterIds.add(clusterIdC4); clusterIds.add(clusterIdC2); - // assertGroupInactive(groupId, clusterIdC3); + assertGroupInactive(groupId, clusterIdC3); - // assertTerminatingOfNodes(groupId, clusterIds); + assertTerminatingOfNodes(groupId, clusterIds); - // assertTerminationOfNodes(groupId, clusterIds); + assertTerminationOfNodes(groupId, clusterIds); //Application active handling topologyHandler.assertApplicationStatus(bean.getApplicationId(), ApplicationStatus.Active,tenant1Id); assertCreationOfNodes(groupId, clusterIdC2); + assertCreationOfNodes(clusterIdC3, clusterIdC4); //Group active handling @@ -275,7 +282,7 @@ public class GroupTerminationBehaviorTest extends StratosTestServerManager { long startTime = System.currentTimeMillis(); Map<String, Long> inActiveMap = TopologyHandler.getInstance().getInActiveMembers(); - while(!inActiveMap.containsKey(clusterId)) { + while (!inActiveMap.containsKey(clusterId)) { try { Thread.sleep(1000); } catch (InterruptedException ignore) { @@ -287,7 +294,7 @@ public class GroupTerminationBehaviorTest extends StratosTestServerManager { } assertTrue(inActiveMap.containsKey(clusterId)); - while(!inActiveMap.containsKey(groupId)) { + while (!inActiveMap.containsKey(groupId)) { try { Thread.sleep(1000); } catch (InterruptedException ignore) { @@ -303,9 +310,9 @@ public class GroupTerminationBehaviorTest extends StratosTestServerManager { private void assertTerminatingOfNodes(String groupId, List<String> clusterIds) { Map<String, Long> terminatingMembers = TopologyHandler.getInstance().getTerminatingMembers(); - for(String clusterId : clusterIds) { + for (String clusterId : clusterIds) { long startTime = System.currentTimeMillis(); - while(!terminatingMembers.containsKey(clusterId)) { + while (!terminatingMembers.containsKey(clusterId)) { try { Thread.sleep(1000); } catch (InterruptedException ignore) { @@ -318,7 +325,7 @@ public class GroupTerminationBehaviorTest extends StratosTestServerManager { assertTrue(terminatingMembers.containsKey(groupId)); } long startTime = System.currentTimeMillis(); - while(!terminatingMembers.containsKey(groupId)) { + while (!terminatingMembers.containsKey(groupId)) { try { Thread.sleep(1000); } catch (InterruptedException ignore) { @@ -336,8 +343,8 @@ public class GroupTerminationBehaviorTest extends StratosTestServerManager { long startTime = System.currentTimeMillis(); Map<String, Long> terminatedMembers = TopologyHandler.getInstance().getTerminatedMembers(); - for(String clusterId : clusterIds) { - while(!terminatedMembers.containsKey(clusterId)) { + for (String clusterId : clusterIds) { + while (!terminatedMembers.containsKey(clusterId)) { try { Thread.sleep(1000); } catch (InterruptedException ignore) { @@ -350,7 +357,7 @@ public class GroupTerminationBehaviorTest extends StratosTestServerManager { assertTrue(terminatedMembers.containsKey(clusterId)); } - while(!terminatedMembers.containsKey(groupId)) { + while (!terminatedMembers.containsKey(groupId)) { try { Thread.sleep(1000); } catch (InterruptedException ignore) { @@ -366,14 +373,35 @@ public class GroupTerminationBehaviorTest extends StratosTestServerManager { private void assertCreationOfNodes(String firstNodeId, String secondNodeId) { //group1 started first, then cluster started later - + long startTime = System.currentTimeMillis(); Map<String, Long> activeMembers = TopologyHandler.getInstance().getActivateddMembers(); Map<String, Long> createdMembers = TopologyHandler.getInstance().getCreatedMembers(); //Active member should be available at the time cluster is started to create. + while(!activeMembers.containsKey(firstNodeId)) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + } + activeMembers = TopologyHandler.getInstance().getActivateddMembers(); + if ((System.currentTimeMillis() - startTime) > GROUP_INACTIVE_TIMEOUT) { + break; + } + } assertTrue(activeMembers.containsKey(firstNodeId)); + + while(!createdMembers.containsKey(secondNodeId)) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + } + createdMembers = TopologyHandler.getInstance().getCreatedMembers(); + if ((System.currentTimeMillis() - startTime) > GROUP_INACTIVE_TIMEOUT) { + break; + } + } + assertTrue(createdMembers.containsKey(secondNodeId)); assertTrue(createdMembers.get(secondNodeId) > activeMembers.get(firstNodeId)); } } -
