Repository: stratos
Updated Branches:
  refs/heads/master 7372d0376 -> f2f888b7f


implementing app bursting pattern in one-after-another algorithm


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

Branch: refs/heads/master
Commit: ab63a4bb55150c074448f053a5580394b9d1579a
Parents: 7372d03
Author: R-Rajkumar <[email protected]>
Authored: Mon Mar 9 12:08:37 2015 +0530
Committer: R-Rajkumar <[email protected]>
Committed: Mon Mar 9 12:08:37 2015 +0530

----------------------------------------------------------------------
 .../OneAfterAnotherAlgorithm.java               | 56 +++++++++++++++++++-
 .../policy/deployment/ApplicationPolicy.java    | 10 ++++
 .../stratos/autoscaler/util/AutoscalerUtil.java | 38 +++++++++++++
 .../common/constants/StratosConstants.java      |  3 ++
 4 files changed, 106 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/ab63a4bb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java
index e75f709..aa6a044 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java
@@ -25,6 +25,9 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.algorithms.NetworkPartitionAlgorithm;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy;
+import org.apache.stratos.common.constants.StratosConstants;
+
+import edu.emory.mathcs.backport.java.util.Arrays;
 
 public class OneAfterAnotherAlgorithm implements NetworkPartitionAlgorithm{
        
@@ -59,8 +62,59 @@ public class OneAfterAnotherAlgorithm implements 
NetworkPartitionAlgorithm{
                        return null;
                }
                
-               String[] networkPartitions = 
applicationPolicy.getNetworkPartitions();
                String applicatioinPolicyId = applicationPolicy.getId();
+               String[] networkPartitionGroups = 
applicationPolicy.getNetworkPartitionGroups();
+               if (networkPartitionGroups != null && 
networkPartitionGroups.length != 0) {
+                       if (log.isDebugEnabled()) {
+                               String msg = String.format("Network partition 
groups property found in application policy [application-id] %s 
[application-policy-id] %s. "
+                                               + "Hence using network 
partition groups for app bursting", applicationId, applicatioinPolicyId);
+                               log.debug(msg);
+                       }
+                       int totalNetworkPartitionGroups = 
networkPartitionGroups.length;
+                       if (log.isDebugEnabled()) {
+                               String msg = String.format("%s network 
partition groups found in application policy [application-id] %s 
[application-policy-id] %s", 
+                                               totalNetworkPartitionGroups, 
applicationId, applicatioinPolicyId);
+                               log.debug(msg);
+                       }
+                       
+                       int currentPartitionIndex = 
networkPartitionAlgorithmContext.getCurrentNetworkPartitionIndex().intValue();
+                       if (log.isDebugEnabled()) {
+                               String msg = String.format("Current network 
partition group index is %s [application-id] %s [application-policy-d]", 
+                                               currentPartitionIndex, 
applicationId, applicatioinPolicyId);
+                               log.debug(msg);
+                       }
+                       
+                       if (currentPartitionIndex >= 
totalNetworkPartitionGroups) {
+                               if (log.isDebugEnabled()) {
+                                       String msg = 
String.format("currentPartitionIndex >= totalNetworkPartitionGroups, hence no 
more network partition groups are available "
+                                                       + "[application-id] %s 
[application-policy-d]", currentPartitionIndex, applicationId, 
applicatioinPolicyId);
+                                       log.debug(msg);
+                               }
+                               return null;
+                       }
+                       
+                       int selectedIndex = 
networkPartitionAlgorithmContext.getCurrentNetworkPartitionIndex().incrementAndGet();
+                       if (log.isDebugEnabled()) {
+                               String msg = String.format("Selected network 
partition group index is %s (starting from 1,2,3...) [application-id] %s 
[application-policy-d]", 
+                                               selectedIndex, applicationId, 
applicatioinPolicyId);
+                               log.debug(msg);
+                       }
+                       
+                       if (log.isDebugEnabled()) {
+                               String msg = String.format("Selected network 
partition group is %s [application-id] %s [application-policy-d]", 
+                                               
networkPartitionGroups[selectedIndex-1], applicationId, applicatioinPolicyId);
+                               log.debug(msg);
+                       }
+                       
+                       String[] selectedNetworkPartitions = 
networkPartitionGroups[selectedIndex-1].split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITIONS_SPLITTER);
+                       if (selectedNetworkPartitions == null) {
+                               return null;
+                       }
+                       
+                       return Arrays.asList(selectedNetworkPartitions);
+               }
+               
+               String[] networkPartitions = 
applicationPolicy.getNetworkPartitions();
                if (networkPartitions == null || networkPartitions.length == 0) 
{
                        if (log.isWarnEnabled()) {
                                String msg = String.format("Network partitions 
found in application policy [application-id] %s [application-policy-id] %s", 

http://git-wip-us.apache.org/repos/asf/stratos/blob/ab63a4bb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ApplicationPolicy.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ApplicationPolicy.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ApplicationPolicy.java
index 1f52d60..ac3143f 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ApplicationPolicy.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ApplicationPolicy.java
@@ -29,6 +29,8 @@ public class ApplicationPolicy implements Serializable{
        private String algorithm;
        private String[] networkPartitions;
        private Properties properties;
+       // if networkPartitionGroups property is set, we are populating 
following variable.
+       private String[] networkPartitionGroups;
        
        public String getId() {
                return id;
@@ -61,4 +63,12 @@ public class ApplicationPolicy implements Serializable{
        public void setProperties(Properties properties) {
                this.properties = properties;
        }
+
+       public String[] getNetworkPartitionGroups() {
+               return networkPartitionGroups;
+       }
+
+       public void setNetworkPartitionGroups(String[] networkPartitionGroups) {
+               this.networkPartitionGroups = networkPartitionGroups;
+       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/ab63a4bb/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 73916f7..eb11772 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
@@ -646,6 +646,44 @@ public class AutoscalerUtil {
                        }
                        
                }
+       
+       // if networkPartitionGroups property is set, we need to validate that 
too
+       Properties properties = applicationPolicy.getProperties();
+               if (properties!= null) {
+                       Property networkPartitionGroupsProperty = 
properties.getProperty(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITION_GROUPS);
+                       if (networkPartitionGroupsProperty != null) {
+                               String networkPartitionGroupsPropertyValue = 
networkPartitionGroupsProperty.getValue();
+                               if (networkPartitionGroupsPropertyValue != 
null) {
+                                       String[] networkPartitionGroups = 
networkPartitionGroupsPropertyValue.split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITION_GROUPS_SPLITTER);
+                                       if (networkPartitionGroups != null) {
+                                               for (String 
networkPartitionIdsString : networkPartitionGroups) {
+                                                       networkPartitionIds = 
networkPartitionIdsString.split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITIONS_SPLITTER);
+                                                       if (networkPartitionIds 
!= null) {
+                                                               for (String 
networkPartitionId : networkPartitionIds) {
+                                                                       // 
network-partition-id can't be null or empty
+                                                                       if 
(null == networkPartitionId || networkPartitionId.isEmpty()) {
+                                                                               
String msg = String.format("Invalid Application Policy. "
+                                                                               
                + "Cause -> Invalid network-partition-id : %s", 
networkPartitionId);
+                                                                               
log.error(msg);
+                                                                               
throw new InvalidApplicationPolicyException(msg);
+                                                                       }
+                                                                       
+                                                                       // 
network partitions should be added already
+                                                                       if 
(null == 
CloudControllerServiceClient.getInstance().getNetworkPartition(networkPartitionId))
 {
+                                                                               
String msg = String.format("Invalid Application Policy. "
+                                                                               
                + "Cause -> Network partition not found for 
network-partition-id : %s", networkPartitionId);
+                                                                               
log.error(msg);
+                                                                               
throw new InvalidApplicationPolicyException(msg);
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                               // populating network partition 
groups in application policy
+                                               
applicationPolicy.setNetworkPartitionGroups(networkPartitionGroups);
+                                       }
+                               }
+                       }
+               }
     }
        
        

http://git-wip-us.apache.org/repos/asf/stratos/blob/ab63a4bb/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
index 01a9dc7..67f46cb 100644
--- 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
+++ 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
@@ -201,5 +201,8 @@ public class StratosConstants {
        // network partition algorithm id constants
        public static final String 
NETWORK_PARTITION_ONE_AFTER_ANOTHER_ALGORITHM_ID = "one-after-another";
        public static final String NETWORK_PARTITION_ALL_AT_ONCE_ALGORITHM_ID = 
"all-at-once";
+       public static final String APPLICATION_POLICY_NETWORK_PARTITION_GROUPS 
= "networkPartitionGroups";
+       public static final String 
APPLICATION_POLICY_NETWORK_PARTITIONS_SPLITTER = "\\|";
+       public static final String 
APPLICATION_POLICY_NETWORK_PARTITION_GROUPS_SPLITTER = ",";
 }
 

Reply via email to