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