fixing merge conflicts

Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/61f8d8c8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/61f8d8c8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/61f8d8c8

Branch: refs/heads/master
Commit: 61f8d8c81071f2b2217fe42927fcead0682f72f2
Parents: 961cbd8 757f7bf
Author: Nirmal Fernando <[email protected]>
Authored: Wed Nov 27 11:32:43 2013 +0530
Committer: Nirmal Fernando <[email protected]>
Committed: Wed Nov 27 11:32:43 2013 +0530

----------------------------------------------------------------------
 components/org.apache.stratos.adc.mgt/pom.xml   |    5 +
 .../adc/mgt/dao/CartridgeSubscriptionInfo.java  |    9 +
 .../org/apache/stratos/adc/mgt/dao/Cluster.java |   71 +
 .../stratos/adc/mgt/dao/DataCartridge.java      |   10 +
 .../stratos/adc/mgt/dto/SubscriptionInfo.java   |    2 +
 .../exception/PersistenceManagerException.java  |   49 +
 .../internal/ADCManagementServerComponent.java  |    5 +-
 .../mgt/listener/InstanceStatusListener.java    |   31 +-
 .../manager/CartridgeSubscriptionManager.java   |   15 +-
 .../adc/mgt/payload/NonCarbonPayload.java       |    1 +
 .../apache/stratos/adc/mgt/payload/Payload.java |    4 +-
 .../stratos/adc/mgt/payload/PayloadArg.java     |    9 +
 .../stratos/adc/mgt/payload/PayloadFactory.java |    2 +-
 .../DatabaseBasedPersistenceManager.java        | 1408 ++++++++++++++++++
 .../adc/mgt/persistence/PersistenceManager.java |   79 +
 .../mgt/publisher/ArtifactUpdatePublisher.java  |   44 +-
 .../stratos/adc/mgt/repository/Repository.java  |    9 +
 .../mgt/service/RepoNotificationService.java    |   11 +-
 .../service/RepositoryInformationService.java   |    6 +-
 .../mgt/subscription/CartridgeSubscription.java |   67 +-
 .../subscription/DataCartridgeSubscription.java |   47 +-
 .../MultiTenantCartridgeSubscription.java       |   12 +-
 .../SingleTenantCartridgeSubscription.java      |   38 +-
 .../mgt/utils/ApplicationManagementUtil.java    |    3 +-
 .../adc/mgt/utils/PersistenceManager.java       |   44 +-
 .../adc/mgt/utils/RepoPasswordMgtUtil.java      |   25 +-
 .../stratos/autoscaler/ClusterContext.java      |   22 +-
 .../algorithm/AutoscaleAlgorithm.java           |    6 +-
 .../autoscaler/algorithm/OneAfterAnother.java   |  178 ++-
 .../PartitionGroupOneAfterAnother.java          |  146 ++
 .../autoscaler/algorithm/RoundRobin.java        |  172 +--
 .../cloud/controller/CloudControllerClient.java |    2 +-
 .../deployers/DeploymentPolicyReader.java       |   19 +-
 .../rule/AutoscalerRuleEvaluator.java           |   14 +-
 .../stratos/autoscaler/util/AutoscalerUtil.java |    4 +-
 .../src/main/resources/autoscaler.drl           |  114 --
 .../stratos/autoscaler/TestKnowledgeBase.java   |   50 +
 .../impl/CloudControllerServiceImpl.java        |   51 +-
 .../controller/topology/TopologyBuilder.java    |    6 +-
 .../topology/TopologyEventSender.java           |    1 +
 .../statistics/LoadBalancerStatsPublisher.java  |   11 +
 .../statistics/WSO2CEPStatsPublisher.java       |   40 +-
 .../extension/api/LoadBalancerExtension.java    |    2 +-
 .../api/LoadBalancerStatsNotifier.java          |    7 +-
 .../load/balancer/LoadBalancerContext.java      |   58 +-
 .../balancer/LoadBalancerTopologyReceiver.java  |  207 +++
 .../stratos/load/balancer/RequestDelegator.java |   42 +-
 .../algorithm/LoadBalanceAlgorithm.java         |   10 +-
 .../algorithm/LoadBalanceAlgorithmFactory.java  |    2 +-
 .../load/balancer/algorithm/RoundRobin.java     |   18 +-
 .../TenantAwareLoadBalanceEndpoint.java         |   36 +-
 .../internal/LoadBalancerServiceComponent.java  |   49 +-
 .../observers/WSO2CEPStatsObserver.java         |   10 +-
 components/org.apache.stratos.messaging/pom.xml |    6 +-
 .../broker/heartbeat/TopicHealthChecker.java    |   11 +-
 .../messaging/domain/topology/Cluster.java      |   10 +-
 .../stratos/messaging/event/EventListener.java  |   50 -
 .../messaging/event/EventObservable.java        |    2 +
 .../synchronization/ArtifactUpdatedEvent.java   |   11 +-
 .../event/topology/ClusterCreatedEvent.java     |    3 +-
 .../topology/ClusterCreatedEventListener.java   |   30 -
 .../event/topology/ClusterRemovedEvent.java     |   15 +
 .../topology/ClusterRemovedEventListener.java   |   30 -
 .../topology/CompleteTopologyEventListener.java |   30 -
 .../topology/InstanceSpawnedEventListener.java  |   30 -
 .../topology/MemberActivatedEventListener.java  |   30 -
 .../topology/MemberStartedEventListener.java    |   30 -
 .../topology/MemberSuspendedEventListener.java  |   30 -
 .../topology/MemberTerminatedEventListener.java |   30 -
 .../topology/ServiceCreatedEventListener.java   |   30 -
 .../topology/ServiceRemovedEventListener.java   |   30 -
 .../messaging/listener/EventListener.java       |   51 +
 .../topology/ClusterCreatedEventListener.java   |   30 +
 .../topology/ClusterRemovedEventListener.java   |   30 +
 .../topology/CompleteTopologyEventListener.java |   30 +
 .../topology/InstanceSpawnedEventListener.java  |   30 +
 .../topology/MemberActivatedEventListener.java  |   30 +
 .../topology/MemberStartedEventListener.java    |   30 +
 .../topology/MemberSuspendedEventListener.java  |   30 +
 .../topology/MemberTerminatedEventListener.java |   30 +
 .../topology/ServiceCreatedEventListener.java   |   30 +
 .../topology/ServiceRemovedEventListener.java   |   30 +
 .../message/filter/topology/ClusterFilter.java  |   83 ++
 .../message/filter/topology/ServiceFilter.java  |   83 ++
 .../topology/ClusterCreatedEventProcessor.java  |   33 +-
 .../topology/ClusterRemovedEventProcessor.java  |   35 +-
 .../CompleteTopologyEventProcessor.java         |   43 +-
 .../topology/InstanceSpawnedEventProcessor.java |   27 +-
 .../topology/MemberActivatedEventProcessor.java |   24 +
 .../topology/MemberStartedEventProcessor.java   |   24 +
 .../topology/MemberSuspendedEventProcessor.java |   24 +
 .../MemberTerminatedEventProcessor.java         |   24 +
 .../topology/ServiceCreatedEventProcessor.java  |   12 +
 .../topology/ServiceRemovedEventProcessor.java  |   12 +
 .../topology/TopologyEventProcessorChain.java   |    4 +-
 .../topology/TopologyEventMessageDelegator.java |    3 +-
 components/pom.xml                              |   36 +-
 .../HealthStatisticsEventBuilder.xml            |   10 +
 .../AverageLoadAverageEventFormatter.xml        |   11 +
 .../AverageMemoryConsumptionEventFormatter.xml  |   11 +
 .../FaultMessageEventFormatter.xml              |   11 +
 .../GradientLoadAverageEventFormatter.xml       |   11 +
 .../GradientMemoryConsumptionEventFormatter.xml |   11 +
 ...econdDerivativeLoadAverageEventFormatter.xml |   11 +
 ...erivativeMemoryConsumptionEventFormatter.xml |   11 +
 .../executionplans/AverageHeathRequest.xml      |   21 +
 .../executionplans/GradientOfHealthRequest.xml  |   24 +
 .../SecondDerivativeOfHealthRequest.xml         |   21 +
 .../extension/FaultHandlingWindowProcessor.java |  180 +++
 .../src/main/bin/haproxy-extension.sh           |    1 +
 .../pom.xml                                     |   17 +-
 .../pom.xml                                     |    1 +
 pom.xml                                         |    4 +-
 .../distribution/src/main/assembly/bin.xml      |    6 +-
 .../main/autoscale-policies/economyPolicy.xml   |   60 +-
 .../distribution/src/main/conf/autoscaler.drl   |   52 +-
 .../distribution/src/main/conf/log4j.properties |   18 +-
 .../deployment-policies/economy-deployment.xml  |   57 +-
 .../src/main/resources/log4j.properties         |  168 ---
 .../cartridge-agent/ec2/php/cartridge-agent.sh  |  123 --
 .../modules/deployment-synchronizer/pom.xml     |   81 +
 .../synchronizer/ArtifactRepository.java        |   31 +
 .../synchronizer/RepositoryInformation.java     |   65 +
 .../git/impl/GitBasedArtifactRepository.java    |  666 +++++++++
 .../CustomJschConfigSessionFactory.java         |   64 +
 .../GitDeploymentSynchronizerConstants.java     |   61 +
 .../git/internal/RepositoryContext.java         |  131 ++
 .../GitDeploymentSyncronizerConfiguration.java  |   29 +
 .../synchronizer/git/util/Utilities.java        |   73 +
 .../modules/event-subscriber/pom.xml            |   13 +-
 .../src/main/bin/event-subscriber.sh            |    4 +-
 .../event/subscriber/ArtifactListener.java      |   90 +-
 .../cartridge/agent/event/subscriber/Main.java  |    1 +
 .../src/main/bin/health-publisher.sh            |    2 +-
 .../agent/health/publisher/HealthPublisher.java |   23 +-
 .../health/publisher/HealthPublisherClient.java |   57 +-
 .../cartridge/agent/health/publisher/Main.java  |   26 +-
 products/cartridge-agent/pom.xml                |    1 +
 .../distribution/src/main/assembly/bin.xml      |   10 +-
 .../distribution/src/main/conf/log4j.properties |  224 ++-
 .../src/main/resources/log4j.properties         |  196 ---
 .../distribution/src/main/bin/stratos.bat       |    2 +-
 .../distribution/src/main/bin/stratos.sh        |    3 +
 .../load-balancer/modules/p2-profile/pom.xml    |    8 +
 .../resources/stratos_foundation.sql            |    1 +
 145 files changed, 5467 insertions(+), 1744 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/61f8d8c8/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/61f8d8c8/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
index 6d673b6,0450def..a5c3437
--- 
a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
+++ 
b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
@@@ -20,9 -19,23 +20,8 @@@ package org.apache.stratos.adc.mgt.util
   *
  */
  
 -package org.apache.stratos.adc.mgt.utils;
 -
 -
 -import java.io.File;
 -import java.io.IOException;
 -import java.net.MalformedURLException;
 -import java.net.URL;
 -import java.rmi.RemoteException;
 -import java.text.DecimalFormat;
 -import java.util.ArrayList;
 -import java.util.Arrays;
 -import java.util.Collection;
 -import java.util.List;
 -import java.util.Map;
 -import java.util.UUID;
 -import java.util.regex.Pattern;
  
 +import com.google.gson.Gson;
- 
  import org.apache.axis2.clustering.ClusteringAgent;
  import org.apache.axis2.clustering.Member;
  import org.apache.axis2.clustering.management.GroupManagementAgent;
@@@ -58,22 -79,8 +57,21 @@@ import org.eclipse.jgit.lib.Ref
  import org.eclipse.jgit.storage.file.FileRepository;
  import org.eclipse.jgit.transport.CredentialsProvider;
  import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
 +import org.wso2.carbon.utils.CarbonUtils;
  import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
  
 +import javax.activation.DataHandler;
 +import javax.activation.FileDataSource;
- 
 +import java.io.*;
 +import java.net.MalformedURLException;
 +import java.net.URL;
 +import java.rmi.RemoteException;
 +import java.text.DecimalFormat;
 +import java.util.*;
 +import java.util.regex.Pattern;
 +import java.util.zip.ZipEntry;
 +import java.util.zip.ZipOutputStream;
 +
  /**
   * This class contains utility methods used by ApplicationManagementService.
   */

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/61f8d8c8/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 bc6877a,b50bc89..3ee7fae
--- 
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
@@@ -18,33 -18,27 +18,36 @@@
   */
  package org.apache.stratos.cloud.controller.impl;
  
+ import com.google.common.collect.Lists;
+ import org.apache.commons.io.FileUtils;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
 +import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor;
  import org.apache.stratos.cloud.controller.exception.CloudControllerException;
 +import 
org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException;
 +import org.apache.stratos.cloud.controller.exception.InvalidClusterException;
 +import org.apache.stratos.cloud.controller.exception.InvalidMemberException;
 +import 
org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
  import 
org.apache.stratos.cloud.controller.exception.UnregisteredCartridgeException;
 -import 
org.apache.stratos.cloud.controller.exception.UnregisteredServiceException;
 +import 
org.apache.stratos.cloud.controller.exception.UnregisteredClusterException;
  import org.apache.stratos.cloud.controller.interfaces.CloudControllerService;
 +import org.apache.stratos.cloud.controller.interfaces.Iaas;
  import org.apache.stratos.cloud.controller.persist.Deserializer;
 +import org.apache.stratos.cloud.controller.pojo.ClusterContext;
 +import org.apache.stratos.cloud.controller.pojo.MemberContext;
 +import org.apache.stratos.cloud.controller.pojo.Registrant;
  import 
org.apache.stratos.cloud.controller.publisher.CartridgeInstanceDataPublisherTask;
  import org.apache.stratos.cloud.controller.registry.RegistryManager;
  import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
  import org.apache.stratos.cloud.controller.topic.TopologySynchronizerTask;
  import org.apache.stratos.cloud.controller.topology.TopologyBuilder;
  import 
org.apache.stratos.cloud.controller.topology.TopologyEventMessageDelegator;
+ import org.apache.stratos.cloud.controller.topology.TopologyManager;
  import org.apache.stratos.cloud.controller.util.*;
 -import org.apache.stratos.cloud.controller.util.Properties;
 -import org.apache.stratos.messaging.domain.topology.Member;
 -import org.apache.stratos.messaging.domain.topology.Partition;
 -import org.apache.stratos.messaging.domain.topology.Scope;
 +import 
org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
 +import org.apache.stratos.messaging.domain.policy.DeploymentPolicy;
 +import org.apache.stratos.messaging.domain.policy.Partition;
 +import org.apache.stratos.messaging.domain.policy.PartitionGroup;
  import org.jclouds.compute.ComputeService;
  import org.jclouds.compute.domain.ComputeMetadata;
  import org.jclouds.compute.domain.NodeMetadata;
@@@ -58,8 -52,9 +61,10 @@@ import org.wso2.carbon.ntask.core.TaskM
  import org.wso2.carbon.ntask.core.service.TaskService;
  import org.wso2.carbon.registry.core.exceptions.RegistryException;
  
+ import java.io.File;
+ import java.io.IOException;
  import java.util.*;
 +import java.util.concurrent.ConcurrentHashMap;
  import java.util.concurrent.locks.Lock;
  import java.util.concurrent.locks.ReentrantLock;
  
@@@ -535,8 -482,9 +527,9 @@@ public class CloudControllerServiceImp
                                          + ". Hence, will try to start in 
another IaaS if available.",
                                  e);
                      }
+             }
  
 -        }
 +//        }
          return null;
  
        }
@@@ -604,339 -552,175 +597,330 @@@
          }
  
      }
 +    
 +    @Override
 +    public void terminateInstance(String memberId) throws 
InvalidMemberException, InvalidCartridgeTypeException, 
 +    IllegalArgumentException{
  
 -      @Override
 -      public boolean terminateInstance(String clusterId, Partition partition) 
{
 -
 -        String partitionId = partition.getId();
 -        String provider = partition.getProperty("provider");
 -              log.info("Starting to terminate an instance of domain : " + 
clusterId);
 +        if(memberId == null) {
 +            String msg = "Termination failed. Null member id.";
 +            log.error(msg);
 +            throw new IllegalArgumentException(msg);
 +        }
 +//        String nodeId = dataHolder.getNodeId(memberId);
 +        MemberContext ctxt = dataHolder.getMemberContextOfMemberId(memberId);
 +        
 +        if(ctxt == null) {
 +            String msg = "Termination failed. Invalid Member Id: "+memberId;
 +            log.error(msg);
 +            throw new InvalidMemberException(msg);
 +        }
 +        
 +        ThreadExecutor exec = new ThreadExecutor();
 +        exec.execute(new InstanceTerminator(ctxt));
 +        exec.shutdown();
  
- 
- //                    return true;
 -              ServiceContext serviceCtxt = dataHolder
 -                              .getServiceContextFromDomain(clusterId);
++       
++              
  
 -              if (serviceCtxt == null) {
 -                      String msg = "Not a registered service: domain - " + 
clusterId;
 -                      log.fatal(msg);
 -                      throw new CloudControllerException(msg);
 -              }
 +//            }
  
 -              // load Cartridge, if null
 -              //if (serviceCtxt.getCartridge() == null) {
 -                      serviceCtxt.setCartridge(loadCartridge(
 -                                      serviceCtxt.getCartridgeType(),
 -                                      dataHolder.getCartridges()));
 -              //}
 -
 -              // if still, Cartridge is null
 -              if (serviceCtxt.getCartridge() == null) {
 -                      String msg = "There's no registered Cartridge found. 
Domain - "
 -                                      + clusterId;
 -                      log.fatal(msg);
 -                      throw new CloudControllerException(msg);
 -              }
 +//            log.info("Termination of an instance which is belong to domain 
'"
 +//                            + clusterId
 +//                            + "' , failed! Reason: No matching "
 +//                            + "running instance found in any available 
IaaS.");
 +//
 +//            return false;
  
 -        for (IaasProvider iaas : serviceCtxt.getCartridge().getIaases()) {
 +      }
 +    
 +    private class InstanceTerminator implements Runnable {
  
 -                      String msg = "Failed to terminate an instance in "
 -                                      + iaas.getType()
 -                                      + ". Hence, will try to terminate an 
instance in another IaaS if possible.";
 -            //TODO adding more locations and retrieve it from the request 
received
 -            if(iaas.getType().equals(provider)) {
 -                String nodeId = null;
 +        private MemberContext ctxt;
  
 -                IaasContext ctxt = serviceCtxt.getIaasContext(iaas.getType());
 +        public InstanceTerminator(MemberContext ctxt) {
 +            this.ctxt = ctxt;
 +        }
  
 -                // terminate the last instance first
 -                for (String id : Lists.reverse(ctxt.getNodeIds())) {
 -                    if (id != null) {
 -                        nodeId = id;
 -                        break;
 -                    }
 +        @Override
 +        public void run() {
 +
 +            String memberId = ctxt.getMemberId();
 +            String clusterId = ctxt.getClusterId();
 +            String partitionId = ctxt.getPartitionId();
 +            String cartridgeType = ctxt.getCartridgeType();
 +            String nodeId = ctxt.getNodeId();
 +
 +            try {
 +                // these will never be null, since we do not add null values 
for these.
 +                Cartridge cartridge = dataHolder.getCartridge(cartridgeType);
 +
 +                log.info("Starting to terminate an instance with member id : 
" + memberId +
 +                         " in partition id: " + partitionId + " of cluster 
id: " + clusterId +
 +                         " and of cartridge type: " + cartridgeType);
 +
 +                if (cartridge == null) {
 +                    String msg =
 +                                 "Termination of Member Id: " + memberId + " 
failed. " +
 +                                         "Cannot find a matching Cartridge 
for type: " +
 +                                         cartridgeType;
 +                    log.error(msg);
 +                    throw new InvalidCartridgeTypeException(msg);
                  }
  
                  // if no matching node id can be found.
                  if (nodeId == null) {
  
 -                    log.warn(msg
 -                            + " : Reason- No matching instance found for 
domain: "
 -                            + clusterId
 -                            + ".");
 -                    continue;
 +                    String msg =
 +                                 "Termination failed. Cannot find a node id 
for Member Id: " +
 +                                         memberId;
 +                    log.error(msg);
 +                    throw new InvalidMemberException(msg);
                  }
 -                //get the partition for the member
 -                //TODO Fix ME with autoscalers input
 -                Partition partition_ = 
TopologyManager.getInstance().getTopology().getService(serviceCtxt.getCartridgeType()).
 -                        
getCluster(serviceCtxt.getClusterId()).getMemberFromIaasNodeId(nodeId).getPartition();
 +                // ServiceContext serviceCtxt = dataHolder
 +                // .getServiceContextFromDomain(clusterId);
 +                //
 +                // if (serviceCtxt == null) {
 +                // String msg = "Not a registered service: domain - " + 
clusterId;
 +                // log.fatal(msg);
 +                // throw new CloudControllerException(msg);
 +                // }
 +                //
 +                // // load Cartridge, if null
 +                // //if (serviceCtxt.getCartridge() == null) {
 +                // serviceCtxt.setCartridge(loadCartridge(
 +                // serviceCtxt.getCartridgeType(),
 +                // dataHolder.getCartridges()));
 +                // //}
 +                //
 +                // // if still, Cartridge is null
 +                // if (serviceCtxt.getCartridge() == null) {
 +                // String msg = "There's no registered Cartridge found. 
Domain - "
 +                // + clusterId;
 +                // log.fatal(msg);
 +                // throw new CloudControllerException(msg);
 +                // }
 +
 +                // for (IaasProvider iaas : 
serviceCtxt.getCartridge().getIaases()) {
 +
 +                IaasProvider iaas = 
cartridge.getIaasProviderOfPartition(partitionId);
 +
-                 // String msg = "Failed to terminate an instance in "
-                 // + iaas.getType()
-                 // + ". Hence, will try to terminate an instance in another 
IaaS if possible.";
-                 // //TODO adding more locations and retrieve it from the 
request received
-                 // String nodeId = null;
 +
-                 // IaasContext ctxt = 
serviceCtxt.getIaasContext(iaas.getType());
 +
 +                // // terminate the last instance first
 +                // for (String id : Lists.reverse(ctxt.getNodeIds())) {
 +                // if (id != null) {
 +                // nodeId = id;
 +                // break;
 +                // }
 +                // }
  
                  // terminate it!
 -                terminate(iaas, ctxt, nodeId, partition_);
 +                terminate(iaas, nodeId, ctxt);
  
                  // log information
 -                logTermination(nodeId, ctxt, serviceCtxt);
 +                logTermination(nodeId, ctxt);
 +
 +            } catch (Exception e) {
 +                String msg =
 +                             "Starting to terminate an instance with member 
id : " + memberId +
 +                                     " in partition id: " + partitionId + " 
of cluster id: " +
 +                                     clusterId + " and of cartridge type: " + 
cartridgeType;
 +                log.error(msg);
 +                throw new CloudControllerException(msg);
              }
  
 -
 -
 -                      return true;
 -
 -              }
 -
 -              log.info("Termination of an instance which is belong to domain 
'"
 -                              + clusterId
 -                              + "' , failed! Reason: No matching "
 -                              + "running instance found in any available 
IaaS.");
 -
 -              return false;
 -
 -      }
 -
 -    @Override
 -    public boolean terminateInstances(int noOfInstances, String clusterId, 
Partition partition) {
 -        log.info("vvvvvvvvvvvvvvvvv");
 -        return false;  //TODO
 +        }
      }
  
 -    @Override
 -    public boolean terminateUnhealthyInstances(List<String> 
instancesToBeTerminated) {
 -        log.info("vvvvvvvvvvdddvvvvvvv");
 -        return false;  //TODO
 -    }
 +//    private
 +//        void
 +//        terminateInstance(MemberContext ctxt) throws 
InvalidCartridgeTypeException,
 +//            InvalidMemberException {
 +//        // these will never be null, since we do not add null values for 
these.
 +//        String memberId = ctxt.getMemberId();
 +//        String clusterId = ctxt.getClusterId();
 +//        String partitionId = ctxt.getPartitionId();
 +//        String cartridgeType = ctxt.getCartridgeType();
 +//        String nodeId = ctxt.getNodeId();
 +//        
 +//        Cartridge cartridge = dataHolder.getCartridge(cartridgeType);
 +//        
 +//        log.info("Starting to terminate an instance with member id : " + 
memberId+
 +//                 " in partition id: "+partitionId+" of cluster id: 
"+clusterId+ " and of cartridge type: "+cartridgeType);
 +//        
 +//        if(cartridge == null) {
 +//            String msg = "Termination of Member Id: "+memberId+" failed. " +
 +//                    "Cannot find a matching Cartridge for type: 
"+cartridgeType;
 +//            log.error(msg);
 +//            throw new InvalidCartridgeTypeException(msg);
 +//        }
 +//        
 +////        Scope scope = partition.getScope();
 +////        String provider = partition.getProperty("provider");
 +//
 +//            // if no matching node id can be found.
 +//        if (nodeId == null) {
 +//
 +//            String msg = "Termination failed. Cannot find a node id for 
Member Id: "+memberId;
 +//            log.error(msg);
 +//            throw new InvalidMemberException(msg);
 +//        }
 +////          ServiceContext serviceCtxt = dataHolder
 +////                          .getServiceContextFromDomain(clusterId);
 +////
 +////          if (serviceCtxt == null) {
 +////                  String msg = "Not a registered service: domain - " + 
clusterId;
 +////                  log.fatal(msg);
 +////                  throw new CloudControllerException(msg);
 +////          }
 +////
 +////          // load Cartridge, if null
 +////          //if (serviceCtxt.getCartridge() == null) {
 +////                  serviceCtxt.setCartridge(loadCartridge(
 +////                                  serviceCtxt.getCartridgeType(),
 +////                                  dataHolder.getCartridges()));
 +////          //}
 +////
 +////          // if still, Cartridge is null
 +////          if (serviceCtxt.getCartridge() == null) {
 +////                  String msg = "There's no registered Cartridge found. 
Domain - "
 +////                                  + clusterId;
 +////                  log.fatal(msg);
 +////                  throw new CloudControllerException(msg);
 +////          }
 +//
 +////        for (IaasProvider iaas : serviceCtxt.getCartridge().getIaases()) {
 +//
 +//            IaasProvider iaas = 
cartridge.getIaasProviderOfPartition(partitionId);
 +//            
 +////                  String msg = "Failed to terminate an instance in "
 +////                                  + iaas.getType()
 +////                                  + ". Hence, will try to terminate an 
instance in another IaaS if possible.";
 +////            //TODO adding more locations and retrieve it from the request 
received
 +////                String nodeId = null;
 +//
 +////                IaasContext ctxt = 
serviceCtxt.getIaasContext(iaas.getType());
 +//
 +////                // terminate the last instance first
 +////                for (String id : Lists.reverse(ctxt.getNodeIds())) {
 +////                    if (id != null) {
 +////                        nodeId = id;
 +////                        break;
 +////                    }
 +////                }
 +//
 +//                
 +//
 +//                // terminate it!
 +//                terminate(iaas, nodeId, ctxt);
 +//
 +//                // log information
 +//                logTermination(nodeId, ctxt);
 +//    }
 +
 +//    @Override
 +//    public boolean terminateInstances(String[] memberIds) throws 
IllegalArgumentException, InvalidMemberException, InvalidCartridgeTypeException 
{
 +//        for (String memberId : memberIds) {
 +//            terminateInstance(memberId);
 +//        }
 +//    }
 +
 +//    @Override
 +//    public boolean terminateUnhealthyInstances(List<String> 
instancesToBeTerminated) {
 +//        log.info("vvvvvvvvvvdddvvvvvvv");
 +//        return false;  //TODO
 +//    }
  
        @Override
 -      public boolean terminateAllInstances(String clusterId) {
 -
 -              boolean isAtLeastOneTerminated = false;
 +      public void terminateAllInstances(String clusterId) throws 
IllegalArgumentException, InvalidClusterException {
  
 -
 -              log.info("Starting to terminate all instances of domain : "
 +              log.info("Starting to terminate all instances of cluster : "
                                + clusterId);
 -
 -              ServiceContext serviceCtxt = dataHolder
 -                              .getServiceContextFromDomain(clusterId);
 -
 -              if (serviceCtxt == null) {
 -                      String msg = "Not a registered service: domain - " + 
clusterId;
 -                      log.fatal(msg);
 -                      throw new CloudControllerException(msg);
 -              }
 -
 -              // load Cartridge, if null
 -              serviceCtxt.setCartridge(loadCartridge(
 -                                      serviceCtxt.getCartridgeType(),
 -                                      dataHolder.getCartridges()));
 -              //}
 -
 -              if (serviceCtxt.getCartridge() == null) {
 -                      String msg = "There's no registered Cartridge found. 
Domain - "
 -                                      + clusterId;
 -                      log.fatal(msg);
 -                      throw new CloudControllerException(msg);
 -              }
 -
 -        for (IaasProvider iaas : serviceCtxt.getCartridge().getIaases()) {
 -
 -                      IaasContext ctxt = 
serviceCtxt.getIaasContext(iaas.getType());
 -
 -                      if (ctxt == null) {
 -                              log.error("Iaas Context for " + iaas.getType()
 -                                              + " not found. Cannot terminate 
instances");
 -                              continue;
 -                      }
 -
 -                      ArrayList<String> temp = new 
ArrayList<String>(ctxt.getNodeIds());
 -                      for (String id : temp) {
 -                              if (id != null) {
 -                                      // terminate it!
 -                    Collection<Member> members = 
TopologyManager.getInstance().getTopology().
 -                            getService(serviceCtxt.getCartridgeType()).
 -                            
getCluster(serviceCtxt.getClusterId()).getMembers();
 -                    for (Iterator iterator = members.iterator(); 
iterator.hasNext();) {
 -                         Member member = (Member) iterator.next();
 -                         terminate(iaas, ctxt, member.getIaasNodeId(), 
member.getPartition());
 -                    }
 -
 -                                      // log information
 -                                      logTermination(id, ctxt, serviceCtxt);
 -
 -                                      isAtLeastOneTerminated = true;
 -                              }
 -                      }
 +              
 +              if(clusterId == null) {
 +                  String msg = "Instance termination failed. Cluster id is 
null.";
 +                  log.error(msg);
 +                  throw new IllegalArgumentException(msg);
                }
 -
 -              if (isAtLeastOneTerminated) {
 -                      return true;
 +              
 +              List<MemberContext> ctxts = 
dataHolder.getMemberContextsOfClusterId(clusterId);
 +              
 +              if(ctxts == null) {
 +                  String msg = "Instance termination failed. No members found 
for cluster id: "+clusterId;
 +                  log.error(msg);
 +                  throw new InvalidClusterException(msg);
                }
 -
 -              log.info("Termination of an instance which is belong to domain 
'"
 -                              + clusterId + "', failed! Reason: No matching "
 -                              + "running instance found in lastly used 
IaaS.");
 -
 -              return false;
 +              
 +              ThreadExecutor exec = new ThreadExecutor();
 +              for (MemberContext memberContext : ctxts) {
 +            exec.execute(new InstanceTerminator(memberContext));
 +        }
 +              
 +              exec.shutdown();
 +
 +//            ServiceContext serviceCtxt = dataHolder
 +//                            .getServiceContextFromDomain(clusterId);
 +//
 +//            if (serviceCtxt == null) {
 +//                    String msg = "Not a registered service: domain - " + 
clusterId;
 +//                    log.fatal(msg);
 +//                    throw new CloudControllerException(msg);
 +//            }
 +//
 +//            // load Cartridge, if null
 +//            serviceCtxt.setCartridge(loadCartridge(
 +//                                    serviceCtxt.getCartridgeType(),
 +//                                    dataHolder.getCartridges()));
 +//            //}
 +//
 +//            if (serviceCtxt.getCartridge() == null) {
 +//                    String msg = "There's no registered Cartridge found. 
Domain - "
 +//                                    + clusterId;
 +//                    log.fatal(msg);
 +//                    throw new CloudControllerException(msg);
 +//            }
 +
 +//        for (IaasProvider iaas : serviceCtxt.getCartridge().getIaases()) {
 +//
 +//                    IaasContext ctxt = 
serviceCtxt.getIaasContext(iaas.getType());
 +//
 +//                    if (ctxt == null) {
 +//                            log.error("Iaas Context for " + iaas.getType()
 +//                                            + " not found. Cannot terminate 
instances");
 +//                            continue;
 +//                    }
 +//
 +//                    ArrayList<String> temp = new 
ArrayList<String>(ctxt.getNodeIds());
 +//                    for (String id : temp) {
 +//                            if (id != null) {
 +//                                    // terminate it!
 +//                    //TODO need to enable once partition added to the 
topology
 +//                    /*Collection<Member> members = 
TopologyManager.getInstance().getTopology().
 +//                            getService(serviceCtxt.getCartridgeType()).
 +//                            
getCluster(serviceCtxt.getClusterId()).getMembers();
 +//                    for (Iterator iterator = members.iterator(); 
iterator.hasNext();) {
 +//                         Member member = (Member) iterator.next();
 +//                         terminate(iaas, ctxt, member.getIaasNodeId(), 
member.getPartition());
 +//                    }*/
 +//
 +//                                    // log information
 +//                                    logTermination(id, ctxt, serviceCtxt);
 +//
 +//                                    isAtLeastOneTerminated = true;
 +//                            }
 +//                    }
 +//            }
 +//
 +//            if (isAtLeastOneTerminated) {
 +//                    return true;
 +//            }
 +//
 +//            log.info("Termination of an instance which is belong to domain 
'"
 +//                            + clusterId + "', failed! Reason: No matching "
 +//                            + "running instance found in lastly used 
IaaS.");
 +//
 +//            return false;
  
        }
  
@@@ -1307,95 -1060,20 +1291,96 @@@
                //subDomain = checkSubDomain(subDomain);
  
                // find the service context
 -              ServiceContext subjectedSerCtxt = dataHolder
 -                              .getServiceContextFromDomain(clusterId);
 -        TopologyBuilder.handleClusterRemoved(subjectedSerCtxt);
 +//            ServiceContext subjectedSerCtxt = dataHolder
 +//                            .getServiceContextFromDomain(clusterId);
 +        
 +        
 +        
 +//        TopologyBuilder.handleClusterRemoved(subjectedSerCtxt);
 +
 +//            if (subjectedSerCtxt == null) {
 +//                    throw new UnregisteredClusterException(
 +//                                    "No registered service found for 
domain: " + clusterId);
 +//            }
 +//
 +//            // get the service definition file.
 +//            File serviceDefFile = subjectedSerCtxt.getFile();
 +//
 +//            // delete that file, so that it gets automatically undeployed.
 +//            return serviceDefFile.delete();
 +      }
  
 -              if (subjectedSerCtxt == null) {
 -                      throw new UnregisteredServiceException(
 -                                      "No registered service found for 
domain: " + clusterId);
 -              }
++              
  
 -              // get the service definition file.
 -              File serviceDefFile = subjectedSerCtxt.getFile();
 +    @Override
 +    public boolean validateDeploymentPolicy(String cartridgeType, 
DeploymentPolicy deploymentPolicy) 
 +            throws InvalidPartitionException, InvalidCartridgeTypeException {
 +
 +        Map<String, IaasProvider> partitionToIaasProviders = new 
ConcurrentHashMap<String, IaasProvider>();
 +        
 +        Cartridge cartridge = dataHolder.getCartridge(cartridgeType);
 +        
 +        if(cartridge == null) {
 +            String msg = "Invalid Cartridge Type: "+cartridgeType;
 +            log.error(msg);
 +            throw new InvalidCartridgeTypeException(msg);
 +        }
 +        
 +        if(deploymentPolicy == null) {
 +            String msg = "Deployment Policy is null.";
 +            log.error(msg);
 +            throw new InvalidPartitionException(msg);
 +        }
 +        
 +        for (PartitionGroup partitionGroup : 
deploymentPolicy.getPartitionGroups()) {
 +            for (Partition partition : partitionGroup.getPartitions()) {
 +                String provider = partition.getProvider();
 +                IaasProvider iaasProvider = 
cartridge.getIaasProvider(provider);
 +                
 +                if(iaasProvider == null) {
 +                    String msg = "Invalid Partition - "+partition.toString() 
+", in "+deploymentPolicy.toString()+
 +                            ". Cause: Iaas Provider is null for: "+provider;
 +                    log.error(msg);
 +                    throw new InvalidPartitionException(msg);
 +                }
 +                
 +                Iaas iaas = iaasProvider.getIaas();
 +                PartitionValidator validator = iaas.getPartitionValidator();
 +                validator.setIaasProvider(iaasProvider);
 +                IaasProvider updatedIaasProvider = 
validator.validate(partition.getId(), 
 +                                 
CloudControllerUtil.toJavaUtilProperties(partition.getProperties()));
 +                // add to a temporary Map
 +                partitionToIaasProviders.put(partition.getId(), 
updatedIaasProvider);
 +                
 +            }
 +        }
 +        
 +        // if and only if the deployment policy valid
 +        cartridge.addIaasProviders(partitionToIaasProviders);
 +        
 +        return true;
 +    }
  
 -              // delete that file, so that it gets automatically undeployed.
 -              return serviceDefFile.delete();
 -      }
 +    @Override
 +    public boolean validatePartition(Partition partition) throws 
InvalidPartitionException {
 +        String provider = partition.getProvider();
 +        IaasProvider iaasProvider = dataHolder.getIaasProvider(provider);
 +
 +        if (iaasProvider == null) {
 +            String msg =
 +                         "Invalid Partition - " + partition.toString()+". 
Cause: Iaas Provider is null for: "+provider;
 +            log.error(msg);
 +            throw new InvalidPartitionException(msg);
 +        }
 +
 +        Iaas iaas = iaasProvider.getIaas();
 +        PartitionValidator validator = iaas.getPartitionValidator();
 +        validator.setIaasProvider(iaasProvider);
 +        validator.validate(partition.getId(),
 +                           
CloudControllerUtil.toJavaUtilProperties(partition.getProperties()));
 +        TopologyBuilder.handlePartitionCreated(partition);
 +
 +        return true;
 +    }
  
  }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/61f8d8c8/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/61f8d8c8/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventSender.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/61f8d8c8/components/org.apache.stratos.messaging/pom.xml
----------------------------------------------------------------------

Reply via email to