Row not found exception [90112-115]

66 views
Skip to first unread message

Steve McLeod

unread,
Jul 21, 2009, 8:02:44 AM7/21/09
to H2 Database
Hi Thomas,

One of my users sent this exception to me. It seems severe, based on
the error details for 90112, so I thought it was worth reporting here.

For the sake of completeness, here's some details:
final String databaseUrl =
"jdbc:h2:~/pokercopilot;" +
"MVCC=TRUE;" +
"CACHE_TYPE=SOFT_LRU;" +
"MAX_LENGTH_INPLACE_LOB=8192;" +
"DB_CLOSE_ON_EXIT=FALSE;" +
"COMPRESS_LOB=DEFLATE";

The user is running on Mac OS X 10.5.7, Java Version: 1.5.0_19, in
Colombia, using a Spanish-language locale.

Row not found when trying to delete from index
PUBLIC.PLAYERSUMMARY_SHORT_IDX; SQL statement:
update PlayerSummary set starttime=?, takeincents=?,
showdowntakeInCents=?, nonshowdowntakeInCents=?, takeinbigblinds=?,
timesseen=?, flopseen=?, vpip=?, preflopraised=?, postflopbet=?,
postflopraised=?, postflopcalled=?, postflopfolded=?,
postflopcallfoldbetorraise=?, postflopbetorraised=?,
blindstealattempt=?, blindstealattemptopportunity=?, checkraised=?,
wenttoshowdown=?, wonatshowdown=?, wonwithoutshowdown=?,
threebetpreflop=?, threebetpreflopopportunity=?,
blindStealDefenseOpportunityOnBigBlind=?, calledPreflopRaise=?,
calledPreflopRaiseOpportunity=?, continuationBetPreflop=?,
continuationBetPreflopOpportunity=?, foldedToBlindStealOnBigBlind=?,
foldedToContinuationBet=?, foldedToContinuationBetOpportunity=?,
foldedToPreflopThreeBet=?, foldedToPreflopThreeBetOpportunity=? where
playerid=? and dayid=? and tablesize=? and gametypeid=? and ishero=?
and istournament=? and isplaymoney=? [90112-115]
at org.h2.message.Message.getSQLException(Message.java:105)
at org.h2.message.Message.getSQLException(Message.java:116)
at org.h2.message.Message.getSQLException(Message.java:75)
at org.h2.index.BtreeLeaf.remove(BtreeLeaf.java:132)
at org.h2.index.BtreeNode.remove(BtreeNode.java:147)
at org.h2.index.BtreeNode.remove(BtreeNode.java:147)
at org.h2.index.BtreeIndex.remove(BtreeIndex.java:261)
at org.h2.index.MultiVersionIndex.remove(MultiVersionIndex.java:
145)
at org.h2.table.TableData.removeRow(TableData.java:316)
at org.h2.table.Table.updateRows(Table.java:380)
at org.h2.command.dml.Update.update(Update.java:132)
at org.h2.command.CommandContainer.update(CommandContainer.java:
72)
at org.h2.command.Command.executeUpdate(Command.java:208)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal
(JdbcPreparedStatement.java:139)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate
(JdbcPreparedStatement.java:128)

Regards,

Steve

Thomas Mueller

unread,
Jul 23, 2009, 3:41:53 AM7/23/09
to h2-da...@googlegroups.com
Hi,

This doesn't sound good... Could you post a reproducible test case? If
not, I have a few questions:

- Could you send the full stack trace of the exception including message text?
- Do you use Tomcat or another web server?
   Do you unload or reload the web application?
- You can find out if the database is corrupted when running
   SCRIPT TO 'test.sql'
- Did you use multiple connections?
- A workarounds is: delete the index.db file (it is re-created
   automatically) and try again. Does it work when you do this?
- The third workarounds is: use the tool org.h2.tools.Recover to create
   the SQL script file, and then re-create the database using this script.
   Does it work when you do this?
- With which version of H2 was this database created?
   You can find it out using:
   select * from information_schema.settings where name='CREATE_BUILD'
- Did you use any settings or special features (for example, the setting
   LOG=0, or two phase commit, linked tables, cache settings)?
- Is the application multi-threaded?
- What operating system, file system, and virtual machine
   (java -version) do you use?
- Is it (or was it at some point) a networked file system?
- How big is the database (file sizes)?
- Is the database usually closed normally, or is process terminated
   forcefully or the computer switched off?
- Is it possible to reproduce this problem using a fresh database
   (sometimes, or always)?
- Are there any other exceptions (maybe in the .trace.db file)?
   Could you send them please?
- Do you still have any .trace.db files, and if yes could you send them?
- Could you send the .data.db file where this exception occurs?

Regards,
Thomas

Steve McLeod

unread,
Jul 24, 2009, 11:58:58 AM7/24/09
to H2 Database
Hi Thomas,

Unfortunately I've been unable to reproduce this. It was on a
customer's computer, and I've collected what info and source data I
can from the customer.

Here's what info I can give you:

It's a desktop (Swing) app.

The app uses an H2 connection pool... (eg.
org.h2.jdbcx.JdbcConnectionPool.create(url, username, password))

Only the desktop apps uses the database.

The app is heavily multi-threaded.

The app uses H2 1.1.115. The database was created with 1.1.115 and
solely used with 1.1.115

Operating System: Mac OS X 10.5.7

Java Version: 1.5.0_19

File size of all database files (for the user in question) is about
140 Megabytes.

The h2 features in use are described by this URL, which is always used
to connect:
final String url =
"jdbc:h2:~/pokercopilot;" +
"MVCC=TRUE;" +
"CACHE_TYPE=SOFT_LRU;" +
"MAX_LENGTH_INPLACE_LOB=8192;" +
"DB_CLOSE_ON_EXIT=FALSE;" +
"COMPRESS_LOB=DEFLATE";

Full error stack trace:

org.springframework.jdbc.UncategorizedSQLException:
PreparedStatementCallback; uncategorized SQLException for SQL [update
PlayerSummary set starttime=?, takeincents=?, showdowntakeInCents=?,
nonshowdowntakeInCents=?, takeinbigblinds=?, timesseen=?, flopseen=?,
vpip=?, preflopraised=?, postflopbet=?, postflopraised=?,
postflopcalled=?, postflopfolded=?, postflopcallfoldbetorraise=?,
postflopbetorraised=?, blindstealattempt=?,
blindstealattemptopportunity=?, checkraised=?, wenttoshowdown=?,
wonatshowdown=?, wonwithoutshowdown=?, threebetpreflop=?,
threebetpreflopopportunity=?,
blindStealDefenseOpportunityOnBigBlind=?, calledPreflopRaise=?,
calledPreflopRaiseOpportunity=?, continuationBetPreflop=?,
continuationBetPreflopOpportunity=?, foldedToBlindStealOnBigBlind=?,
foldedToContinuationBet=?, foldedToContinuationBetOpportunity=?,
foldedToPreflopThreeBet=?, foldedToPreflopThreeBetOpportunity=? where
playerid=? and dayid=? and tablesize=? and gametypeid=? and ishero=?
and istournament=? and isplaymoney=? ]; SQL state [90112]; error code
[90112]; Fila no encontrada mientras se intentaba borrar del indice
PUBLIC.PLAYERSUMMARY_SHORT_IDX
Row not found when trying to delete from index
PUBLIC.PLAYERSUMMARY_SHORT_IDX; SQL statement:
update PlayerSummary set starttime=?, takeincents=?,
showdowntakeInCents=?, nonshowdowntakeInCents=?, takeinbigblinds=?,
timesseen=?, flopseen=?, vpip=?, preflopraised=?, postflopbet=?,
postflopraised=?, postflopcalled=?, postflopfolded=?,
postflopcallfoldbetorraise=?, postflopbetorraised=?,
blindstealattempt=?, blindstealattemptopportunity=?, checkraised=?,
wenttoshowdown=?, wonatshowdown=?, wonwithoutshowdown=?,
threebetpreflop=?, threebetpreflopopportunity=?,
blindStealDefenseOpportunityOnBigBlind=?, calledPreflopRaise=?,
calledPreflopRaiseOpportunity=?, continuationBetPreflop=?,
continuationBetPreflopOpportunity=?, foldedToBlindStealOnBigBlind=?,
foldedToContinuationBet=?, foldedToContinuationBetOpportunity=?,
foldedToPreflopThreeBet=?, foldedToPreflopThreeBetOpportunity=? where
playerid=? and dayid=? and tablesize=? and gametypeid=? and ishero=?
and istournament=? and isplaymoney=? [90112-115]; nested exception is
org.h2.jdbc.JdbcSQLException: Fila no encontrada mientras se intentaba
borrar del indice PUBLIC.PLAYERSUMMARY_SHORT_IDX
Row not found when trying to delete from index
PUBLIC.PLAYERSUMMARY_SHORT_IDX; SQL statement:
update PlayerSummary set starttime=?, takeincents=?,
showdowntakeInCents=?, nonshowdowntakeInCents=?, takeinbigblinds=?,
timesseen=?, flopseen=?, vpip=?, preflopraised=?, postflopbet=?,
postflopraised=?, postflopcalled=?, postflopfolded=?,
postflopcallfoldbetorraise=?, postflopbetorraised=?,
blindstealattempt=?, blindstealattemptopportunity=?, checkraised=?,
wenttoshowdown=?, wonatshowdown=?, wonwithoutshowdown=?,
threebetpreflop=?, threebetpreflopopportunity=?,
blindStealDefenseOpportunityOnBigBlind=?, calledPreflopRaise=?,
calledPreflopRaiseOpportunity=?, continuationBetPreflop=?,
continuationBetPreflopOpportunity=?, foldedToBlindStealOnBigBlind=?,
foldedToContinuationBet=?, foldedToContinuationBetOpportunity=?,
foldedToPreflopThreeBet=?, foldedToPreflopThreeBetOpportunity=? where
playerid=? and dayid=? and tablesize=? and gametypeid=? and ishero=?
and istournament=? and isplaymoney=? [90112-115]
at
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate
(AbstractFallbackSQLExceptionTranslator.java:83)
at
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate
(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute
(JdbcTemplate.java:607)
at org.springframework.jdbc.core.JdbcTemplate.update
(JdbcTemplate.java:792)
at org.springframework.jdbc.core.JdbcTemplate.update
(JdbcTemplate.java:850)
at org.springframework.jdbc.core.JdbcTemplate.update
(JdbcTemplate.java:858)
at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.update
(SimpleJdbcTemplate.java:237)
at com.barbarysoftware.pokercopilot.database.ax.update(SourceFile:
283)
at com.barbarysoftware.pokercopilot.database.ac.a(SourceFile:412)
at com.barbarysoftware.pokercopilot.database.ac.a(SourceFile:96)
at com.barbarysoftware.pokercopilot.database.ac.b(SourceFile:79)
at com.barbarysoftware.pokercopilot.database.ac.a(SourceFile:34)
at
com.barbarysoftware.pokercopilot.database.ah.doInTransactionWithoutResult
(SourceFile:51)
at
org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction
(TransactionCallbackWithoutResult.java:33)
at
org.springframework.transaction.support.TransactionTemplate.execute
(TransactionTemplate.java:128)
at com.barbarysoftware.pokercopilot.database.ac.a(SourceFile:48)
at com.barbarysoftware.pokercopilot.loader.q.a(SourceFile:43)
at com.barbarysoftware.pokercopilot.loader.q.run(SourceFile:28)
Caused by: org.h2.jdbc.JdbcSQLException: Fila no encontrada mientras
se intentaba borrar del indice PUBLIC.PLAYERSUMMARY_SHORT_IDX
at org.springframework.jdbc.core.JdbcTemplate
$2.doInPreparedStatement(JdbcTemplate.java:798)
at org.springframework.jdbc.core.JdbcTemplate.execute
(JdbcTemplate.java:591)
... 15 more


Sorry I can't provide more useful info.

Rgds

Steve

On Jul 23, 9:41 am, Thomas Mueller <thomas.tom.muel...@gmail.com>
wrote:

Steve McLeod

unread,
Jul 31, 2009, 4:04:09 AM7/31/09
to H2 Database
More info:

I released the new version of my product three days ago, which is the
first version to use H2 as the database engine. A few hundred people
have tried the new version, and I am sporadically getting more of
these same errors.

A couple of hundred of my users have been trying a version that does
not use MVCC and does not use CACHE_TYPE=SOFT_LRU. None of them have
reported this issue.

I can't say definitively that this is the case, but I've been running
lots of long-running tests (millions of inserts and updates), and I
think CACHE_TYPE=SOFT_LRU is the culprit. When I take that out, I've
not been able to reproduce the problem. However I will keep trying.

Regards,

Steve

Thomas Mueller

unread,
Jul 31, 2009, 4:33:52 AM7/31/09
to h2-da...@googlegroups.com
Hi,

A bug related to this was fixed in version 1.1.116:
http://www.h2database.com/html/changelog.html
"The soft-references cache (CACHE_TYPE=SOFT_LRU) could throw a
NullPointerException."

I'm not sure if this bug could have caused the problem however.

Regards,
Thomas
Reply all
Reply to author
Forward
0 new messages