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