adding partition and network partition support for cluster instances
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b5f992b7 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b5f992b7 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b5f992b7 Branch: refs/heads/master Commit: b5f992b736455867f081b471b82e6780b32507f8 Parents: 94839c6 Author: reka <[email protected]> Authored: Wed Dec 3 19:58:33 2014 +0530 Committer: reka <[email protected]> Committed: Wed Dec 3 19:58:51 2014 +0530 ---------------------------------------------------------------------- .../autoscaler/api/AutoScalerServiceImpl.java | 16 +- .../client/CloudControllerClient.java | 6 +- .../autoscaler/context/AutoscalerContext.java | 4 + .../context/cluster/ClusterContextFactory.java | 2 +- .../context/cluster/VMClusterContext.java | 14 +- .../autoscaler/monitor/MonitorFactory.java | 23 +- .../monitor/component/ApplicationMonitor.java | 1 + .../messaging/topology/TopologyBuilder.java | 8 +- .../topology/TopologyEventPublisher.java | 3 +- .../services/CloudControllerService.java | 4 +- .../impl/CloudControllerServiceImpl.java | 7 +- .../messaging/domain/instance/Instance.java | 10 + .../topology/ClusterInstanceCreatedEvent.java | 21 +- .../main/resources/CloudControllerService.wsdl | 1792 +++++++++--------- 14 files changed, 1009 insertions(+), 902 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java index 7733520..37059fe 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java @@ -131,13 +131,17 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface { ApplicationHolder.releaseReadLock(); } - if (allClusterInitialized && !AutoscalerContext.getInstance().containsPendingMonitor(appId)) { - AutoscalerUtil.getInstance(). - startApplicationMonitor(appId); - + if (!AutoscalerContext.getInstance().containsPendingMonitor(appId) + || !AutoscalerContext.getInstance().monitorExists(appId)) { + if(allClusterInitialized) { + AutoscalerUtil.getInstance(). + startApplicationMonitor(appId); + } else { + log.info("The application clusters are not yet created. " + + "Waiting for them to be created"); + } } else { - log.info("The application clusters are not yet created. " + - "Waiting for them to be created"); + log.info("The application Monitor has already been created for [Application] " + appId); } return policyId; } http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java index bb16bb6..a8e275a 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java @@ -285,9 +285,11 @@ public class CloudControllerClient { } - public void createClusterInstance (String serviceType, String clusterId, String alias, String instanceId){ + public void createClusterInstance (String serviceType, String clusterId, String alias, + String instanceId, String partitionId, String networkPartitionId){ try { - stub.createClusterInstance(serviceType, clusterId, alias, instanceId); + stub.createClusterInstance(serviceType, clusterId, alias, instanceId, + partitionId, networkPartitionId); } catch (RemoteException e) { String msg = e.getMessage(); http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java index 51fad05..2452255 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java @@ -111,4 +111,8 @@ public class AutoscalerContext { public boolean containsPendingMonitor(String appId) { return this.pendingApplicationMonitors.contains(appId); } + + public boolean monitorExists(String appId) { + return this.applicationMonitors.containsKey(appId); + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java index 76614f9..c92ee73 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java @@ -65,7 +65,7 @@ public class ClusterContextFactory { DeploymentPolicy deploymentPolicy; ApplicationHolder.acquireReadLock(); try { - deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(cluster.getAppId()); + deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicyByApplication(cluster.getAppId()); } finally { ApplicationHolder.releaseReadLock(); } http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java index 3207f31..cf67481 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java @@ -154,27 +154,27 @@ public class VMClusterContext extends AbstractClusterContext { private ClusterLevelNetworkPartitionContext parseDeploymentPolicy( ClusterInstance instance, Cluster cluster, - ChildPolicy deploymentPolicy, + ChildPolicy childPolicy, ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) throws PolicyValidationException, PartitionValidationException { if (log.isDebugEnabled()) { - log.debug("Deployment policy name: " + deploymentPolicy.getId()); + log.debug("Deployment policy name: " + childPolicy.getId()); } - if (deploymentPolicy == null) { - String msg = "Deployment policy is null: [policy-name] " + deploymentPolicy.getId(); + if (childPolicy == null) { + String msg = "Deployment policy is null: [policy-name] " + childPolicy.getId(); log.error(msg); throw new PolicyValidationException(msg); } - ChildLevelPartition[] childLevelPartitions = deploymentPolicy. + ChildLevelPartition[] childLevelPartitions = childPolicy. getChildLevelNetworkPartition( clusterLevelNetworkPartitionContext.getId()). getChildLevelPartitions(); if (childLevelPartitions == null) { String msg = "Partitions are null in deployment policy: [policy-name]: " + - deploymentPolicy.getId(); + childPolicy.getId(); log.error(msg); throw new PolicyValidationException(msg); } @@ -188,7 +188,7 @@ public class VMClusterContext extends AbstractClusterContext { ChildLevelNetworkPartition networkPartition; - networkPartition = deploymentPolicy.getChildLevelNetworkPartition(instance.getNetworkPartitionId()); + networkPartition = childPolicy.getChildLevelNetworkPartition(instance.getNetworkPartitionId()); String networkPartitionId = networkPartition.getId(); if (clusterLevelNetworkPartitionContext == null) { http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java index ed0362f..23d36e4 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java @@ -18,6 +18,8 @@ */ package org.apache.stratos.autoscaler.monitor; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.applications.ApplicationHolder; import org.apache.stratos.autoscaler.applications.dependency.context.ApplicationChildContext; import org.apache.stratos.autoscaler.applications.dependency.context.ClusterChildContext; @@ -38,6 +40,7 @@ import org.apache.stratos.messaging.domain.applications.Application; import org.apache.stratos.messaging.domain.applications.Group; import org.apache.stratos.messaging.domain.instance.ApplicationInstance; import org.apache.stratos.messaging.domain.instance.GroupInstance; +import org.apache.stratos.messaging.domain.instance.Instance; import org.apache.stratos.messaging.domain.topology.Cluster; import org.apache.stratos.messaging.domain.topology.Service; import org.apache.stratos.messaging.domain.topology.Topology; @@ -49,6 +52,8 @@ import java.util.List; * Factory class to get the Monitors. */ public class MonitorFactory { + private static final Log log = LogFactory.getLog(MonitorFactory.class); + /** * Factor method used to create relevant monitors based on the given context @@ -81,9 +86,16 @@ public class MonitorFactory { addClusterMonitor((AbstractClusterMonitor) monitor); // FIXME: passing null as alias for cluster instance temporarily. should be removed. for(String parentInstanceId : parentInstanceIds) { - createClusterInstance(clusterChildCtxt.getServiceName(), - clusterMonitor.getClusterId(), null, - parentInstanceId); + Instance instance = parentMonitor.getInstance(parentInstanceId); + if(instance != null) { + createClusterInstance(clusterChildCtxt.getServiceName(), + clusterMonitor.getClusterId(), null, + parentInstanceId, instance.getPartitionId(), + instance.getNetworkPartitionId()); + } else { + + } + } } @@ -94,8 +106,9 @@ public class MonitorFactory { } private static void createClusterInstance(String serviceType, String clusterId, String alias, - String instanceId) { - CloudControllerClient.getInstance().createClusterInstance(serviceType, clusterId, alias, instanceId); + String instanceId, String partitionId, String networkPartitionId) { + CloudControllerClient.getInstance().createClusterInstance(serviceType, clusterId, alias, + instanceId, partitionId, networkPartitionId); } /** http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java index ca70ba5..262b34a 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java @@ -219,6 +219,7 @@ public class ApplicationMonitor extends ParentComponentMonitor { ApplicationInstance instance = new ApplicationInstance(appId, instanceId); instance.setStatus(ApplicationStatus.Created); + instance.setNetworkPartitionId(networkPartition.getId()); this.applicationInstanceIdMap.put(instanceId, instance); this.networkPartitionCtxts.put(context.getId(), context); http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java index 991a355..a70a5ab 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java @@ -277,7 +277,9 @@ public class TopologyBuilder { } - public static void handleClusterInstanceCreated(String serviceType, String clusterId, String alias, String instanceId) { + public static void handleClusterInstanceCreated(String serviceType, String clusterId, + String alias, String instanceId, String partitionId, + String networkPartitionId) { TopologyManager.acquireWriteLock(); @@ -308,7 +310,9 @@ public class TopologyBuilder { TopologyManager.updateTopology(topology); ClusterInstanceCreatedEvent clusterInstanceCreatedEvent = - new ClusterInstanceCreatedEvent(alias, serviceType, clusterId, instanceId); + new ClusterInstanceCreatedEvent(alias, serviceType, clusterId, + instanceId, networkPartitionId); + clusterInstanceCreatedEvent.setPartitionId(partitionId); TopologyEventPublisher.sendClusterInstanceCreatedEvent(clusterInstanceCreatedEvent); } finally { http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyEventPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyEventPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyEventPublisher.java index 7000c16..eea941c 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyEventPublisher.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyEventPublisher.java @@ -253,8 +253,9 @@ public class TopologyEventPublisher { public static void sendClusterInstanceCreatedEvent(ClusterInstanceCreatedEvent clusterInstanceCreatedEvent) { if (log.isInfoEnabled()) { log.info(String.format("Publishing cluster Instance Created event: [service] %s [cluster] %s " + - "[instance-id] %s", + " in [network partition] %s [instance-id] %s", clusterInstanceCreatedEvent.getServiceName(), clusterInstanceCreatedEvent.getClusterId(), + clusterInstanceCreatedEvent.getNetworkPartitionId(), clusterInstanceCreatedEvent.getInstanceId())); } publishEvent(clusterInstanceCreatedEvent); http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java index 87e8913..d0dd730 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java @@ -228,7 +228,9 @@ public interface CloudControllerService { * @param instanceId instance id * @throws ClusterInstanceCreationException if an y error occurs in cluster instance creation */ - public void createClusterInstance (String serviceType, String clusterId, String alias, String instanceId) throws + public void createClusterInstance (String serviceType, String clusterId, String alias, + String instanceId, String partitionId, + String networkPartitionId) throws ClusterInstanceCreationException; /** http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java index 01e41df..4843565 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java @@ -2046,10 +2046,13 @@ public class CloudControllerServiceImpl implements CloudControllerService { } - public void createClusterInstance (String serviceType, String clusterId, String alias, String instanceId) throws + public void createClusterInstance (String serviceType, String clusterId, + String alias, String instanceId, String partitionId, + String networkPartitionId) throws ClusterInstanceCreationException { - TopologyBuilder.handleClusterInstanceCreated(serviceType, clusterId, alias, instanceId); + TopologyBuilder.handleClusterInstanceCreated(serviceType, clusterId, alias, + instanceId, partitionId, networkPartitionId); persist(); } http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/Instance.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/Instance.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/Instance.java index 60d15ff..e6fb55f 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/Instance.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/Instance.java @@ -39,6 +39,8 @@ public abstract class Instance<T extends LifeCycleState> implements Serializable private String parentId; //Network partition id private String networkPartitionId; + //partitionId + private String partitionId; public Instance(String alias, String instanceId) { this.alias = alias; @@ -95,5 +97,13 @@ public abstract class Instance<T extends LifeCycleState> implements Serializable public void setNetworkPartitionId(String networkPartitionId) { this.networkPartitionId = networkPartitionId; } + + public String getPartitionId() { + return partitionId; + } + + public void setPartitionId(String partitionId) { + this.partitionId = partitionId; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/b5f992b7/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInstanceCreatedEvent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInstanceCreatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInstanceCreatedEvent.java index be106ef..58055e0 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInstanceCreatedEvent.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInstanceCreatedEvent.java @@ -29,13 +29,17 @@ public class ClusterInstanceCreatedEvent extends Event { private final String clusterId; private String instanceId; private String alias; + private String partitionId; + private String networkPartitionId; - public ClusterInstanceCreatedEvent(String alias, String serviceName, String clusterId, String instanceId) { + public ClusterInstanceCreatedEvent(String alias, String serviceName, String clusterId, + String instanceId, String networkPartitionId) { this.serviceName = serviceName; this.clusterId = clusterId; this.instanceId = instanceId; this.alias = alias; + this.setNetworkPartitionId(networkPartitionId); } @@ -61,4 +65,19 @@ public class ClusterInstanceCreatedEvent extends Event { return alias; } + public String getPartitionId() { + return partitionId; + } + + public void setPartitionId(String partitionId) { + this.partitionId = partitionId; + } + + public String getNetworkPartitionId() { + return networkPartitionId; + } + + public void setNetworkPartitionId(String networkPartitionId) { + this.networkPartitionId = networkPartitionId; + } }
