You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2014/11/26 14:43:59 UTC

[2/7] stratos git commit: introducing instance to Cluster Monitors contd.

introducing instance to Cluster Monitors contd.


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

Branch: refs/heads/master
Commit: bab310eee26bd6ebb27a954e0dcf03b72b7c73fe
Parents: 61e6ef0
Author: Isuru Haththotuwa <is...@apache.org>
Authored: Tue Nov 25 21:57:31 2014 +0530
Committer: Isuru Haththotuwa <is...@apache.org>
Committed: Wed Nov 26 17:55:14 2014 +0530

----------------------------------------------------------------------
 .../monitor/cluster/AbstractClusterMonitor.java | 39 +++++++++++++++++---
 .../cluster/KubernetesClusterMonitor.java       |  9 ++---
 .../KubernetesServiceClusterMonitor.java        |  7 ++--
 .../monitor/cluster/VMClusterMonitor.java       |  6 +--
 .../monitor/cluster/VMLbClusterMonitor.java     |  7 ++--
 .../cluster/VMServiceClusterMonitor.java        |  7 ++--
 .../impl/CloudControllerServiceImpl.java        |  4 +-
 .../interfaces/CloudControllerService.java      |  5 ++-
 .../status/ClusterStatusTopicReceiver.java      |  2 +-
 .../controller/topology/TopologyBuilder.java    | 21 ++++++-----
 .../ClusterInstanceCreatedMessageProcessor.java |  2 +-
 11 files changed, 69 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
index 884ed7e..8b8176f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
@@ -40,6 +40,8 @@ import org.apache.stratos.messaging.event.topology.*;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -56,7 +58,8 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable
     protected FactHandle scaleCheckFactHandle;
     protected boolean hasFaultyMember = false;
     protected boolean stop = false;
-    protected AbstractClusterContext clusterContext;
+    //protected AbstractClusterContext clusterContext;
+    protected final Map<String, AbstractClusterContext> instanceIdToClusterContextMap;
     private String clusterId;
     private ClusterStatus status;
     private int monitoringIntervalMilliseconds;
@@ -65,14 +68,16 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable
     private StatefulKnowledgeSession scaleCheckKnowledgeSession;
     private boolean isDestroyed;
     private AutoscalerRuleEvaluator autoscalerRuleEvaluator;
+    protected String serviceType;
 
-    protected AbstractClusterMonitor(String clusterId, AutoscalerRuleEvaluator autoscalerRuleEvaluator,
-                                     AbstractClusterContext abstractClusterContext) {
+    protected AbstractClusterMonitor(String serviceType, String clusterId, AutoscalerRuleEvaluator autoscalerRuleEvaluator) {
 
         super();
+        this.serviceType = serviceType;
         this.clusterId = clusterId;
         this.autoscalerRuleEvaluator = autoscalerRuleEvaluator;
-        this.clusterContext = abstractClusterContext;
+        //this.clusterContext = abstractClusterContext;
+        this.instanceIdToClusterContextMap = new HashMap<String, AbstractClusterContext>();
         this.obsoleteCheckKnowledgeSession = autoscalerRuleEvaluator.getObsoleteCheckStatefulSession();
         this.scaleCheckKnowledgeSession = autoscalerRuleEvaluator.getScaleCheckStatefulSession();
         this.minCheckKnowledgeSession = autoscalerRuleEvaluator.getMinCheckStatefulSession();
@@ -338,6 +343,30 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable
         this.hasFaultyMember = hasFaultyMember;
     }
 
+    public void addClusterContextForInstance (String instanceId, AbstractClusterContext clusterContext) {
+
+        if (instanceIdToClusterContextMap.get(instanceId) == null) {
+            synchronized (instanceIdToClusterContextMap) {
+                if (instanceIdToClusterContextMap.get(instanceId) == null) {
+                    instanceIdToClusterContextMap.put(instanceId, clusterContext);
+                } else {
+                    log.warn("ClusterContext for already exists for cluster instance id: " + instanceId +
+                            ", service type: " + serviceType + ", cluster id: " + clusterId);
+                }
+            }
+        } else {
+            log.warn("ClusterContext for already exists for cluster instance id: " + instanceId +
+                    ", service type: " + serviceType + ", cluster id: " + clusterId);
+        }
+    }
+
+    public AbstractClusterContext getClusterContext (String instanceId) {
+
+        // if instanceId is null, assume that map contains only one element and return that
+
+        return instanceIdToClusterContextMap.get(instanceId);
+    }
+
     public abstract void terminateAllMembers();
 
     public boolean isStop() {
@@ -349,7 +378,7 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable
     }
 
     public String getServiceId() {
-        return clusterContext.getServiceId();
+        return serviceType;
     }
 
     protected int getRoundedInstanceCount(float requiredInstances, float fraction) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java
index 7a92fd2..5b753ec 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java
@@ -63,12 +63,11 @@ public abstract class KubernetesClusterMonitor extends AbstractClusterMonitor {
 
     private KubernetesClusterContext kubernetesClusterCtxt;
 
-    protected KubernetesClusterMonitor(String clusterId,
-                                       AutoscalerRuleEvaluator autoscalerRuleEvaluator,
-                                       KubernetesClusterContext kubernetesClusterContext) {
+    protected KubernetesClusterMonitor(String serviceType, String clusterId,
+                                       AutoscalerRuleEvaluator autoscalerRuleEvaluator) {
 
-        super(clusterId, autoscalerRuleEvaluator, kubernetesClusterContext);
-        this.kubernetesClusterCtxt = kubernetesClusterContext;
+        super(serviceType, clusterId, autoscalerRuleEvaluator);
+        //this.kubernetesClusterCtxt = kubernetesClusterContext;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java
index cf8736d..701e5a0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java
@@ -45,13 +45,12 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
 
     private String lbReferenceType;
 
-    public KubernetesServiceClusterMonitor(String clusterId, KubernetesClusterContext kubernetesClusterCtxt) {
-        super(clusterId,
+    public KubernetesServiceClusterMonitor(String serviceType, String clusterId) {
+        super(serviceType, clusterId,
         		new AutoscalerRuleEvaluator(
                       StratosConstants.CONTAINER_MIN_CHECK_DROOL_FILE,
                       StratosConstants.CONTAINER_OBSOLETE_CHECK_DROOL_FILE,
-                      StratosConstants.CONTAINER_SCALE_CHECK_DROOL_FILE),
-              kubernetesClusterCtxt);
+                      StratosConstants.CONTAINER_SCALE_CHECK_DROOL_FILE));
         readConfigurations();
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/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 b9ca929..5ca853e 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
@@ -53,9 +53,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
 
     private static final Log log = LogFactory.getLog(VMClusterMonitor.class);
 
-    protected VMClusterMonitor(String clusterId, AutoscalerRuleEvaluator autoscalerRuleEvaluator,
-                               VMClusterContext vmClusterContext) {
-        super(clusterId, autoscalerRuleEvaluator, vmClusterContext);
+    protected VMClusterMonitor(String serviceType, String clusterId, AutoscalerRuleEvaluator autoscalerRuleEvaluator) {
+        super(serviceType, clusterId, autoscalerRuleEvaluator);
+
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
index 91475fe..af770a0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
@@ -49,10 +49,9 @@ public class VMLbClusterMonitor extends VMClusterMonitor {
 
     private static final Log log = LogFactory.getLog(VMLbClusterMonitor.class);
 
-    public VMLbClusterMonitor(String clusterId, String serviceId, VMClusterContext vmClusterContext) {
-        super(clusterId, new AutoscalerRuleEvaluator( StratosConstants.VM_MIN_CHECK_DROOL_FILE,
-                StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE, StratosConstants.VM_SCALE_CHECK_DROOL_FILE),
-                vmClusterContext);
+    public VMLbClusterMonitor(String serviceType, String clusterId) {
+        super(serviceType, clusterId, new AutoscalerRuleEvaluator( StratosConstants.VM_MIN_CHECK_DROOL_FILE,
+                StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE, StratosConstants.VM_SCALE_CHECK_DROOL_FILE));
         readConfigurations();
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
index a072952..12875cc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
@@ -55,12 +55,11 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
     private boolean hasPrimary;
     private float scalingFactorBasedOnDependencies = 1.0f;
 
-    public VMServiceClusterMonitor(String clusterId, VMServiceClusterContext vmServiceClusterContext) {
-        super(clusterId, new AutoscalerRuleEvaluator(
+    public VMServiceClusterMonitor(String serviceType, String clusterId, VMServiceClusterContext vmServiceClusterContext) {
+        super(serviceType, clusterId, new AutoscalerRuleEvaluator(
                         StratosConstants.VM_MIN_CHECK_DROOL_FILE,
                         StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE,
-                        StratosConstants.VM_SCALE_CHECK_DROOL_FILE), vmServiceClusterContext
-        );
+                        StratosConstants.VM_SCALE_CHECK_DROOL_FILE));
         readConfigurations();
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 4655dfe..7f11463 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -2086,10 +2086,10 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
     }
 
-    public void createClusterInstance (String alias, String clusterId, String instanceId) throws
+    public void createClusterInstance (String serviceType, String clusterId, String alias, String instanceId) throws
             ClusterInstanceCreationException {
 
-
+        TopologyBuilder.handleClusterInstanceCreated(serviceType, clusterId, alias, instanceId);
     }
 
 //    public void deployApplicationDefinition (ApplicationContext applicationContext) throws ApplicationDefinitionException {

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
index 687f7bf..4526676 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
@@ -210,11 +210,12 @@ public interface CloudControllerService {
     /**
      * Creates a cluster instance with the given information
      *
-     * @param alias alias provided in the subscription parameters
+     * @param serviceType serviceType
      * @param clusterId cluster id
+     * @param alias alias provided in the subscription parameters
      * @param instanceId instance id
      * @throws ClusterInstanceCreationException if an y error occurs in cluster instance creation
      */
-    public void createClusterInstance (String alias, String clusterId, String instanceId) throws
+    public void createClusterInstance (String serviceType, String clusterId, String alias, String instanceId) throws
             ClusterInstanceCreationException;
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/receiver/cluster/status/ClusterStatusTopicReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/receiver/cluster/status/ClusterStatusTopicReceiver.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/receiver/cluster/status/ClusterStatusTopicReceiver.java
index 74b2d80..f89434b 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/receiver/cluster/status/ClusterStatusTopicReceiver.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/receiver/cluster/status/ClusterStatusTopicReceiver.java
@@ -68,7 +68,7 @@ public class ClusterStatusTopicReceiver implements Runnable{
         statusEventReceiver.addEventListener(new ClusterStatusClusterInstanceCreatedEventListener() {
             @Override
             protected void onEvent(Event event) {
-                TopologyBuilder.handleClusterInstanceCreated((ClusterStatusClusterInstanceCreatedEvent) event);
+                //TopologyBuilder.handleClusterInstanceCreated((ClusterStatusClusterInstanceCreatedEvent) event);
             }
         });
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
index 5d2c0f4..af98c1e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
@@ -281,35 +281,38 @@ public class TopologyBuilder {
 
     }
 
-    public static void handleClusterInstanceCreated(ClusterStatusClusterInstanceCreatedEvent event) {
+    public static void handleClusterInstanceCreated(String serviceType, String clusterId, String alias, String instanceId) {
 
         TopologyManager.acquireWriteLock();
 
         try {
             Topology topology = TopologyManager.getTopology();
-            Service service = topology.getService(event.getServiceName());
+            Service service = topology.getService(serviceType);
             if (service == null) {
-                log.error("Service " + event.getServiceName() +
+                log.error("Service " + serviceType +
                         " not found in Topology, unable to update the cluster status to Created");
                 return;
             }
 
-            Cluster cluster = service.getCluster(event.getClusterId());
+            Cluster cluster = service.getCluster(clusterId);
             if (cluster == null) {
-                log.error("Cluster " + event.getClusterId() + " not found in Topology, unable to update " +
+                log.error("Cluster " + clusterId + " not found in Topology, unable to update " +
                         "status to Created");
                 return;
             }
 
-            if(cluster.getInstanceContexts(event.getInstanceId()) == null) {
+            if(cluster.getInstanceContexts(instanceId) != null) {
                 log.warn("The Instance context for the cluster already exists for [cluster] " +
-                        event.getClusterId() + " [instance-id] " + event.getInstanceId());
+                        clusterId + " [instance-id] " + instanceId);
                 return;
             }
 
+            //context.setStatus(ClusterStatus.Created);
+            cluster.addInstanceContext(instanceId, new ClusterInstanceContext(alias, clusterId, instanceId));
+            TopologyManager.updateTopology(topology);
+
             ClusterInstanceCreatedEvent clusterInstanceCreatedEvent =
-                    new ClusterInstanceCreatedEvent(event.getAlias(), event.getServiceName(),
-                                                     event.getClusterId(), event.getInstanceId());
+                    new ClusterInstanceCreatedEvent(alias, serviceType, clusterId, instanceId);
             TopologyEventPublisher.sendClusterInstanceCreatedEvent(clusterInstanceCreatedEvent);
 
         } finally {

http://git-wip-us.apache.org/repos/asf/stratos/blob/bab310ee/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java
index bf2175d..a721f5e 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java
@@ -120,7 +120,7 @@ public class ClusterInstanceCreatedMessageProcessor extends MessageProcessor {
             ClusterInstanceContext context = new ClusterInstanceContext(event.getAlias(),
                                                                         event.getClusterId(),
                                                                         event.getInstanceId());
-            context.setStatus(ClusterStatus.Created);
+            //context.setStatus(ClusterStatus.Created);
             cluster.addInstanceContext(event.getInstanceId(), context);
         }
         // Notify event listeners