Repository: stratos
Updated Branches:
  refs/heads/stratos-4.1.x 477686c6a -> 0b913ebdc


Fix registry transactions exception handling


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

Branch: refs/heads/stratos-4.1.x
Commit: 0b913ebdcb40d173d2fa4548c7e8e4217dfa4e6a
Parents: 477686c
Author: Akila Perera <[email protected]>
Authored: Wed Sep 16 03:35:44 2015 +0530
Committer: Akila Perera <[email protected]>
Committed: Wed Sep 16 03:35:44 2015 +0530

----------------------------------------------------------------------
 .../autoscaler/registry/RegistryManager.java    |  5 +-
 .../controller/registry/RegistryManager.java    | 17 ++---
 .../manager/registry/RegistryManager.java       | 17 ++---
 .../service/registry/MetadataApiRegistry.java   | 68 ++++++++++++--------
 .../mock/iaas/persistence/RegistryManager.java  | 16 +++--
 .../rest/endpoint/api/StratosApiV41Utils.java   | 14 ++--
 6 files changed, 81 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/0b913ebd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
index e16d3f5..09a47a2 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
@@ -109,11 +109,10 @@ public class RegistryManager {
                 registryService.rollbackTransaction();
             } catch (RegistryException e1) {
                 if (log.isErrorEnabled()) {
-                    log.error("Could not rollback transaction", e);
+                    log.error("Could not rollback transaction", e1);
                 }
             }
             String message = "Could not delete resource at " + resourcePath;
-            log.error(message);
             throw new AutoScalerException(message, e);
         }
     }
@@ -143,10 +142,8 @@ public class RegistryManager {
 
         try {
             registryService.beginTransaction();
-
             Resource nodeResource = registryService.newResource();
             nodeResource.setContent(Serializer.serializeToByteArray(dataObj));
-
             registryService.put(resourcePath, nodeResource);
             registryService.commitTransaction();
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/0b913ebd/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java
index e7360bc..b935eaa 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java
@@ -65,23 +65,24 @@ public class RegistryManager {
             PrivilegedCarbonContext ctx = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
             ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
             ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
-
             registry.beginTransaction();
-
             Resource nodeResource = registry.newResource();
             nodeResource.setContent(serializeToByteArray(serializableObject));
             registry.put(resourcePath, nodeResource);
-
             registry.commitTransaction();
-
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Resource persisted successfully in 
registry: [resource-path] %s",
                         resourcePath));
             }
         } catch (Exception e) {
+            try {
+                registry.rollbackTransaction();
+            } catch (Exception e1){
+                if (log.isErrorEnabled()) {
+                    log.error("Could not rollback transaction", e1);
+                }
+            }
             String msg = "Failed to persist resource in registry: " + 
resourcePath;
-            registry.rollbackTransaction();
-            log.error(msg, e);
             throw new RegistryException(msg, e);
         }
     }
@@ -132,10 +133,10 @@ public class RegistryManager {
                 registry.rollbackTransaction();
             } catch (RegistryException e1) {
                 if (log.isErrorEnabled()) {
-                    log.error("Could not rollback transaction", e);
+                    log.error("Could not rollback transaction", e1);
                 }
             }
-            log.error("Could not remove registry resource: [resource-path] " + 
resourcePath);
+            throw new RegistryException("Could not remove registry resource: 
[resource-path] " + resourcePath, e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0b913ebd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/registry/RegistryManager.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/registry/RegistryManager.java
index f06939f..e3deed0 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/registry/RegistryManager.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/registry/RegistryManager.java
@@ -65,23 +65,24 @@ public class RegistryManager {
             PrivilegedCarbonContext ctx = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
             ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
             ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
-
             registry.beginTransaction();
-
             Resource nodeResource = registry.newResource();
             nodeResource.setContent(serializeToByteArray(serializableObject));
             registry.put(resourcePath, nodeResource);
-
             registry.commitTransaction();
-
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Resource persisted successfully in 
registry: [resource-path] %s",
                         resourcePath));
             }
         } catch (Exception e) {
+           try {
+               registry.rollbackTransaction();
+           }catch (Exception e1){
+               if (log.isErrorEnabled()) {
+                   log.error("Could not rollback transaction", e1);
+               }
+           }
             String msg = "Failed to persist resource in registry: " + 
resourcePath;
-            registry.rollbackTransaction();
-            log.error(msg, e);
             throw new RegistryException(msg, e);
         }
     }
@@ -132,10 +133,10 @@ public class RegistryManager {
                 registry.rollbackTransaction();
             } catch (RegistryException e1) {
                 if (log.isErrorEnabled()) {
-                    log.error("Could not rollback transaction", e);
+                    log.error("Could not rollback transaction", e1);
                 }
             }
-            log.error("Could not remove registry resource: [resource-path] " + 
resourcePath);
+            throw new RegistryException("Could not remove registry resource: 
[resource-path] " + resourcePath, e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0b913ebd/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/MetadataApiRegistry.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/MetadataApiRegistry.java
 
b/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/MetadataApiRegistry.java
index 8cd9cb6..abd3f4b 100644
--- 
a/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/MetadataApiRegistry.java
+++ 
b/components/org.apache.stratos.metadata.service/src/main/java/org/apache/stratos/metadata/service/registry/MetadataApiRegistry.java
@@ -129,8 +129,6 @@ public class MetadataApiRegistry implements DataStore {
             PrivilegedCarbonContext ctx = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
             ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
             ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
-
-            //registry.beginTransaction();
             Resource nodeResource = null;
             if (registry.resourceExists(resourcePath)) {
                 nodeResource = registry.get(resourcePath);
@@ -186,22 +184,32 @@ public class MetadataApiRegistry implements DataStore {
         ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
         ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
 
-        registry.beginTransaction();
-        Resource nodeResource;
-        if (registry.resourceExists(resourcePath)) {
-            nodeResource = registry.get(resourcePath);
-        } else {
-            log.warn(String.format("Registry [resource] %s not found ", 
resourcePath));
-            return false;
-        }
-        nodeResource.removePropertyValue(propertyName, valueToRemove);
-        registry.put(resourcePath, nodeResource);
-        registry.commitTransaction();
-
-        log.info(String.format("Application %s property %s value %s is removed 
from metadata ",
-                applicationId, propertyName, valueToRemove));
+        try {
+            registry.beginTransaction();
+            Resource nodeResource;
+            if (registry.resourceExists(resourcePath)) {
+                nodeResource = registry.get(resourcePath);
+            } else {
+                log.warn(String.format("Registry [resource] %s not found ", 
resourcePath));
+                return false;
+            }
+            nodeResource.removePropertyValue(propertyName, valueToRemove);
+            registry.put(resourcePath, nodeResource);
+            registry.commitTransaction();
 
-        return true;
+            log.info(String.format("Application %s property %s value %s is 
removed from metadata ",
+                    applicationId, propertyName, valueToRemove));
+            return true;
+        }catch (Exception e){
+            try {
+                registry.rollbackTransaction();
+            } catch (RegistryException e1) {
+                if (log.isErrorEnabled()) {
+                    log.error("Could not rollback transaction", e1);
+                }
+            }
+            throw new RegistryException("Could not remove registry resource: 
[resource-path] " + resourcePath, e);
+        }
     }
 
     /**
@@ -259,19 +267,27 @@ public class MetadataApiRegistry implements DataStore {
         PrivilegedCarbonContext ctx = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
         ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
         ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
-
-        Registry registry;
+        Registry registry = getRegistry();
         String resourcePath = mainResource + applicationId;
-        registry = getRegistry();
-        registry.beginTransaction();
-        if (registry.resourceExists(resourcePath)) {
-            registry.delete(resourcePath);
+        try {
+            registry.beginTransaction();
+            if (registry.resourceExists(resourcePath)) {
+                registry.delete(resourcePath);
+                log.info(String.format("Application [application-id ] 
properties removed from registry %s",
+                        applicationId));
+            }
             registry.commitTransaction();
-            log.info(String.format("Application [application-id ] properties 
removed from registry %s", applicationId));
             return true;
+        }catch (Exception e){
+            try {
+                registry.rollbackTransaction();
+            } catch (RegistryException e1) {
+                if (log.isErrorEnabled()) {
+                    log.error("Could not rollback transaction", e1);
+                }
+            }
+            throw new RegistryException("Could not remove registry resource: 
[resource-path] " + resourcePath, e);
         }
-
-        return false;
     }
 
     public boolean removePropertyFromApplication(String applicationId, String 
propertyName)

http://git-wip-us.apache.org/repos/asf/stratos/blob/0b913ebd/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/persistence/RegistryManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/persistence/RegistryManager.java
 
b/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/persistence/RegistryManager.java
index dbd2914..714a985 100644
--- 
a/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/persistence/RegistryManager.java
+++ 
b/components/org.apache.stratos.mock.iaas/src/main/java/org/apache/stratos/mock/iaas/persistence/RegistryManager.java
@@ -73,10 +73,14 @@ public class RegistryManager implements PersistenceManager {
                         resourcePath));
             }
         } catch (Exception e) {
-            String msg = "Failed to persist resource in registry: " + 
resourcePath;
-            registry.rollbackTransaction();
-            log.error(msg, e);
-            throw new RegistryException(msg, e);
+            try {
+                registry.rollbackTransaction();
+            } catch (RegistryException e1) {
+                if (log.isErrorEnabled()) {
+                    log.error("Could not rollback transaction", e1);
+                }
+            }
+            throw new RegistryException("Failed to persist resource in 
registry: [resource-path] " + resourcePath, e);
         }
     }
 
@@ -128,10 +132,10 @@ public class RegistryManager implements 
PersistenceManager {
                 registry.rollbackTransaction();
             } catch (RegistryException e1) {
                 if (log.isErrorEnabled()) {
-                    log.error("Could not rollback transaction", e);
+                    log.error("Could not rollback transaction", e1);
                 }
             }
-            log.error("Could not remove registry resource: [resource-path] " + 
resourcePath);
+            throw new RegistryException("Could not remove registry resource: 
[resource-path] " + resourcePath, e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0b913ebd/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 b682884..f6e075c 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
@@ -1923,7 +1923,7 @@ public class StratosApiV41Utils {
         }
     }
 
-    private static void clearMetadata(String applicationId) throws 
RegistryException {
+    private static void clearMetadata(String applicationId) throws 
RestAPIException {
 
         PrivilegedCarbonContext ctx = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
         ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
@@ -1936,12 +1936,18 @@ public class StratosApiV41Utils {
             registry.beginTransaction();
             if (registry.resourceExists(resourcePath)) {
                 registry.delete(resourcePath);
-                registry.commitTransaction();
                 log.info(String.format("Application metadata removed: 
[application-id] %s", applicationId));
             }
+            registry.commitTransaction();
         } catch (RegistryException e) {
-            registry.rollbackTransaction();
-            throw e;
+            try {
+                registry.rollbackTransaction();
+            }
+            catch (RegistryException e1) {
+                log.error("Could not rollback transaction", e1);
+            }
+            throw new RestAPIException(String.format("Application metadata 
removed: [application-id] %s",
+                    applicationId), e);
         }
     }
 

Reply via email to