http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java index e29d028..eec247d 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java @@ -18,7 +18,12 @@ */ package org.apache.stratos.rest.endpoint.bean; +import org.apache.stratos.rest.endpoint.bean.cartridge.definition.PersistenceBean; +import org.apache.stratos.rest.endpoint.bean.cartridge.definition.PropertyBean; + import javax.xml.bind.annotation.XmlRootElement; +import java.util.ArrayList; +import java.util.List; @XmlRootElement public class CartridgeInfoBean { @@ -34,11 +39,15 @@ public class CartridgeInfoBean { String dataCartridgeAlias; boolean commitsEnabled; - private boolean persistanceRequired; - private String size; - private boolean removeOnTermination; private String serviceGroup; + private PersistenceBean persistence; + + private List<PropertyBean> property; + + public CartridgeInfoBean() { + } + public String getCartridgeType() { return cartridgeType; } @@ -119,31 +128,7 @@ public class CartridgeInfoBean { this.deploymentPolicy = deploymentPolicy; } - public boolean isPersistanceRequired() { - return persistanceRequired; - } - - public void setPersistanceRequired(boolean persistanceRequired) { - this.persistanceRequired = persistanceRequired; - } - - public String getSize() { - return size; - } - - public void setSize(String size) { - this.size = size; - } - - public boolean isRemoveOnTermination() { - return removeOnTermination; - } - - public void setRemoveOnTermination(boolean removeOnTermination) { - this.removeOnTermination = removeOnTermination; - } - - public boolean isCommitsEnabled() { + public boolean isCommitsEnabled() { return commitsEnabled; } @@ -158,5 +143,20 @@ public class CartridgeInfoBean { public void setServiceGroup(String serviceGroup) { this.serviceGroup = serviceGroup; } - + + public PersistenceBean getPersistence() { + return persistence; + } + + public void setPersistence(PersistenceBean persistenceBean) { + this.persistence = persistenceBean; + } + + public List<PropertyBean> getProperty() { + return property; + } + + public void setProperty(List<PropertyBean> property) { + this.property = property; + } }
http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java index 7eabb45..a9d7441 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java @@ -23,6 +23,8 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class VolumeBean { + public String id; + public String size; public String device; @@ -30,6 +32,10 @@ public class VolumeBean { public boolean removeOnTermination; public String mappingPath; + + public String snapshotId; + + public String volumeId; public String toString () { return " [ Persistence Required : " + ", Size: " + size + ", device: " + http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/CompositeApplicationDefinitionBean.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/CompositeApplicationDefinitionBean.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/CompositeApplicationDefinitionBean.java new file mode 100644 index 0000000..2efc62b --- /dev/null +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/CompositeApplicationDefinitionBean.java @@ -0,0 +1,17 @@ +package org.apache.stratos.rest.endpoint.bean.compositeapplication.definition; + +import javax.xml.bind.annotation.XmlRootElement; + +import java.util.List; + +@XmlRootElement(name = "applicationDefinitionBean") + +public class CompositeApplicationDefinitionBean { + + public String applicationId; + public String alias; + public List<ConfigGroup> components; + public List<ConfigCartridge> cartridges; + + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigCartridge.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigCartridge.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigCartridge.java new file mode 100644 index 0000000..85d57ce --- /dev/null +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigCartridge.java @@ -0,0 +1,8 @@ +package org.apache.stratos.rest.endpoint.bean.compositeapplication.definition; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "cartridge") +public class ConfigCartridge { + public String alias; +} http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigDependencies.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigDependencies.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigDependencies.java new file mode 100644 index 0000000..5efd201 --- /dev/null +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigDependencies.java @@ -0,0 +1,57 @@ +package org.apache.stratos.rest.endpoint.bean.compositeapplication.definition; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "dependencies") +public class ConfigDependencies { + public List<Pair> startup_order = new ArrayList<Pair>(); + public String kill_behavior; + + /* + public String getKill_behavior() { + return kill_behavior; + } + + public void setKill_behavior(String kill_behavior) { + this.kill_behavior = kill_behavior; + } + + public List<Pair> getStartup_order() { + return startup_order; + } + + public void setStartup_order(List<Pair> startup_order) { + this.startup_order = startup_order; + } + */ + + + public static class Pair { + private String key; + private String value; + + private Pair() {} + + public Pair(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + public void setKey(String key) { + this.key = key; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigGroup.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigGroup.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigGroup.java new file mode 100644 index 0000000..bbdd0e3 --- /dev/null +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/compositeapplication/definition/ConfigGroup.java @@ -0,0 +1,35 @@ +package org.apache.stratos.rest.endpoint.bean.compositeapplication.definition; + +import java.util.List; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "components") +public class ConfigGroup { + public String alias; + public List<String> subscribables; + public ConfigDependencies dependencies; + + /* + public String getAlias() { + return alias; + } + public void setAlias(String alias) { + this.alias = alias; + } + public List<String> getSubscribables() { + return subscribables; + } + public void setSubscribables(List<String> subscribables) { + this.subscribables = subscribables; + } + public ConfigDependencies getDependencies() { + return dependencies; + } + public void setDependencies(ConfigDependencies dependencies) { + this.dependencies = dependencies; + } + */ + + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/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 1208967..84ddfbf 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 @@ -19,15 +19,31 @@ package org.apache.stratos.rest.endpoint.bean.util.converter; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.lang.StringUtils; import org.apache.stratos.cloud.controller.stub.pojo.*; +import org.apache.stratos.manager.application.utils.ApplicationUtils; import org.apache.stratos.manager.deploy.service.Service; import org.apache.stratos.messaging.domain.topology.Cluster; +import org.apache.stratos.messaging.domain.topology.CompositeApplication; import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition; import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.PartitionGroup; import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.*; import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy; import org.apache.stratos.rest.endpoint.bean.cartridge.definition.*; +import org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.CompositeApplicationDefinitionBean; +import org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigCartridge; +import org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigDependencies; +import org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigGroup; import org.apache.stratos.rest.endpoint.bean.topology.Member; +import org.apache.stratos.messaging.domain.topology.Cartridge; +import org.apache.stratos.messaging.domain.topology.Composite; +import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication; +import org.apache.stratos.messaging.domain.topology.Dependencies; +import org.apache.stratos.messaging.domain.topology.Group; +import org.apache.stratos.messaging.domain.topology.Scalable; +import org.apache.stratos.messaging.domain.topology.util.CompositeApplicationBuilder; +import org.apache.commons.logging.Log; import java.util.ArrayList; import java.util.Arrays; @@ -145,18 +161,25 @@ public class PojoConverter { return iaasConfigsArray; } - private static Persistence getPersistence(PersistenceBean persistenceBean) { + public static Persistence getPersistence(PersistenceBean persistenceBean) { Persistence persistence = new Persistence(); persistence.setPersistanceRequired(persistenceBean.isRequired); VolumeBean[] volumeBean = new VolumeBean[persistenceBean.volume.size()]; persistenceBean.volume.toArray(volumeBean); - Volume[] volumes = new Volume[persistenceBean.volume.size()]; - for (int i = 0 ; i < volumes.length ; i++) { + Volume[] volumes = new Volume[persistenceBean.volume.size()]; + for (int i = 0 ; i < volumes.length ; i++) { Volume volume = new Volume(); - volume.setSize(Integer.parseInt(volumeBean[i].size)); + volume.setId(volumeBean[i].id); + volume.setVolumeId(volumeBean[i].volumeId); + if(StringUtils.isEmpty(volume.getVolumeId())){ + volume.setSize(Integer.parseInt(volumeBean[i].size)); + } + volume.setDevice(volumeBean[i].device); volume.setRemoveOntermination(volumeBean[i].removeOnTermination); volume.setMappingPath(volumeBean[i].mappingPath); + volume.setSnapshotId(volumeBean[i].snapshotId); + volumes[i] = volume; } persistence.setVolumes(volumes); @@ -164,7 +187,7 @@ public class PojoConverter { } - private static Properties getProperties (List<PropertyBean> propertyBeans) { + public static Properties getProperties(List<PropertyBean> propertyBeans) { //convert to an array PropertyBean [] propertyBeansArray = new PropertyBean[propertyBeans.size()]; @@ -636,4 +659,124 @@ public class PojoConverter { return serviceDefinitionBeans; } + + private static Log log = LogFactory.getLog(PojoConverter.class); + + + public static ConfigCompositeApplication convertToCompositeApplication(CompositeApplicationDefinitionBean appBean) { + ConfigCompositeApplication configApp = new ConfigCompositeApplication(); + + configApp.setAlias(appBean.alias); + configApp.setApplicationId(appBean.applicationId); + + List<org.apache.stratos.messaging.domain.topology.ConfigCartridge> configCartridges = + new ArrayList<org.apache.stratos.messaging.domain.topology.ConfigCartridge>(); + + for (ConfigCartridge beanCartridge : appBean.cartridges ) { + org.apache.stratos.messaging.domain.topology.ConfigCartridge configCartridge = + new org.apache.stratos.messaging.domain.topology.ConfigCartridge(); + configCartridge.setAlias(beanCartridge.alias); + configCartridges.add(configCartridge); + } + configApp.setCartridges(configCartridges); + + // converting groups / components + List<org.apache.stratos.messaging.domain.topology.ConfigGroup> configGroups = + new ArrayList<org.apache.stratos.messaging.domain.topology.ConfigGroup>(); + + for (ConfigGroup beanGroup : appBean.components ) { + org.apache.stratos.messaging.domain.topology.ConfigGroup configGroup = + new org.apache.stratos.messaging.domain.topology.ConfigGroup(); + configGroup.setAlias(beanGroup.alias); + configGroup.setSubscribables(beanGroup.subscribables); + org.apache.stratos.messaging.domain.topology.ConfigDependencies configDep = + new org.apache.stratos.messaging.domain.topology.ConfigDependencies(); + + + // convert dependencies + configDep.setKill_behavior(beanGroup.dependencies.kill_behavior); + List<org.apache.stratos.messaging.domain.topology.ConfigDependencies.Pair> configPairs = + new ArrayList<org.apache.stratos.messaging.domain.topology.ConfigDependencies.Pair>(); + for (ConfigDependencies.Pair beanPair : beanGroup.dependencies.startup_order) { + configPairs.add(new org.apache.stratos.messaging.domain.topology.ConfigDependencies.Pair(beanPair.getKey(), beanPair.getValue())); + } + configDep.setStartup_order(configPairs); + configGroup.setDependencies(configDep); + + configGroups.add(configGroup); + } + configApp.setComponents(configGroups); + + return configApp; + } + + // grouping + public static CompositeApplicationDefinition convertToCompositeApplicationForCC (CompositeApplicationDefinitionBean appBean) { + CompositeApplicationDefinition configApp = new CompositeApplicationDefinition(); + + configApp.setAlias(appBean.alias); + configApp.setApplicationId(appBean.applicationId); + + + + List<org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge> configCartridges = + new ArrayList<org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge>(); + + for (ConfigCartridge beanCartridge : appBean.cartridges ) { + org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge configCartridge = + new org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge(); + configCartridge.setAlias(beanCartridge.alias); + configCartridges.add(configCartridge); + } + org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge [] arrayConfigCartridge = + new org.apache.stratos.cloud.controller.stub.pojo.ConfigCartridge[configCartridges.size()]; + arrayConfigCartridge = configCartridges.toArray(arrayConfigCartridge); + configApp.setCartridges(arrayConfigCartridge); + + // converting groups / components + List<org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup> configGroups = + new ArrayList<org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup>(); + + for (ConfigGroup beanGroup : appBean.components ) { + org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup configGroup = + new org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup(); + configGroup.setAlias(beanGroup.alias); + String [] arraySubscribables = new String[beanGroup.subscribables.size()]; + arraySubscribables = beanGroup.subscribables.toArray(arraySubscribables); + configGroup.setSubscribables(arraySubscribables); + org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencies configDep = + new org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencies(); + + + // convert dependencies + configDep.setKill_behavior(beanGroup.dependencies.kill_behavior); + int i = 0; + org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencyPair[] configPairs = + new org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencyPair[beanGroup.dependencies.startup_order.size()]; + + for (ConfigDependencies.Pair beanPair : beanGroup.dependencies.startup_order) { + //configPairs.add(new org.apache.stratos.messaging.domain.topology.ConfigDependencies.Pair(beanPair.getKey(), beanPair.getValue())); + + org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencyPair pair = new org.apache.stratos.cloud.controller.stub.pojo.ConfigDependencyPair(); + pair.setKey(beanPair.getKey()); + pair.setValue(beanPair.getValue()); + + configPairs[i] = pair; + i++; + } + configDep.setStartup_order(configPairs); + configGroup.setDependencies(configDep); + + configGroups.add(configGroup); + + } + org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup [] configGroupArray = + new org.apache.stratos.cloud.controller.stub.pojo.ConfigGroup[configGroups.size()]; + configGroupArray = configGroups.toArray(configGroupArray); + configApp.setComponents(configGroupArray); + + return configApp; + } + + } http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java index 44b2c26..c88acf1 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java @@ -23,14 +23,19 @@ import org.apache.axis2.context.ConfigurationContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy; +import org.apache.stratos.cloud.controller.stub.pojo.*; import org.apache.stratos.cloud.controller.stub.pojo.CartridgeConfig; import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo; +import org.apache.stratos.cloud.controller.stub.pojo.CompositeApplicationDefinition; import org.apache.stratos.cloud.controller.stub.pojo.Property; import org.apache.stratos.autoscaler.stub.AutoScalerServiceInvalidPartitionExceptionException; import org.apache.stratos.autoscaler.stub.AutoScalerServiceInvalidPolicyExceptionException; import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeDefinitionExceptionException; import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeTypeExceptionException; +import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException; import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidIaasProviderExceptionException; +import org.apache.stratos.manager.application.CompositeApplicationManager; +import org.apache.stratos.manager.application.utils.ApplicationUtils; import org.apache.stratos.manager.client.AutoscalerServiceClient; import org.apache.stratos.manager.client.CloudControllerServiceClient; import org.apache.stratos.manager.deploy.service.Service; @@ -48,6 +53,7 @@ import org.apache.stratos.manager.topology.model.TopologyClusterInformationModel import org.apache.stratos.manager.utils.ApplicationManagementUtil; import org.apache.stratos.manager.utils.CartridgeConstants; import org.apache.stratos.messaging.domain.topology.Cluster; +import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication; import org.apache.stratos.messaging.domain.topology.Member; import org.apache.stratos.messaging.domain.topology.MemberStatus; import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; @@ -58,10 +64,15 @@ import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition; import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.PartitionGroup; import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.AutoscalePolicy; import org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean; +import org.apache.stratos.rest.endpoint.bean.cartridge.definition.PersistenceBean; import org.apache.stratos.rest.endpoint.bean.cartridge.definition.ServiceDefinitionBean; +import org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.CompositeApplicationDefinitionBean; +import org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigDependencies; +import org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigGroup; import org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Payload; import org.apache.stratos.rest.endpoint.bean.util.converter.PojoConverter; import org.apache.stratos.rest.endpoint.exception.RestAPIException; +import org.apache.stratos.messaging.domain.topology.CompositeApplication; import javax.ws.rs.core.Response; @@ -74,6 +85,7 @@ public class ServiceUtils { public static final String SHOULD_DELETE_VOLUME = "volume.delete.on.unsubscription"; public static final String VOLUME_SIZE = "volume.size.gb"; public static final String DEVICE_NAME = "volume.device.name"; + public static final String VOLUME_ID = "volume.id"; private static Log log = LogFactory.getLog(ServiceUtils.class); private static CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager(); @@ -120,6 +132,197 @@ public class ServiceUtils { stratosAdminResponse.setMessage("Successfully deployed cartridge definition with type " + cartridgeDefinitionBean.type); return stratosAdminResponse; } + + // Grouping + /* + static StratosAdminResponse deployApplication(CompositeApplicationDefinitionBean applicationDefinitionBean, ConfigurationContext ctxt, + String userName, String tenantDomain) throws RestAPIException { + + log.info("Starting to deploy a application " + applicationDefinitionBean); + + if (log.isDebugEnabled()) { + log.debug("application data id:" + applicationDefinitionBean.applicationId + " /alias: " + + applicationDefinitionBean.alias); + if (applicationDefinitionBean.components != null) { + log.debug("application config groups size " + applicationDefinitionBean.components.size()); + for (ConfigGroup cfg : applicationDefinitionBean.components) { + log.debug("listing application config groups " + cfg.alias + " /sub " + + cfg.subscribables + " /dep " + cfg.dependencies); + if (cfg.dependencies != null) { + log.debug("listing application group dependencies: kill: " + + cfg.dependencies.kill_behavior + " / startup: " + + cfg.dependencies.startup_order); + if (cfg.dependencies.startup_order != null) { + for (ConfigDependencies.Pair pair : cfg.dependencies.startup_order) { + log.debug("listing dependencies pairs : " + pair.getKey() + " / " + pair.getValue()); + } + } + } + } + } else { + log.debug("no config group in application"); + } + + } + + // convert to json + String applicationId = applicationDefinitionBean.applicationId; + + if (log.isDebugEnabled()) { + log.debug("publishing application created event " + applicationId); + } + + // convert to domain object - move to ojoConverted + ConfigCompositeApplication app = PojoConverter.convertToCompositeApplication(applicationDefinitionBean); + if (log.isDebugEnabled()) { + log.debug("converted application to CompositeApplication " + app); + } + CompositeApplicationManager manager = new CompositeApplicationManager(); + + + try { + manager.deployCompositeApplication(app); + } catch (ADCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + String message = e.getMessage(); + log.error(message, e); + throw new RestAPIException(message, e); + } + + log.info("l [type] " + applicationDefinitionBean); + // deploy to cloud controller + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + + + if (log.isDebugEnabled()) { + log.debug("deployeing composite app in cloud controller"); + } + + ServiceUtils.deployCompositeApplicationDefinition(applicationDefinitionBean, ctxt, userName, tenantDomain); + + if (log.isDebugEnabled()) { + log.debug("done deployeing composite app in cloud controller"); + } + + StratosAdminResponse stratosAdminResponse = new StratosAdminResponse(); + stratosAdminResponse.setMessage("Successfully deployed application definition w" + applicationDefinitionBean); + return stratosAdminResponse; + } */ + + static StratosAdminResponse deployCompositeApplicationDefinition (CompositeApplicationDefinitionBean compositeApplicationDefinition, ConfigurationContext ctxt, + String userName, String tenantDomain) throws RestAPIException { + + log.info("Starting to deploy composite application definition "+ compositeApplicationDefinition); + + CompositeApplicationDefinition appConfig = PojoConverter.convertToCompositeApplicationForCC(compositeApplicationDefinition); + + + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + + if (cloudControllerServiceClient != null) { + // call CC + try { + cloudControllerServiceClient + .deployCompositeApplicationDefinition(appConfig); + } catch (RemoteException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + log.error(e.getMessage(), e); + throw new RestAPIException(e.getMessage(), e); + } catch (CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + //String message = e.getFaultMessage().getInvalidCompositeApplicationDefinitionException().getMessage(); + String message = "CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException"; + log.error(message, e); + throw new RestAPIException(message, e); + } catch (CloudControllerServiceInvalidIaasProviderExceptionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + String message = e.getFaultMessage().getInvalidIaasProviderException().getMessage(); + log.error(message, e); + throw new RestAPIException(message, e); + } + + log.info("Successfully composite application to cloud controller"); + + } + + StratosAdminResponse stratosAdminResponse = new StratosAdminResponse(); + stratosAdminResponse.setMessage("Successfully composite application to cloud controller"); + return stratosAdminResponse; + } + + static StratosAdminResponse unDeployApplication(String configCompositeApplicationAlias, ConfigurationContext ctxt, + String userName, String tenantDomain) throws RestAPIException { + + log.info("Starting to undeploy a composite application definition " + configCompositeApplicationAlias); + + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + + if (cloudControllerServiceClient != null) { + try { + if (log.isDebugEnabled()) { + log.debug("trying to undeploy composite application definition " + configCompositeApplicationAlias); + } + cloudControllerServiceClient.unDeployCompositeApplicationDefinition(configCompositeApplicationAlias); + } catch (RemoteException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + String message = "Remote ExceptionException"; + log.error(message, e); + throw new RestAPIException(message, e); + } catch (CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + String message = "CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException"; + log.error(message, e); + throw new RestAPIException(message, e); + } catch (CloudControllerServiceInvalidIaasProviderExceptionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + String message = "CloudControllerServiceInvalidIaasProviderExceptionException"; + log.error(message, e); + throw new RestAPIException(message, e); + } + } else { + if (log.isDebugEnabled()) { + log.debug("cloud controller client is null while trying to undeploy composite application definition"); + } + } + + log.info("l [type] " + configCompositeApplicationAlias); + + StratosAdminResponse stratosAdminResponse = new StratosAdminResponse(); + stratosAdminResponse.setMessage("Successfully un-deployed application with alias " + configCompositeApplicationAlias); + return stratosAdminResponse; + } + + + static StratosAdminResponse unDeployApplicationOld(String configCompositeApplicationAlias, ConfigurationContext ctxt, + String userName, String tenantDomain) throws RestAPIException { + + log.info("Starting to undeploy a composite application " + configCompositeApplicationAlias); + + CompositeApplicationManager manager = new CompositeApplicationManager(); + + try { + manager.unDeployCompositeApplication(configCompositeApplicationAlias); + } catch (ADCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + String message = e.getMessage(); + log.error(message, e); + throw new RestAPIException(message, e); + } + + log.info("l [type] " + configCompositeApplicationAlias); + + StratosAdminResponse stratosAdminResponse = new StratosAdminResponse(); + stratosAdminResponse.setMessage("Successfully un-deployed application with alias " + configCompositeApplicationAlias); + return stratosAdminResponse; + } @SuppressWarnings("unused") private static DeploymentPolicy[] intersection( @@ -993,14 +1196,30 @@ public class ServiceUtils { subscriptionData.setCommitsEnabled(cartridgeInfoBean.isCommitsEnabled()); subscriptionData.setServiceGroup(cartridgeInfoBean.getServiceGroup()); + + PersistenceBean persistenceBean = cartridgeInfoBean.getPersistence(); + if(persistenceBean != null) { + subscriptionData.setPersistence(PojoConverter.getPersistence(persistenceBean)); + } + if(cartridgeInfoBean.getProperty() != null){ + subscriptionData.setProperties(PojoConverter.getProperties(cartridgeInfoBean.getProperty())); + } + + /* + if (cartridgeInfoBean.getPersistence() != null) { + if (cartridgeInfoBean.isPersistanceRequired()) { // Add persistence related properties to PersistenceContext PersistenceContext persistenceContext = new PersistenceContext(); persistenceContext.setPersistanceRequiredProperty(IS_VOLUME_REQUIRED, String.valueOf(cartridgeInfoBean.isPersistanceRequired())); persistenceContext.setSizeProperty(VOLUME_SIZE, cartridgeInfoBean.getSize()); persistenceContext.setDeleteOnTerminationProperty(SHOULD_DELETE_VOLUME, String.valueOf(cartridgeInfoBean.isRemoveOnTermination())); + if(cartridgeInfoBean.getVolumeId() != null) { + persistenceContext.setVolumeIdProperty(VOLUME_ID, String.valueOf(cartridgeInfoBean.getVolumeId())); + } subscriptionData.setPersistanceCtxt(persistenceContext); } + */ //subscribe return cartridgeSubsciptionManager.subscribeToCartridgeWithProperties(subscriptionData); @@ -1072,6 +1291,7 @@ public class ServiceUtils { subscriptionData.setTenantId(ApplicationManagementUtil.getTenantId(configurationContext)); subscriptionData.setTenantAdminUsername(userName); subscriptionData.setRepositoryType("git"); + //subscriptionData.setPayloadProperties(props); //subscriptionData.setProperties(props); subscriptionData.setPrivateRepository(false); @@ -1082,6 +1302,7 @@ public class ServiceUtils { cartridgeSubscription.getPayloadData().add("LOAD_BALANCED_SERVICE_TYPE", loadBalancedCartridgeType); Properties lbProperties = new Properties(); + lbProperties.setPayloadProperties(props); lbProperties.setProperties(props); cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription, lbProperties); http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java index 7b744a5..a836fb7 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java @@ -39,6 +39,7 @@ import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.Autosca import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy; import org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean; import org.apache.stratos.rest.endpoint.bean.cartridge.definition.ServiceDefinitionBean; +import org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.CompositeApplicationDefinitionBean; import org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Payload; import org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Repository; import org.apache.stratos.rest.endpoint.bean.topology.Cluster; @@ -105,6 +106,75 @@ public class StratosAdmin extends AbstractAdmin { return Response.ok().header("WWW-Authenticate", "Basic").type(MediaType.APPLICATION_JSON). entity(Utils.buildAuthenticationSuccessMessage(sessionId)).build(); } + + @POST + @Path("/application/definition/") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + @SuperTenantService(true) + // Grouping + public StratosAdminResponse deployApplicationDefinition(CompositeApplicationDefinitionBean applicationDefinitionBean) + throws RestAPIException { + + /*return ServiceUtils.deployApplication(applicationDefinitionBean, getConfigContext(), getUsername(), + getTenantDomain()); + */ + return ServiceUtils.deployCompositeApplicationDefinition(applicationDefinitionBean, getConfigContext(), getUsername(), + getTenantDomain()); + + } + + @POST + @Path("/application/definition/undeploy") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + @SuperTenantService(true) + // Grouping + public StratosAdminResponse unDeployApplicationDefinition(String alias) + throws RestAPIException { + + return ServiceUtils.unDeployApplication(alias, getConfigContext(), getUsername(), + getTenantDomain()); + + } + + + + @DELETE + @Path("/application/definition/{applicationAlias}") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + @SuperTenantService(true) + // Grouping + public StratosAdminResponse unDeployApplicationDefinitionX(@PathParam("applicationAlias")String configCompositeApplicationAlias) + throws RestAPIException { + + return ServiceUtils.unDeployApplication(configCompositeApplicationAlias, getConfigContext(), getUsername(), + getTenantDomain()); + + } + + + + /* + * Grouping --- fix API, use this instead of POST to remove application !!!! + + @DELETE + @Path("/cartridge/definition/{cartridgeType}") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + @SuperTenantService(true) + public StratosAdminResponse unDeployCartridgeDefinition (@PathParam("cartridgeType") String cartridgeType) throws RestAPIException { + + return ServiceUtils.undeployCartridge(cartridgeType); + } + nnnnnn + */ + @POST @Path("/cartridge/definition/") http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh ---------------------------------------------------------------------- diff --git a/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh b/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh index db86d7d..317da88 100644 --- a/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh +++ b/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh @@ -44,7 +44,8 @@ properties="-Dmb.ip=MB-IP -Dmonitoring.server.port=MONITORING-SERVER-PORT -Dmonitoring.server.secure.port=MONITORING-SERVER-SECURE-PORT -Dmonitoring.server.admin.username=MONITORING-SERVER-ADMIN-USERNAME - -Dmonitoring.server.admin.password=MONITORING-SERVER-ADMIN-PASSWORD" + -Dmonitoring.server.admin.password=MONITORING-SERVER-ADMIN-PASSWORD + -DAPP_PATH=APP-PATH" # Uncomment below line to enable remote debugging #debug="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template ---------------------------------------------------------------------- diff --git a/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template b/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template index c6b062a..45b8d7a 100644 --- a/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template +++ b/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template @@ -20,6 +20,6 @@ # Please use loadbalancer.conf for updating mb-ip, mb-port and templates/jndi.properties.template # file for updating other configurations. # -connectionfactoryName=topicConnectionfactory -connectionfactory.topicConnectionfactory=amqp://admin:admin@carbon/carbon?brokerlist='tcp://$mb_ip:$mb_port' -java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory +connectionfactoryName=TopicConnectionFactory +connectionfactory.topicConnectionfactory=tcp://$mb_ip:$mb_port +java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh ---------------------------------------------------------------------- diff --git a/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh b/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh index 48f3ceb..63e303f 100755 --- a/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh +++ b/products/cartridge-agent/modules/distribution/src/main/extensions/mount_volumes.sh @@ -28,8 +28,8 @@ log=/var/log/apache-stratos/cartridge-agent-extensions.log echo -e "Starting mounting volumes" 2>&1 | tee -a $log # $1 is passed from Cartridge Agent code. -echo -e "launh param file location $1" | tee -a $log -#source /opt/apache-stratos-cartridge-agent/launch.params +echo -e "launch param file location $1" | tee -a $log + PERSISTENCE_MAPPING=$1 echo -e "Persistance mappings : $PERSISTENCE_MAPPING" 2>&1 | tee -a $log @@ -37,8 +37,29 @@ mount_volume(){ device=$1; mount_point=$2; - echo "device $device" - echo "point $mount_point" + echo -e "device $device" | tee -a $log + echo -e "mount point $mount_point"| tee -a $log + + + if [ "$mount_point" = "null" ] + then + echo -e "[ERROR] Mount point can not be null" | tee -a $log + return + fi + + if [ "$device" = "null" ] + then + echo -e "[ERROR] Device can not be null" | tee -a $log + return + fi + + device_exist=`sudo fdisk -l $device`; + if [ "$device_exist" = "" ] + then + echo -e "[ERROR] Device $device does not exist in this instance." | tee -a $log + return + fi + # check if the volume has a file system output=`sudo file -s $device`; echo $output | tee -a $log @@ -59,15 +80,15 @@ mount_volume(){ if [ ! -d "$mount_point" ] then echo "creating the mount point directory $mount_point since it does not exist." | tee -a $log - sudo mkdir $mount_point + sudo mkdir -p $mount_point fi #mounting the device if it is not already mounted if [ ! "$device_mounted" = "" ] then - echo -e "Device $device is already mounted." | tee -a $log + echo -e "[WARNING] Device $device is already mounted." | tee -a $log else - sudo mount $device $mount_point + sudo mount $device $mount_point 2>&1 | tee -a $log fi } @@ -75,12 +96,65 @@ mount_volume(){ IFS='|' read -ra ADDR <<< "${PERSISTENCE_MAPPING}" echo "${ADDR[@]}" | tee -a $log +echo -e "\n Volumes before mounting...." | tee -a $log +output=`/bin/lsblk` +echo -e "\n$output\n" | tee -a $log +output=`/sbin/blkid` +echo -e "\n$output\n" | tee -a $log + +totalcount=0 for i in "${!ADDR[@]}"; do - # expected PERSISTANCE_MAPPING format is device1|mountPoint1|device2|mountpoint2... - # so that even indexes are devices and odd indexes are mount points.. - if (( $i % 2 == 0 )) + # expected PERSISTANCE_MAPPING format is device1|volumeID1|mountPoint1|device2|volumeID2|mountpoint2... + if (( $i % 3 == 0 )) then - mount_volume ${ADDR[$i]} ${ADDR[$i + 1]} + devicelist[$totalcount]=${ADDR[$i]} + mountpathlist[$totalcount]=${ADDR[$i + 2]} + totalcount=$((totalcount+1)) + lastdevice=${ADDR[$i]} fi done + +device_exist=`sudo fdisk -l $lastdevice`; +if [ "$device_exist" = "" ] +then +# Last device doesn't exist, which means devices are not attached as per the order given in the payload +# So start mounting from the last available device and come down + devlist=`sudo lsblk -n | cut -f 1 -d " "` + devcount=`echo ${devlist} | awk '{print NF}'` + totalcount=$((totalcount-1)) + counter=0 + for ((i=${devcount}-1; totalcount>=0; i--)); do + devnum=`expr ${devcount} - ${counter}` + currdevice=`echo ${devlist} | cut -d " " -f ${devnum}` + fileout=`sudo file -s /dev/${currdevice}` + if [[ $fileout == *ROM* ]] || [[ $fileout == *boot* ]] || [[ $fileout == *cloud* ]] || [[ $fileout == *not-regular* ]] || [[ $fileout == *empty* ]] || [[ $fileout == *swap* ]] + then + # Ignore special files as checked above... + counter=`expr ${counter} + 1` + continue + fi + mountpath=${mountpathlist[$totalcount]} + totalcount=$((totalcount-1)) + echo "device is $currdevice" + echo "mount path is $mountpath" + counter=`expr ${counter} + 1` + mount_volume "/dev/${currdevice}" ${mountpath} + done +else +# Last device exists, which means the volumes are created or few might have been skipped in the first part since the device is already present +# Mount of rest of the volumes will be fine and contine + for i in "${!ADDR[@]}"; do + # expected PERSISTANCE_MAPPING format is device1|volumeID1|mountPoint1|device2|volumeID2|mountpoint2... + if (( $i % 3 == 0 )) + then + mount_volume ${ADDR[$i]} ${ADDR[$i + 2]} + fi + done +fi + +echo -e "\n Volumes after mounting...." | tee -a $log +output=`/bin/lsblk` +echo -e "\n$output\n" | tee -a $log +output=`/sbin/blkid` +echo -e "\n$output\n" | tee -a $log http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/stratos/modules/distribution/src/assembly/bin.xml ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/assembly/bin.xml b/products/stratos/modules/distribution/src/assembly/bin.xml index 6e1d991..0cefc0c 100755 --- a/products/stratos/modules/distribution/src/assembly/bin.xml +++ b/products/stratos/modules/distribution/src/assembly/bin.xml @@ -644,6 +644,12 @@ <filtered>true</filtered> <fileMode>755</fileMode> </file> + <file> + <source>src/main/conf/terminatedependency.drl</source> + <outputDirectory>${pom.artifactId}-${pom.version}/repository/conf</outputDirectory> + <filtered>true</filtered> + <fileMode>755</fileMode> + </file> <!-- autoscaler --> <file> <source>${project.basedir}/INSTALL.txt</source> http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/stratos/modules/distribution/src/main/conf/mincheck.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/mincheck.drl b/products/stratos/modules/distribution/src/main/conf/mincheck.drl index b1c0f7c..b29e991 100755 --- a/products/stratos/modules/distribution/src/main/conf/mincheck.drl +++ b/products/stratos/modules/distribution/src/main/conf/mincheck.drl @@ -48,6 +48,10 @@ global org.apache.stratos.messaging.domain.topology.Topology $topology; global java.util.Map partitionCtxts; global java.lang.String clusterId; global java.lang.String lbRef; +global java.lang.String serviceId; + +global org.apache.stratos.autoscaler.policy.model.AutoscalePolicy autoscalePolicy; + rule "Minimum Rule" dialect "mvel" @@ -57,6 +61,9 @@ dialect "mvel" eval(log.debug("[min-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " Non terminated member count: " + $ctxt.getNonTerminatedMemberCount())) eval(log.debug("[min-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " Minimum member count: " + $ctxt.getMinimumMemberCount())) eval($ctxt.getNonTerminatedMemberCount() < $ctxt.getMinimumMemberCount()) + eval(log.debug("Grouping ... checking startup dependencies for " + clusterId)) + eval($ctxt.checkStartupDependencies(serviceId, clusterId)) + eval(log.debug("startup dependencies successfully checked for" + clusterId)) then $delegator.delegateSpawn($ctxt, clusterId, lbRef); http://git-wip-us.apache.org/repos/asf/stratos/blob/67e868eb/products/stratos/modules/distribution/src/main/conf/terminatedependency.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/terminatedependency.drl b/products/stratos/modules/distribution/src/main/conf/terminatedependency.drl new file mode 100644 index 0000000..9ea243c --- /dev/null +++ b/products/stratos/modules/distribution/src/main/conf/terminatedependency.drl @@ -0,0 +1,52 @@ +/* + * 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.rule; + +import org.apache.stratos.messaging.domain.topology.Cluster; +import org.apache.stratos.autoscaler.PartitionContext; + +global org.apache.stratos.autoscaler.rule.RuleLog log; +global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator; +global java.util.Map partitionCtxts; +global java.lang.String clusterId; +global java.lang.String lbRef; +global java.lang.String serviceId; + +global org.apache.stratos.autoscaler.policy.model.AutoscalePolicy autoscalePolicy; + +rule "Terminate Dependency Rule" + +dialect "mvel" + when + $ctxt : PartitionContext () + eval(log.debug("Running terminate dependency rule: [partition] " + $ctxt.getPartitionId() + " [network-partition] " + $ctxt.getNetworkPartitionId())) + eval(log.debug("[terminate dependency] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +" Member count: " + $ctxt.getMemberStatsContexts().size())) + eval(log.debug("Grouping ... in terminatedependency rule terminating all members " + $ctxt.getAllMemberForTerminationCount())) + eval(!$ctxt.checkKillDependencies(serviceId, clusterId)) + eval(log.debug("[terminate dependency] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " successfully terminated members")) + + eval(log.debug("Grouping:terminatedependency:terminating all")) + + then + $delegator.delegateTerminateAll(clusterId); +end + + +
