Hi,

On a concurrent update, the statement (just the statement, not the whole
transaction) is rolled back and re-run. This is done a few times, and after
some time (the configured timeout), the "timeout" exception is thrown.

Regards,
Thomas


On Tuesday, May 31, 2016, Martin Lichtin <[email protected]> wrote:

> We're sometimes seeing this exception when doing SELECT .. FOR UPDATE
> concurrently .
>
> Caused by: org.h2.jdbc.JdbcSQLException: Timeout trying to lock table ;
> SQL statement:
> SELECT * FROM SA.MY_TABLE WHERE MY_ID = ? FOR UPDATE [50200-191]
>     at org.h2.message.DbException.getJdbcSQLException(DbException.java:345
> )
>     at org.h2.message.DbException.get(DbException.java:168)
>     at org.h2.command.Command.filterConcurrentUpdate(Command.java:307)
>     at org.h2.command.Command.executeQuery(Command.java:203)
>     at org.h2.server.TcpServerThread.process(TcpServerThread.java:320)
>     at org.h2.server.TcpServerThread.run(TcpServerThread.java:159)
>     at java.lang.Thread.run(Thread.java:745)
> Caused by: org.h2.jdbc.JdbcSQLException: Concurrent update in table
> "MY_TABLE": another transaction has updated or deleted the same row [90131
> -191]
>     at org.h2.message.DbException.getJdbcSQLException(DbException.java:345
> )
>     at org.h2.message.DbException.get(DbException.java:179)
>     at org.h2.message.DbException.get(DbException.java:155)
>     at org.h2.table.RegularTable.removeRow(RegularTable.java:374)
>     at org.h2.table.TableFilter.lockRows(TableFilter.java:1147)
>     at org.h2.command.dml.Select.queryFlat(Select.java:565)
>     at org.h2.command.dml.Select.queryWithoutCache(Select.java:654)
>     at org.h2.command.dml.Query.query(Query.java:341)
>     at org.h2.command.dml.Query.query(Query.java:309)
>     at org.h2.command.dml.Query.query(Query.java:36)
>     at org.h2.command.CommandContainer.query(CommandContainer.java:110)
>     at org.h2.command.Command.executeQuery(Command.java:201)
>     ... 3 more
>
>     at org.h2.engine.SessionRemote.done(SessionRemote.java:624)
>     at org.h2.command.CommandRemote.executeQuery(CommandRemote.java:158)
>     at org.h2.jdbc.JdbcPreparedStatement.executeQuery(
> JdbcPreparedStatement.java:110)
>
> What's a bit confusing, is this a really a timeout situation, or something
> different as the 'caused by' exception would indicate?
>
> --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected]
> <javascript:_e(%7B%7D,'cvml','h2-database%[email protected]');>
> .
> To post to this group, send email to [email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>.
> Visit this group at https://groups.google.com/group/h2-database.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

Reply via email to