http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SubscribeCommand.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SubscribeCommand.java index 6232893,e8eca38..dab2685 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SubscribeCommand.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SubscribeCommand.java @@@ -33,7 -34,7 +34,11 @@@ import org.apache.stratos.cli.StratosCo import org.apache.stratos.cli.exception.CommandException; import org.apache.stratos.cli.utils.CliConstants; ++<<<<<<< HEAD +import static org.apache.stratos.cli.utils.CommandLineUtils.mergeOptionArrays; ++======= + import java.util.ArrayList; ++>>>>>>> master public class SubscribeCommand implements Command<StratosCommandContext> { @@@ -86,93 -87,88 +91,130 @@@ persistance.setArgName("persistance-volume"); options.addOption(persistance); - Option urlOption = new Option(CliConstants.REPO_URL_OPTION, CliConstants.REPO_URL_LONG_OPTION, true, - "GIT repository URL"); - urlOption.setArgName("url"); - options.addOption(urlOption); - - //options.addOption(CliConstants.PRIVATE_REPO_OPTION, CliConstants.PRIVATE_REPO_LONG_OPTION, false, - // "Private repository"); - - Option usernameOption = new Option(CliConstants.USERNAME_OPTION, CliConstants.USERNAME_LONG_OPTION, true, - "GIT repository username"); - usernameOption.setArgName("username"); - options.addOption(usernameOption); - - Option passwordOption = new Option(CliConstants.PASSWORD_OPTION, CliConstants.PASSWORD_LONG_OPTION, true, - "GIT repository password"); - passwordOption.setArgName("password"); - passwordOption.setOptionalArg(true); - options.addOption(passwordOption); - - Option upstreamCommitsEnabledOption = new Option(CliConstants.ENABLE_COMMITS_OPTION, CliConstants.ENABLE_COMMITS_LONG_OPTION, true, - "Enable Git commit upstream"); - upstreamCommitsEnabledOption.setArgName("enable-commits"); - upstreamCommitsEnabledOption.setOptionalArg(true); - options.addOption(upstreamCommitsEnabledOption); + Option urlOption = new Option(CliConstants.REPO_URL_OPTION, CliConstants.REPO_URL_LONG_OPTION, true, + "GIT repository URL"); + urlOption.setArgName("url"); + options.addOption(urlOption); - return options; - } + //options.addOption(CliConstants.PRIVATE_REPO_OPTION, CliConstants.PRIVATE_REPO_LONG_OPTION, false, + // "Private repository"); - public String getName() { - return CliConstants.SUBSCRIBE_ACTION; - } + Option usernameOption = new Option(CliConstants.USERNAME_OPTION, CliConstants.USERNAME_LONG_OPTION, true, + "GIT repository username"); + usernameOption.setArgName("username"); + options.addOption(usernameOption); - public String getDescription() { - return "Subscribe to a cartridge"; - } + Option passwordOption = new Option(CliConstants.PASSWORD_OPTION, CliConstants.PASSWORD_LONG_OPTION, true, + "GIT repository password"); + passwordOption.setArgName("password"); + passwordOption.setOptionalArg(true); + options.addOption(passwordOption); - public String getArgumentSyntax() { - return "[Cartridge type] [Cartridge alias]"; - } + Option upstreamCommitsEnabledOption = new Option(CliConstants.ENABLE_COMMITS_OPTION, CliConstants.ENABLE_COMMITS_LONG_OPTION, true, + "Enable Git commit upstream"); + upstreamCommitsEnabledOption.setArgName("enable-commits"); + upstreamCommitsEnabledOption.setOptionalArg(true); + options.addOption(upstreamCommitsEnabledOption); ++<<<<<<< HEAD + public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException { + if (logger.isDebugEnabled()) { + logger.debug("Executing {} command...", getName()); + } + if (args != null && args.length > 0) { + String[] remainingArgs = null; + String type = null; + String alias = null; + String policy = null; ++======= + return options; + } + + public String getName() { + return CliConstants.SUBSCRIBE_ACTION; + } + + public String getDescription() { + return "Subscribe to a cartridge"; + } + + public String getArgumentSyntax() { + return "[Cartridge type] [Cartridge alias]"; + } + + public int execute(StratosCommandContext context, String[] args) throws CommandException { + if (logger.isDebugEnabled()) { + logger.debug("Executing {} command...", getName()); + } + if (args != null && args.length > 0) { + String[] remainingArgs = null; + String type = null; + String alias = null; + String policy = null; ++>>>>>>> master String asPolicy = null; String depPolicy = null; - String repoURL = null, username = "", password = ""; + String repoURL = null, username = "", password = ""; String size = null; String volumeID = null; boolean removeOnTermination = false; - boolean privateRepo = false; + boolean privateRepo = false; boolean persistanceMapping = false; boolean commitsEnabled = false; + boolean isMultiTenant = false; + + final CommandLineParser parser = new GnuParser(); + CommandLine commandLine; + try { + commandLine = parser.parse(options, args); + remainingArgs = commandLine.getArgs(); + if (remainingArgs != null && remainingArgs.length == 2) { + // Get type + type = remainingArgs[0]; + alias = remainingArgs[1]; + } else { + context.getStratosApplication().printUsage(getName()); + return CliConstants.BAD_ARGS_CODE; + } ++<<<<<<< HEAD + final CommandLineParser parser = new GnuParser(); + CommandLine commandLine; + try { + commandLine = parser.parse(options, args); + remainingArgs = commandLine.getArgs(); + //merge newly discovered options with previously discovered ones. + Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions()); + if (remainingArgs != null && remainingArgs.length == 2) { + // Get type + type = remainingArgs[0]; + alias = remainingArgs[1]; + } else { + context.getStratosApplication().printUsage(getName()); + return CliConstants.BAD_ARGS_CODE; + } + + if (logger.isDebugEnabled()) { + logger.debug("Subscribing to {} cartridge with alias {}", type, alias); + } + + //if (opts.hasOption(CliConstants.POLICY_OPTION)) { + // if (logger.isTraceEnabled()) { + // logger.trace("Policy option is passed"); + // } + // policy = opts.getOptionValue(CliConstants.POLICY_OPTION); + //} + if (opts.hasOption(CliConstants.AUTOSCALING_POLICY_OPTION)) { ++======= + // This will check the subscribe cartridge type is multi tenant or single tenant + isMultiTenant = RestCommandLineService.getInstance().isMultiTenant(type); + + if (logger.isDebugEnabled()) { + logger.debug("Subscribing to {} cartridge with alias {}", type, alias); + } + if (commandLine.hasOption(CliConstants.AUTOSCALING_POLICY_OPTION)) { ++>>>>>>> master if (logger.isTraceEnabled()) { logger.trace("Autoscaling policy option is passed"); } @@@ -182,71 -178,92 +224,141 @@@ if (logger.isTraceEnabled()) { logger.trace("Deployment policy option is passed"); } - depPolicy = commandLine.getOptionValue(CliConstants.DEPLOYMENT_POLICY_OPTION); + depPolicy = opts.getOption(CliConstants.DEPLOYMENT_POLICY_OPTION).getValue(); } ++<<<<<<< HEAD + if (opts.hasOption(CliConstants.REPO_URL_OPTION)) { + if (logger.isTraceEnabled()) { + logger.trace("RepoURL option is passed"); + } + repoURL = opts.getOption(CliConstants.REPO_URL_OPTION).getValue(); + } + //if (opts.hasOption(CliConstants.PRIVATE_REPO_OPTION)) { + // if (logger.isTraceEnabled()) { + // logger.trace("privateRepo option is passed"); + // } + // privateRepo = true; + //} + if (opts.hasOption(CliConstants.VOLUME_SIZE_OPTION)) { ++======= + if (commandLine.hasOption(CliConstants.REPO_URL_OPTION)) { + if (logger.isTraceEnabled()) { + logger.trace("RepoURL option is passed"); + } + repoURL = commandLine.getOptionValue(CliConstants.REPO_URL_OPTION); + } + if (commandLine.hasOption(CliConstants.VOLUME_SIZE_OPTION)) { ++>>>>>>> master if (logger.isTraceEnabled()) { logger.trace("Volume size option is passed"); } - size = commandLine.getOptionValue(CliConstants.VOLUME_SIZE_OPTION); + size = opts.getOption(CliConstants.VOLUME_SIZE_OPTION).getValue(); } ++<<<<<<< HEAD + if (opts.hasOption(CliConstants.VOLUME_ID_OPTION)) { ++======= + if (commandLine.hasOption(CliConstants.VOLUME_ID_OPTION)) { ++>>>>>>> master if (logger.isTraceEnabled()) { logger.trace("Volume id option is passed"); } ++<<<<<<< HEAD + volumeID = opts.getOption(CliConstants.VOLUME_ID_OPTION).getValue(); + } + + + if (opts.hasOption(CliConstants.REMOVE_ON_TERMINATION_OPTION)) { ++======= + volumeID = commandLine.getOptionValue(CliConstants.VOLUME_ID_OPTION); + } + + + if (commandLine.hasOption(CliConstants.REMOVE_ON_TERMINATION_OPTION)) { ++>>>>>>> master if (logger.isTraceEnabled()) { logger.trace("Remove on termination option is passed"); } - removeOnTermination = true; + + String optionValue = commandLine.getOptionValue(CliConstants.REMOVE_ON_TERMINATION_OPTION); + if (optionValue.equals("true")) { + removeOnTermination = true; + } else if (optionValue.equals("false")) { + removeOnTermination = false; + } else { + if (logger.isTraceEnabled()) { + logger.trace("Invalid remove on termination option value"); + } + System.out.println("Invalid remove on termination option value."); + context.getStratosApplication().printUsage(getName()); + return CliConstants.BAD_ARGS_CODE; + } } - if (commandLine.hasOption(CliConstants.PERSISTANCE_VOLUME_OPTION)) { + if (opts.hasOption(CliConstants.PERSISTANCE_VOLUME_OPTION)) { if (logger.isTraceEnabled()) { logger.trace("Persistance volume option is passed"); } - persistanceMapping = true; + + String optionValue = commandLine.getOptionValue(CliConstants.PERSISTANCE_VOLUME_OPTION); + if (optionValue.equals("true")) { + persistanceMapping = true; + } else if (optionValue.equals("false")) { + persistanceMapping = false; + } else { + if (logger.isTraceEnabled()) { + logger.trace("Invalid persistance mapping option value"); + } + System.out.println("Invalid persistance mapping option value."); + context.getStratosApplication().printUsage(getName()); + return CliConstants.BAD_ARGS_CODE; + } + + } + if (commandLine.hasOption(CliConstants.USERNAME_OPTION)) { + if (logger.isTraceEnabled()) { + logger.trace("Username option is passed"); + } + username = commandLine.getOptionValue(CliConstants.USERNAME_OPTION); + } + if (commandLine.hasOption(CliConstants.PASSWORD_OPTION)) { + if (logger.isTraceEnabled()) { + logger.trace("Password option is passed"); + } + password = commandLine.getOptionValue(CliConstants.PASSWORD_OPTION); + } + if (commandLine.hasOption(CliConstants.ENABLE_COMMITS_OPTION)) { + if (logger.isTraceEnabled()) { + logger.trace("Upstream git commits are enabled"); + } + commitsEnabled = true; } ++<<<<<<< HEAD + if (opts.hasOption(CliConstants.USERNAME_OPTION)) { + if (logger.isTraceEnabled()) { + logger.trace("Username option is passed"); + } + username = opts.getOption(CliConstants.USERNAME_OPTION).getValue(); + } + if (opts.hasOption(CliConstants.PASSWORD_OPTION)) { + if (logger.isTraceEnabled()) { + logger.trace("Password option is passed"); + } + password = opts.getOption(CliConstants.PASSWORD_OPTION).getValue(); + } + if (opts.hasOption(CliConstants.ENABLE_COMMITS_OPTION)) { + if (logger.isTraceEnabled()) { + logger.trace("Upstream git commits are enabled"); + } + commitsEnabled = true; + } ++======= ++>>>>>>> master - if (depPolicy == null) { + if ( ! isMultiTenant && depPolicy == null) { System.out.println("Deployment policy is required."); context.getStratosApplication().printUsage(getName()); return CliConstants.BAD_ARGS_CODE;
http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java index b4b31d5,2c0b27c..a9cf0dc --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java @@@ -586,7 -580,6 +583,10 @@@ public class OpenstackNovaIaas extends ComputeServiceContext context = iaasInfo.getComputeService().getContext();; RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); VolumeApi volumeApi = nova.getApi().getVolumeExtensionForZone(region).get(); ++<<<<<<< HEAD + VolumeAttachmentApi volumeAttachmentApi = nova.getApi().getVolumeAttachmentExtensionForZone(region).get(); ++======= ++>>>>>>> master Volume.Status volumeStatus = this.getVolumeStatus(volumeApi, volumeId); while(volumeStatus != expectedStatus){ http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java index e5cc05a,8f9d188..bb7dce7 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java @@@ -111,53 -107,10 +111,56 @@@ public class CloudControllerServiceImp } } + // restore compostie application + List<ConfigCompositeApplication> apps = restoreConfigCompositeApplication(); + if (apps == null) { + this.dataHolder.setConfigCompositeApplication(new ArrayList<ConfigCompositeApplication>()); + + } } + + public void deployCompositeApplicationDefinition(CompositeApplicationDefinition compositeApplicationDefinition) throws InvalidCompositeApplicationDefinitionException, + InvalidIaasProviderException { + + String alias = compositeApplicationDefinition.getAlias(); + if(log.isDebugEnabled()){ + log.debug("composite application alias : " + alias); + } + + ConfigCompositeApplication messConfigApp = TopologyBuilder.convertCompositeApplication(compositeApplicationDefinition); + String key = "compositeApplicationAlias"; //app.getAlias() + + + List<ConfigCompositeApplication> data = new ArrayList<ConfigCompositeApplication>(); + data.add(messConfigApp); + dataHolder.setConfigCompositeApplication(data); + + // persist + persist(); + + if(log.isDebugEnabled()){ + log.debug("deploying composite application in cloud controller: " + compositeApplicationDefinition); + } + + TopologyBuilder.handleCompositeApplicationCreated(messConfigApp); + } + + public void unDeployCompositeApplicationDefinition(String appAlias) throws InvalidCompositeApplicationDefinitionException, + InvalidIaasProviderException { ++<<<<<<< HEAD + if(log.isDebugEnabled()){ + log.debug("undeploying composite application in cloud controller, removing all composite apps "); + dataHolder.removeAllConfigCompositeApplications(); + persist(); + TopologyBuilder.handleCompositeApplicationRemoved(appAlias); + } + } + public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) throws InvalidCartridgeDefinitionException, InvalidIaasProviderException { ++======= ++>>>>>>> master if (cartridgeConfig == null) { String msg = "Invalid Cartridge Definition: Definition is null."; log.error(msg); @@@ -417,10 -415,11 +465,18 @@@ log.fatal(msg); throw new IllegalStateException(msg); } ++<<<<<<< HEAD + memberContext.setNodeId(nodeId); + if(log.isDebugEnabled()) { + log.debug("Node id was set. "+memberContext.toString()); + } ++======= + + memberContext.setNodeId(nodeId); + if (log.isDebugEnabled()) { + log.debug("Node id was set. " + memberContext.toString()); + } ++>>>>>>> master // attach volumes if (ctxt.isVolumeRequired()) { http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java index 96485a4,a8ed8de..2af179a --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java @@@ -22,12 -22,7 +22,16 @@@ import org.apache.commons.logging.Log import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException; import org.apache.stratos.cloud.controller.exception.InvalidMemberException; ++<<<<<<< HEAD +import org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl; +import org.apache.stratos.cloud.controller.pojo.Cartridge; +import org.apache.stratos.cloud.controller.pojo.ClusterContext; +import org.apache.stratos.cloud.controller.pojo.CompositeApplicationDefinition; +import org.apache.stratos.cloud.controller.pojo.PortMapping; +import org.apache.stratos.cloud.controller.pojo.Registrant; ++======= + import org.apache.stratos.cloud.controller.pojo.*; ++>>>>>>> master import org.apache.stratos.cloud.controller.publisher.CartridgeInstanceDataPublisher; import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; import org.apache.stratos.cloud.controller.util.CloudControllerUtil; @@@ -40,10 -34,10 +44,15 @@@ import org.apache.stratos.messaging.eve import org.apache.stratos.messaging.event.topology.MemberActivatedEvent; import org.apache.stratos.messaging.event.topology.MemberMaintenanceModeEvent; import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent; ++<<<<<<< HEAD +import org.apache.stratos.messaging.util.Util; ++======= + import org.apache.stratos.messaging.util.Constants; ++>>>>>>> master +import java.util.ArrayList; import java.util.List; + import java.util.Map; import java.util.Properties; /** @@@ -549,7 -479,7 +607,11 @@@ public class TopologyBuilder } finally { TopologyManager.releaseWriteLock(); } ++<<<<<<< HEAD + TopologyEventPublisher.sendMemberTerminatedEvent(serviceName, clusterId, networkPartitionId, partitionId, memberId, groupAlias); ++======= + TopologyEventPublisher.sendMemberTerminatedEvent(serviceName, clusterId, networkPartitionId, partitionId, memberId, properties); ++>>>>>>> master } public static void handleMemberSuspended() { http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java index d4489b4,fe86198..6151b83 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java @@@ -21,14 -21,12 +21,20 @@@ import org.apache.commons.logging.Log import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.pojo.Cartridge; import org.apache.stratos.cloud.controller.pojo.ClusterContext; + import org.apache.stratos.cloud.controller.pojo.MemberContext; import org.apache.stratos.cloud.controller.pojo.PortMapping; + import org.apache.stratos.cloud.controller.util.CloudControllerUtil; import org.apache.stratos.messaging.broker.publish.EventPublisher; import org.apache.stratos.messaging.broker.publish.EventPublisherPool; ++<<<<<<< HEAD +import org.apache.stratos.messaging.domain.topology.Cluster; +import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication; +import org.apache.stratos.messaging.domain.topology.Port; +import org.apache.stratos.messaging.domain.topology.ServiceType; +import org.apache.stratos.messaging.domain.topology.Topology; ++======= + import org.apache.stratos.messaging.domain.topology.*; ++>>>>>>> master import org.apache.stratos.messaging.event.Event; import org.apache.stratos.messaging.event.instance.status.InstanceStartedEvent; import org.apache.stratos.messaging.event.topology.*; @@@ -161,15 -158,13 +181,22 @@@ public class TopologyEventPublisher } ++<<<<<<< HEAD + public static void sendMemberTerminatedEvent(String serviceName, String clusterId, String networkPartitionId, String partitionId, String memberId, String groupId) { + MemberTerminatedEvent memberTerminatedEvent = new MemberTerminatedEvent(serviceName, clusterId, networkPartitionId, partitionId, memberId); + // grouping + memberTerminatedEvent.setGroupId(groupId); ++======= + public static void sendMemberTerminatedEvent(String serviceName, String clusterId, String networkPartitionId, + String partitionId, String memberId, Properties properties) { + MemberTerminatedEvent memberTerminatedEvent = new MemberTerminatedEvent(serviceName, clusterId, networkPartitionId, partitionId, memberId); + memberTerminatedEvent.setProperties(properties); ++>>>>>>> master if(log.isInfoEnabled()) { - log.info(String.format("Publishing member terminated event: [service] %s [cluster] %s [network-partition] %s [partition] %s [member] %s", serviceName, clusterId, networkPartitionId, partitionId, memberId)); + log.info(String.format("Publishing member terminated event: [service] %s [cluster] %s [network-partition] %s [partition] %s [member] %s [groupId] %s", serviceName, clusterId, networkPartitionId, + partitionId, memberId, groupId)); } + publishEvent(memberTerminatedEvent); } http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainSubscriptionDoesNotExist.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainSubscriptionDoesNotExist.java index fbef4a8,b4d09da..69ab506 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainSubscriptionDoesNotExist.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainSubscriptionDoesNotExist.java @@@ -20,29 -20,29 +20,57 @@@ package org.apache.stratos.manager.exce public class DomainSubscriptionDoesNotExist extends Exception { ++<<<<<<< HEAD + private static final long serialVersionUID = 1L; + + private final String message; + + private final String subscriptionDomain; + + public DomainSubscriptionDoesNotExist(String message, String subscriptionDomain, Throwable cause) { + super(message, cause); + this.message = message; + this.subscriptionDomain = subscriptionDomain; + } + + public DomainSubscriptionDoesNotExist(String message, String subscriptionDomain) { + super(message); + this.message = message; + this.subscriptionDomain = subscriptionDomain; + } + + public String getMessage() { + return message; + } + + public String getSubscriptionDomain() { + return subscriptionDomain; + } ++======= + private static final long serialVersionUID = 1L; + + private final String message; + + private final String subscriptionDomain; + + public DomainSubscriptionDoesNotExist(String message, String subscriptionDomain, Throwable cause) { + super(message, cause); + this.message = message; + this.subscriptionDomain = subscriptionDomain; + } + + public DomainSubscriptionDoesNotExist(String message, String subscriptionDomain) { + super(message); + this.message = message; + this.subscriptionDomain = subscriptionDomain; + } + + public String getMessage() { + return message; + } + + public String getSubscriptionDomain() { + return subscriptionDomain; + } ++>>>>>>> master } http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java index 989fed4,d6f9f76..391aec6 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java @@@ -34,7 -35,10 +35,14 @@@ import org.apache.stratos.manager.lb.ca import org.apache.stratos.manager.repository.Repository; import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager; import org.apache.stratos.manager.subscriber.Subscriber; ++<<<<<<< HEAD +import org.apache.stratos.manager.subscription.*; ++======= + import org.apache.stratos.manager.subscription.CartridgeSubscription; + import org.apache.stratos.manager.subscription.PersistenceContext; + import org.apache.stratos.manager.subscription.SubscriptionData; + import org.apache.stratos.manager.subscription.SubscriptionDomain; ++>>>>>>> master import org.apache.stratos.manager.subscription.factory.CartridgeSubscriptionFactory; import org.apache.stratos.manager.subscription.tenancy.SubscriptionMultiTenantBehaviour; import org.apache.stratos.manager.subscription.tenancy.SubscriptionSingleTenantBehaviour; @@@ -427,16 -319,16 +434,29 @@@ public class CartridgeSubscriptionManag }else { // Generate and set the key subscriptionKey = CartridgeSubscriptionUtils.generateSubscriptionKey(); ++<<<<<<< HEAD + } + + cartridgeSubscription.setSubscriptionKey(subscriptionKey); + + if(log.isDebugEnabled()) { + log.debug("Repository with url: " + subscriptionData.getRepositoryURL() + + " username: " + subscriptionData.getRepositoryUsername() + + " Type: " + subscriptionData.getRepositoryType()); + } + ++======= + } + + cartridgeSubscription.setSubscriptionKey(subscriptionKey); + + if(log.isDebugEnabled()) { + log.debug("Repository with url: " + subscriptionData.getRepositoryURL() + + " username: " + subscriptionData.getRepositoryUsername() + + " Type: " + subscriptionData.getRepositoryType()); + } + ++>>>>>>> master // Create subscriber Subscriber subscriber = new Subscriber(subscriptionData.getTenantAdminUsername(), subscriptionData.getTenantId(), subscriptionData.getTenantDomain()); cartridgeSubscription.setSubscriber(subscriber); @@@ -561,7 -453,7 +581,11 @@@ } cartridgeSubscription.addSubscriptionDomain(new SubscriptionDomain(domainName, applicationContext)); ++<<<<<<< HEAD + new DataInsertionAndRetrievalManager().cacheAndPersistSubcription(cartridgeSubscription); ++======= + new DataInsertionAndRetrievalManager().cacheAndUpdateSubscription(cartridgeSubscription); ++>>>>>>> master } catch (PersistenceManagerException e) { String errorMsg = "Could not add domain to cartridge subscription: [tenant-id] " + tenantId + " [subscription-alias] " + subscriptionAlias + " [domain-name] " + domainName + " [application-context] " + applicationContext; @@@ -591,7 -483,7 +615,11 @@@ throw new DomainSubscriptionDoesNotExist("Cartridge subscription not found", domainName); } cartridgeSubscription.removeSubscriptionDomain(domainName); ++<<<<<<< HEAD + new DataInsertionAndRetrievalManager().cacheAndPersistSubcription(cartridgeSubscription); ++======= + new DataInsertionAndRetrievalManager().cacheAndUpdateSubscription(cartridgeSubscription); ++>>>>>>> master } catch (PersistenceManagerException e) { String errorMsg = "Could not remove domain from cartridge subscription: [tenant-id] " + tenantId + " [subscription-alias] " + subscriptionAlias + " [domain-name] " + domainName; http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberActivatedEvent.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberActivatedEvent.java index 3e0d355,e505537..23ef560 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberActivatedEvent.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberActivatedEvent.java @@@ -21,14 -21,9 +21,17 @@@ package org.apache.stratos.messaging.ev import java.io.Serializable; import java.util.*; ++<<<<<<< HEAD import org.apache.stratos.messaging.domain.topology.Port; +import java.io.Serializable; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; ++======= ++>>>>>>> master + /** * This event is fired by Cloud Controller when a member has started it's server and * applications are ready to serve the incoming requests. http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberTerminatedEvent.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberTerminatedEvent.java index d8fd990,21aa340..e0c0503 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberTerminatedEvent.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberTerminatedEvent.java @@@ -34,7 -34,6 +34,10 @@@ public clas private final String networkPartitionId; private final String partitionId; private final String memberId; ++<<<<<<< HEAD + private String groupId; ++======= ++>>>>>>> master private Properties properties; @@@ -66,13 -65,6 +69,16 @@@ return networkPartitionId; } ++<<<<<<< HEAD + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } ++======= ++>>>>>>> master public Properties getProperties() { return properties; } http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Util.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Util.java index ec15b09,95b5a07..48905f3 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Util.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Util.java @@@ -106,11 -104,46 +106,52 @@@ public class Util public static Object jsonToObject(String json, Class type) { return (new JsonMessage(json, type)).getObject(); } + + public static String ObjectToJson(Object obj) { + Gson gson = new Gson(); + String result = gson.toJson(obj); + return result; + } + + // Time interval between each ping message sent to topic. + private static int averagePingInterval; + + // Time interval between each ping message after an error had occurred. + private static int failoverPingInterval; + + /** + * fetch value from system param + * @return + */ + public static int getAveragePingInterval() { + if (averagePingInterval <= 0) { + averagePingInterval = Util.getNumericSystemProperty(Constants.DEFAULT_AVERAGE_PING_INTERVAL,Constants.AVERAGE_PING_INTERVAL_PROPERTY); + } + return averagePingInterval; + } + + /** + * fetch value from system param + * @return + */ + public static int getFailoverPingInterval() { + if (failoverPingInterval <= 0) { + failoverPingInterval = Util.getNumericSystemProperty(Constants.DEFAULT_FAILOVER_PING_INTERVAL,Constants.FAILOVER_PING_INTERVAL_PROPERTY); + } + return failoverPingInterval; + } + + /** + * Method to safely access numeric system properties + * @param defaultValue + * @return + */ + public static Integer getNumericSystemProperty(Integer defaultValue, String propertyKey) { + try { + return Integer.valueOf(System.getProperty(propertyKey)); + } catch (NumberFormatException ex) { + return defaultValue; + } + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/CartridgeInfoBean.java index eec247d,dbeb5c5..52973c0 --- 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 @@@ -20,7 -20,6 +20,10 @@@ package org.apache.stratos.rest.endpoin import org.apache.stratos.rest.endpoint.bean.cartridge.definition.PersistenceBean; import org.apache.stratos.rest.endpoint.bean.cartridge.definition.PropertyBean; ++<<<<<<< HEAD + ++======= ++>>>>>>> master import javax.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; @@@ -38,14 -37,16 +41,24 @@@ public class CartridgeInfoBean String dataCartridgeType; String dataCartridgeAlias; boolean commitsEnabled; ++<<<<<<< HEAD + ++======= ++>>>>>>> master private String serviceGroup; private PersistenceBean persistence; private List<PropertyBean> property; ++<<<<<<< HEAD + public CartridgeInfoBean() { ++======= + private List<String> domains; + + public CartridgeInfoBean() { + this.domains = new ArrayList<String>(); ++>>>>>>> master } public String getCartridgeType() { @@@ -148,8 -149,8 +161,13 @@@ return persistence; } ++<<<<<<< HEAD + public void setPersistence(PersistenceBean persistenceBean) { + this.persistence = persistenceBean; ++======= + public void setPersistence(PersistenceBean persistence) { + this.persistence = persistence; ++>>>>>>> master } public List<PropertyBean> getProperty() { @@@ -159,4 -160,9 +177,12 @@@ public void setProperty(List<PropertyBean> property) { this.property = property; } ++<<<<<<< HEAD ++======= + + public List<String> getDomains() { return domains; } + + public void setDomains(List<String> domains) { this.domains = domains; } + ++>>>>>>> master } http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java index b47ac0d,ee3145c..68dec87 --- 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,7 -19,6 +19,10 @@@ package org.apache.stratos.rest.endpoint.bean.util.converter; ++<<<<<<< HEAD +import org.apache.commons.logging.LogFactory; ++======= ++>>>>>>> master import org.apache.commons.lang.StringUtils; import org.apache.stratos.cloud.controller.stub.pojo.*; import org.apache.stratos.manager.deploy.service.Service; @@@ -29,8 -29,8 +33,9 @@@ import org.apache.stratos.rest.endpoint 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.subscription.domain.SubscriptionDomainBean; import org.apache.stratos.rest.endpoint.bean.topology.Member; +import org.apache.commons.logging.Log; import java.util.ArrayList; import java.util.Arrays; @@@ -148,7 -148,7 +153,11 @@@ public class PojoConverter return iaasConfigsArray; } ++<<<<<<< HEAD + public static Persistence getPersistence(PersistenceBean persistenceBean) { ++======= + public static Persistence getPersistence(PersistenceBean persistenceBean) { ++>>>>>>> master Persistence persistence = new Persistence(); persistence.setPersistanceRequired(persistenceBean.isRequired); VolumeBean[] volumeBean = new VolumeBean[persistenceBean.volume.size()]; http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java index 9b7fff8,5b1a01e..0654c35 --- 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,19 -24,14 +24,28 @@@ import org.apache.commons.lang.StringUt import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy; ++<<<<<<< HEAD +import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException; +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; ++======= ++>>>>>>> master 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; ++<<<<<<< HEAD +import org.apache.stratos.manager.composite.application.beans.CompositeAppDefinition; +import org.apache.stratos.manager.composite.application.CompositeApplicationManager; ++======= + 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.Property; ++>>>>>>> master import org.apache.stratos.manager.client.AutoscalerServiceClient; import org.apache.stratos.manager.client.CloudControllerServiceClient; import org.apache.stratos.manager.deploy.service.Service; @@@ -85,17 -84,15 +100,17 @@@ public class ServiceUtils private static Log log = LogFactory.getLog(ServiceUtils.class); private static CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager(); + private static ServiceGroupingManager serviceGropingManager = new ServiceGroupingManager(); private static ServiceDeploymentManager serviceDeploymentManager = new ServiceDeploymentManager(); + private static CompositeApplicationManager compositeApplicationManager = new CompositeApplicationManager(); - static StratosAdminResponse deployCartridge (CartridgeDefinitionBean cartridgeDefinitionBean, ConfigurationContext ctxt, - String userName, String tenantDomain) throws RestAPIException { + static void deployCartridge(CartridgeDefinitionBean cartridgeDefinitionBean, ConfigurationContext ctxt, + String userName, String tenantDomain) throws RestAPIException { - log.info("Starting to deploy a Cartridge [type] "+cartridgeDefinitionBean.type); + log.info("Starting to deploy a Cartridge [type] " + cartridgeDefinitionBean.type); CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); - + if (cloudControllerServiceClient != null) { CartridgeConfig cartridgeConfig = PojoConverter.populateCartridgeConfigPojo(cartridgeDefinitionBean); @@@ -104,211 -101,28 +119,207 @@@ throw new RestAPIException("Populated CartridgeConfig instance is null, cartridge deployment aborted"); } - - // call CC - try { - cloudControllerServiceClient - .deployCartridgeDefinition(cartridgeConfig); - } catch (RemoteException e) { - log.error(e.getMessage(), e); - throw new RestAPIException(e.getMessage(), e); - } catch (CloudControllerServiceInvalidCartridgeDefinitionExceptionException e) { - String message = e.getFaultMessage().getInvalidCartridgeDefinitionException().getMessage(); - log.error(message, e); - throw new RestAPIException(message, e); - } catch (CloudControllerServiceInvalidIaasProviderExceptionException e) { - String message = e.getFaultMessage().getInvalidIaasProviderException().getMessage(); - log.error(message, e); - throw new RestAPIException(message, e); - } - - log.info("Successfully deployed Cartridge [type] "+cartridgeDefinitionBean.type); - - } - StratosAdminResponse stratosAdminResponse = new StratosAdminResponse(); - stratosAdminResponse.setMessage("Successfully deployed cartridge definition with type " + cartridgeDefinitionBean.type); - return stratosAdminResponse; + // call CC + try { + cloudControllerServiceClient + .deployCartridgeDefinition(cartridgeConfig); + } catch (RemoteException e) { + log.error(e.getMessage(), e); + throw new RestAPIException(e.getMessage(), e); + } catch (CloudControllerServiceInvalidCartridgeDefinitionExceptionException e) { + String message = e.getFaultMessage().getInvalidCartridgeDefinitionException().getMessage(); + log.error(message, e); + throw new RestAPIException(message, e); + } catch (CloudControllerServiceInvalidIaasProviderExceptionException e) { + String message = e.getFaultMessage().getInvalidIaasProviderException().getMessage(); + log.error(message, e); + throw new RestAPIException(message, e); + } + + log.info("Successfully deployed Cartridge [type] " + cartridgeDefinitionBean.type); + + } } + + // 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 (ComponentDefinition 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 deployed composite application to Cloud Controller"); + + } + + StratosAdminResponse stratosAdminResponse = new StratosAdminResponse(); + stratosAdminResponse.setMessage("Successfully deployed composite application to cloud controller"); + return stratosAdminResponse; + } +*/ + static void deployCompositeApplicationDefintion (CompositeAppDefinition compositeAppDefinition, ConfigurationContext ctxt, + String userName, String tenantDomain) + throws RestAPIException { + + int tenantId = ApplicationManagementUtil.getTenantId(ctxt); + + try { + compositeApplicationManager.deployCompositeApplication(compositeAppDefinition, tenantId, tenantDomain, userName); + + } catch (CompositeApplicationDefinitionException e) { + throw new RestAPIException(e); + } catch (PersistenceManagerException e) { + throw new RestAPIException(e); + } catch (CompositeApplicationException e) { + throw new RestAPIException(e); + } + } + + static void 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(String.format("[type] %s", configCompositeApplicationAlias)); + } @SuppressWarnings("unused") private static DeploymentPolicy[] intersection( @@@ -1181,7 -973,6 +1170,10 @@@ subscriptionData.setRepositoryPassword(cartridgeInfoBean.getRepoPassword()); subscriptionData.setCommitsEnabled(cartridgeInfoBean.isCommitsEnabled()); subscriptionData.setServiceGroup(cartridgeInfoBean.getServiceGroup()); ++<<<<<<< HEAD + ++======= ++>>>>>>> master PersistenceBean persistenceBean = cartridgeInfoBean.getPersistence(); if(persistenceBean != null) { @@@ -1192,9 -983,8 +1184,13 @@@ } /* ++<<<<<<< HEAD + if (cartridgeInfoBean.getPersistence() != null) { + ++======= ++>>>>>>> master if (cartridgeInfoBean.isPersistanceRequired()) { + if (cartridgeInfoBean.getPersistence() != null) { // Add persistence related properties to PersistenceContext PersistenceContext persistenceContext = new PersistenceContext(); persistenceContext.setPersistanceRequiredProperty(IS_VOLUME_REQUIRED, String.valueOf(cartridgeInfoBean.isPersistanceRequired())); @@@ -1206,19 -996,24 +1202,28 @@@ subscriptionData.setPersistanceCtxt(persistenceContext); } */ ++<<<<<<< HEAD + ++======= ++>>>>>>> master //subscribe - return cartridgeSubsciptionManager.subscribeToCartridgeWithProperties(subscriptionData); - + SubscriptionInfo subscriptionInfo = null; + try{ + subscriptionInfo = cartridgeSubsciptionManager.subscribeToCartridgeWithProperties(subscriptionData); + }catch(Exception e){ + throw new RestAPIException(e.getMessage(), e); + } + + return subscriptionInfo; } - public static org.apache.stratos.rest.endpoint.bean.topology.Cluster getCluster (String cartridgeType, String subscriptionAlias, ConfigurationContext configurationContext) throws RestAPIException { + public static org.apache.stratos.rest.endpoint.bean.topology.Cluster getCluster(String cartridgeType, String subscriptionAlias, ConfigurationContext configurationContext) throws RestAPIException { Cluster cluster = TopologyClusterInformationModel.getInstance().getCluster(ApplicationManagementUtil.getTenantId(configurationContext) - ,cartridgeType , subscriptionAlias); - if(cluster == null) { - throw new RestAPIException("No matching cluster found for [cartridge type]: "+cartridgeType+ " [alias] "+subscriptionAlias); - } else{ + , cartridgeType, subscriptionAlias); + if (cluster == null) { + throw new RestAPIException("No matching cluster found for [cartridge type]: " + cartridgeType + " [alias] " + subscriptionAlias); + } else { return PojoConverter.populateClusterPojos(cluster); } } @@@ -1278,7 -1089,6 +1299,10 @@@ subscriptionData.setTenantAdminUsername(userName); subscriptionData.setRepositoryType("git"); //subscriptionData.setPayloadProperties(props); ++<<<<<<< HEAD + //subscriptionData.setProperties(props); ++======= ++>>>>>>> master subscriptionData.setPrivateRepository(false); cartridgeSubscription = @@@ -1289,7 -1099,6 +1313,10 @@@ Properties lbProperties = new Properties(); lbProperties.setPayloadProperties(props); ++<<<<<<< HEAD + lbProperties.setProperties(props); ++======= ++>>>>>>> master cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription, lbProperties); if(log.isDebugEnabled()) { @@@ -1388,49 -1185,97 +1403,136 @@@ log.error(msg, e); throw new RestAPIException(msg, e); } - - StratosAdminResponse stratosAdminResponse = new StratosAdminResponse(); - stratosAdminResponse.setMessage("Successfully sent the repository synchronization request for " + cartridgeSubscription.getAlias()); - return stratosAdminResponse; + } + + public static void addSubscriptionDomains(ConfigurationContext configurationContext, String cartridgeType, + String subscriptionAlias, + SubscriptionDomainRequest request) + throws RestAPIException { + try { + int tenantId = ApplicationManagementUtil.getTenantId(configurationContext); + + for (org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean subscriptionDomain : request.domains) { + boolean isDomainExists = isSubscriptionDomainExists(configurationContext, cartridgeType, subscriptionAlias, subscriptionDomain.domainName); + if (isDomainExists) { + String message = "Subscription domain " + subscriptionDomain.domainName + " exists"; + throw new RestAPIException(Status.INTERNAL_SERVER_ERROR, message); + } + } + + for (org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean subscriptionDomain : request.domains) { + + cartridgeSubsciptionManager.addSubscriptionDomain(tenantId, subscriptionAlias, + subscriptionDomain.domainName, subscriptionDomain.applicationContext); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new RestAPIException(e.getMessage(), e); + } + } + + public static boolean isSubscriptionDomainExists(ConfigurationContext configurationContext, String cartridgeType, + String subscriptionAlias, String domain) throws RestAPIException { + try { + int tenantId = ApplicationManagementUtil.getTenantId(configurationContext); + SubscriptionDomainBean subscriptionDomain = PojoConverter.populateSubscriptionDomainPojo(cartridgeSubsciptionManager.getSubscriptionDomain(tenantId, + subscriptionAlias, domain)); + + if (subscriptionDomain.domainName != null) { + return true; + } else { + return false; + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new RestAPIException(e.getMessage(), e); + } + + } + + public static List<SubscriptionDomainBean> getSubscriptionDomains(ConfigurationContext configurationContext, String cartridgeType, + String subscriptionAlias) throws RestAPIException { + try { + int tenantId = ApplicationManagementUtil.getTenantId(configurationContext); + return PojoConverter.populateSubscriptionDomainPojos(cartridgeSubsciptionManager.getSubscriptionDomains(tenantId, subscriptionAlias)); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new RestAPIException(e.getMessage(), e); + } + } + + public static SubscriptionDomainBean getSubscriptionDomain(ConfigurationContext configurationContext, String cartridgeType, + String subscriptionAlias, String domain) throws RestAPIException { + try { + int tenantId = ApplicationManagementUtil + .getTenantId(configurationContext); + SubscriptionDomainBean subscriptionDomain = PojoConverter.populateSubscriptionDomainPojo(cartridgeSubsciptionManager.getSubscriptionDomain(tenantId, + subscriptionAlias, domain)); + + if (subscriptionDomain == null) { + String message = "Could not find a subscription [domain] "+domain+ " for Cartridge [type] " + +cartridgeType+ " and [alias] "+subscriptionAlias; + log.error(message); + throw new RestAPIException(Status.NOT_FOUND, message); + } + + return subscriptionDomain; + + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new RestAPIException(e.getMessage(), e); + } + } + + public static void removeSubscriptionDomain(ConfigurationContext configurationContext, String cartridgeType, + String subscriptionAlias, String domain) throws RestAPIException, DomainMappingExistsException { + try { + int tenantId = ApplicationManagementUtil.getTenantId(configurationContext); + cartridgeSubsciptionManager.removeSubscriptionDomain(tenantId, subscriptionAlias, domain); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new RestAPIException(e.getMessage(), e); + } + } + static void deployServiceGroupDefinition (ServiceGroupDefinition serviceGroupDefinition) throws RestAPIException { + + try { + serviceGropingManager.deployServiceGroupDefinition(serviceGroupDefinition); + + } catch (InvalidServiceGroupException e) { + throw new RestAPIException(e); + } catch (ServiceGroupDefinitioException e) { + throw new RestAPIException(e); + } catch (ADCException e) { + throw new RestAPIException(e); + } catch (CloudControllerServiceUnregisteredCartridgeExceptionException e) { + throw new RestAPIException(e); + } + + log.info("Successfully deployed the Service Group Definition with name " + serviceGroupDefinition.getName()); + } + + static ServiceGroupDefinition getServiceGroupDefinition (String serviceGroupDefinitionName) throws RestAPIException { + + try { + return serviceGropingManager.getServiceGroupDefinition(serviceGroupDefinitionName); + + } catch (ServiceGroupDefinitioException e) { + throw new RestAPIException(e); + } + } + + static void undeployServiceGroupDefinition (String serviceGroupDefinitionName) throws RestAPIException { + + try { + serviceGropingManager.undeployServiceGroupDefinition(serviceGroupDefinitionName); + + } catch (ServiceGroupDefinitioException e) { + throw new RestAPIException(e); + } + + log.info("Successfully undeployed the Service Group Definition with name " + serviceGroupDefinitionName); + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java index 8303bee,fa5057d..e50214e --- 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 @@@ -30,7 -29,6 +30,10 @@@ import org.apache.stratos.manager.dto.C import org.apache.stratos.manager.dto.SubscriptionInfo; import org.apache.stratos.manager.exception.DomainMappingExistsException; import org.apache.stratos.manager.exception.ServiceDoesNotExistException; ++<<<<<<< HEAD +import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition; ++======= ++>>>>>>> master import org.apache.stratos.manager.subscription.CartridgeSubscription; import org.apache.stratos.manager.subscription.SubscriptionDomain; import org.apache.stratos.rest.endpoint.ServiceHolder; @@@ -72,7 -69,6 +74,10 @@@ import javax.ws.rs.core.Context import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; ++<<<<<<< HEAD + ++======= ++>>>>>>> master import java.net.URI; import java.util.ArrayList; import java.util.List; @@@ -245,44 -145,6 +252,47 @@@ public class StratosAdmin extends Abstr ServiceUtils.undeployCartridge(cartridgeType); return Response.noContent().build(); ++<<<<<<< HEAD + } + + @POST + @Path("/group/definition/") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + @SuperTenantService(true) + public Response deployServiceGroupDefinition (ServiceGroupDefinition serviceGroupDefinition) + throws RestAPIException { + + ServiceUtils.deployServiceGroupDefinition(serviceGroupDefinition); + URI url = uriInfo.getAbsolutePathBuilder().path(serviceGroupDefinition.getName()).build(); + return Response.created(url).build(); + } + + @GET + @Path("/group/definition/{groupDefinitionName}") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + public Response getServiceGroupDefinition (@PathParam("groupDefinitionName") String groupDefinitionName) + throws RestAPIException { + Response.ResponseBuilder rb = Response.ok().entity(ServiceUtils.getServiceGroupDefinition(groupDefinitionName)); + return rb.build(); + } + + @DELETE + @Path("/group/definition/{groupDefinitionName}") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + @SuperTenantService(true) + public Response undeployServiceGroupDefinition (@PathParam("groupDefinitionName") String groupDefinitionName) + throws RestAPIException { + + ServiceUtils.undeployServiceGroupDefinition(groupDefinitionName); + return Response.noContent().build(); ++======= ++>>>>>>> master } @POST http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh ---------------------------------------------------------------------- diff --cc products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh index 317da88,2636e74..491d52e --- a/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh +++ b/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh @@@ -45,7 -49,27 +49,31 @@@ properties="-Dmb.ip=MB-I -Dmonitoring.server.secure.port=MONITORING-SERVER-SECURE-PORT -Dmonitoring.server.admin.username=MONITORING-SERVER-ADMIN-USERNAME -Dmonitoring.server.admin.password=MONITORING-SERVER-ADMIN-PASSWORD ++<<<<<<< HEAD + -DAPP_PATH=APP-PATH" ++======= + -Dlog.file.paths=LOG_FILE_PATHS + -DAPP_PATH=APP_PATH + -Dsuper.tenant.repository.path=/repository/deployment/server/ + -Dtenant.repository.path=/repository/tenants/ + -Dextension.instance.started=instance-started.sh + -Dextension.start.servers=start-servers.sh + -Dextension.instance.activated=instance-activated.sh + -Dextension.artifacts.updated=artifacts-updated.sh + -Dextension.clean=clean.sh + -Dextension.mount.volumes=mount_volumes.sh + -Dextension.member.started=member-started.sh + -Dextension.member.activated=member-activated.sh + -Dextension.member.suspended=member-suspended.sh + -Dextension.member.terminated=member-terminated.sh + -Dextension.complete.topology=complete-topology.sh + -Dextension.complete.tenant=complete-tenant.sh + -Dextension.subscription.domain.added=subscription-domain-added.sh + -Dextension.subscription.domain.removed=subscription-domain-removed.sh + -Dextension.artifacts.copy=artifacts-copy.sh + -Dextension.tenant.subscribed=tenant-subscribed.sh + -Dextension.tenant.unsubscribed=tenant-unsubscribed.sh" ++>>>>>>> master # 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/aadd589f/products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template ---------------------------------------------------------------------- diff --cc products/cartridge-agent/modules/distribution/src/main/conf/templates/jndi.properties.template index 45b8d7a,e69de29..1ff5b1f --- 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 @@@ -1,25 -1,0 +1,28 @@@ ++<<<<<<< HEAD +# +# 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. +# +# This is a generated file and will be overwritten at the next load balancer startup. +# Please use loadbalancer.conf for updating mb-ip, mb-port and templates/jndi.properties.template +# file for updating other configurations. +# +connectionfactoryName=TopicConnectionFactory +connectionfactory.topicConnectionfactory=tcp://$mb_ip:$mb_port +java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory ++======= ++>>>>>>> master http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/products/stratos/modules/distribution/src/assembly/bin.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/aadd589f/products/stratos/modules/distribution/src/main/conf/mincheck.drl ---------------------------------------------------------------------- diff --cc products/stratos/modules/distribution/src/main/conf/mincheck.drl index b29e991,ceeab48..833293c --- a/products/stratos/modules/distribution/src/main/conf/mincheck.drl +++ b/products/stratos/modules/distribution/src/main/conf/mincheck.drl @@@ -48,10 -48,8 +48,15 @@@ global org.apache.stratos.messaging.dom global java.util.Map partitionCtxts; global java.lang.String clusterId; global java.lang.String lbRef; ++<<<<<<< HEAD +global java.lang.String serviceId; + +global org.apache.stratos.autoscaler.policy.model.AutoscalePolicy autoscalePolicy; + ++======= + global java.lang.Boolean isPrimary; + global Integer primaryMemberCount; ++>>>>>>> master rule "Minimum Rule" dialect "mvel" @@@ -60,14 -58,14 +65,22 @@@ eval(log.debug("Running minimum rule: [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId())) 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())) ++<<<<<<< HEAD + 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)) + ++======= + eval ( (isPrimary && (primaryMemberCount < $ctxt.getMinimumMemberCount() )) || ( !isPrimary && ($ctxt.getNonTerminatedMemberCount() < $ctxt.getMinimumMemberCount() )) ) ++>>>>>>> master then - $delegator.delegateSpawn($ctxt, clusterId, lbRef); - + if (isPrimary){ + log.debug("[min-check] true [primary] true [primary member count] " + primaryMemberCount); + } else{ + log.debug("[min-check] true [primary] false"); + } + $delegator.delegateSpawn($ctxt, clusterId, lbRef, isPrimary); end rule "Terminate Obsoleted Instances"
