camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shivakumar (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CAMEL-6144) Optimistic Locking Required for JdbcAggregationRepository in order to for Camel Aggregation to work in a Clustered envronment
Date Fri, 08 Mar 2013 00:04:12 GMT
Shivakumar created CAMEL-6144:
---------------------------------

             Summary: Optimistic Locking Required for JdbcAggregationRepository in order to
for Camel Aggregation to work in a Clustered envronment
                 Key: CAMEL-6144
                 URL: https://issues.apache.org/jira/browse/CAMEL-6144
             Project: Camel
          Issue Type: Bug
    Affects Versions: 2.9.2
         Environment: Camel Aggregation in more than one server each of them using JDBCAggregationRepository
and using a common DB table to store aggregated exchanges.
            Reporter: Shivakumar


Listing two problems here. And a solution that is needed to fix these problems.

1) A Race condition leading to below ConstraintViolationException when two Camel Aggregator's
trying to insert into the AGGREGATION DB table for same correlationkey(ID). 

"org.hibernate.exception.ConstraintViolationException: ORA-00001: unique constraint (USLDB_UAT2.AGGREGATION_PK)
violated
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:74)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy171.executeUpdate(Unknown Source)
at org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback.doInPreparedStatement(AbstractLobCreatingPreparedStatementCallback.java:73)
at org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback.doInPreparedStatement(AbstractLobCreatingPreparedStatementCallback.java:1)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:587)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:615)
at org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository$1.doInTransaction(JdbcAggregationRepository.java:137)
at org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository$1.doInTransaction(JdbcAggregationRepository.java:113)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
at org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository.add(JdbcAggregationRepository.java:113)
at org.apache.camel.processor.aggregate.AggregateProcessor.doAggregation(AggregateProcessor.java:260)
at org.apache.camel.processor.aggregate.AggregateProcessor.process(AggregateProcessor.java:197)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(As..."

2) A similar Race condition happens when more than one Camel Aggregator(s) tries to update
a row in the AGGREGATION table. This problem does not lead into any exceptions. But it leads
into missing exchanges. Because both the Aggregator's are trying to update the same row in
the AGGREGATION table, But one update is overwritten by other update, thus losing an exchange.

SOLUTION:
==========
Optimistic locking should be enabled / applied  for JdbcAggregationRepository to handle this
race condition.



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message