adding group scaling support for group definition
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b96d97df Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b96d97df Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b96d97df Branch: refs/heads/master Commit: b96d97df60adc7ad46724a1ce00f82a72f1c83b1 Parents: ed9ee86 Author: reka <[email protected]> Authored: Wed Nov 26 11:47:32 2014 +0530 Committer: reka <[email protected]> Committed: Wed Nov 26 11:47:32 2014 +0530 ---------------------------------------------------------------------- .../parser/DefaultApplicationParser.java | 5 +- .../applications/pojo/GroupContext.java | 48 +- .../monitor/application/ApplicationMonitor.java | 49 +- .../application/ApplicationMonitorFactory.java | 2 +- .../autoscaler/monitor/group/GroupMonitor.java | 6 +- .../status/checker/StatusChecker.java | 4 +- .../checker/group/GroupStatusProcessor.java | 2 +- .../application/beans/GroupDefinition.java | 48 +- .../messaging/domain/applications/Group.java | 18 + .../domain/applications/ParentComponent.java | 22 +- .../bean/util/converter/PojoConverter.java | 5 +- .../src/main/resources/AutoScalerService.wsdl | 531 ++++++++++--------- .../main/resources/CloudControllerService.wsdl | 396 +++++++------- 13 files changed, 599 insertions(+), 537 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java index d984c29..c24dfe0 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java @@ -469,8 +469,11 @@ public class DefaultApplicationParser implements ApplicationParser { Group group = new Group(appId, groupCtxt.getName(), groupCtxt.getAlias()); group.setGroupScalingEnabled(isGroupScalingEnabled(groupCtxt.getName())); + group.setGroupMinInstances(groupCtxt.getGroupMinInstances()); + group.setGroupMaxInstances(groupCtxt.getGroupMaxInstances()); + group.setGroupScalingEnabled(groupCtxt.isGroupScalingEnabled()); + group.setGroupInstanceMonitoringEnabled(groupCtxt.isGroupInstanceMonitoringEnabled()); group.setAutoscalingPolicy(groupCtxt.getAutoscalingPolicy()); - //TODO *****group.setDeploymentPolicy(groupCtxt.getDeploymentPolicy()); DependencyOrder dependencyOrder = new DependencyOrder(); // create the Dependency Ordering String [] startupOrders = getStartupOrderForGroup(groupCtxt); http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java index 885cccc..1195252 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java @@ -29,7 +29,13 @@ public class GroupContext implements Serializable{ private String alias; - private String deploymentPolicy; + private int groupMinInstances; + + private int groupMaxInstances; + + private boolean isGroupInstanceMonitoringEnabled; + + private boolean isGroupScalingEnabled; private String autoscalingPolicy; @@ -54,14 +60,6 @@ public class GroupContext implements Serializable{ this.alias = alias; } - public String getDeploymentPolicy() { - return deploymentPolicy; - } - - public void setDeploymentPolicy(String deploymentPolicy) { - this.deploymentPolicy = deploymentPolicy; - } - public String getAutoscalingPolicy() { return autoscalingPolicy; } @@ -85,4 +83,36 @@ public class GroupContext implements Serializable{ public void setGroupContexts(GroupContext[] groupContexts) { this.groupContexts = groupContexts; } + + public int getGroupMinInstances() { + return groupMinInstances; + } + + public void setGroupMinInstances(int groupMinInstances) { + this.groupMinInstances = groupMinInstances; + } + + public int getGroupMaxInstances() { + return groupMaxInstances; + } + + public void setGroupMaxInstances(int groupMaxInstances) { + this.groupMaxInstances = groupMaxInstances; + } + + public boolean isGroupInstanceMonitoringEnabled() { + return isGroupInstanceMonitoringEnabled; + } + + public void setGroupInstanceMonitoringEnabled(boolean isGroupInstanceMonitoringEnabled) { + this.isGroupInstanceMonitoringEnabled = isGroupInstanceMonitoringEnabled; + } + + public boolean isGroupScalingEnabled() { + return isGroupScalingEnabled; + } + + public void setGroupScalingEnabled(boolean isGroupScalingEnabled) { + this.isGroupScalingEnabled = isGroupScalingEnabled; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java index b0b6c4e..65a21f8 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java @@ -26,10 +26,12 @@ import org.apache.stratos.autoscaler.exception.TopologyInConsistentException; import org.apache.stratos.autoscaler.monitor.Monitor; import org.apache.stratos.autoscaler.monitor.MonitorStatusEventBuilder; import org.apache.stratos.autoscaler.monitor.ParentComponentMonitor; -import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor; -import org.apache.stratos.autoscaler.monitor.events.*; -import org.apache.stratos.autoscaler.status.checker.StatusChecker; -import org.apache.stratos.messaging.domain.applications.*; +import org.apache.stratos.autoscaler.monitor.events.ApplicationStatusEvent; +import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent; +import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent; +import org.apache.stratos.messaging.domain.applications.Application; +import org.apache.stratos.messaging.domain.applications.ApplicationStatus; +import org.apache.stratos.messaging.domain.applications.GroupStatus; import org.apache.stratos.messaging.domain.topology.ClusterStatus; import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState; @@ -79,8 +81,8 @@ public class ApplicationMonitor extends ParentComponentMonitor { } else { // check if this Group has nested sub Groups. If so, traverse them as well if (monitor instanceof ParentComponentMonitor) { - return findGroupMonitor(id, ((ParentComponentMonitor)monitor). - getAliasToActiveMonitorsMap().values()); + return findGroupMonitor(id, ((ParentComponentMonitor) monitor). + getAliasToActiveMonitorsMap().values()); } } } @@ -163,40 +165,19 @@ public class ApplicationMonitor extends ParentComponentMonitor { } private void startMinimumDependencies(Application application) - throws TopologyInConsistentException { - DeploymentPolicy policy = application.getComponentDeploymentPolicy(); - int min = 1; - if(policy != null) { - min = policy.getMin(); - } - if(application.getInstanceContextCount() >= min) { + throws TopologyInConsistentException { + //There will be one application instance + if (application.getInstanceContextCount() > 0) { startDependency(application); } else { - if(application.getInstanceContextCount() > 0) { - startDependency(application); - int remainingInstancesToBeStarted = min - application.getInstanceContextCount(); - while (remainingInstancesToBeStarted > 0) { - createInstanceAndStartDependency(application); - remainingInstancesToBeStarted--; - } - - } else { - //No available instances in the Applications. Need to start them all - int instancesToBeStarted = min; - while(instancesToBeStarted > 0) { - createInstanceAndStartDependency(application); - instancesToBeStarted--; - - } - } - - + //No available instances in the Applications. Need to start them all + createInstanceAndStartDependency(application); } } private void createInstanceAndStartDependency(Application application) - throws TopologyInConsistentException { - String instanceId = createApplicationInstance(application); + throws TopologyInConsistentException { + String instanceId = createApplicationInstance(application); startDependency(application, instanceId); } http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java index 73f274d..11c1026 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java @@ -115,7 +115,7 @@ public class ApplicationMonitorFactory { groupMonitor.setHasGroupScalingDependent(true); } } - //TODO*********** make it sync with the topology + //TODO*********** make it sync with the topology in the restart /*if (group.getStatus() != groupMonitor.getStatus()) { //updating the status, if the group is not in created state when creating group Monitor http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java index ac1deb4..eeb21c6 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java @@ -223,11 +223,7 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler private void startMinimumDependencies(Group group, String parentInstanceId) throws TopologyInConsistentException { - DeploymentPolicy policy = group.getComponentDeploymentPolicy(); - int min = 1; - if(policy != null) { - min = policy.getMin(); - } + int min = group.getGroupMinInstances(); if(group.getInstanceContextCount() >= min) { startDependency(group); } else { http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java index 0d94110..4bfe40a 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java @@ -411,9 +411,7 @@ public class StatusChecker { activeGroupInstances++; } } - if(activeGroupInstances >= group.getComponentDeploymentPolicy().getMin()) { - return true; - } + return false; } http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/group/GroupStatusProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/group/GroupStatusProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/group/GroupStatusProcessor.java index 19a43c9..87d0481 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/group/GroupStatusProcessor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/group/GroupStatusProcessor.java @@ -68,7 +68,7 @@ public abstract class GroupStatusProcessor extends StatusProcessor { } else { //Checking the minimum of the group instances to be satisfied List<InstanceContext> contexts = group.getInstanceContextsWithParentId(instanceId); - int minGroupInstances = group.getComponentDeploymentPolicy().getMin(); + int minGroupInstances = group.getGroupMinInstances(); int sameStateInstances = 0; for(InstanceContext context1 : contexts) { if(((GroupInstanceContext)context1).getStatus().equals(status)) { http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java index d7418c7..7986f75 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java @@ -29,7 +29,13 @@ public class GroupDefinition { private String alias; - private String deploymentPolicy; + private int groupMinInstances; + + private int groupMaxInstances; + + private boolean isGroupScalingEnabled; + + private boolean isGroupInstanceMonitoringEnabled; private String autoscalingPolicy; @@ -53,14 +59,6 @@ public class GroupDefinition { this.alias = alias; } - public String getDeploymentPolicy() { - return deploymentPolicy; - } - - public void setDeploymentPolicy(String deploymentPolicy) { - this.deploymentPolicy = deploymentPolicy; - } - public String getAutoscalingPolicy() { return autoscalingPolicy; } @@ -84,4 +82,36 @@ public class GroupDefinition { public void setSubGroups(List<GroupDefinition> subGroups) { this.subGroups = subGroups; } + + public int getGroupMinInstances() { + return groupMinInstances; + } + + public void setGroupMinInstances(int groupMinInstances) { + this.groupMinInstances = groupMinInstances; + } + + public int getGroupMaxInstances() { + return groupMaxInstances; + } + + public void setGroupMaxInstances(int groupMaxInstances) { + this.groupMaxInstances = groupMaxInstances; + } + + public boolean isGroupScalingEnabled() { + return isGroupScalingEnabled; + } + + public void setGroupScalingEnabled(boolean isGroupScalingEnabled) { + this.isGroupScalingEnabled = isGroupScalingEnabled; + } + + public boolean isGroupInstanceMonitoringEnabled() { + return isGroupInstanceMonitoringEnabled; + } + + public void setGroupInstanceMonitoringEnabled(boolean isGroupInstanceMonitoringEnabled) { + this.isGroupInstanceMonitoringEnabled = isGroupInstanceMonitoringEnabled; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java index 7e82de8..f49306f 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java @@ -34,6 +34,10 @@ public class Group extends ParentComponent<GroupInstanceContext> { private String name; // Group alias private String alias; + //minimum group instances + private int groupMinInstances; + //maximum group instances + private int groupMaxInstances; // Group level autoscaling policy private String autoscalingPolicy; // application id @@ -108,5 +112,19 @@ public class Group extends ParentComponent<GroupInstanceContext> { } + public int getGroupMinInstances() { + return groupMinInstances; + } + + public void setGroupMinInstances(int groupMinInstances) { + this.groupMinInstances = groupMinInstances; + } + public int getGroupMaxInstances() { + return groupMaxInstances; + } + + public void setGroupMaxInstances(int groupMaxInstances) { + this.groupMaxInstances = groupMaxInstances; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java index 09d5578..7e225ef 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java @@ -33,8 +33,6 @@ public abstract class ParentComponent<T extends InstanceContext> implements Seri // Dependency Order private DependencyOrder dependencyOrder; - //Deployment policy group/application - private DeploymentPolicy deploymentPolicy; // Group Map, key = Group.alias private final Map<String, Group> aliasToGroupMap; // Cluster Id map, key = subscription alias for the cartridge type @@ -43,10 +41,12 @@ public abstract class ParentComponent<T extends InstanceContext> implements Seri protected Map<String, T> instanceIdToInstanceContextMap; // flag for Group level scaling private boolean isGroupScalingEnabled; - + //flag for group instance level monitoring + private boolean isGroupInstanceMonitoringEnabled; public ParentComponent () { this.isGroupScalingEnabled = false; + this.isGroupInstanceMonitoringEnabled = false; aliasToGroupMap = new HashMap<String, Group>(); aliasToClusterDataMap = new HashMap<String, ClusterDataHolder>(); } @@ -298,14 +298,6 @@ public abstract class ParentComponent<T extends InstanceContext> implements Seri return instanceIdToInstanceContextMap; } - public DeploymentPolicy getComponentDeploymentPolicy() { - return deploymentPolicy; - } - - public void setDeploymentPolicy(DeploymentPolicy deploymentPolicy) { - this.deploymentPolicy = deploymentPolicy; - } - public boolean isGroupScalingEnabled() { return isGroupScalingEnabled; } @@ -313,4 +305,12 @@ public abstract class ParentComponent<T extends InstanceContext> implements Seri public void setGroupScalingEnabled(boolean isGroupScalingEnabled) { this.isGroupScalingEnabled = isGroupScalingEnabled; } + + public boolean isGroupInstanceMonitoringEnabled() { + return isGroupInstanceMonitoringEnabled; + } + + public void setGroupInstanceMonitoringEnabled(boolean isGroupInstanceMonitoringEnabled) { + this.isGroupInstanceMonitoringEnabled = isGroupInstanceMonitoringEnabled; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/b96d97df/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java index 8a2b168..a98eb9a 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java @@ -1003,7 +1003,10 @@ public class PojoConverter { GroupContext groupContext = new GroupContext(); groupContext.setName(groupDefinition.getName()); groupContext.setAlias(groupDefinition.getAlias()); - groupContext.setDeploymentPolicy(groupDefinition.getDeploymentPolicy()); + groupContext.setGroupMaxInstances(groupDefinition.getGroupMaxInstances()); + groupContext.setGroupMinInstances(groupDefinition.getGroupMinInstances()); + groupContext.setGroupScalingEnabled(groupDefinition.isGroupScalingEnabled()); + groupContext.setGroupInstanceMonitoringEnabled(groupDefinition.isGroupInstanceMonitoringEnabled()); groupContext.setAutoscalingPolicy(groupDefinition.getAutoscalingPolicy()); // nested Subscribables if (groupDefinition.getSubscribables() != null) {
