You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by me...@apache.org on 2014/06/26 22:31:50 UTC
[2/7] initial grouping code to develop cartridge grouping feature
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
+
+
+