Repository: stratos Updated Branches: refs/heads/master 18745a09b -> 9d474679f
handling new instance creation Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/9d474679 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/9d474679 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/9d474679 Branch: refs/heads/master Commit: 9d474679fc569e8176caf85314529d4592f658c4 Parents: 18745a0 Author: reka <[email protected]> Authored: Fri Nov 28 19:12:52 2014 +0530 Committer: reka <[email protected]> Committed: Fri Nov 28 19:13:05 2014 +0530 ---------------------------------------------------------------------- .../applications/topic/ApplicationBuilder.java | 3 +- .../autoscaler/monitor/EventHandler.java | 5 +- .../monitor/component/ApplicationMonitor.java | 7 +- .../monitor/component/GroupMonitor.java | 134 +++++++++++++------ .../component/ParentComponentMonitor.java | 30 ++--- .../monitor/events/ClusterStatusEvent.java | 7 + .../monitor/events/GroupStatusEvent.java | 2 + .../autoscaler/monitor/events/MonitorEvent.java | 8 ++ .../monitor/events/MonitorStatusEvent.java | 6 + .../builder/MonitorStatusEventBuilder.java | 24 +++- .../domain/instance/ClusterInstance.java | 11 +- .../domain/instance/GroupInstance.java | 10 ++ 12 files changed, 181 insertions(+), 66 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java index d01cd70..5c9c873 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java @@ -356,7 +356,8 @@ public class ApplicationBuilder { } public static void handleGroupInstanceCreatedEvent(String appId, String groupId, String instanceId, - String parentId) { + String parentId, String partitionId, + String networkPartitionId) { if (log.isDebugEnabled()) { log.debug("Handling Group creation for the [group]: " + groupId + " in the [application] " + appId); http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java index 5fcbb2c..bf65eb4 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java @@ -18,6 +18,8 @@ */ package org.apache.stratos.autoscaler.monitor; +import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException; +import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException; import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent; import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent; @@ -37,7 +39,8 @@ public interface EventHandler { * * @param statusEvent */ - public abstract void onParentStatusEvent(MonitorStatusEvent statusEvent); + public abstract void onParentStatusEvent(MonitorStatusEvent statusEvent) throws + ParentMonitorNotFoundException; /** * Triggered when a scaling event is received from a child. http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/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 ccd0f3d..e845e8e 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 @@ -107,7 +107,12 @@ public class ApplicationMonitor extends ParentComponentMonitor { */ public void setStatus(ApplicationStatus status, String instanceId) { //notify the children about the state change - MonitorStatusEventBuilder.notifyChildren(this, new ApplicationStatusEvent(status, appId, null)); + try { + MonitorStatusEventBuilder.notifyChildren(this, new ApplicationStatusEvent(status, appId, instanceId)); + } catch (ParentMonitorNotFoundException e) { + log.error("Error while notifying the children from [application] " + appId, e); + //TODO revert siblings + } } @Override http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java index 2f1645b..d357946 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java @@ -20,23 +20,29 @@ package org.apache.stratos.autoscaler.monitor.component; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.context.AutoscalerContext; -import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext; import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm; import org.apache.stratos.autoscaler.applications.ApplicationHolder; import org.apache.stratos.autoscaler.applications.dependency.context.ApplicationChildContext; import org.apache.stratos.autoscaler.applications.dependency.context.GroupChildContext; import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder; +import org.apache.stratos.autoscaler.context.AutoscalerContext; +import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext; import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException; +import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException; import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException; import org.apache.stratos.autoscaler.monitor.EventHandler; import org.apache.stratos.autoscaler.monitor.Monitor; +import org.apache.stratos.autoscaler.monitor.events.GroupStatusEvent; +import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent; +import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent; import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder; -import org.apache.stratos.autoscaler.monitor.events.*; import org.apache.stratos.autoscaler.partition.NetworkPartition; import org.apache.stratos.autoscaler.policy.PolicyManager; import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy; -import org.apache.stratos.messaging.domain.applications.*; +import org.apache.stratos.messaging.domain.applications.Application; +import org.apache.stratos.messaging.domain.applications.ApplicationStatus; +import org.apache.stratos.messaging.domain.applications.Group; +import org.apache.stratos.messaging.domain.applications.GroupStatus; import org.apache.stratos.messaging.domain.instance.GroupInstance; import org.apache.stratos.messaging.domain.instance.Instance; import org.apache.stratos.messaging.domain.topology.ClusterStatus; @@ -89,16 +95,16 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler } else { // notify parent log.info("[Group] " + this.id + "is notifying the [parent] " + this.parent.getId()); - if(this.isGroupScalingEnabled()) { + if (this.isGroupScalingEnabled()) { ApplicationHolder.acquireReadLock(); try { Application application = ApplicationHolder.getApplications(). - getApplication(this.appId); - if(application != null) { + getApplication(this.appId); + if (application != null) { //Notifying the parent using parent's instance Id, // as it has group scaling enabled. Group group = application.getGroupRecursively(this.id); - if(group != null) { + if (group != null) { GroupInstance context = group.getInstanceContexts(instanceId); MonitorStatusEventBuilder.handleGroupStatusEvent(this.parent, status, this.id, context.getParentId()); @@ -114,7 +120,12 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler } } //notify the children about the state change - MonitorStatusEventBuilder.notifyChildren(this, new GroupStatusEvent(status, getId(), null)); + try { + MonitorStatusEventBuilder.notifyChildren(this, new GroupStatusEvent(status, this.id, instanceId)); + } catch (ParentMonitorNotFoundException e) { + log.error("Error while notifying the children from the [group] " + this.id, e); + //TODO revert siblings + } } @Override @@ -134,7 +145,7 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler if (this.terminatingMonitorsList.contains(id)) { this.terminatingMonitorsList.remove(id); this.aliasToActiveMonitorsMap.remove(id); - if(AutoscalerContext.getInstance().getClusterMonitors().containsKey(id)) { + if (AutoscalerContext.getInstance().getClusterMonitors().containsKey(id)) { AutoscalerContext.getInstance().removeClusterMonitor(id); } } @@ -167,31 +178,32 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler } @Override - public void onParentStatusEvent(MonitorStatusEvent statusEvent) { + public void onParentStatusEvent(MonitorStatusEvent statusEvent) + throws ParentMonitorNotFoundException { String instanceId = statusEvent.getInstanceId(); // send the ClusterTerminating event if (statusEvent.getStatus() == GroupStatus.Terminating || statusEvent.getStatus() == ApplicationStatus.Terminating) { ApplicationBuilder.handleGroupTerminatingEvent(appId, id, instanceId); - } else if(statusEvent.getStatus() == ClusterStatus.Created || - statusEvent.getStatus() == GroupStatus.Created) { + } else if (statusEvent.getStatus() == ClusterStatus.Created || + statusEvent.getStatus() == GroupStatus.Created) { Application application = ApplicationHolder.getApplications().getApplication(this.appId); Group group = application.getGroupRecursively(statusEvent.getId()); //starting a new instance of this monitor - createGroupInstance(group, statusEvent.getInstanceId()); + createInstanceAndStartDependency(group, statusEvent.getInstanceId()); } } @Override public void onChildScalingEvent(MonitorScalingEvent scalingEvent) { - if(hasGroupScalingDependent){ + if (hasGroupScalingDependent) { //notify parent parent.onChildScalingEvent(scalingEvent); } - if(log.isDebugEnabled()){ + if (log.isDebugEnabled()) { log.debug("Child scaling event received to [group]: " + this.getId() + ", [network partition]: " + scalingEvent.getNetworkPartitionId() + ", [event] " + scalingEvent.getId() + ", [group instance] " + scalingEvent.getInstanceId()); @@ -202,13 +214,13 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler (GroupChildContext) scalingDependencyTree.findApplicationContextWithIdInScalingDependencyTree(id); //Notifying children, if this group has scaling dependencies - if (currentChildContextInScalingTree.isGroupScalingEnabled()){ - for (ApplicationChildContext applicationChildContext : currentChildContextInScalingTree.getApplicationChildContextList()){ + if (currentChildContextInScalingTree.isGroupScalingEnabled()) { + for (ApplicationChildContext applicationChildContext : currentChildContextInScalingTree.getApplicationChildContextList()) { //Get group monitor so that it can notify it's children Monitor monitor = aliasToActiveMonitorsMap.get(applicationChildContext.getId()); - if(monitor instanceof GroupMonitor || monitor instanceof ApplicationMonitor){ + if (monitor instanceof GroupMonitor || monitor instanceof ApplicationMonitor) { monitor.onParentScalingEvent(scalingEvent); } @@ -238,22 +250,22 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler public void startMinimumDependencies(Group group, List<String> parentInstanceIds) throws TopologyInConsistentException { int min = group.getGroupMinInstances(); - if(group.getInstanceContextCount() >= min) { + if (group.getInstanceContextCount() >= min) { startDependency(group); } else { - if(group.getInstanceContextCount() > 0) { + if (group.getInstanceContextCount() > 0) { List<String> instanceIds = new ArrayList<String>(); - for(String parentInstanceId : parentInstanceIds) { - List<Instance> contexts1 = group.getInstanceContextsWithParentId(parentInstanceId); + for (String parentInstanceId : parentInstanceIds) { + List<Instance> contexts1 = group.getInstanceContextsWithParentId(parentInstanceId); //Finding the non startable instance ids - if(group.getInstanceContexts(parentInstanceId) == null || contexts1.isEmpty() || + if (group.getInstanceContexts(parentInstanceId) == null || contexts1.isEmpty() || contexts1.size() == 0) { instanceIds.add(parentInstanceId); } } - if(instanceIds.size() > 0) { - createInstanceAndStartDependency(group, parentInstanceIds); + if (instanceIds.size() > 0) { + createInstanceAndStartDependency(group, instanceIds); } else { startDependency(group); } @@ -264,34 +276,35 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler } } - private void createInstanceAndStartDependency(Group group, List<String> parentInstanceIds) + public void createInstanceAndStartDependency(Group group, List<String> parentInstanceIds) throws TopologyInConsistentException { List<String> instanceIds = new ArrayList<String>(); String deploymentPolicyName = group.getDeploymentPolicy(); String instanceId; - for(String parentInstanceId : parentInstanceIds) { + for (String parentInstanceId : parentInstanceIds) { Application application = ApplicationHolder.getApplications().getApplication(this.appId); Instance parentInstanceContext; - if(this.id.equals(appId)) { - parentInstanceContext = application.getInstanceContexts(parentInstanceId); + if (this.id.equals(appId)) { + parentInstanceContext = application.getInstanceContexts(parentInstanceId); } else { Group group1 = application.getGroupRecursively(this.parent.getId()); parentInstanceContext = group1.getInstanceContexts(parentInstanceId); } GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext; - if(this.networkPartitionCtxts.containsKey(parentInstanceContext)) { + if (this.networkPartitionCtxts.containsKey(parentInstanceContext)) { groupLevelNetworkPartitionContext = this.networkPartitionCtxts. - get(parentInstanceContext.getNetworkPartitionId()); + get(parentInstanceContext.getNetworkPartitionId()); } else { groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext( - parentInstanceContext.getNetworkPartitionId(), - null, null); + parentInstanceContext.getNetworkPartitionId(), + null, null); this.addNetworkPartitionContext(groupLevelNetworkPartitionContext); } - - if(deploymentPolicyName != null) { + String partitionId = null; + String networkPartitionId = parentInstanceContext.getNetworkPartitionId(); + if (deploymentPolicyName != null) { DeploymentPolicy deploymentPolicy = PolicyManager.getInstance() .getDeploymentPolicy(deploymentPolicyName); NetworkPartition networkPartition = deploymentPolicy. @@ -299,14 +312,56 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler AutoscaleAlgorithm algorithm = this.getAutoscaleAlgorithm(networkPartition.getPartitionAlgo()); //Partition partition = algorithm.getNextScaleUpPartition(groupLevelNetworkPartitionContext, this.id); + //TODO need to find the partition. partitionId=? } - instanceId = createGroupInstance(group, parentInstanceId); + instanceId = createGroupInstance(group, parentInstanceId, partitionId, networkPartitionId); instanceIds.add(instanceId); } startDependency(group, instanceIds); } - private String createGroupInstance(Group group, String parentInstanceId) { + public void createInstanceAndStartDependency(Group group, String parentInstanceId) + throws ParentMonitorNotFoundException { + String deploymentPolicyName = group.getDeploymentPolicy(); + + String instanceId; + Application application = ApplicationHolder.getApplications().getApplication(this.appId); + Instance parentInstanceContext; + if (this.id.equals(appId)) { + parentInstanceContext = application.getInstanceContexts(parentInstanceId); + } else { + Group group1 = application.getGroupRecursively(this.parent.getId()); + parentInstanceContext = group1.getInstanceContexts(parentInstanceId); + } + + GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext; + if (this.networkPartitionCtxts.containsKey(parentInstanceContext)) { + groupLevelNetworkPartitionContext = this.networkPartitionCtxts. + get(parentInstanceContext.getNetworkPartitionId()); + } else { + groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext( + parentInstanceContext.getNetworkPartitionId(), + null, null); + this.addNetworkPartitionContext(groupLevelNetworkPartitionContext); + } + String partitionId = null; + String networkPartitionId = parentInstanceContext.getNetworkPartitionId(); + if (deploymentPolicyName != null) { + DeploymentPolicy deploymentPolicy = PolicyManager.getInstance() + .getDeploymentPolicy(deploymentPolicyName); + NetworkPartition networkPartition = deploymentPolicy. + getNetworkPartition(parentInstanceContext.getNetworkPartitionId()); + + AutoscaleAlgorithm algorithm = this.getAutoscaleAlgorithm(networkPartition.getPartitionAlgo()); + //Partition partition = algorithm.getNextScaleUpPartition(groupLevelNetworkPartitionContext, this.id); + //TODO need to find the partition. partitionId=? + } + instanceId = createGroupInstance(group, parentInstanceId, partitionId, networkPartitionId); + startDependency(group, instanceId); + } + + private String createGroupInstance(Group group, String parentInstanceId, String partitionId, + String networkPartitionId) { String instanceId = parentInstanceId; int minGroupInstances = group.getGroupMinInstances(); int maxGroupInstances = group.getGroupMaxInstances(); @@ -318,7 +373,8 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler instanceId = this.generateInstanceId(group); } ApplicationBuilder.handleGroupInstanceCreatedEvent(appId, group.getUniqueIdentifier(), - instanceId, parentInstanceId); + instanceId, parentInstanceId, + networkPartitionId, partitionId); return instanceId; } http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java index dacb654..56e2a63 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java @@ -84,7 +84,7 @@ public abstract class ParentComponentMonitor extends Monitor { * This will start the parallel dependencies at once from the top level. * it will get invoked when the monitor starts up only. */ - public void startDependency(ParentComponent component, List<String> instanceIds) throws TopologyInConsistentException { + public void startDependency(ParentComponent component, List<String> instanceIds) { //start the first dependency List<ApplicationChildContext> applicationContexts = this.startupDependencyTree. getStarAbleDependencies(); @@ -96,9 +96,8 @@ public abstract class ParentComponentMonitor extends Monitor { * This will start the parallel dependencies at once from the top level. * it will get invoked when the monitor starts up only. */ - public void startDependency(ParentComponent component, String instanceId) - throws TopologyInConsistentException, - ParentMonitorNotFoundException { + public void startDependency(ParentComponent component, String instanceId) throws + ParentMonitorNotFoundException { //start the first dependency List<ApplicationChildContext> applicationContexts = this.startupDependencyTree. getStarAbleDependencies(); @@ -110,7 +109,7 @@ public abstract class ParentComponentMonitor extends Monitor { * This will start the parallel dependencies at once from the top level. * it will get invoked when the monitor starts up only. */ - public void startDependency(ParentComponent component) throws TopologyInConsistentException { + public void startDependency(ParentComponent component) { //start the first dependency List<ApplicationChildContext> applicationContexts = this.startupDependencyTree. getStarAbleDependencies(); @@ -128,7 +127,7 @@ public abstract class ParentComponentMonitor extends Monitor { * * @param id alias/clusterId of which receive the activated event */ - public boolean startDependency(String id, String instanceId) throws TopologyInConsistentException { + public boolean startDependency(String id, String instanceId) throws ParentMonitorNotFoundException { List<ApplicationChildContext> applicationContexts = this.startupDependencyTree .getStarAbleDependencies(id); List<String> instanceIds = new ArrayList<String>(); @@ -136,7 +135,8 @@ public abstract class ParentComponentMonitor extends Monitor { return startDependency(applicationContexts, instanceIds); } - public boolean startAllChildrenDependency(ParentComponent component, String instanceId) throws TopologyInConsistentException { + public boolean startAllChildrenDependency(ParentComponent component, String instanceId) + throws TopologyInConsistentException { /*List<ApplicationChildContext> applicationContexts = this.startupDependencyTree .findAllChildrenOfAppContext(id);*/ return false;//startDependency(applicationContexts, instanceId); @@ -162,7 +162,8 @@ public abstract class ParentComponentMonitor extends Monitor { * * @param applicationContexts the found applicationContexts to be started */ - private boolean startDependency(List<ApplicationChildContext> applicationContexts, List<String> instanceIds) { + private boolean startDependency(List<ApplicationChildContext> applicationContexts, + List<String> instanceIds) { if (applicationContexts != null && applicationContexts.isEmpty()) { //all the groups/clusters have been started and waiting for activation log.info("There is no child found for the [group]: " + this.id); @@ -176,17 +177,6 @@ public abstract class ParentComponentMonitor extends Monitor { if (!this.aliasToActiveMonitorsMap.containsKey(context.getId())) { //to avoid if it is already started startMonitor(this, context, instanceIds); - } else { - //starting a new instance of the child - Monitor monitor = aliasToActiveMonitorsMap.get(context.getId()); - for (String instanceId : instanceIds) { - if (context instanceof ClusterChildContext) { - MonitorStatusEventBuilder.notifyChildCluster(monitor, ClusterStatus.Created, instanceId); - } else if (context instanceof GroupChildContext) { - MonitorStatusEventBuilder.notifyChildGroup(monitor, GroupStatus.Created, instanceId); - } - } - } } @@ -261,7 +251,7 @@ public abstract class ParentComponentMonitor extends Monitor { if (!startDep) { StatusChecker.getInstance().onChildStatusChange(eventId, this.id, this.appId, instanceId); } - } catch (TopologyInConsistentException e) { + } catch (ParentMonitorNotFoundException e) { //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription log.error(e); } http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java index 1eca48a..1509a5c 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java @@ -20,6 +20,8 @@ package org.apache.stratos.autoscaler.monitor.events; import org.apache.stratos.messaging.domain.topology.ClusterStatus; +import java.util.List; + /** * This will use to notify observers upon a cluster activation events received in Topology. */ @@ -32,6 +34,11 @@ public class ClusterStatusEvent extends MonitorStatusEvent { this.status = status; } + public ClusterStatusEvent(ClusterStatus status, List<String> instanceIds, String id) { + super(instanceIds , id); + this.status = status; + } + public ClusterStatus getStatus() { return this.status; } http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java index 50c297b..2a6d1e4 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java @@ -20,6 +20,8 @@ package org.apache.stratos.autoscaler.monitor.events; import org.apache.stratos.messaging.domain.applications.GroupStatus; +import java.util.List; + /** * This will use to notify observers upon a group activation events received in Topology. */ http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorEvent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorEvent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorEvent.java index 65c891a..7936e39 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorEvent.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorEvent.java @@ -18,16 +18,24 @@ */ package org.apache.stratos.autoscaler.monitor.events; +import java.util.List; + public abstract class MonitorEvent { protected String id; protected String instanceId; + protected List<String> instanceIds; + public MonitorEvent(String id , String instanceId) { this.id = id; this.instanceId = instanceId; } + public MonitorEvent(List<String> ids , String instanceId) { + this.instanceIds = ids; + this.instanceId = instanceId; + } public String getId(){ return id; } http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java index f4ba558..8e1c89b 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java @@ -20,6 +20,8 @@ package org.apache.stratos.autoscaler.monitor.events; import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState; +import java.util.List; + /** * Monitor Status Event */ @@ -29,6 +31,10 @@ public abstract class MonitorStatusEvent extends MonitorEvent { super(id , instanceId); } + public MonitorStatusEvent(List<String> id, String instanceId) { + super(id , instanceId); + } + public String getId() { return id; } http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java index 9ce891b..78fd308 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java @@ -20,6 +20,8 @@ package org.apache.stratos.autoscaler.monitor.events.builder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException; +import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException; import org.apache.stratos.autoscaler.monitor.Monitor; import org.apache.stratos.autoscaler.monitor.component.ParentComponentMonitor; import org.apache.stratos.autoscaler.monitor.events.*; @@ -27,6 +29,8 @@ import org.apache.stratos.messaging.domain.applications.ApplicationStatus; import org.apache.stratos.messaging.domain.topology.ClusterStatus; import org.apache.stratos.messaging.domain.applications.GroupStatus; +import java.util.List; + /** * This will build the necessary monitor status events to be sent to the parent/child monitor */ @@ -62,18 +66,32 @@ public class MonitorStatusEventBuilder { parent.onChildStatusEvent(statusEvent); } - public static void notifyChildren (ParentComponentMonitor componentMonitor, MonitorStatusEvent statusEvent) { + public static void notifyChildren (ParentComponentMonitor componentMonitor, MonitorStatusEvent statusEvent) + throws ParentMonitorNotFoundException { for (Monitor activeChildMonitor : componentMonitor.getAliasToActiveMonitorsMap().values()) { activeChildMonitor.onParentStatusEvent(statusEvent); } } - public static void notifyChildGroup(Monitor child, GroupStatus state, String instanceId) { + public static void notifyChildGroup(Monitor child, GroupStatus state, String instanceId) + throws ParentMonitorNotFoundException { MonitorStatusEvent statusEvent = new GroupStatusEvent(state, child.getId(), instanceId); child.onParentStatusEvent(statusEvent); } - public static void notifyChildCluster(Monitor child, ClusterStatus state, String instanceId) { + /*public static void notifyChildCluster(Monitor child, ClusterStatus state, List<String> instanceId) { + MonitorStatusEvent statusEvent = new ClusterStatusEvent(state, instanceId, child.getId()); + child.onParentStatusEvent(statusEvent); + } + + public static void notifyChildGroup(Monitor child, GroupStatus state, List<String> instanceIds) + throws ParentMonitorNotFoundException { + MonitorStatusEvent statusEvent = new GroupStatusEvent(state, child.getId(), instanceIds); + child.onParentStatusEvent(statusEvent); + }*/ + + public static void notifyChildCluster(Monitor child, ClusterStatus state, String instanceId) + throws ParentMonitorNotFoundException { MonitorStatusEvent statusEvent = new ClusterStatusEvent(state, child.getId(), instanceId); child.onParentStatusEvent(statusEvent); } http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/ClusterInstance.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/ClusterInstance.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/ClusterInstance.java index 8654970..a843b33 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/ClusterInstance.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/ClusterInstance.java @@ -26,7 +26,8 @@ import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateMana import java.util.Stack; public class ClusterInstance extends Instance<ClusterStatus> implements LifeCycleStateTransitionBehavior<ClusterStatus> { - + //partition id + private String partitionId; public ClusterInstance(String alias, String clusterId, String instanceId) { super(alias, instanceId); @@ -53,4 +54,12 @@ public class ClusterInstance extends Instance<ClusterStatus> implements LifeCycl public boolean setStatus(ClusterStatus newState) { return this.lifeCycleStateManager.changeState(newState); } + + public String getPartitionId() { + return partitionId; + } + + public void setPartitionId(String partitionId) { + this.partitionId = partitionId; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/9d474679/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/GroupInstance.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/GroupInstance.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/GroupInstance.java index fc3eea5..dd28fc3 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/GroupInstance.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/instance/GroupInstance.java @@ -26,6 +26,8 @@ import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateMana import java.util.Stack; public class GroupInstance extends Instance<GroupStatus> implements LifeCycleStateTransitionBehavior<GroupStatus> { + //partition id + private String partitionId; public GroupInstance(String alias, String instanceId) { super(alias, instanceId); @@ -52,4 +54,12 @@ public class GroupInstance extends Instance<GroupStatus> implements LifeCycleSta public boolean setStatus(GroupStatus newState) { return this.lifeCycleStateManager.changeState(newState); } + + public String getPartitionId() { + return partitionId; + } + + public void setPartitionId(String partitionId) { + this.partitionId = partitionId; + } }
