Today I released an update for my product, Poker Copilot. Until today, it
used H2 1.3.176. Today's update uses H2 1.4.187, with MV_STORE=false
appended to the database URL. After today's update, we are getting many H2
crash reports on both Windows and OS X. Poker Copilot is a mature product
that has been using H2 for six years, and is used by many people each day;
until this release we were getting infrequent crash reports. It does
initially look like this is a sporadic H2 problem, although I am, of
course, open to the idea that it is caused by my own programming mistakes.
On OS X, the database URL is
jdbc:h2:/Users/steve/Library/Application
Support/com.barbarysoftware.pokercopilot/database/pokercopilot;DATABASE_EVENT_LISTENER='com.barbarysoftware.pokercopilot.database.DatabaseListener';COMPRESS_LOB=DEFLATE;MV_STORE=false;CACHE_SIZE=65536
The most common crash reports are variants of:
java.lang.ArrayIndexOutOfBoundsException: 2048
at org.h2.store.Data.writeVarLong(Data.java:1254)
at org.h2.store.Data.writeValue(Data.java:523)
at org.h2.index.PageBtreeIndex.writeRow(PageBtreeIndex.java:393)
at org.h2.index.PageBtreeNode.writeData(PageBtreeNode.java:453)
at org.h2.index.PageBtreeNode.write(PageBtreeNode.java:426)
at org.h2.store.PageStore.writeBack(PageStore.java:1046)
at org.h2.util.CacheLRU.removeOld(CacheLRU.java:215)
at org.h2.util.CacheLRU.removeOldIfRequired(CacheLRU.java:141)
at org.h2.util.CacheLRU.put(CacheLRU.java:115)
at org.h2.store.PageStore.getPage(PageStore.java:857)
at org.h2.index.PageDataIndex.getPage(PageDataIndex.java:233)
at org.h2.index.PageDataNode.getRowWithKey(PageDataNode.java:279)
at org.h2.index.PageDataIndex.getRowWithKey(PageDataIndex.java:426)
at org.h2.index.PageDataIndex.getRow(PageDataIndex.java:415)
at org.h2.table.RegularTable.getRow(RegularTable.java:106)
at org.h2.index.PageBtreeIndex.getRow(PageBtreeIndex.java:301)
at org.h2.index.PageBtreeCursor.get(PageBtreeCursor.java:45)
at org.h2.index.IndexCursor.get(IndexCursor.java:260)
at org.h2.table.TableFilter.getValue(TableFilter.java:913)
at org.h2.expression.ExpressionColumn.getValue(
ExpressionColumn.java:186)
at org.h2.command.dml.Select.queryFlat(Select.java:580)
at org.h2.command.dml.Select.queryWithoutCache(Select.java:685)
at org.h2.command.dml.Query.query(Query.java:322)
at org.h2.command.dml.Query.query(Query.java:290)
at org.h2.command.dml.Query.query(Query.java:36)
at org.h2.command.CommandContainer.query(CommandContainer.java:90)
at org.h2.command.Command.executeQuery(Command.java:197)
... 18 more
and
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2048
at org.h2.store.Data.writeStringWithoutLength(Data.java:263)
at org.h2.store.Data.writeValue(Data.java:566)
at org.h2.index.PageBtreeIndex.writeRow(PageBtreeIndex.java:393)
at org.h2.index.PageBtreeNode.writeData(PageBtreeNode.java:453)
at org.h2.index.PageBtreeNode.write(PageBtreeNode.java:426)
at org.h2.store.PageStore.writeBack(PageStore.java:1046)
at org.h2.util.CacheLRU.removeOld(CacheLRU.java:215)
at org.h2.util.CacheLRU.removeOldIfRequired(CacheLRU.java:141)
at org.h2.util.CacheLRU.put(CacheLRU.java:115)
at org.h2.store.PageStore.getPage(PageStore.java:857)
at org.h2.index.PageDataIndex.getPage(PageDataIndex.java:233)
at org.h2.index.PageDataIndex.find(PageDataIndex.java:283)
at org.h2.index.BaseIndex.find(BaseIndex.java:127)
at org.h2.index.IndexCursor.find(IndexCursor.java:159)
at org.h2.table.TableFilter.next(TableFilter.java:329)
at org.h2.command.dml.Select.queryFlat(Select.java:573)
at org.h2.command.dml.Select.queryWithoutCache(Select.java:685)
at org.h2.command.dml.Query.query(Query.java:322)
at org.h2.command.dml.Query.query(Query.java:290)
at org.h2.command.dml.Query.query(Query.java:36)
at org.h2.command.CommandContainer.query(CommandContainer.java:90)
at org.h2.command.Command.executeQuery(Command.java:197)
... 18 more
and
org.h2.jdbc.JdbcSQLException: General error: "java.lang.
ArrayIndexOutOfBoundsException"; SQL statement:
SET CACHE_SIZE 65536 [50000-187]
at org.h2.message.DbException.getJdbcSQLException(
DbException.java:345)
at org.h2.message.DbException.get(DbException.java:168)
at org.h2.message.DbException.convert(DbException.java:295)
at org.h2.command.Command.executeUpdate(Command.java:262)
at org.h2.engine.Engine.openSession(Engine.java:196)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:145)
at org.h2.engine.Engine.createSession(Engine.java:128)
at org.h2.engine.Engine.createSession(Engine.java:26)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(
SessionRemote.java:347)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92)
at org.h2.Driver.connect(Driver.java:72)
at org.h2.jdbcx.JdbcDataSource.getJdbcConnection(
JdbcDataSource.java:190)
at org.h2.jdbcx.JdbcDataSource.getXAConnection(
JdbcDataSource.java:353)
at org.h2.jdbcx.JdbcDataSource.getPooledConnection(
JdbcDataSource.java:385)
at org.h2.jdbcx.JdbcConnectionPool.getConnectionNow(
JdbcConnectionPool.java:227)
at org.h2.jdbcx.JdbcConnectionPool.getConnection(
JdbcConnectionPool.java:199)
at com.barbarysoftware.databaseframework.JdbcTemplateCore.
getConnection(JdbcTemplateCore.java:46)
... 10 more
Caused by: java.lang.ArrayIndexOutOfBoundsException
I'll need to rectify this pretty quickly. Does this sound like a problem
introduced in a specific update of H2? If so, what's the version I should
use to avoid this problem?
Regards,
Steve McLeod
Founder, Poker Copilot
http://www.pokercopilot.com
--
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 http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.