Repository: stratos
Updated Branches:
  refs/heads/master 0c515aa01 -> c4627b6a2


Add cluster monitor updating methods when the deployment policy is updated


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

Branch: refs/heads/master
Commit: 528f5b56ebf105307c1109b21ac19e737a2ccbc9
Parents: 0c515aa
Author: Lahiru Sandaruwan <[email protected]>
Authored: Fri Apr 24 14:16:39 2015 +0530
Committer: Lahiru Sandaruwan <[email protected]>
Committed: Fri Apr 24 14:16:39 2015 +0530

----------------------------------------------------------------------
 .../services/impl/AutoscalerServiceImpl.java    | 123 ++++++++++++++++++-
 1 file changed, 121 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/528f5b56/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 94249af..8dafd81 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.autoscaler.services.impl;
 
+import org.apache.axis2.AxisFault;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -28,6 +29,10 @@ import 
org.apache.stratos.autoscaler.applications.parser.DefaultApplicationParse
 import org.apache.stratos.autoscaler.applications.pojo.*;
 import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
 import org.apache.stratos.autoscaler.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.InstanceContext;
+import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
+import 
org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext;
+import 
org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.exception.InvalidArgumentException;
 import 
org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
@@ -45,11 +50,15 @@ import 
org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.autoscaler.services.AutoscalerService;
 import org.apache.stratos.autoscaler.util.AutoscalerUtil;
+import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeTypeExceptionException;
+import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidPartitionExceptionException;
+import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
 import org.apache.stratos.common.Properties;
 import org.apache.stratos.common.client.CloudControllerServiceClient;
 import org.apache.stratos.common.client.StratosManagerServiceClient;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.common.partition.NetworkPartition;
+import org.apache.stratos.common.partition.Partition;
 import org.apache.stratos.common.util.CommonUtil;
 import 
org.apache.stratos.manager.service.stub.domain.application.signup.ApplicationSignUp;
 import 
org.apache.stratos.manager.service.stub.domain.application.signup.ArtifactRepository;
@@ -158,13 +167,13 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
                     applicationContext.getApplicationId()));
         }
 
-        
if(AutoscalerContext.getInstance().getApplicationContext(applicationId) == 
null) {
+        if 
(AutoscalerContext.getInstance().getApplicationContext(applicationId) == null) {
             String msg = "Application is not found as ApplicationContext. 
Please add application before updating it";
             log.error(msg);
             throw new ApplicationDefinitionException(msg);
         }
 
-        if(ApplicationHolder.getApplications().getApplication(applicationId) 
== null) {
+        if (ApplicationHolder.getApplications().getApplication(applicationId) 
== null) {
             String msg = "Application is not found as Application. Please add 
application before updating it";
             log.error(msg);
             throw new ApplicationDefinitionException(msg);
@@ -949,6 +958,116 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
             log.info("Successfully updated deployment policy: 
[deployment-policy-id] " + deploymentPolicyID);
         }
 
+        updateClusterMonitors(deploymentPolicy);
+
+    }
+
+    private void updateClusterMonitors(DeploymentPolicy deploymentPolicy) 
throws InvalidDeploymentPolicyException {
+
+        for (ClusterMonitor clusterMonitor : 
AutoscalerContext.getInstance().getClusterMonitors().values()) {
+
+            if 
(deploymentPolicy.getDeploymentPolicyID().equals(clusterMonitor.getDeploymentPolicyId()))
 {
+
+                for (NetworkPartition networkPartition : 
deploymentPolicy.getNetworkPartitions()) {
+
+                    ClusterLevelNetworkPartitionContext 
clusterLevelNetworkPartitionContext
+                            = 
clusterMonitor.getClusterContext().getNetworkPartitionCtxt(networkPartition.getId());
+
+                    try {
+                        
addNewPartitionsToClusterMonitor(clusterLevelNetworkPartitionContext, 
networkPartition,
+                                deploymentPolicy.getDeploymentPolicyID(), 
clusterMonitor.getClusterContext().getServiceId());
+                    } catch (RemoteException e) {
+                        String message = "Cluster monitor update failed for 
[deployment-policy] "
+                                + deploymentPolicy.getDeploymentPolicyID();
+                        log.error(message);
+                        throw new InvalidDeploymentPolicyException(message);
+                    } catch 
(CloudControllerServiceInvalidPartitionExceptionException e) {
+
+                        String message = "Cluster monitor update failed for 
[deployment-policy] "
+                                + deploymentPolicy.getDeploymentPolicyID();
+                        log.error(message);
+                        throw new InvalidDeploymentPolicyException(message);
+                    } catch 
(CloudControllerServiceInvalidCartridgeTypeExceptionException e) {
+
+                        String message = "Cluster monitor update failed for 
[deployment-policy] "
+                                + deploymentPolicy.getDeploymentPolicyID() + " 
[cluster] " + clusterMonitor.getClusterId();
+                        log.error(message);
+                        throw new InvalidDeploymentPolicyException(message);
+                    }
+
+                    
removeOldPartitionsFromClusterMonitor(clusterLevelNetworkPartitionContext, 
networkPartition);
+
+                }
+            }
+        }
+    }
+
+    private void 
removeOldPartitionsFromClusterMonitor(ClusterLevelNetworkPartitionContext 
clusterLevelNetworkPartitionContext,
+                                                       NetworkPartition 
networkPartition) {
+
+        for (InstanceContext instanceContext : 
clusterLevelNetworkPartitionContext.getInstanceIdToInstanceContextMap().values())
 {
+
+            ClusterInstanceContext clusterInstanceContext = 
(ClusterInstanceContext) instanceContext;
+
+            for (ClusterLevelPartitionContext clusterLevelPartitionContext : 
clusterInstanceContext.getPartitionCtxts()) {
+
+                if (null == 
networkPartition.getPartition(clusterLevelPartitionContext.getPartitionId())) {
+
+                    log.info(" +++ " + "We have found that this partition 
context which is in cluster monitor is removed in updated policy"
+                            + " clusterLevelPartitionContext.getPartitionId() 
" + clusterLevelPartitionContext.getPartitionId());
+                    //We have found that this partition context which is in 
cluster monitor is removed in updated policy
+
+                    while 
(clusterLevelPartitionContext.getActiveMembers().size() != 0) {
+
+                        MemberContext member = 
clusterLevelPartitionContext.getActiveMembers().get(0);
+                        log.info(" +++ " + " Active member to be terminate " + 
member.getMemberId());
+                        
clusterLevelPartitionContext.moveActiveMemberToTerminationPendingMembers(member.getMemberId());
+                    }
+
+                    while 
(clusterLevelPartitionContext.getPendingMembers().size() != 0) {
+
+                        MemberContext member = 
clusterLevelPartitionContext.getPendingMembers().get(0);
+                        log.info(" +++ " + " Pending member to be terminate " 
+ member.getMemberId());
+                        
clusterLevelPartitionContext.movePendingMemberToObsoleteMembers(member.getMemberId());
+                    }
+                    clusterLevelPartitionContext.setIsObsoletePartition(true);
+                }
+            }
+        }
+    }
+
+    private void 
addNewPartitionsToClusterMonitor(ClusterLevelNetworkPartitionContext 
clusterLevelNetworkPartitionContext,
+                                                  NetworkPartition 
networkPartition, String deploymentPolicyID,
+                                                  String cartridgeType) throws 
RemoteException,
+            CloudControllerServiceInvalidPartitionExceptionException,
+            CloudControllerServiceInvalidCartridgeTypeExceptionException {
+
+        boolean validationOfNetworkPartitionRequired = false;
+        for (Partition partition : networkPartition.getPartitions()) {
+
+            //Iterating through active instances
+            for (InstanceContext instanceContext : 
clusterLevelNetworkPartitionContext.getInstanceIdToInstanceContextMap().values())
 {
+
+                ClusterInstanceContext clusterInstanceContext = 
(ClusterInstanceContext) instanceContext;
+                if (null == 
clusterInstanceContext.getPartitionCtxt(partition.getId())) {
+
+                    log.info(" +++ " + "We have found that this partition 
which is in deployment policy/network partition is new"
+                            + " clusterLevelPartitionContext.getPartitionId() 
" + partition.getId());
+
+                    //We have found that this partition which is in deployment 
policy/network partition is new
+                    ClusterLevelPartitionContext clusterLevelPartitionContext 
= new ClusterLevelPartitionContext(
+                            partition, networkPartition.getId(), 
deploymentPolicyID);
+                    validationOfNetworkPartitionRequired = true;
+                    
clusterInstanceContext.addPartitionCtxt(clusterLevelPartitionContext);
+                }
+            }
+        }
+
+        if (validationOfNetworkPartitionRequired) {
+
+            
CloudControllerServiceClient.getInstance().validateNetworkPartitionOfDeploymentPolicy(cartridgeType,
+                    clusterLevelNetworkPartitionContext.getId());
+        }
     }
 
     @Override

Reply via email to