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);
}