You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ud...@apache.org on 2014/12/18 07:38:17 UTC
[15/50] [abbrv] stratos git commit: refactoring and fixing instance
communication issue when having more than one instance
refactoring and fixing instance communication issue when having more than one instance
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b8ecae23
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b8ecae23
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b8ecae23
Branch: refs/heads/master
Commit: b8ecae23e97a31cb6c339ff03b55df022f96e0b4
Parents: f994da1
Author: reka <rt...@gmail.com>
Authored: Tue Dec 16 14:47:08 2014 +0530
Committer: Udara Liyanage <ud...@wso2.com>
Committed: Thu Dec 18 12:06:57 2014 +0530
----------------------------------------------------------------------
.../parser/DefaultApplicationParser.java | 4 +-
.../applications/topic/ApplicationBuilder.java | 106 ++++++++++---------
.../monitor/cluster/VMClusterMonitor.java | 4 +-
.../monitor/component/GroupMonitor.java | 26 +++--
.../processor/group/GroupStatusProcessor.java | 4 +-
.../group/GroupStatusProcessorChain.java | 5 +-
6 files changed, 82 insertions(+), 67 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/b8ecae23/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 fbde278..6d7db2b 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
@@ -651,8 +651,8 @@ public class DefaultApplicationParser implements ApplicationParser {
PayloadData payloadData = ApplicationUtils.createPayload(appId, groupName, cartridgeInfo, subscriptionKey, tenantId, clusterId,
hostname, repoUrl, alias, null, dependencyAliases, properties);
- //String oAuth_token = createToken(appId);
- //payloadData.add(TOKEN_PAYLOD_PARAM_NAME, oAuth_token);
+ String oAuth_token = createToken(appId);
+ payloadData.add(TOKEN_PAYLOD_PARAM_NAME, oAuth_token);
String textPayload = payloadData.toString();
http://git-wip-us.apache.org/repos/asf/stratos/blob/b8ecae23/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 6768fa9..e842a6e 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
@@ -141,8 +141,8 @@ public class ApplicationBuilder {
}
ApplicationStatus status = ApplicationStatus.Active;
- ApplicationInstance context = application.getInstanceContexts(instanceId);
- if (context.isStateTransitionValid(status)) {
+ ApplicationInstance applicationInstance = application.getInstanceContexts(instanceId);
+ if (applicationInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
application.setStatus(status, instanceId);
updateApplicationMonitor(appId, status, instanceId);
@@ -151,7 +151,7 @@ public class ApplicationBuilder {
} else {
log.warn(String.format("Application state transition is not valid: [application-id] %s " +
" [instance-id] %s [current-status] %s [status-requested] %s",
- appId, instanceId, context.getStatus(), status));
+ appId, instanceId, applicationInstance.getStatus(), status));
}
}
@@ -171,8 +171,8 @@ public class ApplicationBuilder {
}
ApplicationStatus status = ApplicationStatus.Inactive;
- ApplicationInstance context = application.getInstanceContexts(instanceId);
- if (context.isStateTransitionValid(status)) {
+ ApplicationInstance applicationInstance = application.getInstanceContexts(instanceId);
+ if (applicationInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
application.setStatus(status, instanceId);
updateApplicationMonitor(appId, status, instanceId);
@@ -181,7 +181,7 @@ public class ApplicationBuilder {
} else {
log.warn(String.format("Application state transition is not valid: [application-id] %s " +
" [instance-id] %s [current-status] %s [status-requested] %s",
- appId, instanceId, context.getStatus(), status));
+ appId, instanceId, applicationInstance.getStatus(), status));
}
}
@@ -241,15 +241,16 @@ public class ApplicationBuilder {
log.warn("Application does not exist: [application-id] " + appId);
} else {
Application application = applications.getApplication(appId);
- ApplicationInstance instance = application.getInstanceContexts(instanceId);
+ ApplicationInstance applicationInstance = application.getInstanceContexts(instanceId);
ApplicationStatus status = ApplicationStatus.Terminated;
- if (instance.isStateTransitionValid(status)) {
+ if (applicationInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
- instance.setStatus(status);
+ applicationInstance.setStatus(status);
updateApplicationMonitor(appId, status, instanceId);
ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance().
getAppMonitor(appId);
- applicationMonitor.getNetworkPartitionContext(instance.getNetworkPartitionId()).
+ applicationMonitor.getNetworkPartitionContext(applicationInstance.
+ getNetworkPartitionId()).
removeClusterApplicationContext(instanceId);
applicationMonitor.removeInstance(instanceId);
application.removeInstance(instanceId);
@@ -313,12 +314,14 @@ public class ApplicationBuilder {
return;
}
- GroupInstance context = group.getInstanceContexts(instanceId);
+ GroupInstance groupInstance = group.getInstanceContexts(instanceId);
GroupStatus status = GroupStatus.Terminated;
- if (context != null) {
- if (context.isStateTransitionValid(status)) {
+ String parentId;
+ if (groupInstance != null) {
+ if (groupInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
- context.setStatus(status);
+ groupInstance.setStatus(status);
+ parentId = groupInstance.getParentId();
//removing the group instance and context
GroupMonitor monitor = getGroupMonitor(appId, groupId);
ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance().
@@ -332,21 +335,21 @@ public class ApplicationBuilder {
}
}
GroupLevelNetworkPartitionContext networkPartitionContext =
- monitor.getNetworkPartitionContext(context.getNetworkPartitionId());
+ monitor.getNetworkPartitionContext(groupInstance.getNetworkPartitionId());
networkPartitionContext.removeClusterGroupContext(instanceId);
- if (context.getPartitionId() != null) {
- networkPartitionContext.getPartitionCtxt(context.getPartitionId()).
- removeActiveInstance(context);
+ if (groupInstance.getPartitionId() != null) {
+ networkPartitionContext.getPartitionCtxt(groupInstance.getPartitionId()).
+ removeActiveInstance(groupInstance);
}
monitor.removeInstance(instanceId);
group.removeInstance(instanceId);
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceTerminatedEvent(appId, groupId, instanceId);
- monitor.setStatus(status, instanceId);
+ monitor.setStatus(status, instanceId, parentId);
}
} else {
log.warn("Group state transition is not valid: [group-id] " + groupId +
- " [instance-id] " + instanceId + " [current-state] " + context.getStatus()
+ " [instance-id] " + instanceId + " [current-state] " + groupInstance.getStatus()
+ "[requested-state] " + status);
}
@@ -379,18 +382,18 @@ public class ApplicationBuilder {
return;
}
- GroupInstance context = group.getInstanceContexts(instanceId);
+ GroupInstance groupInstance = group.getInstanceContexts(instanceId);
GroupStatus status = GroupStatus.Active;
- if (context != null) {
- if (context.isStateTransitionValid(status)) {
+ if (groupInstance != null) {
+ if (groupInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
- context.setStatus(status);
- updateGroupMonitor(appId, groupId, status, instanceId);
+ groupInstance.setStatus(status);
+ updateGroupMonitor(appId, groupId, status, instanceId, groupInstance.getParentId());
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceActivatedEvent(appId, groupId, instanceId);
} else {
log.warn("Group state transition is not valid: [group-id] " + groupId +
- " [instance-id] " + instanceId + " [current-state] " + context.getStatus()
+ " [instance-id] " + instanceId + " [current-state] " + groupInstance.getStatus()
+ "[requested-state] " + status);
}
@@ -404,7 +407,7 @@ public class ApplicationBuilder {
String parentId,
String networkPartitionId,
String partitionId) {
- GroupInstance instance = null;
+ GroupInstance groupInstance = null;
ApplicationHolder.acquireWriteLock();
try {
if (log.isDebugEnabled()) {
@@ -417,14 +420,14 @@ public class ApplicationBuilder {
if (application == null) {
log.warn(String.format("Application %s does not exist",
appId));
- return instance;
+ return groupInstance;
}
Group group = application.getGroupRecursively(groupId);
if (group == null) {
log.warn(String.format("Group %s does not exist when creating group",
groupId));
- return instance;
+ return groupInstance;
}
GroupStatus status = GroupStatus.Created;
@@ -441,15 +444,15 @@ public class ApplicationBuilder {
if (!group.containsInstanceContext(instanceId)) {
//setting the status, persist and publish
- instance = new GroupInstance(groupId, instanceId);
- instance.setParentId(parentId);
- instance.setPartitionId(partitionId);
- instance.setNetworkPartitionId(networkPartitionId);
- instance.setStatus(status);
- group.addInstance(instanceId, instance);
+ groupInstance = new GroupInstance(groupId, instanceId);
+ groupInstance.setParentId(parentId);
+ groupInstance.setPartitionId(partitionId);
+ groupInstance.setNetworkPartitionId(networkPartitionId);
+ groupInstance.setStatus(status);
+ group.addInstance(instanceId, groupInstance);
//updateGroupMonitor(appId, groupId, status);
ApplicationHolder.persistApplication(application);
- ApplicationsEventPublisher.sendGroupInstanceCreatedEvent(appId, groupId, instance);
+ ApplicationsEventPublisher.sendGroupInstanceCreatedEvent(appId, groupId, groupInstance);
} else {
log.warn("Group Instance Context already exists: [group-id] " + groupId +
" [Group-Instance-Id] " + instanceId);
@@ -459,7 +462,7 @@ public class ApplicationBuilder {
}
- return instance;
+ return groupInstance;
}
@@ -485,18 +488,18 @@ public class ApplicationBuilder {
return;
}
- GroupInstance context = group.getInstanceContexts(instanceId);
+ GroupInstance groupInstance = group.getInstanceContexts(instanceId);
GroupStatus status = GroupStatus.Inactive;
- if (context != null) {
- if (context.isStateTransitionValid(status)) {
+ if (groupInstance != null) {
+ if (groupInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
- context.setStatus(status);
- updateGroupMonitor(appId, groupId, status, instanceId);
+ groupInstance.setStatus(status);
+ updateGroupMonitor(appId, groupId, status, instanceId, groupInstance.getParentId());
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceInactivateEvent(appId, groupId, instanceId);
} else {
log.warn("Group state transition is not valid: [group-id] " + groupId +
- " [instance-id] " + instanceId + " [current-state] " + context.getStatus()
+ " [instance-id] " + instanceId + " [current-state] " + groupInstance.getStatus()
+ "[requested-state] " + status);
}
@@ -530,18 +533,18 @@ public class ApplicationBuilder {
try {
ApplicationHolder.acquireWriteLock();
- GroupInstance context = group.getInstanceContexts(instanceId);
+ GroupInstance groupInstance = group.getInstanceContexts(instanceId);
GroupStatus status = GroupStatus.Terminating;
- if (context != null) {
- if (context.isStateTransitionValid(status)) {
+ if (groupInstance != null) {
+ if (groupInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
- context.setStatus(status);
- updateGroupMonitor(appId, groupId, status, instanceId);
+ groupInstance.setStatus(status);
+ updateGroupMonitor(appId, groupId, status, instanceId, groupInstance.getParentId());
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceTerminatingEvent(appId, groupId, instanceId);
} else {
log.warn("Group state transition is not valid: [group-id] " + groupId +
- " [instance-id] " + instanceId + " [current-state] " + context.getStatus()
+ " [instance-id] " + instanceId + " [current-state] " + groupInstance.getStatus()
+ "[requested-state] " + status);
}
@@ -568,10 +571,11 @@ public class ApplicationBuilder {
}
- private static void updateGroupMonitor(String appId, String groupId, GroupStatus status, String instanceId) {
+ private static void updateGroupMonitor(String appId, String groupId,
+ GroupStatus status, String instanceId, String parentInstanceId) {
GroupMonitor monitor = getGroupMonitor(appId, groupId);
if (monitor != null) {
- monitor.setStatus(status, instanceId);
+ monitor.setStatus(status, instanceId, parentInstanceId);
} else {
log.warn("Group monitor cannot be found: [group-id] " + groupId +
" [application-id] " + appId);
http://git-wip-us.apache.org/repos/asf/stratos/blob/b8ecae23/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index 7d8f2b4..3ee14d2 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -369,8 +369,8 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
if (statusEvent.getStatus() == GroupStatus.Terminating || statusEvent.getStatus() ==
ApplicationStatus.Terminating) {
if (log.isInfoEnabled()) {
- log.info("Publishing Cluster terminating event for [application]: " + appId +
- " [cluster]: " + this.getClusterId());
+ log.info("Publishing Cluster terminating event for [application] " + appId +
+ " [cluster] " + this.getClusterId() + " [instance] " + instanceId);
}
ClusterStatusEventPublisher.sendClusterTerminatingEvent(getAppId(), getServiceId(), getClusterId(), instanceId);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b8ecae23/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 0052f647..6c487a7 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
@@ -140,7 +140,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
*
* @param status status of the group
*/
- public void setStatus(GroupStatus status, String instanceId) {
+ public void setStatus(GroupStatus status, String instanceId, String parentInstanceId) {
GroupInstance groupInstance = (GroupInstance) this.instanceIdToInstanceMap.get(instanceId);
if (groupInstance == null) {
if (status != GroupStatus.Terminated) {
@@ -151,8 +151,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
groupInstance.setStatus(status);
}
}
- // notify parent
- log.info("[Group] " + this.id + "is notifying the [parent] " + this.parent.getId());
+
if (this.isGroupScalingEnabled()) {
try {
ApplicationHolder.acquireReadLock();
@@ -164,14 +163,20 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
Group group = application.getGroupRecursively(this.id);
if (group != null) {
GroupInstance context = group.getInstanceContexts(instanceId);
+ // notify parent
+ log.info("[Group] " + this.id + "is notifying the [parent] " + this.parent.getId() +
+ " [instance] " + context.getParentId());
MonitorStatusEventBuilder.handleGroupStatusEvent(this.parent,
- status, this.id, context.getParentId());
+ status, this.id, parentInstanceId);
}
}
} finally {
ApplicationHolder.releaseReadLock();
}
} else {
+ // notify parent
+ log.info("[Group] " + this.id + "is notifying the [parent] " + this.parent.getId() +
+ " [instance] " + instanceId);
MonitorStatusEventBuilder.handleGroupStatusEvent(this.parent,
status, this.id, instanceId);
}
@@ -265,12 +270,21 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
//Get all the instances which related to this instanceId
GroupInstance instance = (GroupInstance) this.instanceIdToInstanceMap.get(instanceId);
if (instance != null) {
+ if (log.isInfoEnabled()) {
+ log.info("Publishing Cluster terminating event for [application] " + appId +
+ " [group] " + id + " [instance] " + instanceId);
+ }
ApplicationBuilder.handleGroupTerminatingEvent(appId, id, instanceId);
} else {
- //Using parentId need to get the children
+ //Using parentId need to get the all the children and ask them to terminate
+ // as they can't exist without the parent
List<String> instanceIds = this.getInstancesByParentInstanceId(instanceId);
if (!instanceIds.isEmpty()) {
for (String instanceId1 : instanceIds) {
+ if (log.isInfoEnabled()) {
+ log.info("Publishing Cluster terminating event for [application] " + appId +
+ " [group] " + id + " [instance] " + instanceId1);
+ }
ApplicationBuilder.handleGroupTerminatingEvent(appId, id, instanceId1);
}
}
@@ -278,8 +292,6 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
} 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
createInstanceOnDemand(statusEvent.getInstanceId());
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b8ecae23/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java
index 057b57c..a22c265 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java
@@ -115,8 +115,8 @@ public abstract class GroupStatusProcessor extends StatusProcessor {
Cluster cluster = service.getCluster(clusterId);
ClusterInstance context = cluster.getInstanceContexts(instanceId);
if (context != null) {
- if(log.isInfoEnabled()) {
- log.info("Checking the status of cluster " + clusterId + " instance status is: " +
+ if(log.isDebugEnabled()) {
+ log.debug("Checking the status of cluster " + clusterId + " instance status is: " +
context.getStatus().toString());
}
if(context.getStatus() == status) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/b8ecae23/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
index d522738..f43d2bd 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
@@ -57,11 +57,10 @@ public class GroupStatusProcessorChain extends StatusProcessorChain {
if (root == null) {
throw new RuntimeException("Message processor chain is not initialized");
}
- if (log.isInfoEnabled()) {
- log.info("GroupProcessor chain calculating the status for the group " +
+ if (log.isDebugEnabled()) {
+ log.debug("GroupProcessor chain calculating the status for the group " +
"[ " + idOfComponent + " ]");
}
-
root.process(idOfComponent, appId, instanceId);
}
}