Updated Branches: refs/heads/master 4e0e95681 -> ea115ab2f
Registry based Partition deployer Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/ee705646 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/ee705646 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/ee705646 Branch: refs/heads/master Commit: ee705646f5a7ff937e4ead764d34b507feafd271 Parents: c6829cd Author: Udara Liyanage <[email protected]> Authored: Sat Dec 7 12:57:42 2013 -0500 Committer: Udara Liyanage <[email protected]> Committed: Sat Dec 7 12:57:42 2013 -0500 ---------------------------------------------------------------------- .../autoscaler/api/AutoScalerServiceImpl.java | 7 ++- .../exception/AutoScalerException.java | 37 +++++++++++++++ .../autoscaler/partition/PartitionManager.java | 47 +++++++++++++------- .../partition/deployers/PartitionDeployer.java | 14 ++---- .../autoscaler/registry/RegistryManager.java | 21 ++++----- .../autoscaler/util/AutoScalerConstants.java | 2 +- 6 files changed, 89 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ee705646/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java index e2e5132..584a724 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java @@ -24,13 +24,17 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient; import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy; +import org.apache.stratos.autoscaler.exception.AutoScalerException; import org.apache.stratos.autoscaler.exception.PartitionValidationException; import org.apache.stratos.autoscaler.interfaces.AutoScalerServiceInterface; import org.apache.stratos.autoscaler.partition.PartitionGroup; import org.apache.stratos.autoscaler.partition.PartitionManager; import org.apache.stratos.autoscaler.policy.PolicyManager; import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy; +import org.apache.stratos.autoscaler.registry.RegistryManager; +import org.apache.stratos.autoscaler.util.AutoScalerConstants; import org.apache.stratos.cloud.controller.deployment.partition.Partition; +import org.wso2.carbon.registry.core.exceptions.RegistryException; /** * Auto Scaler Service API is responsible getting Partitions and Policies. @@ -66,8 +70,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface{ @Override public boolean addPartition(Partition partition) { - // TODO Auto-generated method stub - return false; + return PartitionManager.getInstance().addPartition(partition); } @Override http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ee705646/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/AutoScalerException.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/AutoScalerException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/AutoScalerException.java new file mode 100644 index 0000000..d4ba903 --- /dev/null +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/AutoScalerException.java @@ -0,0 +1,37 @@ +/* + * 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.autoscaler.exception; + +public class AutoScalerException extends RuntimeException { + + private static final long serialVersionUID = 3131046757663797684L; + + public AutoScalerException(String msg) { + super(msg); + } + + public AutoScalerException(String msg, Exception ex) { + super(msg, ex); + } + + public AutoScalerException(Exception ex) { + super(ex); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ee705646/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 a17393d..52fd8f7 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 @@ -19,15 +19,18 @@ package org.apache.stratos.autoscaler.partition; -import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient; +import org.apache.stratos.autoscaler.exception.AutoScalerException; +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 org.wso2.carbon.registry.core.exceptions.RegistryException; /** * The model class for managing Partitions. @@ -54,18 +57,28 @@ private static final Log log = LogFactory.getLog(PartitionManager.class); return partitionListMap.containsKey(partitionId); } - public void addPartition(String partitionId, Partition partition){ - if(partitionExist(partitionId)) - log.error("A partition with the ID " + partitionId +" already exist."); - else - partitionListMap.put(partitionId, partition); - } - - public void removePartition(String partitionId){ - if(partitionExist(partitionId)) - partitionListMap.remove(partitionId); - else - log.error("A partition with the ID " + partitionId +" already does not exist."); + public boolean addPartition( Partition partition) throws AutoScalerException{ + String partitionId = partition.getId(); + if(this.partitionExist(partition.getId())) + throw new AutoScalerException("A parition with the ID " + partitionId + " already exist."); + + String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + + AutoScalerConstants.PARTITION_RESOURCE + "/" + partition.getId(); + + RegistryManager regManager = RegistryManager.getInstance(); + + try { + this.validatePartition(partition); + regManager.persist(partition, resourcePath); + partitionListMap.put(partitionId, partition); + } catch (RegistryException e) { + throw new AutoScalerException(e); + } catch(PartitionValidationException e){ + throw new AutoScalerException(e); + } + + log.info("Partition :" + partition.getId() + " is deployed successfully."); + return true; } public Partition getPartitionById(String partitionId){ @@ -80,5 +93,9 @@ private static final Log log = LogFactory.getLog(PartitionManager.class); return partitionListMap.values().toArray(new Partition[0]); } + + public boolean validatePartition(Partition partition) throws PartitionValidationException{ + return CloudControllerClient.getInstance().validatePartition(partition); + } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ee705646/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java index eb869aa..840f227 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java @@ -29,13 +29,12 @@ import org.apache.axis2.deployment.DeploymentException; import org.apache.axis2.deployment.repository.util.DeploymentFileData; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient; import org.apache.stratos.autoscaler.partition.PartitionManager; import org.apache.stratos.cloud.controller.deployment.partition.Partition; /** * - * The Axis2 deployer class for party definitions definitions. + * The Axis2 deployer class for partition definitions definitions. */ public class PartitionDeployer extends AbstractDeployer { @@ -85,18 +84,11 @@ public class PartitionDeployer extends AbstractDeployer { while (it.hasNext()) { Partition partition = it.next(); try { - if (PartitionManager.getInstance().partitionExist(partition.getId())) { - log.warn("Partition already exists in the system " + partition.getId()); - continue; - } - - CloudControllerClient.getInstance().validatePartition(partition); - PartitionManager.getInstance().addPartition(partition.getId(), partition); - log.info("Partition :" + partition.getId() + " is deployed successfully."); + PartitionManager.getInstance().addPartition(partition); } catch (Exception e) { String msg = "Invalid partition: " + partition.getId() + " in file: " + - partitionFile.getAbsolutePath()+". Cause: "+e.getMessage(); + partitionFile.getAbsolutePath()+". Cause: "+ e.getMessage(); log.error(msg, e); continue; } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ee705646/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 595b0bd..4322e7a 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 @@ -5,6 +5,7 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.registry.core.Registry; import org.wso2.carbon.registry.core.Resource; import org.wso2.carbon.registry.core.exceptions.RegistryException; +import org.apache.stratos.autoscaler.exception.AutoScalerException; import org.apache.stratos.autoscaler.util.AutoScalerConstants; import org.apache.stratos.autoscaler.util.ServiceReferenceHolder; import org.apache.stratos.autoscaler.util.Serializer; @@ -42,8 +43,7 @@ public class RegistryManager { "Failed to create the registry resource " + AutoScalerConstants.AUTOSCALER_RESOURCE; log.error(msg, e); - //throw new CloudControllerException(msg, e); - + throw new AutoScalerException(msg, e); } } @@ -51,30 +51,31 @@ public class RegistryManager { * Persist an object in the local registry. * * @param dataObj object to be persisted. - * @param path resource path to be persisted. + * @param resourcePath resource path to be persisted. */ - public void persist(Object dataObj, String path) throws RegistryException { + public void persist(Object dataObj, String resourcePath) throws RegistryException { try { + if (registryService.resourceExists(resourcePath)) { + throw new AutoScalerException("Resource already exist in the registry: " + resourcePath); + } registryService.beginTransaction(); Resource nodeResource = registryService.newResource(); - nodeResource.setContent(Serializer.serializeToByteArray(dataObj)); - - //registryService.put(AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.DATA_RESOURCE + "/"+id, nodeResource); - registryService.put(path, nodeResource); + + registryService.put(resourcePath, nodeResource); registryService.commitTransaction(); if(log.isDebugEnabled()){ } - + } catch (Exception e) { String msg = "Failed to persist the cloud controller data in registry."; registryService.rollbackTransaction(); log.error(msg, e); - //throw new CloudControllerException(msg, e); + throw new AutoScalerException(msg, e); } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ee705646/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 da96b74..462f39f 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 @@ -34,6 +34,6 @@ public final class AutoScalerConstants { * Persistence */ public static final String AUTOSCALER_RESOURCE = "/autoscaler"; - public static final String DATA_RESOURCE = "/data"; + public static final String PARTITION_RESOURCE = "/partitions"; }
