[h2] Unique index or primary key violation in cluster failover test

2013-10-31 Thread Tomáš Remeš
I test http session persistence to db with latest WildFly application 
server (Beta2-SNAPSHOT, h2 1.3.173). I have two nodes running in my test, 
where failover is tested and I use this connection url - 
"jdbc:h2:file;AUTO_SERVER=true". I need to use file storing, because of 
server shutdown failover. Occassionally I am facing following exception:

Unique index or primary key violation: "PRIMARY_KEY_A ON 
>> PUBLIC.""binarybased_default_host_session_db_cluster""(ID)"; SQL statement:
>
> INSERT INTO "binarybased_default_host_session_db_cluster" (datum, version, 
>> id) VALUES(?,?,?) [23505-159]
>
> at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
>
> at org.h2.message.DbException.get(DbException.java:169)
>
> at org.h2.message.DbException.get(DbException.java:146)
>
> at org.h2.index.BaseIndex.getDuplicateKeyException(BaseIndex.java:81)
>
> at org.h2.index.PageBtree.find(PageBtree.java:121)
>
> at org.h2.index.PageBtreeLeaf.addRow(PageBtreeLeaf.java:146)
>
> at org.h2.index.PageBtreeLeaf.addRowTry(PageBtreeLeaf.java:100)
>
> at org.h2.index.PageBtreeIndex.addRow(PageBtreeIndex.java:105)
>
> at org.h2.index.PageBtreeIndex.add(PageBtreeIndex.java:96)
>
> at org.h2.table.RegularTable.addRow(RegularTable.java:130)
>
> at org.h2.command.dml.Insert.insertRows(Insert.java:124)
>
> at org.h2.command.dml.Insert.update(Insert.java:84)
>
> at org.h2.command.CommandContainer.update(CommandContainer.java:71)
>
> at org.h2.command.Command.executeUpdate(Command.java:212)
>
> at 
>> org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:143)
>
> at 
>> org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:129)
>
>
You can see full stack trace (slightly different) at 
https://issues.jboss.org/browse/WFLY-2409. I am not really sure, what 
 could be the problem. I'll appreciate any suggestions. 

Thank's in advance.
Tom 

-- 
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 h2-database+unsubscr...@googlegroups.com.
To post to this group, send email to h2-database@googlegroups.com.
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/groups/opt_out.


[h2] Unique index or primary key violation in cluster failover test

2013-10-31 Thread Tomáš Remeš
I test HTTP session persistence to db using latest WildFly application 
server (Beta2 - SNAPSHOT, h2 1.3.173). I use this connection url 
"jdbc:h2:file;AUTO_SERVER=true;DB_CLOSE_ON_EXIT=FALSE", 
because I want database to survive serve shutdown. Occassionally I am 
facing following exception:

Unique index or primary key violation: "PRIMARY_KEY_A ON 
>> PUBLIC.""binarybased_default_host_session_db_cluster""(ID)"; SQL statement:
>
> INSERT INTO "binarybased_default_host_session_db_cluster" (datum, version, 
>> id) VALUES(?,?,?) [23505-159]
>
> at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
>
> at org.h2.message.DbException.get(DbException.java:169)
>
> at org.h2.message.DbException.get(DbException.java:146)
>
> at org.h2.index.BaseIndex.getDuplicateKeyException(BaseIndex.java:81)
>
> at org.h2.index.PageBtree.find(PageBtree.java:121)
>
> at org.h2.index.PageBtreeLeaf.addRow(PageBtreeLeaf.java:146)
>
> at org.h2.index.PageBtreeLeaf.addRowTry(PageBtreeLeaf.java:100)
>
> at org.h2.index.PageBtreeIndex.addRow(PageBtreeIndex.java:105)
>
> at org.h2.index.PageBtreeIndex.add(PageBtreeIndex.java:96)
>
> at org.h2.table.RegularTable.addRow(RegularTable.java:130)
>
> at org.h2.command.dml.Insert.insertRows(Insert.java:124)
>
> at org.h2.command.dml.Insert.update(Insert.java:84)
>
> at org.h2.command.CommandContainer.update(CommandContainer.java:71)
>
> at org.h2.command.Command.executeUpdate(Command.java:212)
>
> at 
>> org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:143)
>
> at 
>> org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:129)
>
>
You can also check full stack trace (slightly different) at 
https://issues.jboss.org/browse/WFLY-2409. I've taken brief look to h2 code 
and I would like to ask at following - looking 
at org.h2.index.PageBtreeLeaf  int addRow(SearchRow row, boolean tryOnly) 
method line 145. What should happen when entryCount variable is not equal 
to 0? Then it's called find(row, false, true, true), where is following 
code construction:

if (add && index.indexType.isUnique()) {
>
> if (!index.containsNullAndAllowMultipleNull(compare)) {
>
> throw 
>> index.getDuplicateKeyException(compare.toString());
>
> }
>
> }
>
>
First condition is always true in this case and unfortunately in my case 
also the second condition evaluates as true. I am not really sure, what 
could be the problem. I'll appreciate any suggestions. Thank's in advance.  

-- 
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 h2-database+unsubscr...@googlegroups.com.
To post to this group, send email to h2-database@googlegroups.com.
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/groups/opt_out.