You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/12/03 13:47:42 UTC

[1/4] stratos git commit: fixing instance id handling in processor and improving monitor startup to check whether clusters are there

Repository: stratos
Updated Branches:
  refs/heads/master 412d5c8da -> b59adf8f9


fixing instance id handling in processor and improving monitor startup to check whether clusters are there


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/95dd1542
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/95dd1542
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/95dd1542

Branch: refs/heads/master
Commit: 95dd15426542dfc114afc39c87f26542e6311808
Parents: 563fd43
Author: reka <rt...@gmail.com>
Authored: Wed Dec 3 17:53:24 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 3 17:53:35 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   |  1 +
 .../autoscaler/context/AutoscalerContext.java   |  2 ++
 .../ClusterLevelNetworkPartitionContext.java    |  7 +++-
 .../monitor/cluster/VMClusterMonitor.java       |  4 ++-
 .../monitor/component/ApplicationMonitor.java   | 31 ++++++++----------
 .../monitor/component/GroupMonitor.java         | 34 ++++++--------------
 .../ClusterStatusTerminatedProcessor.java       | 19 ++++++-----
 7 files changed, 47 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 8270ab0..5fc9a3a 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
@@ -123,6 +123,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
             Application application = ApplicationHolder.getApplications().
                     getApplication(deploymentPolicy.getApplicationId());
             if(application != null) {
+
                 allClusterInitialized = AutoscalerUtil.allClustersInitialized(application);
             }
         } finally {

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 ca6efb4..51fad05 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
@@ -20,6 +20,7 @@
  */
 package org.apache.stratos.autoscaler.context;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -44,6 +45,7 @@ public class AutoscalerContext {
     private AutoscalerContext() {
         setClusterMonitors(new HashMap<String, AbstractClusterMonitor>());
         setApplicationMonitors(new HashMap<String, ApplicationMonitor>());
+        pendingApplicationMonitors = new ArrayList<String>();
     }
 
     public static AutoscalerContext getInstance() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
index 45dd636..036228d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
@@ -103,10 +103,15 @@ public class ClusterLevelNetworkPartitionContext extends NetworkPartitionContext
         return instanceIdToClusterInstanceContextMap;
     }
 
-    public void setInstanceIdToClusterInstanceContextMap(Map<String, ClusterInstanceContext> instanceIdToClusterInstanceContextMap) {
+    public void setInstanceIdToClusterInstanceContextMap(
+            Map<String, ClusterInstanceContext> instanceIdToClusterInstanceContextMap) {
         this.instanceIdToClusterInstanceContextMap = instanceIdToClusterInstanceContextMap;
     }
 
+    public boolean containsClusterInstanceContext(String instanceId) {
+        return this.instanceIdToClusterInstanceContextMap.containsKey(instanceId);
+    }
+
     public int getMin() {
         return min;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 5162d4c..e55377b 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
@@ -34,6 +34,7 @@ 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.rule.AutoscalerRuleEvaluator;
+import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusTerminatedProcessor;
 import org.apache.stratos.autoscaler.util.StatusChecker;
 import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusActiveProcessor;
 import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusInActiveProcessor;
@@ -916,7 +917,8 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
                     + "[member] %s", memberId));
         }
         //Checking whether the cluster state can be changed either from in_active to created/terminating to terminated
-        StatusChecker.getInstance().onMemberTermination(clusterId, instanceId);
+        ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain().process(
+                ClusterStatusTerminatedProcessor.class.getName(), clusterId, instanceId);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 e174560..ca70ba5 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
@@ -36,10 +36,12 @@ import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBu
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ApplicationLevelNetworkPartition;
+import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 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.instance.ApplicationInstance;
+import org.apache.stratos.messaging.domain.instance.GroupInstance;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
 
@@ -137,18 +139,6 @@ public class ApplicationMonitor extends ParentComponentMonitor {
             //mark the child monitor as inActive in the map
             this.markMonitorAsTerminating(id);
 
-        } else if (status1 == ClusterStatus.Created || status1 == GroupStatus.Created) {
-            if (this.terminatingMonitorsList.contains(id)) {
-                this.terminatingMonitorsList.remove(id);
-                this.aliasToActiveMonitorsMap.remove(id);
-            }
-            //TODO
-            /*if (this.status == ApplicationStatus.Terminating) {
-                StatusChecker.getInstance().onChildStatusChange(id, this.id, this.appId);
-            } else {
-                onChildTerminatedEvent(id);
-            }*/
-
         } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) {
             //Check whether all dependent goes Terminated and then start them in parallel.
             if (this.terminatingMonitorsList.contains(id)) {
@@ -157,11 +147,18 @@ public class ApplicationMonitor extends ParentComponentMonitor {
             } else {
                 log.warn("[monitor] " + id + " cannot be found in the inActive monitors list");
             }
-            //TODO
-            /*if (this.status == ApplicationStatus.Terminating || this.status == ApplicationStatus.Terminated) {
-                StatusChecker.getInstance().onChildStatusChange(id, this.id, this.appId);
-                log.info("Executing the un-subscription request for the [monitor] " + id);
-            }*/
+            ApplicationInstance instance = (ApplicationInstance)instanceIdToInstanceMap.get(instanceId);
+            if (instance != null) {
+                if(instance.getStatus() == ApplicationStatus.Terminating) {
+                    ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
+                            appId, instanceId);
+                } else {
+                    onChildTerminatedEvent(id, instanceId);
+                }
+            } else {
+                log.warn("The required instance cannot be found in the the [GroupMonitor] " +
+                        this.id);
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 63d0295..2334916 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
@@ -181,14 +181,6 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
             this.markMonitorAsInactive(instanceId);
             onChildInactiveEvent(id, instanceId);
 
-        } else if (status1 == ClusterStatus.Created || status1 == GroupStatus.Created) {
-            if (this.terminatingMonitorsList.contains(instanceId)) {
-                this.terminatingMonitorsList.remove(instanceId);
-                this.aliasToActiveMonitorsMap.remove(instanceId);
-                if (AutoscalerContext.getInstance().getClusterMonitors().containsKey(id)) {
-                    AutoscalerContext.getInstance().removeClusterMonitor(id);
-                }
-            }
         } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) {
             //mark the child monitor as inActive in the map
             this.markMonitorAsTerminating(instanceId);
@@ -201,23 +193,17 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
             } else {
                 log.warn("[monitor] " + id + " cannot be found in the inActive monitors list");
             }
-            //If cluster monitor, need to terminate the existing one
-            ApplicationHolder.releaseReadLock();
-            GroupStatus instanceStatus;
-            try {
-                Group group = ApplicationHolder.getApplications().
-                        getApplication(appId).getGroupRecursively(this.id);
-                instanceStatus = group.getInstanceContexts(instanceId).getStatus();
-
-            } finally {
-                ApplicationHolder.releaseReadLock();
-            }
-
-            if (instanceStatus == GroupStatus.Terminating) {
-                ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
-                        appId, instanceId);
+            GroupInstance instance = (GroupInstance)this.instanceIdToInstanceMap.get(instanceId);
+            if (instance != null) {
+                if(instance.getStatus() == GroupStatus.Terminating) {
+                    ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
+                            appId, instanceId);
+                } else {
+                    onChildTerminatedEvent(id, instanceId);
+                }
             } else {
-                onChildTerminatedEvent(id, instanceId);
+                log.warn("The required instance cannot be found in the the [GroupMonitor] " +
+                    this.id);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
index 00abe34..52b5f36 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
@@ -71,7 +71,7 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
     private boolean doProcess(String clusterId, String instanceId) {
         VMClusterMonitor monitor = (VMClusterMonitor) AutoscalerContext.getInstance().
                 getClusterMonitor(clusterId);
-        boolean clusterMonitorHasMembers = clusterMonitorHasMembers(monitor);
+        boolean clusterMonitorHasMembers = clusterInstanceHasMembers(monitor, instanceId);
         boolean clusterTerminated = false;
         try {
             TopologyManager.acquireReadLockForCluster(monitor.getServiceId(), monitor.getClusterId());
@@ -83,10 +83,11 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
                 if (cluster != null) {
                     try {
                         ApplicationHolder.acquireReadLock();
-                        Application application = ApplicationHolder.getApplications().getApplication(appId);
-                        //if all members removed from the cluster and cluster is in terminating,
-                        // either it has to be terminated or Reset
-                        if (!clusterMonitorHasMembers && cluster.getStatus(null) == ClusterStatus.Terminating) {
+                        /**
+                         * if all members removed from the cluster and cluster is in terminating,
+                         * either it has to be terminated or Reset
+                         */
+                        if (!clusterMonitorHasMembers) {
                             if (log.isInfoEnabled()) {
                                 log.info("Publishing Cluster terminated event for [application]: " + appId +
                                         " [cluster]: " + clusterId);
@@ -119,17 +120,19 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
      * @param monitor the cluster monitor
      * @return whether has members or not
      */
-    private boolean clusterMonitorHasMembers(VMClusterMonitor monitor) {
+    private boolean clusterInstanceHasMembers(VMClusterMonitor monitor, String instanceId) {
         boolean hasMember = false;
         for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext :
                                                 monitor.getAllNetworkPartitionCtxts().values()) {
             //minimum check per partition
-            for(ClusterInstanceContext clusterInstanceContext :
-                    clusterLevelNetworkPartitionContext.getClusterInstanceContextMap().values()) {
+            if(clusterLevelNetworkPartitionContext.containsClusterInstanceContext(instanceId)) {
+            ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
+                                                            getClusterInstanceContext(instanceId);
                 for (ClusterLevelPartitionContext partitionContext :
                         clusterInstanceContext.getPartitionCtxts()) {
                     if (partitionContext.getNonTerminatedMemberCount() > 0) {
                         hasMember = true;
+                        return hasMember;
                     } else {
                         hasMember = false;
                     }


[3/4] stratos git commit: udpating with correct terminology

Posted by re...@apache.org.
udpating with correct terminology


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/bf2c6720
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/bf2c6720
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/bf2c6720

Branch: refs/heads/master
Commit: bf2c672071e69e653a3a2f39af24e8db603b9e9f
Parents: 412d5c8
Author: reka <rt...@gmail.com>
Authored: Wed Dec 3 15:16:49 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 3 17:53:35 2014 +0530

----------------------------------------------------------------------
 .../org/apache/stratos/rest/endpoint/api/StratosApiV41.java | 9 ++++-----
 .../stratos/rest/endpoint/api/StratosApiV41Utils.java       | 6 +++---
 2 files changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/bf2c6720/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 4be676d..a8eab46 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -42,7 +42,6 @@ import org.apache.stratos.rest.endpoint.bean.ApplicationBean;
 import org.apache.stratos.rest.endpoint.bean.CartridgeInfoBean;
 import org.apache.stratos.rest.endpoint.bean.StratosApiResponse;
 import org.apache.stratos.rest.endpoint.bean.SubscriptionDomainRequest;
-import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.AutoscalePolicy;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy;
 import org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean;
@@ -330,8 +329,8 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/cartridgeDefinition")
-    public Response unDeployDeploymentPolicy(@PathParam("applicationId") String applicationId) throws RestAPIException {
-        StratosApiV41Utils.undeployDeploymentPolicy(applicationId);
+    public Response unDeployApplication(@PathParam("applicationId") String applicationId) throws RestAPIException {
+        StratosApiV41Utils.undeployApplication(applicationId);
         return Response.noContent().build();
     }
 
@@ -510,9 +509,9 @@ public class StratosApiV41 extends AbstractApi {
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
     @SuperTenantService(true)
-    public Response unDeployApplicationDefinition(@PathParam("applicationId") String applicationId)
+    public Response removeApplicationDefinition(@PathParam("applicationId") String applicationId)
             throws RestAPIException {
-        StratosApiV41Utils.unDeployApplication(applicationId, getConfigContext(), getUsername(),
+        StratosApiV41Utils.removeApplication(applicationId, getConfigContext(), getUsername(),
                 getTenantDomain());
         return Response.noContent().build();
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/bf2c6720/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index 02d23bf..08ef896 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -201,8 +201,8 @@ public class StratosApiV41Utils {
         }
     }
 
-    public static void unDeployApplication(String appId, ConfigurationContext ctxt,
-                                           String userName, String tenantDomain) throws RestAPIException {
+    public static void removeApplication(String appId, ConfigurationContext ctxt,
+                                         String userName, String tenantDomain) throws RestAPIException {
 
         try {
             int tenantId = ApplicationManagementUtil.getTenantId(ctxt);
@@ -237,7 +237,7 @@ public class StratosApiV41Utils {
         return commonPolicies.toArray(new DeploymentPolicy[0]);
     }
 
-    public static void undeployDeploymentPolicy(String applicationId) throws RestAPIException {
+    public static void undeployApplication(String applicationId) throws RestAPIException {
         AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
         if (autoscalerServiceClient != null) {
             try {


[4/4] stratos git commit: fixing NPE while instance creation

Posted by re...@apache.org.
fixing NPE while instance creation


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b59adf8f
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b59adf8f
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b59adf8f

Branch: refs/heads/master
Commit: b59adf8f90f73cf69a016f11e1cd4e9c81c0572d
Parents: 95dd154
Author: reka <rt...@gmail.com>
Authored: Wed Dec 3 18:17:08 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 3 18:17:08 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   | 21 ++++++++++----------
 .../AutoscalerTopologyEventReceiver.java        | 10 ++++++----
 2 files changed, 17 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b59adf8f/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 5fc9a3a..7733520 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
@@ -22,14 +22,14 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
-import org.apache.stratos.autoscaler.context.AutoscalerContext;
-//import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
 import org.apache.stratos.autoscaler.applications.parser.ApplicationParser;
 import org.apache.stratos.autoscaler.applications.parser.DefaultApplicationParser;
 import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
 import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
 import org.apache.stratos.autoscaler.client.CloudControllerClient;
-import org.apache.stratos.autoscaler.exception.*;
+import org.apache.stratos.autoscaler.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.exception.AutoScalerException;
+import org.apache.stratos.autoscaler.exception.InvalidArgumentException;
 import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
 import org.apache.stratos.autoscaler.exception.kubernetes.*;
 import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
@@ -37,13 +37,12 @@ import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
 import org.apache.stratos.autoscaler.interfaces.AutoScalerServiceInterface;
 import org.apache.stratos.autoscaler.kubernetes.KubernetesManager;
 import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ApplicationLevelNetworkPartition;
-//import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.PartitionManager;
 import org.apache.stratos.autoscaler.pojo.Dependencies;
 import org.apache.stratos.autoscaler.pojo.ServiceGroup;
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ApplicationLevelNetworkPartition;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.Partition;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.autoscaler.util.AutoscalerUtil;
@@ -53,7 +52,6 @@ import org.apache.stratos.common.kubernetes.KubernetesGroup;
 import org.apache.stratos.common.kubernetes.KubernetesHost;
 import org.apache.stratos.common.kubernetes.KubernetesMaster;
 import org.apache.stratos.messaging.domain.applications.Application;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.apache.stratos.metadata.client.defaults.DefaultMetaDataServiceClient;
 import org.apache.stratos.metadata.client.defaults.MetaDataServiceClient;
 import org.apache.stratos.metadata.client.exception.MetaDataServiceClientException;
@@ -63,13 +61,16 @@ import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Map;
 
+//import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
+//import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.PartitionManager;
+
 /**
  * Auto Scaler Service API is responsible getting Partitions and Policies.
  */
 public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
 
     private static final Log log = LogFactory.getLog(AutoScalerServiceImpl.class);
-//    PartitionManager partitionManager = PartitionManager.getInstance();
+    //    PartitionManager partitionManager = PartitionManager.getInstance();
     KubernetesManager kubernetesManager = KubernetesManager.getInstance();
 //
 //    public Partition[] getAllAvailablePartitions() {
@@ -122,7 +123,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
         try {
             Application application = ApplicationHolder.getApplications().
                     getApplication(deploymentPolicy.getApplicationId());
-            if(application != null) {
+            if (application != null) {
 
                 allClusterInitialized = AutoscalerUtil.allClustersInitialized(application);
             }
@@ -130,7 +131,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
             ApplicationHolder.releaseReadLock();
         }
 
-        if(allClusterInitialized && !AutoscalerContext.getInstance().containsPendingMonitor(appId)) {
+        if (allClusterInitialized && !AutoscalerContext.getInstance().containsPendingMonitor(appId)) {
             AutoscalerUtil.getInstance().
                     startApplicationMonitor(appId);
 
@@ -244,7 +245,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
         return kubernetesManager.updateKubernetesHost(kubernetesHost);
     }
 
-//    @Override
+    //    @Override
     public Partition[] getPartitionsOfGroup(String deploymentPolicyId, String groupId) {
         DeploymentPolicy depPol = this.getDeploymentPolicy(deploymentPolicyId);
         if (null == depPol) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/b59adf8f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
index 89e711f..6251d18 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
 import org.apache.stratos.autoscaler.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.cluster.AbstractClusterContext;
 import org.apache.stratos.autoscaler.context.cluster.ClusterContextFactory;
 import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
@@ -441,10 +442,11 @@ public class AutoscalerTopologyEventReceiver {
                                        VMClusterContext clusterContext =
                                                (VMClusterContext) clusterMonitor.getClusterContext();
                                        if (clusterContext == null) {
-                                           clusterMonitor.setClusterContext(
-                                                   ClusterContextFactory.
-                                                           getVMClusterContext(instanceId,
-                                                                   cluster));
+                                           clusterContext = ClusterContextFactory.
+                                                   getVMClusterContext(instanceId,
+                                                           cluster);
+                                           clusterMonitor.setClusterContext(clusterContext);
+
                                        }
                                        clusterContext.addInstanceContext(instanceId, cluster);
                                        if(clusterMonitor.getInstance(instanceId) == null) {


[2/4] stratos git commit: improving the application monitor creation based on clusters event as well as it is async

Posted by re...@apache.org.
improving the application monitor creation based on clusters event as well as it is async


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/563fd434
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/563fd434
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/563fd434

Branch: refs/heads/master
Commit: 563fd4347f06282b7f1b27a54d05bb83024d3103
Parents: bf2c672
Author: reka <rt...@gmail.com>
Authored: Wed Dec 3 15:17:25 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 3 17:53:35 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   | 10 ++--
 .../autoscaler/context/AutoscalerContext.java   | 23 +++++++++
 .../AutoscalerTopologyEventReceiver.java        | 51 +++-----------------
 .../stratos/autoscaler/util/AutoscalerUtil.java | 12 +++--
 4 files changed, 42 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/563fd434/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 5593e1f..8270ab0 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
@@ -114,31 +114,29 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
     public String addDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws InvalidPolicyException {
         String policyId = PolicyManager.getInstance().deployDeploymentPolicy(deploymentPolicy);
         //Need to start the application Monitor after validation of the deployment policies.
-
+        //FIXME add validation
         //Check whether all the clusters are there
         ApplicationHolder.acquireReadLock();
         boolean allClusterInitialized = false;
-
+        String appId = deploymentPolicy.getApplicationId();
         try {
             Application application = ApplicationHolder.getApplications().
                     getApplication(deploymentPolicy.getApplicationId());
             if(application != null) {
                 allClusterInitialized = AutoscalerUtil.allClustersInitialized(application);
             }
-
         } finally {
             ApplicationHolder.releaseReadLock();
         }
 
-        if(allClusterInitialized) {
+        if(allClusterInitialized && !AutoscalerContext.getInstance().containsPendingMonitor(appId)) {
             AutoscalerUtil.getInstance().
-                    startApplicationMonitor(deploymentPolicy.getApplicationId());
+                    startApplicationMonitor(appId);
 
         } else {
             log.info("The application clusters are not yet created. " +
                     "Waiting for them to be created");
         }
-
         return policyId;
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/563fd434/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 fe067f7..ca6efb4 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
@@ -21,6 +21,7 @@
 package org.apache.stratos.autoscaler.context;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
@@ -37,6 +38,8 @@ public class AutoscalerContext {
     private Map<String, AbstractClusterMonitor> clusterMonitors;
     // Map<ApplicationId, ApplicationMonitor>
     private Map<String, ApplicationMonitor> applicationMonitors;
+    //pending application monitors
+    private List<String> pendingApplicationMonitors;
 
     private AutoscalerContext() {
         setClusterMonitors(new HashMap<String, AbstractClusterMonitor>());
@@ -86,4 +89,24 @@ public class AutoscalerContext {
     public void setApplicationMonitors(Map<String, ApplicationMonitor> applicationMonitors) {
         this.applicationMonitors = applicationMonitors;
     }
+
+    public List<String> getPendingApplicationMonitors() {
+        return pendingApplicationMonitors;
+    }
+
+    public void setPendingApplicationMonitors(List<String> pendingApplicationMonitors) {
+        this.pendingApplicationMonitors = pendingApplicationMonitors;
+    }
+
+    public void addPendingMonitor(String appId) {
+        this.pendingApplicationMonitors.add(appId);
+    }
+
+    public void removeFromPendingMonitors(String appId) {
+        this.pendingApplicationMonitors.remove(appId);
+    }
+
+    public boolean containsPendingMonitor(String appId) {
+        return this.pendingApplicationMonitors.contains(appId);
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/563fd434/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
index 10eee4f..89e711f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -84,46 +84,6 @@ public class AutoscalerTopologyEventReceiver {
 
 	}
 
-    private boolean allClustersInitialized(Application application) {
-        boolean allClustersInitialized = false;
-        for (ClusterDataHolder holder : application.getClusterDataRecursively()) {
-            TopologyManager.acquireReadLockForCluster(holder.getServiceType(),
-                    holder.getClusterId());
-
-            try {
-                Topology topology = TopologyManager.getTopology();
-                if (topology != null) {
-                    Service service = topology.getService(holder.getServiceType());
-                    if (service != null) {
-                        if (service.clusterExists(holder.getClusterId())) {
-                            allClustersInitialized = true;
-                            return allClustersInitialized;
-                        } else {
-                            if (log.isDebugEnabled()) {
-                                log.debug("[Cluster] " + holder.getClusterId() + " is not found in " +
-                                        "the Topology");
-                            }
-                            allClustersInitialized = false;
-                        }
-                    } else {
-                        if (log.isDebugEnabled()) {
-                            log.debug("Service is null in the CompleteTopologyEvent");
-                        }
-                    }
-                } else {
-                    if (log.isDebugEnabled()) {
-                        log.debug("Topology is null in the CompleteTopologyEvent");
-                    }
-                }
-            } finally {
-                TopologyManager.releaseReadLockForCluster(holder.getServiceType(),
-                        holder.getClusterId());
-            }
-        }
-        return allClustersInitialized;
-    }
-
-
     private void addEventListeners() {
         // Listen to topology events that affect clusters
         topologyEventReceiver.addEventListener(new CompleteTopologyEventListener() {
@@ -136,7 +96,7 @@ public class AutoscalerTopologyEventReceiver {
                         Applications applications = ApplicationHolder.getApplications();
                         if (applications != null) {
                             for (Application application : applications.getApplications().values()) {
-                                if (allClustersInitialized(application)) {
+                                if (AutoscalerUtil.allClustersInitialized(application)) {
                                     DeploymentPolicy policy = PolicyManager.getInstance().
                                             getDeploymentPolicyByApplication(
                                                     application.getUniqueIdentifier());
@@ -178,8 +138,13 @@ public class AutoscalerTopologyEventReceiver {
                     try {
                         //acquire read lock
                         ApplicationHolder.acquireReadLock();
-                        //start the application monitor
-                        //startApplicationMonitor(appId);
+                        //start the application monitor if the policy exists
+                        DeploymentPolicy policy = PolicyManager.getInstance().
+                                getDeploymentPolicyByApplication(appId);
+                        if(policy != null && !AutoscalerContext.getInstance().
+                                                containsPendingMonitor(appId)) {
+                            AutoscalerUtil.getInstance().startApplicationMonitor(appId);
+                        }
                     } catch (Exception e) {
                         String msg = "Error processing event " + e.getLocalizedMessage();
                         log.error(msg, e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/563fd434/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 476e8bb..2ed1074 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -351,7 +351,9 @@ public class AutoscalerUtil {
 
     public synchronized void startApplicationMonitor(String applicationId) {
         Thread th = null;
-        if (AutoscalerContext.getInstance().getAppMonitor(applicationId) == null) {
+        AutoscalerContext autoscalerContext = AutoscalerContext.getInstance();
+        if (autoscalerContext.getAppMonitor(applicationId) == null) {
+            autoscalerContext.addPendingMonitor(applicationId);
             th = new Thread(new ApplicationMonitorAdder(applicationId));
         }
         if (th != null) {
@@ -383,10 +385,8 @@ public class AutoscalerUtil {
                 }
                 try {
                     long start = System.currentTimeMillis();
-                    if (log.isDebugEnabled()) {
-                        log.debug("application monitor is going to be started for [application] " +
+                    log.info("application monitor is going to be started for [application] " +
                                 appId);
-                    }
                     try {
                         applicationMonitor = MonitorFactory.getApplicationMonitor(appId);
                     } catch (PolicyValidationException e) {
@@ -414,8 +414,10 @@ public class AutoscalerUtil {
                 log.error(msg);
                 throw new RuntimeException(msg);
             }
+            AutoscalerContext autoscalerContext = AutoscalerContext.getInstance();
 
-            AutoscalerContext.getInstance().addAppMonitor(applicationMonitor);
+            autoscalerContext.removeAppMonitor(appId);
+            autoscalerContext.addAppMonitor(applicationMonitor);
             if (log.isInfoEnabled()) {
                 log.info(String.format("Application monitor has been added successfully: " +
                         "[application] %s", applicationMonitor.getId()));