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;