You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/03/27 22:29:46 UTC

stratos git commit: Adding validation to avoid applications being deleted until its undeployment process is completed

Repository: stratos
Updated Branches:
  refs/heads/master 427d66ef5 -> d2615a5dc


Adding validation to avoid applications being deleted until its undeployment process is completed


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

Branch: refs/heads/master
Commit: d2615a5dc76068a374cc054d124b3a0542b44ca1
Parents: 427d66e
Author: Imesh Gunaratne <im...@apache.org>
Authored: Sat Mar 28 02:59:28 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Sat Mar 28 02:59:28 2015 +0530

----------------------------------------------------------------------
 .../applications/ApplicationHolder.java         |  2 +-
 .../applications/topic/ApplicationBuilder.java  | 19 +++---
 .../services/impl/AutoscalerServiceImpl.java    | 66 +++++++++++---------
 .../services/impl/InstanceTerminator.java       |  4 +-
 ...tionInstanceInactivatedMessageProcessor.java |  8 +--
 5 files changed, 51 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/d2615a5d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationHolder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationHolder.java
index 60b3d9e..2f09880 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationHolder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationHolder.java
@@ -104,7 +104,7 @@ public class ApplicationHolder {
             getApplications().removeApplication(applicationId);
             AutoscalerUtil.removeApplication(applicationId);
             if (log.isDebugEnabled()) {
-                log.debug("Application [ " + applicationId + " ] removed from applications");
+                log.debug("Application [ " + applicationId + " ] removed from application holder");
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d2615a5d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
index 52b43f5..ae34beb 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
@@ -183,26 +183,24 @@ public class ApplicationBuilder {
 
     public static void handleApplicationInstanceTerminatingEvent(String appId, String instanceId) {
         if (log.isDebugEnabled()) {
-            log.debug("Handling application Terminating event: [application-id] " + appId +
+            log.debug("Handling application terminating event: [application-id] " + appId +
                     " [instance] " + instanceId);
         }
 
         Applications applications = ApplicationHolder.getApplications();
         Application application = applications.getApplication(appId);
-        //update the status of the Group
+        // update the status of the Group
         if (application == null) {
-            log.warn(String.format("Application does not exist: [application-id] %s",
-                    appId));
+            log.warn(String.format("Application does not exist: [application-id] %s", appId));
             return;
         }
 
         ApplicationStatus status = ApplicationStatus.Terminating;
         ApplicationInstance applicationInstance = application.getInstanceContexts(instanceId);
         if (applicationInstance.isStateTransitionValid(status)) {
-            //setting the status, persist and publish
+            // setting the status, persist and publish
             application.setStatus(status, instanceId);
-            updateApplicationMonitor(appId, status, applicationInstance.getNetworkPartitionId(),
-                    instanceId);
+            updateApplicationMonitor(appId, status, applicationInstance.getNetworkPartitionId(), instanceId);
             ApplicationHolder.persistApplication(application);
             ApplicationsEventPublisher.sendApplicationInstanceInactivatedEvent(appId, instanceId);
         } else {
@@ -248,6 +246,7 @@ public class ApplicationBuilder {
                 appClusterDataToSend.add(newClusterData);
             }
 
+            AutoscalerContext.getInstance().removeApplicationContext(appId);
             ApplicationHolder.removeApplication(appId);
 
         } finally {
@@ -299,8 +298,8 @@ public class ApplicationBuilder {
                     //stopping application thread
                     applicationMonitor.destroy();
                     AutoscalerContext.getInstance().removeAppMonitor(appId);
-                    log.info("Application run time is removed: [application-id] " + appId);
-                    //Removing the application from memory and registry
+                    log.info("Application runtime is removed: [application-id] " + appId);
+                    // Removing the application from memory and registry
                     PrivilegedCarbonContext.startTenantFlow();
                     try {
                         PrivilegedCarbonContext.getThreadLocalCarbonContext().
@@ -322,7 +321,7 @@ public class ApplicationBuilder {
         }
     }
 
-    public static boolean handleApplicationUndeployed(String applicationId) {
+    public static boolean handleApplicationUnDeployedEvent(String applicationId) {
         if (log.isDebugEnabled()) {
             log.debug("Handling application terminating event: [application-id] " + applicationId);
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d2615a5d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 93812d5..25f9d7e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -363,27 +363,27 @@ public class AutoscalerServiceImpl implements AutoscalerService {
                 log.info("Starting to undeploy application: [application-id] " + applicationId);
             }
 
-            ApplicationContext application = AutoscalerContext.getInstance().getApplicationContext(applicationId);
-            if ( application == null){
-                String msg = String.format("Application not found : [application-id] %s", applicationId);
+            ApplicationContext applicationContext = AutoscalerContext.getInstance().getApplicationContext(applicationId);
+            Application application = ApplicationHolder.getApplications().getApplication(applicationId);
+            if ((applicationContext == null) || (application == null)) {
+                String msg = String.format("Application not found: [application-id] %s", applicationId);
                 throw new RuntimeException(msg);
             }
 
-            if (!application.getStatus().equals(ApplicationContext.STATUS_DEPLOYED)) {
+            if (!applicationContext.getStatus().equals(ApplicationContext.STATUS_DEPLOYED)) {
                 String message = String.format("Application is not deployed: [application-id] %s", applicationId);
                 log.error(message);
                 throw new RuntimeException(message);
             }
 
-            // Remove Application SignUp(s) in stratos manager
-            removeApplicationSignUp(application);
+            // Remove application signup(s) in stratos manager
+            removeApplicationSignUp(applicationContext);
             
             // Remove network partition algorithm context
             AutoscalerContext.getInstance().removeNetworkPartitionAlgorithmContext(applicationId);
             
-            ApplicationBuilder.handleApplicationUndeployed(applicationId);
+            ApplicationBuilder.handleApplicationUnDeployedEvent(applicationId);
 
-            ApplicationContext applicationContext = AutoscalerContext.getInstance().getApplicationContext(applicationId);
             applicationContext.setStatus(ApplicationContext.STATUS_CREATED);
             AutoscalerContext.getInstance().updateApplicationContext(applicationContext);
             
@@ -399,29 +399,35 @@ public class AutoscalerServiceImpl implements AutoscalerService {
 
     @Override
     public void deleteApplication(String applicationId) {
-     
-    	ApplicationContext appContext = AutoscalerContext.getInstance().getApplicationContext(applicationId);
-    	
-    	if (appContext == null) {
-            String msg = String.format("Application not found : [application-id] %s", applicationId);
-            throw new RuntimeException(msg);
-        }
-        
-    	if (ApplicationContext.STATUS_DEPLOYED.equals(appContext.getStatus())) {
-            String msg = String.format("Application is deployed : [application-id] %s. Please undeploy before deleting it.", applicationId);
-            throw new AutoScalerException(msg);
-        }
-    	
-    	AutoscalerContext.getInstance().removeApplicationContext(applicationId);
-        
-        if (ApplicationHolder.getApplications().getApplication(applicationId) == null) {
-            String msg = String.format("Application not found : [application-id] %s", applicationId);
-            throw new RuntimeException(msg);
+
+        try {
+            ApplicationContext applicationContext = AutoscalerContext.getInstance().getApplicationContext(applicationId);
+            Application application = ApplicationHolder.getApplications().getApplication(applicationId);
+            if ((applicationContext == null) || (application == null)) {
+                String msg = String.format("Application not found: [application-id] %s", applicationId);
+                throw new RuntimeException(msg);
+            }
+
+            if (ApplicationContext.STATUS_DEPLOYED.equals(applicationContext.getStatus())) {
+                String msg = String.format("Application is in deployed state, please undeploy it before deleting: " +
+                        "[application-id] %s", applicationId);
+                throw new AutoScalerException(msg);
+            }
+
+            if (application.getInstanceContextCount() > 0) {
+                String message = String.format("Application undeployment process is still in progress: " +
+                        "[application-id] %s", applicationId);
+                log.error(message);
+                throw new RuntimeException(message);
+            }
+
+            ApplicationBuilder.handleApplicationRemoval(applicationId);
+            log.info(String.format("Application deleted successfully: [application-id] %s", applicationId));
+        } catch (Exception e) {
+            String message = String.format("Could not delete application: [application-id] %s", applicationId);
+            log.error(message, e);
+            throw new RuntimeException(message, e);
         }
-        ApplicationBuilder.handleApplicationRemoval(applicationId);
-        RegistryManager.getInstance().removeApplication(applicationId);
-        
-        log.info(String.format("Application deleted successfully: [application-id] ", applicationId));
     }
 
     public void updateClusterMonitor(String clusterId, Properties properties) throws InvalidArgumentException {

http://git-wip-us.apache.org/repos/asf/stratos/blob/d2615a5d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceTerminator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceTerminator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceTerminator.java
index 968cb9e..f950059 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceTerminator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceTerminator.java
@@ -41,10 +41,10 @@ public class InstanceTerminator implements Runnable {
 
     public InstanceTerminator(MemberContext memberContext) {
         String provider = memberContext.getPartition().getProvider();
-        IaasProvider iaasProvider = CloudControllerContext.getInstance().getIaasProvider(memberContext.getCartridgeType(), provider);
+        IaasProvider iaasProvider = CloudControllerContext.getInstance()
+                .getIaasProvider(memberContext.getCartridgeType(), provider);
         this.iaas = iaasProvider.getIaas();
         this.memberContext = memberContext;
-
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/stratos/blob/d2615a5d/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/ApplicationInstanceInactivatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/ApplicationInstanceInactivatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/ApplicationInstanceInactivatedMessageProcessor.java
index 7e93050..bc680e1 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/ApplicationInstanceInactivatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/ApplicationInstanceInactivatedMessageProcessor.java
@@ -92,23 +92,21 @@ public class ApplicationInstanceInactivatedMessageProcessor extends MessageProce
             ApplicationInstance context = application.getInstanceContexts(event.getInstanceId());
             if (context == null) {
                 if (log.isWarnEnabled()) {
-                    log.warn(String.format("Application Instance not exists in Group: [AppId] %s" +
-                            "[instanceId] %s", event.getAppId(), event.getInstanceId()));
+                    log.warn(String.format("Application instance not exists in group: [application-id] %s" +
+                            "[instance-id] %s", event.getAppId(), event.getInstanceId()));
                     return false;
                 }
             }
             ApplicationStatus status = ApplicationStatus.Inactive;
             if (!context.isStateTransitionValid(status)) {
-                log.error("Invalid State transfer from [ " + context.getStatus() +
+                log.error("Invalid state transfer from [ " + context.getStatus() +
                         " ] to [ " + status + " ]");
             }
             context.setStatus(status);
-
         }
 
         // Notify event listeners
         notifyEventListeners(event);
         return true;
-
     }
 }