You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by di...@apache.org on 2015/09/10 18:51:58 UTC

[2/3] stratos git commit: Validate whether multi-tenant applications have active signups, before undeploying the application

Validate whether multi-tenant applications have active signups, before undeploying the application


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

Branch: refs/heads/stratos-4.1.x
Commit: 89c821f641275ba5ece35546ccfdac37aecbbd78
Parents: 3af354c
Author: Dinithi <di...@wso2.com>
Authored: Thu Sep 10 16:28:17 2015 +0530
Committer: Dinithi <di...@wso2.com>
Committed: Thu Sep 10 16:28:17 2015 +0530

----------------------------------------------------------------------
 .../UnremovableApplicationException.java        |  27 +
 .../autoscaler/services/AutoscalerService.java  |   2 +-
 .../services/impl/AutoscalerServiceImpl.java    |  76 +-
 .../common/client/AutoscalerServiceClient.java  |   5 +-
 .../rest/endpoint/api/StratosApiV41Utils.java   |   9 +-
 .../src/main/resources/AutoscalerService.wsdl   | 754 ++++++++++---------
 6 files changed, 500 insertions(+), 373 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/89c821f6/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/UnremovableApplicationException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/UnremovableApplicationException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/UnremovableApplicationException.java
new file mode 100644
index 0000000..1d8fcb0
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/UnremovableApplicationException.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler.exception.application;
+
+import org.apache.stratos.autoscaler.exception.AutoScalerException;
+
+public class UnremovableApplicationException extends AutoScalerException {
+    public UnremovableApplicationException(String msg) {
+        super(msg);
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/89c821f6/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
index d984d64..c5091a4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
@@ -136,7 +136,7 @@ public interface AutoscalerService {
      * @return
      */
 
-    public boolean undeployApplication(String applicationId, boolean force);
+    public boolean undeployApplication(String applicationId, boolean force) throws Exception;
 
     /**
      * Delete an application

http://git-wip-us.apache.org/repos/asf/stratos/blob/89c821f6/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 738ced9..47b03bb 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
@@ -39,6 +39,7 @@ import org.apache.stratos.autoscaler.exception.*;
 import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
 import org.apache.stratos.autoscaler.exception.application.InvalidApplicationPolicyException;
 import org.apache.stratos.autoscaler.exception.application.InvalidServiceGroupException;
+import org.apache.stratos.autoscaler.exception.application.UnremovableApplicationException;
 import org.apache.stratos.autoscaler.exception.policy.*;
 import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
@@ -63,6 +64,7 @@ import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.common.partition.NetworkPartitionRef;
 import org.apache.stratos.common.partition.PartitionRef;
 import org.apache.stratos.common.util.CommonUtil;
+import org.apache.stratos.manager.service.stub.StratosManagerServiceApplicationSignUpExceptionException;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ApplicationSignUp;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ArtifactRepository;
 import org.apache.stratos.messaging.domain.application.Application;
@@ -464,7 +466,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         }
     }
 
-    public boolean undeployApplication(String applicationId, boolean force) {
+    public boolean undeployApplication(String applicationId, boolean force) throws RemoteException,
+            StratosManagerServiceApplicationSignUpExceptionException, UnremovableApplicationException {
 
         AutoscalerContext asCtx = AutoscalerContext.getInstance();
         ApplicationMonitor appMonitor = asCtx.getAppMonitor(applicationId);
@@ -474,39 +477,58 @@ public class AutoscalerServiceImpl implements AutoscalerService {
                     "hence returning", applicationId));
             return false;
         }
-        if (!force) {
-            // Graceful un-deployment flow
-            if (appMonitor.isTerminating()) {
-                log.info("Application monitor is already in terminating, graceful " +
-                        "un-deployment is has already been attempted thus not invoking again");
-                return false;
-            } else {
-                log.info(String.format("Gracefully un-deploying the [application] %s ", applicationId));
-                appMonitor.setTerminating(true);
-                undeployApplicationGracefully(applicationId);
+
+        boolean applicationSignUpExists =false;
+
+        ApplicationContext applicationContext = RegistryManager.getInstance().getApplicationContext(applicationId);
+        if(applicationContext.isMultiTenant()){
+            StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
+            ApplicationSignUp applicationSignUps[] = serviceClient.getApplicationSignUps(applicationId);
+
+            if (applicationSignUps != null) {
+                applicationSignUpExists = true;
             }
-        } else {
-            // force un-deployment flow
-            if (appMonitor.isTerminating()) {
+        }
 
-                if (appMonitor.isForce()) {
-                    log.warn(String.format("Force un-deployment is already in progress, " +
-                            "hence not invoking again " +
-                            "[application-id] %s", applicationId));
+        if (!applicationSignUpExists) {
+            if (!force) {
+                // Graceful un-deployment flow
+                if (appMonitor.isTerminating()) {
+                    log.info("Application monitor is already in terminating, graceful " +
+                            "un-deployment is has already been attempted thus not invoking again");
                     return false;
                 } else {
-                    log.info(String.format("Previous graceful un-deployment is in progress for " +
-                                    "[application-id] %s , thus  terminating instances directly",
-                            applicationId));
-                    appMonitor.setForce(true);
-                    terminateAllMembersAndClustersForcefully(applicationId);
+                    log.info(String.format("Gracefully un-deploying the [application] %s ", applicationId));
+                    appMonitor.setTerminating(true);
+                    undeployApplicationGracefully(applicationId);
                 }
             } else {
-                log.info(String.format("Forcefully un-deploying the application " + applicationId));
-                appMonitor.setTerminating(true);
-                appMonitor.setForce(true);
-                undeployApplicationGracefully(applicationId);
+                // force un-deployment flow
+                if (appMonitor.isTerminating()) {
+
+                    if (appMonitor.isForce()) {
+                        log.warn(String.format("Force un-deployment is already in progress, " +
+                                "hence not invoking again " +
+                                "[application-id] %s", applicationId));
+                        return false;
+                    } else {
+                        log.info(String.format("Previous graceful un-deployment is in progress for " +
+                                        "[application-id] %s , thus  terminating instances directly",
+                                applicationId));
+                        appMonitor.setForce(true);
+                        terminateAllMembersAndClustersForcefully(applicationId);
+                    }
+                } else {
+                    log.info(String.format("Forcefully un-deploying the application " + applicationId));
+                    appMonitor.setTerminating(true);
+                    appMonitor.setForce(true);
+                    undeployApplicationGracefully(applicationId);
+                }
             }
+        } else {
+            String msg = "Application could not undeploy since it has application signups";
+            log.error(msg);
+            throw new UnremovableApplicationException(msg);
         }
         return true;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/89c821f6/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
index 5d6bf16..fdbc54d 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
@@ -152,7 +152,10 @@ public class AutoscalerServiceClient {
     }
 
     public void undeployApplication(String applicationId, boolean force) throws
-            AutoscalerServiceApplicationDefinitionExceptionException, RemoteException {
+            AutoscalerServiceApplicationDefinitionExceptionException, RemoteException,
+            AutoscalerServiceRemoteExceptionException,
+            AutoscalerServiceStratosManagerServiceApplicationSignUpExceptionExceptionException,
+            AutoscalerServiceUnremovableApplicationExceptionException {
         stub.undeployApplication(applicationId, force);
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/89c821f6/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index b584cfe..6402251 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -1896,12 +1896,15 @@ public class StratosApiV41Utils {
         if (autoscalerServiceClient != null) {
             try {
                 autoscalerServiceClient.undeployApplication(applicationId, force);
-            } catch (RemoteException e) {
+            } catch (RemoteException | AutoscalerServiceApplicationDefinitionExceptionException
+                    | AutoscalerServiceRemoteExceptionException |
+                    AutoscalerServiceStratosManagerServiceApplicationSignUpExceptionExceptionException e) {
                 String message = "Could not undeploy application: [application-id] " + applicationId;
                 log.error(message, e);
                 throw new RestAPIException(message, e);
-            } catch (AutoscalerServiceApplicationDefinitionExceptionException e) {
-                String message = "Could not undeploy application: [application-id] " + applicationId;
+            } catch (AutoscalerServiceUnremovableApplicationExceptionException e) {
+                String message = "Could not undeploy application: [application-id] " + applicationId + " since it has" +
+                        " application signups";
                 log.error(message, e);
                 throw new RestAPIException(message, e);
             }