You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stratos.apache.org by "Akila (JIRA)" <ji...@apache.org> on 2015/09/16 08:59:45 UTC

[jira] [Updated] (STRATOS-1565) Fix registry transactions exception handling

     [ https://issues.apache.org/jira/browse/STRATOS-1565?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Akila updated STRATOS-1565:
---------------------------
    Description: 
When performing Registry transactions, "beginTransaction" and "commitTransaction" methods should always be in a try block and RegistryException should be caught and rolled back by calling "rollbackTransaction" method. "rollbackTransaction" should also be in another try block and rollback exception should be properly logged.

For eg:

try {
            registryService.beginTransaction();
            registryService.delete(resourcePath);
            registryService.commitTransaction();
        } catch (RegistryException e) {
            try {
                registryService.rollbackTransaction();
            } catch (RegistryException e1) {
                if (log.isErrorEnabled()) {
                    log.error("Could not rollback transaction", e1);
                }
            }
            String message = "Could not delete resource at " + resourcePath;
            throw new AutoScalerException(message, e);
        }

Buggy registry operations could result in unreleased locks.

  was:
When performing Registry transactions, "beginTransaction" and "commitTransaction" methods should always be in a try block and RegistryException should be caught and rolled back by calling "rollbackTransaction" method. "rollbackTransaction" should also be in another try block and rollback exception should be properly logged.

For eg:

try {
            registryService.beginTransaction();
            registryService.delete(resourcePath);
            registryService.commitTransaction();
        } catch (RegistryException e) {
            try {
                registryService.rollbackTransaction();
            } catch (RegistryException e1) {
                if (log.isErrorEnabled()) {
                    log.error("Could not rollback transaction", e1);
                }
            }
            String message = "Could not delete resource at " + resourcePath;
            throw new AutoScalerException(message, e);
        }

Buggy registry operations could result in unreleased locks. Following error was observed due to this issue.

INFO - [2015-09-14 06:40:49,535] ERROR {org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO} -  Failed to check the existence of the resource /_system/governance/mock.iaas/instances. Timeout trying to lock table "REG_RESOURCE"; SQL statement:
INFO - SELECT REG_VERSION FROM REG_RESOURCE WHERE REG_PATH_ID=? AND REG_NAME=? AND REG_TENANT_ID=? [50200-140]
INFO - org.h2.jdbc.JdbcSQLException: Timeout trying to lock table "REG_RESOURCE"; SQL statement:
INFO - SELECT REG_VERSION FROM REG_RESOURCE WHERE REG_PATH_ID=? AND REG_NAME=? AND REG_TENANT_ID=? [50200-140]
INFO - 	at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
INFO - 	at org.h2.message.DbException.get(DbException.java:167)
INFO - 	at org.h2.message.DbException.get(DbException.java:144)
INFO - 	at org.h2.table.RegularTable.doLock(RegularTable.java:466)
INFO - 	at org.h2.table.RegularTable.lock(RegularTable.java:404)
INFO - 	at org.h2.table.TableFilter.lock(TableFilter.java:139)
INFO - 	at org.h2.command.dml.Select.queryWithoutCache(Select.java:554)
INFO - 	at org.h2.command.dml.Query.query(Query.java:241)
INFO - 	at org.h2.command.CommandContainer.query(CommandContainer.java:80)
INFO - 	at org.h2.command.Command.executeQuery(Command.java:132)
INFO - 	at org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:96)
INFO - 	at org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.getVersion(JDBCResourceDAO.java:197)
INFO - 	at org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.resourceExists(JDBCResourceDAO.java:147)
INFO - 	at org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.resourceExists(JDBCResourceDAO.java:156) 


> Fix registry transactions exception handling
> --------------------------------------------
>
>                 Key: STRATOS-1565
>                 URL: https://issues.apache.org/jira/browse/STRATOS-1565
>             Project: Stratos
>          Issue Type: Bug
>    Affects Versions: 4.1.2
>            Reporter: Akila
>             Fix For: 4.1.3
>
>
> When performing Registry transactions, "beginTransaction" and "commitTransaction" methods should always be in a try block and RegistryException should be caught and rolled back by calling "rollbackTransaction" method. "rollbackTransaction" should also be in another try block and rollback exception should be properly logged.
> For eg:
> try {
>             registryService.beginTransaction();
>             registryService.delete(resourcePath);
>             registryService.commitTransaction();
>         } catch (RegistryException e) {
>             try {
>                 registryService.rollbackTransaction();
>             } catch (RegistryException e1) {
>                 if (log.isErrorEnabled()) {
>                     log.error("Could not rollback transaction", e1);
>                 }
>             }
>             String message = "Could not delete resource at " + resourcePath;
>             throw new AutoScalerException(message, e);
>         }
> Buggy registry operations could result in unreleased locks.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)