You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2013/12/14 10:41:39 UTC

[1/2] git commit: setting properties of partitions in pojo converter

Updated Branches:
  refs/heads/master fa7d5acb0 -> d1ddd6eb7


setting properties of partitions in pojo converter


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

Branch: refs/heads/master
Commit: fe3de0cbe522db8d3469c683e89d0d7615538843
Parents: fa7d5ac
Author: Nirmal Fernando <ni...@apache.org>
Authored: Sat Dec 14 15:08:53 2013 +0530
Committer: Nirmal Fernando <ni...@apache.org>
Committed: Sat Dec 14 15:08:53 2013 +0530

----------------------------------------------------------------------
 .../rest/endpoint/bean/util/converter/PojoConverter.java  | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fe3de0cb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
index 8171299..d6085fb 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
@@ -314,11 +314,11 @@ public class PojoConverter {
         partitionBeans.provider = partition.getProvider();
         partitionBeans.partitionMin = partition.getPartitionMin();
         partitionBeans.partitionMax = partition.getPartitionMax();
-        //properties are not added currently, TODO if required
-        //if(partition[i].getProperties() != null) {
-        //    List<PropertyBean> propertyBeans = getPropertyBeans(partition[i].getProperties());
-        //    partition.property = propertyBeans;
-        //}
+        //properties 
+        if(partition.getProperties() != null) {
+            List<PropertyBean> propertyBeans = getPropertyBeans(partition.getProperties());
+            partitionBeans.property = propertyBeans;
+        }
 
         return partitionBeans;
     }


[2/2] git commit: persisting network partitions in registry, retrieve at start up, NetworkPartitionContext should be serializable, making Partition Manager thread safe

Posted by ni...@apache.org.
persisting network partitions in registry, retrieve at start up, NetworkPartitionContext should be serializable, making Partition Manager thread safe


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

Branch: refs/heads/master
Commit: d1ddd6eb7e5ae346c748d6b2d85630455c03c71f
Parents: fe3de0c
Author: Nirmal Fernando <ni...@apache.org>
Authored: Sat Dec 14 15:11:20 2013 +0530
Committer: Nirmal Fernando <ni...@apache.org>
Committed: Sat Dec 14 15:11:20 2013 +0530

----------------------------------------------------------------------
 .../autoscaler/NetworkPartitionContext.java     | 11 ++++-
 .../stratos/autoscaler/PartitionContext.java    |  4 +-
 .../internal/AutoscalerServerComponent.java     | 10 +++++
 .../autoscaler/partition/PartitionManager.java  | 39 +++++++++++-------
 .../autoscaler/registry/RegistryManager.java    | 42 ++++++++++++++++++++
 .../autoscaler/util/AutoScalerConstants.java    |  1 +
 6 files changed, 90 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d1ddd6eb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
index 1f7f029..ae53601 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
@@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 
+import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -29,8 +30,9 @@ import java.util.Map;
  * Holds runtime data of a network partition.
  *
  */
-public class NetworkPartitionContext {
+public class NetworkPartitionContext implements Serializable {
 
+    private static final long serialVersionUID = -5458149704820463584L;
     private static final Log log = LogFactory.getLog(NetworkPartitionContext.class);
     private String id;
 
@@ -203,6 +205,13 @@ public class NetworkPartitionContext {
 
 
 
+    @Override
+    public String toString() {
+        return "NetworkPartitionContext [id=" + id + ", defaultLbClusterId=" + defaultLbClusterId +
+               ", partitionAlgorithm=" + partitionAlgorithm + ", minInstanceCount=" +
+               minInstanceCount + ", maxInstanceCount=" + maxInstanceCount + "]";
+    }
+
     public int getCurrentPartitionIndex() {
         return currentPartitionIndex;
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d1ddd6eb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
index 0f46893..2843e16 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
@@ -23,6 +23,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.pojo.MemberContext;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -39,8 +40,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
  *
  */
 
-public class PartitionContext {
+public class PartitionContext implements Serializable{
 
+    private static final long serialVersionUID = 5822689534291741272L;
     private static final Log log = LogFactory.getLog(PartitionContext.class);
     private String partitionId;
     private String serviceName;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d1ddd6eb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
index e5c7964..a68800b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
@@ -20,6 +20,7 @@ package org.apache.stratos.autoscaler.internal;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.NetworkPartitionContext;
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.message.receiver.health.HealthEventMessageDelegator;
@@ -89,6 +90,15 @@ public class AutoscalerServerComponent {
                 Partition partition = partitionIterator.next();
                 PartitionManager.getInstance().addPartitionToInformationModel(partition);
             }
+            
+            // Adding the network partitions stored in registry to the information model
+            List<NetworkPartitionContext> nwPartitionCtxts = RegistryManager.getInstance().retrieveNetworkPartitions();
+            Iterator<NetworkPartitionContext> nwPartitionIterator = nwPartitionCtxts.iterator();
+            while (nwPartitionIterator.hasNext()) {
+                NetworkPartitionContext nwPartition = nwPartitionIterator.next();
+                PartitionManager.getInstance().addNetworkPartitionContext(nwPartition);
+            }
+            
             List<AutoscalePolicy> asPolicies = RegistryManager.getInstance().retrieveASPolicies();
             Iterator<AutoscalePolicy> asPolicyIterator = asPolicies.iterator();
             while (asPolicyIterator.hasNext()) {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d1ddd6eb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
index d8daead..b80e46e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
@@ -28,11 +28,9 @@ import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.exception.InvalidPartitionException;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
-import org.apache.stratos.autoscaler.util.AutoScalerConstants;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -45,7 +43,7 @@ private static final Log log = LogFactory.getLog(PartitionManager.class);
 	// Partitions against partitionID
 	private static Map<String,Partition> partitions = new HashMap<String, Partition>();
 	
-	private List<NetworkPartitionContext> networkPartitions;
+//	private List<NetworkPartitionContext> networkPartitions;
 	
 	/*
 	 * Key - partition id
@@ -62,9 +60,6 @@ private static final Log log = LogFactory.getLog(PartitionManager.class);
 
 	private static PartitionManager instance;
 	
-	private String partitionResourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE 
-			+ AutoScalerConstants.PARTITION_RESOURCE + "/";
-	
 	private PartitionManager(){
         networkPartitionContexts = new HashMap<String, NetworkPartitionContext>();
 //	    networkPartitions = new ArrayList<NetworkPartitionContext>();
@@ -72,10 +67,14 @@ private static final Log log = LogFactory.getLog(PartitionManager.class);
 	}
 	
 	public static PartitionManager getInstance(){
-		if(null == instance)
-			return new PartitionManager();
-		else
-			return instance;
+	    if (instance == null) {
+            synchronized (PartitionManager.class) {
+                if (instance == null) {
+                    instance = new PartitionManager();
+                }
+            }
+        }
+        return instance;
 	}
 	
 	public boolean partitionExist(String partitionId){
@@ -119,9 +118,9 @@ private static final Log log = LogFactory.getLog(PartitionManager.class);
 	    return this.networkPartitionContexts.get(networkPartitionId);
 	}
 
-	public List<NetworkPartitionContext> getAllNetworkPartitions() {
-	    return this.networkPartitions;
-	}
+//	public List<NetworkPartitionContext> getAllNetworkPartitions() {
+//	    return this.networkPartitions;
+//	}
 
 //	/**
 //	 * TODO make {@link NetworkPartitionContext}s extensible.
@@ -176,10 +175,20 @@ private static final Log log = LogFactory.getLog(PartitionManager.class);
 
     public void deployNewNetworkPartitions(DeploymentPolicy depPolicy) {
         for(PartitionGroup partitionGroup: depPolicy.getPartitionGroups()){
-            NetworkPartitionContext networkPartitionContext = new NetworkPartitionContext(partitionGroup.getId());
-            networkPartitionContexts.put(partitionGroup.getId(), networkPartitionContext);
+            String id = partitionGroup.getId();
+            if (!networkPartitionContexts.containsKey(id)) {
+                NetworkPartitionContext networkPartitionContext =
+                                                                  new NetworkPartitionContext(
+                                                                                              id);
+                addNetworkPartitionContext(networkPartitionContext);
+                RegistryManager.getInstance().persistNetworkPartition(networkPartitionContext);
+            }
 
         }
     }
+    
+    public void addNetworkPartitionContext(NetworkPartitionContext ctxt) {
+        networkPartitionContexts.put(ctxt.getId(), ctxt);
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d1ddd6eb/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 ba1afdf..c22a0dc 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
@@ -2,6 +2,7 @@ package org.apache.stratos.autoscaler.registry;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.NetworkPartitionContext;
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.util.Deserializer;
@@ -91,6 +92,14 @@ public class RegistryManager {
                     partition.getId(), partition.getProvider(), partition.getPartitionMin(), partition.getPartitionMax()));
         }
     }
+    
+    public void persistNetworkPartition(NetworkPartitionContext nwPartitionCtxt) {
+        String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.NETWORK_PARTITION_RESOURCE + "/";
+        persist(nwPartitionCtxt, resourcePath);
+        if(log.isDebugEnabled()) {
+            log.debug("NetworkPartitionContext written to registry: "+nwPartitionCtxt.toString());
+        }
+    }
 
     public void persistAutoscalerPolicy(AutoscalePolicy autoscalePolicy) {
         String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.AS_POLICY_RESOURCE + "/" + autoscalePolicy.getId();
@@ -158,6 +167,39 @@ public class RegistryManager {
         }
         return partitionList;
     }
+    
+    public List<NetworkPartitionContext> retrieveNetworkPartitions() {
+        List<NetworkPartitionContext> nwPartitionList = new ArrayList<NetworkPartitionContext>();
+        RegistryManager registryManager = RegistryManager.getInstance();
+        String[] partitionsResourceList = (String[]) registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE + 
+                                                                              AutoScalerConstants.NETWORK_PARTITION_RESOURCE);
+
+        if (partitionsResourceList != null) {
+            NetworkPartitionContext nwPartition;
+            for (String resourcePath : partitionsResourceList) {
+                Object serializedObj = registryManager.retrieve(resourcePath);
+                if (serializedObj != null) {
+                    try {
+
+                        Object dataObj = Deserializer.deserializeFromByteArray((byte[]) serializedObj);
+                        if (dataObj instanceof NetworkPartitionContext) {
+                            nwPartition = (NetworkPartitionContext) dataObj;
+                            if(log.isDebugEnabled()) {
+                                log.debug(String.format("NetworkPartitionContext read from registry: "+nwPartition.toString()));
+                            }
+                            nwPartitionList.add(nwPartition);
+                        } else {
+                            return null;
+                        }
+                    } catch (Exception e) {
+                        String msg = "Unable to retrieve data from Registry. Hence, any historical NetworkPartitionContext will not get reflected.";
+                        log.warn(msg, e);
+                    }
+                }
+            }
+        }
+        return nwPartitionList;
+    }
 
     public List<AutoscalePolicy> retrieveASPolicies() {
         List<AutoscalePolicy> asPolicyList = new ArrayList<AutoscalePolicy>();

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d1ddd6eb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
index 3530cc3..9702cc8 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
@@ -35,6 +35,7 @@ public final class AutoScalerConstants {
 	 */
 	public static final String AUTOSCALER_RESOURCE = "/autoscaler";
 	public static final String PARTITION_RESOURCE = "/partitions";
+	public static final String NETWORK_PARTITION_RESOURCE = "/network-partitions";
 	public static final String AS_POLICY_RESOURCE = "/policies/autoscalingPolicies";
 	public static final String DEPLOYMENT_POLICY_RESOURCE = "/policies/deploymentPolicies";