fixing application restoring issue in the stratos restart

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

Branch: refs/heads/master
Commit: 0c515aa013850575ddcfa2e299da5f0ec250ebc3
Parents: e760f68
Author: reka <[email protected]>
Authored: Thu Apr 23 17:16:37 2015 +0530
Committer: reka <[email protected]>
Committed: Thu Apr 23 17:16:37 2015 +0530

----------------------------------------------------------------------
 .../internal/AutoscalerServiceComponent.java    | 21 ++++++-
 .../autoscaler/pojo/policy/PolicyManager.java   | 21 +++++++
 .../autoscaler/registry/RegistryManager.java    | 61 +++++++++++-------
 .../context/CloudControllerContext.java         | 66 +++++++++++++-------
 .../domain/application/ParentComponent.java     |  7 ++-
 5 files changed, 126 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/0c515aa0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
index d1c4c7c..d161398 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
@@ -28,10 +28,12 @@ import 
org.apache.stratos.autoscaler.context.AutoscalerContext;
 import 
org.apache.stratos.autoscaler.event.receiver.health.AutoscalerHealthStatEventReceiver;
 import 
org.apache.stratos.autoscaler.event.receiver.topology.AutoscalerTopologyEventReceiver;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
+import 
org.apache.stratos.autoscaler.exception.policy.InvalidDeploymentPolicyException;
 import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
 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.ApplicationPolicy;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
 import 
org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusProcessorChain;
 import 
org.apache.stratos.autoscaler.status.processor.group.GroupStatusProcessorChain;
@@ -149,7 +151,8 @@ public class AutoscalerServiceComponent {
         }
     }
 
-    private void executeCoordinatorTasks() throws InvalidPolicyException {
+    private void executeCoordinatorTasks() throws InvalidPolicyException,
+            InvalidDeploymentPolicyException {
 
         // Start topology receiver
         asTopologyReceiver = new AutoscalerTopologyEventReceiver();
@@ -176,8 +179,20 @@ public class AutoscalerServiceComponent {
             
PolicyManager.getInstance().addASPolicyToInformationModel(asPolicy);
         }
 
-        // Add application policies to information model
-        List<ApplicationPolicy> applicationPolicies = 
RegistryManager.getInstance().retrieveApplicationPolicies();
+        // Add Deployment policies to information model
+        List<DeploymentPolicy> depPolicies = RegistryManager.getInstance().
+                retrieveDeploymentPolicies();
+        Iterator<DeploymentPolicy> depPolicyIterator = depPolicies.iterator();
+        while (depPolicyIterator.hasNext()) {
+            DeploymentPolicy depPolicy = depPolicyIterator.next();
+            
PolicyManager.getInstance().addDeploymentPolicyToInformationModel(depPolicy);
+        }
+
+
+
+                // Add application policies to information model
+        List<ApplicationPolicy> applicationPolicies = 
RegistryManager.getInstance().
+                retrieveApplicationPolicies();
         Iterator<ApplicationPolicy> applicationPolicyIterator = 
applicationPolicies.iterator();
         while (applicationPolicyIterator.hasNext()) {
             ApplicationPolicy applicationPolicy = 
applicationPolicyIterator.next();

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c515aa0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
index 8d92c1b..997c593 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
@@ -23,6 +23,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
+import 
org.apache.stratos.autoscaler.exception.policy.InvalidDeploymentPolicyException;
 import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy;
@@ -133,6 +134,26 @@ public class PolicyManager {
         }
     }
 
+    /**
+     * Retrieve deployment policies from registy and add it to in memory model
+     *
+     * @param deploymentPolicy
+     * @throws InvalidDeploymentPolicyException
+     */
+    public void addDeploymentPolicyToInformationModel(DeploymentPolicy 
deploymentPolicy)
+            throws InvalidDeploymentPolicyException {
+        if 
(!deploymentPolicyListMap.containsKey(deploymentPolicy.getDeploymentPolicyID()))
 {
+            if (log.isDebugEnabled()) {
+                log.debug("Adding deployment policy: " + 
deploymentPolicy.getDeploymentPolicyID());
+            }
+            
deploymentPolicyListMap.put(deploymentPolicy.getDeploymentPolicyID(), 
deploymentPolicy);
+        } else {
+            String errMsg = "Specified deployment policy [" +
+                    deploymentPolicy.getDeploymentPolicyID() + "] already 
exists";
+            log.error(errMsg);
+            throw new InvalidDeploymentPolicyException(errMsg);
+        }
+    }
 
     public boolean updateDeploymentPolicy(DeploymentPolicy policy) throws 
InvalidPolicyException {
         if (StringUtils.isEmpty(policy.getDeploymentPolicyID())) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c515aa0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
index 68dc252..771f362 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
@@ -353,6 +353,11 @@ public class RegistryManager {
         return resourceExist(resourcePath);
     }
 
+    /**
+     * Retrieve Autoscaling policies from registry
+     *
+     * @return all the Autoscaling policies
+     */
     public List<AutoscalePolicy> retrieveASPolicies() {
         try {
             startTenantFlow();
@@ -390,36 +395,46 @@ public class RegistryManager {
         }
     }
 
+    /**
+     * Retrieve deployment policies from registry
+     *
+     * @return all the deployment policies
+     */
     public List<DeploymentPolicy> retrieveDeploymentPolicies() {
-        List<DeploymentPolicy> depPolicyList = new 
ArrayList<DeploymentPolicy>();
-        RegistryManager registryManager = RegistryManager.getInstance();
-        String[] depPolicyResourceList = (String[]) 
registryManager.retrieve(AutoscalerConstants.AUTOSCALER_RESOURCE
-                + AutoscalerConstants.DEPLOYMENT_POLICY_RESOURCE);
-
-        if (depPolicyResourceList != null) {
-            DeploymentPolicy depPolicy;
-            for (String resourcePath : depPolicyResourceList) {
-                Object serializedObj = registryManager.retrieve(resourcePath);
-                if (serializedObj != null) {
-                    try {
-                        Object dataObj = 
Deserializer.deserializeFromByteArray((byte[]) serializedObj);
-                        if (dataObj instanceof DeploymentPolicy) {
-                            depPolicy = (DeploymentPolicy) dataObj;
-                            if (log.isDebugEnabled()) {
-                                log.debug(depPolicy.toString());
+        try{
+            startTenantFlow();
+            List<DeploymentPolicy> depPolicyList = new 
ArrayList<DeploymentPolicy>();
+            RegistryManager registryManager = RegistryManager.getInstance();
+            String[] depPolicyResourceList = (String[]) 
registryManager.retrieve(AutoscalerConstants.AUTOSCALER_RESOURCE
+                    + AutoscalerConstants.DEPLOYMENT_POLICY_RESOURCE);
+
+            if (depPolicyResourceList != null) {
+                DeploymentPolicy depPolicy;
+                for (String resourcePath : depPolicyResourceList) {
+                    Object serializedObj = 
registryManager.retrieve(resourcePath);
+                    if (serializedObj != null) {
+                        try {
+                            Object dataObj = 
Deserializer.deserializeFromByteArray((byte[]) serializedObj);
+                            if (dataObj instanceof DeploymentPolicy) {
+                                depPolicy = (DeploymentPolicy) dataObj;
+                                if (log.isDebugEnabled()) {
+                                    log.debug(depPolicy.toString());
+                                }
+                                depPolicyList.add(depPolicy);
+                            } else {
+                                return null;
                             }
-                            depPolicyList.add(depPolicy);
-                        } else {
-                            return null;
+                        } catch (Exception e) {
+                            String msg = "Unable to retrieve data from 
Registry. Hence, any historical deployment policies will not get reflected.";
+                            log.warn(msg, e);
                         }
-                    } catch (Exception e) {
-                        String msg = "Unable to retrieve data from Registry. 
Hence, any historical deployment policies will not get reflected.";
-                        log.warn(msg, e);
                     }
                 }
             }
+            return depPolicyList;
+        } finally {
+            endTenantFlow();
         }
-        return depPolicyList;
     }
 
     public List<ApplicationPolicy> retrieveApplicationPolicies() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c515aa0/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
index 04c7637..ed9d041 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
@@ -510,7 +510,8 @@ public class CloudControllerContext implements Serializable 
{
     /**
      * Remove a registered Kubernetes host from registry
      */
-    public synchronized boolean removeKubernetesHost(String kubernetesHostId) 
throws NonExistingKubernetesHostException {
+    public synchronized boolean removeKubernetesHost(String kubernetesHostId)
+            throws NonExistingKubernetesHostException {
         if (kubernetesHostId == null) {
             throw new NonExistingKubernetesHostException("Kubernetes host id 
can not be null");
         }
@@ -518,11 +519,13 @@ public class CloudControllerContext implements 
Serializable {
             log.info("Removing Kubernetes Host: " + kubernetesHostId);
         }
         try {
-            KubernetesCluster kubernetesClusterStored = 
getKubernetesClusterContainingHost(kubernetesHostId);
+            KubernetesCluster kubernetesClusterStored = 
getKubernetesClusterContainingHost(
+                    kubernetesHostId);
 
             // Kubernetes master can not be removed
             if 
(kubernetesClusterStored.getKubernetesMaster().getHostId().equals(kubernetesHostId))
 {
-                throw new NonExistingKubernetesHostException("Kubernetes 
master is not allowed to be removed [id] " + kubernetesHostId);
+                throw new NonExistingKubernetesHostException("Kubernetes 
master is not allowed " +
+                        "to be removed [id] " + kubernetesHostId);
             }
 
             List<KubernetesHost> kubernetesHostList = new 
ArrayList<KubernetesHost>();
@@ -533,7 +536,8 @@ public class CloudControllerContext implements Serializable 
{
             }
             // member count will be equal only when host object was not found
             if (kubernetesHostList.size() == 
kubernetesClusterStored.getKubernetesHosts().length) {
-                throw new NonExistingKubernetesHostException("Kubernetes host 
not found for [id] " + kubernetesHostId);
+                throw new NonExistingKubernetesHostException("Kubernetes host 
not found for [id] "
+                        + kubernetesHostId);
             }
             KubernetesHost[] kubernetesHostsArray = new 
KubernetesHost[kubernetesHostList.size()];
             kubernetesHostList.toArray(kubernetesHostsArray);
@@ -542,7 +546,8 @@ public class CloudControllerContext implements Serializable 
{
             kubernetesClusterStored.setKubernetesHosts(kubernetesHostsArray);
 
             if (log.isInfoEnabled()) {
-                log.info(String.format("Kubernetes host removed successfully: 
[id] %s", kubernetesHostId));
+                log.info(String.format("Kubernetes host removed successfully: 
[id] %s",
+                        kubernetesHostId));
             }
 
             return true;
@@ -583,7 +588,8 @@ public class CloudControllerContext implements Serializable 
{
     }
 
 
-    public KubernetesHost[] getKubernetesHostsInGroup(String 
kubernetesClusterId) throws NonExistingKubernetesClusterException {
+    public KubernetesHost[] getKubernetesHostsInGroup(String 
kubernetesClusterId)
+            throws NonExistingKubernetesClusterException {
         if (StringUtils.isEmpty(kubernetesClusterId)) {
             throw new NonExistingKubernetesClusterException("Kubernetes 
cluster id is null");
         }
@@ -592,7 +598,8 @@ public class CloudControllerContext implements Serializable 
{
         if (kubernetesCluster != null) {
             return kubernetesCluster.getKubernetesHosts();
         }
-        throw new NonExistingKubernetesClusterException("Kubernetes cluster 
not found: [kubernetes-cluster-id] "
+        throw new NonExistingKubernetesClusterException("Kubernetes cluster " +
+                "not found: [kubernetes-cluster-id] "
                 + kubernetesClusterId);
     }
 
@@ -605,7 +612,8 @@ public class CloudControllerContext implements Serializable 
{
         if (kubernetesCluster != null) {
             return kubernetesCluster.getKubernetesMaster();
         }
-        throw new NonExistingKubernetesClusterException("Kubernetes master not 
found: [kubernetes-cluster-id] "
+        throw new NonExistingKubernetesClusterException("Kubernetes master " +
+                "not found: [kubernetes-cluster-id] "
                 + kubernetesClusterId);
     }
 
@@ -618,10 +626,12 @@ public class CloudControllerContext implements 
Serializable {
         if (kubernetesCluster != null) {
             return kubernetesCluster;
         }
-        throw new NonExistingKubernetesClusterException("Kubernetes cluster 
not found: [kubernetes-cluster-id] " + kubernetesClusterId);
+        throw new NonExistingKubernetesClusterException("Kubernetes cluster " +
+                "not found: [kubernetes-cluster-id] " + kubernetesClusterId);
     }
 
-    public KubernetesCluster getKubernetesClusterContainingHost(String hostId) 
throws NonExistingKubernetesClusterException {
+    public KubernetesCluster getKubernetesClusterContainingHost(String hostId)
+            throws NonExistingKubernetesClusterException {
         if (StringUtils.isEmpty(hostId)) {
             return null;
         }
@@ -637,11 +647,13 @@ public class CloudControllerContext implements 
Serializable {
                 }
             }
         }
-        throw new NonExistingKubernetesClusterException("Kubernetes cluster 
not found containing host id: " + hostId);
+        throw new NonExistingKubernetesClusterException("Kubernetes cluster 
not " +
+                "found containing host id: " + hostId);
     }
 
     public KubernetesCluster[] getKubernetesClusters() {
-        return kubernetesClustersMap.values().toArray(new 
KubernetesCluster[kubernetesClustersMap.size()]);
+        return kubernetesClustersMap.values().toArray(
+                new KubernetesCluster[kubernetesClustersMap.size()]);
     }
 
     public boolean isClustered() {
@@ -669,20 +681,32 @@ public class CloudControllerContext implements 
Serializable {
     private void updateContextFromRegistry() {
         if ((!isClustered()) || (isCoordinator())) {
             try {
-                Object dataObj = 
RegistryManager.getInstance().read(CloudControllerConstants.DATA_RESOURCE);
+                Object dataObj = RegistryManager.getInstance().
+                        read(CloudControllerConstants.DATA_RESOURCE);
                 if (dataObj != null) {
                     if (dataObj instanceof CloudControllerContext) {
                         CloudControllerContext serializedObj = 
(CloudControllerContext) dataObj;
 
                         copyMap(serializedObj.kubernetesClustersMap, 
kubernetesClustersMap);
-                        copyMap(serializedObj.clusterIdToMemberContextListMap, 
clusterIdToMemberContextListMap);
-                        copyMap(serializedObj.memberIdToMemberContextMap, 
memberIdToMemberContextMap);
-                        
copyMap(serializedObj.kubClusterIdToKubClusterContextMap, 
kubClusterIdToKubClusterContextMap);
+                        copyMap(serializedObj.clusterIdToMemberContextListMap,
+                                clusterIdToMemberContextListMap);
+                        copyMap(serializedObj.memberIdToMemberContextMap,
+                                memberIdToMemberContextMap);
+                        
copyMap(serializedObj.kubClusterIdToKubClusterContextMap,
+                                kubClusterIdToKubClusterContextMap);
                         copyMap(serializedObj.clusterIdToContextMap, 
clusterIdToContextMap);
-                        copyMap(serializedObj.cartridgeTypeToPartitionIdsMap, 
cartridgeTypeToPartitionIdsMap);
-                        copyMap(serializedObj.cartridgeTypeToCartridgeMap, 
cartridgeTypeToCartridgeMap);
-                        
copyMap(serializedObj.serviceGroupNameToServiceGroupMap, 
serviceGroupNameToServiceGroupMap);
-                        
copyMap(serializedObj.networkPartitionIDToNetworkPartitionMap, 
networkPartitionIDToNetworkPartitionMap);
+                        copyMap(serializedObj.cartridgeTypeToPartitionIdsMap,
+                                cartridgeTypeToPartitionIdsMap);
+                        copyMap(serializedObj.cartridgeTypeToCartridgeMap,
+                                cartridgeTypeToCartridgeMap);
+                        
copyMap(serializedObj.serviceGroupNameToServiceGroupMap,
+                                serviceGroupNameToServiceGroupMap);
+                        
copyMap(serializedObj.networkPartitionIDToNetworkPartitionMap,
+                                networkPartitionIDToNetworkPartitionMap);
+                        
copyMap(serializedObj.partitionToIaasProviderByCartridge,
+                                partitionToIaasProviderByCartridge);
+                        copyMap(serializedObj.cartridgeTypeToIaasProviders,
+                                cartridgeTypeToIaasProviders);
 
                         if (log.isDebugEnabled()) {
                             log.debug("Cloud controller context is read from 
the registry");
@@ -805,4 +829,4 @@ public class CloudControllerContext implements Serializable 
{
         List<IaasProvider> iaasProviderList = 
cartridgeTypeToIaasProviders.get(cartridgeType);
         return iaasProviderList;
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c515aa0/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/ParentComponent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/ParentComponent.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/ParentComponent.java
index 4a64357..fdd83ef 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/ParentComponent.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/ParentComponent.java
@@ -285,6 +285,7 @@ public abstract class ParentComponent<T extends Instance> 
implements Serializabl
 
         return appGroups;
     }
+
     /**
      * Adds InstanceContext of a child to the instanceIdToInstanceContextMap.
      *
@@ -379,9 +380,9 @@ public abstract class ParentComponent<T extends Instance> 
implements Serializabl
         for (Group group : groups) {
             if (group.getClusterDataMap() != null && 
!group.getClusterDataMap().isEmpty()) {
                 clusterData.addAll(group.getClusterDataMap().values());
-                if (group.getGroups() != null) {
-                    getClusterData(clusterData, group.getGroups());
-                }
+            }
+            if (group.getGroups() != null && !group.getGroups().isEmpty()) {
+                getClusterData(clusterData, group.getGroups());
             }
         }
     }

Reply via email to