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/01 11:59:01 UTC

[07/12] git commit: moving PartitionGroup and DeploymentPolicy objects to auto-scaler, refactoring policy validation API and cleaning up

moving PartitionGroup and DeploymentPolicy objects to auto-scaler, refactoring policy validation API and cleaning up


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

Branch: refs/heads/master
Commit: 45cfecd4b7d5d8a51c207a16ee662586cc6b0274
Parents: 192627b
Author: Nirmal Fernando <ni...@apache.org>
Authored: Sun Dec 1 16:20:27 2013 +0530
Committer: Nirmal Fernando <ni...@apache.org>
Committed: Sun Dec 1 16:20:27 2013 +0530

----------------------------------------------------------------------
 .../deployment/partition/PartitionGroup.java    | 85 ------------------
 .../deployment/policy/DeploymentPolicy.java     | 93 --------------------
 .../exception/InvalidPartitionException.java    |  4 +
 .../impl/CloudControllerServiceImpl.java        | 84 ++++++++++--------
 .../interfaces/CloudControllerService.java      |  3 +-
 .../validate/AWSEC2PartitionValidator.java      |  4 +-
 .../OpenstackNovaPartitionValidator.java        |  6 +-
 7 files changed, 53 insertions(+), 226 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/45cfecd4/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/partition/PartitionGroup.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/partition/PartitionGroup.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/partition/PartitionGroup.java
deleted file mode 100644
index 18dd0ce..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/partition/PartitionGroup.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.cloud.controller.deployment.partition;
-
-import java.io.Serializable;
-
-/**
- * The model class for PartitionGroup definition.
- */
-public class PartitionGroup implements Serializable{
-
-    private static final long serialVersionUID = -8043298009352097370L;
-    private String id;
-    private String partitionAlgo;
-    private Partition[] partitions;
-
-    /**
-     * Gets the value of the partitionAlgo property.
-     *
-     * @return
-     *     possible object is
-     *     {@link String }
-     *
-     */
-    public String getPartitionAlgo() {
-        return partitionAlgo;
-    }
-
-    /**
-     * Sets the value of the partitionAlgo property.
-     *
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *
-     */
-    public void setPartitionAlgo(String value) {
-        this.partitionAlgo = value;
-    }
-    
-    public void setPartitions(Partition[] partitions) {
-        this.partitions = partitions;
-    }
-
-    /**
-     * Gets the value of the partitions.
-     */
-    public Partition[] getPartitions() {
-        if (partitions == null) {
-            partitions = new Partition[0];
-        }
-        return this.partitions;
-    }
-
-    /**
-     * Gets the value of the id.
-     */
-    public String getId() {
-        return id;
-    }
-
-    /**
-     * sets the value of the id.
-     */
-    public void setId(String id) {
-        this.id = id;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/45cfecd4/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/policy/DeploymentPolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/policy/DeploymentPolicy.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/policy/DeploymentPolicy.java
deleted file mode 100644
index 7b36eba..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/policy/DeploymentPolicy.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one 
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
- * KIND, either express or implied.  See the License for the 
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.cloud.controller.deployment.policy;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
-
-/**
- * The model class for Deployment-Policy definition.
- */
-public class DeploymentPolicy implements Serializable{
-
-    private static final long serialVersionUID = 5675507196284400099L;
-    private String id;
-	private PartitionGroup[] partitionGroups;
-
-    /**
-     * Gets the value of the id property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getId() {
-        return id;
-    }
-
-    /**
-     * Sets the value of the id property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setId(String value) {
-        this.id = value;
-    }
-    
-    public void setPartitionGroups(PartitionGroup[] groups) {
-        this.partitionGroups = groups;
-    }
-
-    /**
-     * Gets the value of the partition-groups.
-     */
-    public PartitionGroup[] getPartitionGroups() {
-        
-        return this.partitionGroups;
-    }
-    
-    /**
-     * Returns all the partitions referenced by this policy.
-     * @return List of {@link Partition}
-     */
-    public List<Partition> getAllPartitions() {
-        List<Partition> partitions = new ArrayList<Partition>();
-        for (PartitionGroup group : partitionGroups) {
-            if (group != null) {
-                partitions.addAll(Arrays.asList(group.getPartitions()));
-            }
-        }
-        return partitions;
-    }
-    
-    public String toString() {
-        return "Deployment Policy: "+this.id;
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/45cfecd4/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidPartitionException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidPartitionException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidPartitionException.java
index e842ad9..48755c8 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidPartitionException.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidPartitionException.java
@@ -35,4 +35,8 @@ public class InvalidPartitionException extends Exception {
     public InvalidPartitionException(String msg, Exception ex) {
         super(msg, ex);
     }
+    
+    public String getMessage() {
+        return super.getMessage();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/45cfecd4/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 372cc58..373c5df 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
@@ -22,8 +22,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.cloud.controller.exception.CloudControllerException;
 import org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException;
 import org.apache.stratos.cloud.controller.exception.InvalidClusterException;
@@ -54,6 +52,7 @@ import org.wso2.carbon.ntask.core.TaskInfo;
 import org.wso2.carbon.ntask.core.TaskInfo.TriggerInfo;
 import org.wso2.carbon.ntask.core.TaskManager;
 import org.wso2.carbon.ntask.core.service.TaskService;
+
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.Lock;
@@ -1017,51 +1016,46 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		
 
     @Override
-    public boolean validateDeploymentPolicy(String cartridgeType, DeploymentPolicy deploymentPolicy) 
+    public boolean validateDeploymentPolicy(String cartridgeType, Partition[] partitions) 
             throws InvalidPartitionException, InvalidCartridgeTypeException {
 
-        Map<String, IaasProvider> partitionToIaasProviders = new ConcurrentHashMap<String, IaasProvider>();
-        
+        Map<String, IaasProvider> partitionToIaasProviders =
+                                                             new ConcurrentHashMap<String, IaasProvider>();
+
         Cartridge cartridge = dataHolder.getCartridge(cartridgeType);
-        
-        if(cartridge == null) {
-            String msg = "Invalid Cartridge Type: "+cartridgeType;
+
+        if (cartridge == null) {
+            String msg = "Invalid Cartridge Type: " + cartridgeType;
             log.error(msg);
             throw new InvalidCartridgeTypeException(msg);
         }
-        
-        if(deploymentPolicy == null) {
-            String msg = "Deployment Policy is null.";
-            log.error(msg);
-            throw new InvalidPartitionException(msg);
-        }
-        
-        for (PartitionGroup partitionGroup : deploymentPolicy.getPartitionGroups()) {
-            for (Partition partition : partitionGroup.getPartitions()) {
-                String provider = partition.getProvider();
-                IaasProvider iaasProvider = cartridge.getIaasProvider(provider);
-                
-                if(iaasProvider == null) {
-                    String msg = "Invalid Partition - "+partition.toString() +", in "+deploymentPolicy.toString()+
-                            ". Cause: Iaas Provider is null for: "+provider;
-                    log.error(msg);
-                    throw new InvalidPartitionException(msg);
-                }
-                
-                Iaas iaas = iaasProvider.getIaas();
-                PartitionValidator validator = iaas.getPartitionValidator();
-                validator.setIaasProvider(iaasProvider);
-                IaasProvider updatedIaasProvider = validator.validate(partition.getId(), 
-                                 CloudControllerUtil.toJavaUtilProperties(partition.getProperties()));
-                // add to a temporary Map
-                partitionToIaasProviders.put(partition.getId(), updatedIaasProvider);
-                
+
+        for (Partition partition : partitions) {
+            String provider = partition.getProvider();
+            IaasProvider iaasProvider = cartridge.getIaasProvider(provider);
+
+            if (iaasProvider == null) {
+                String msg =
+                             "Invalid Partition - " + partition.toString() +
+                                     ". Cause: Iaas Provider is null for: " + provider;
+                log.error(msg);
+                throw new InvalidPartitionException(msg);
             }
+
+            Iaas iaas = iaasProvider.getIaas();
+            PartitionValidator validator = iaas.getPartitionValidator();
+            validator.setIaasProvider(iaasProvider);
+            IaasProvider updatedIaasProvider =
+                                               validator.validate(partition.getId(),
+                                                                  CloudControllerUtil.toJavaUtilProperties(partition.getProperties()));
+            // add to a temporary Map
+            partitionToIaasProviders.put(partition.getId(), updatedIaasProvider);
+
         }
-        
+
         // if and only if the deployment policy valid
         cartridge.addIaasProviders(partitionToIaasProviders);
-        
+
         return true;
     }
 
@@ -1076,8 +1070,22 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             log.error(msg);
             throw new InvalidPartitionException(msg);
         }
-
+        
         Iaas iaas = iaasProvider.getIaas();
+        if (iaas == null) {
+            try {
+                iaas = (Iaas) Class.forName(iaasProvider.getClassName()).newInstance();
+                iaas.buildComputeServiceAndTemplate(iaasProvider);
+                iaasProvider.setIaas(iaas);
+            } catch (Exception e) {
+                String msg =
+                             "Error while instantiating an instance of the class: " +
+                                     iaasProvider.getClassName();
+                log.error(msg, e);
+                throw new InvalidPartitionException(msg, e);
+            }
+        }
+
         PartitionValidator validator = iaas.getPartitionValidator();
         validator.setIaasProvider(iaasProvider);
         validator.validate(partition.getId(),

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/45cfecd4/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 ee71f62..b4bba09 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
@@ -19,7 +19,6 @@
 package org.apache.stratos.cloud.controller.interfaces;
 
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException;
 import org.apache.stratos.cloud.controller.exception.InvalidClusterException;
 import org.apache.stratos.cloud.controller.exception.InvalidMemberException;
@@ -53,7 +52,7 @@ public interface CloudControllerService {
      * @throws InvalidPartitionException if the policy contains at least one invalid partition.
      * @throws InvalidCartridgeTypeException if the given Cartridge type is not a valid one.
      */
-    public boolean validateDeploymentPolicy(String cartridgeType, DeploymentPolicy deploymentPolicy) 
+    public boolean validateDeploymentPolicy(String cartridgeType, Partition[] partitions) 
             throws InvalidPartitionException, InvalidCartridgeTypeException;
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/45cfecd4/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/AWSEC2PartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/AWSEC2PartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/AWSEC2PartitionValidator.java
index dd6730c..3c5814d 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/AWSEC2PartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/AWSEC2PartitionValidator.java
@@ -73,9 +73,7 @@ public class AWSEC2PartitionValidator implements PartitionValidator {
                 
             } else {
                 
-                String msg = "Invalid Partition Detected : "+partitionId+". - "+Scope.region.toString()+" Property is not defined.";
-                log.error(msg);
-                throw new InvalidPartitionException(msg);
+                return iaasProvider;
             }
         } catch (Exception ex) {
             String msg = "Invalid Partition Detected : "+partitionId;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/45cfecd4/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/OpenstackNovaPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/OpenstackNovaPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/OpenstackNovaPartitionValidator.java
index cc8e1a2..64a3567 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/OpenstackNovaPartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/validate/OpenstackNovaPartitionValidator.java
@@ -75,11 +75,7 @@ public class OpenstackNovaPartitionValidator implements PartitionValidator {
                 
             } else {
 
-                String msg =
-                        "Invalid Partition Detected : "+partitionId+". - "+Scope.zone.toString() +
-                                     " Property is not defined.";
-                log.error(msg);
-                throw new InvalidPartitionException(msg);
+                return iaasProvider;
             }
         } catch (Exception ex) {
             String msg = "Invalid Partition Detected : "+partitionId;