-
-
Notifications
You must be signed in to change notification settings - Fork 19
Open
Description
While searching for a number, I hit search two times because it took a bit longer to load.
My guess, the first request inserted the number into the database, while the second request searched for the number, but didn't get a result from the database. So it also tried to insert it.
The first time I got this error with a unique key violation, but after trying to replicate it I only got the Timeout trying to lock table error.
HTTP Status 500 – Internal Server Error
Type Exception Report
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.h2.jdbc.JdbcSQLTimeoutException: Timeout trying to lock table {0}; SQL statement:
insert into NUMBERS (PHONE, SHA1, ADDED, LASTMETA) values (?, ?, ?, ?) [50200-232]
### The error may exist in de/haumacher/phoneblock/db/SpamReports.java (best guess)
### The error may involve de.haumacher.phoneblock.db.SpamReports.insertLastMetaSearch-Inline
### The error occurred while setting parameters
### SQL: insert into NUMBERS (PHONE, SHA1, ADDED, LASTMETA) values (?, ?, ?, ?)
### Cause: org.h2.jdbc.JdbcSQLTimeoutException: Timeout trying to lock table {0}; SQL statement:
insert into NUMBERS (PHONE, SHA1, ADDED, LASTMETA) values (?, ?, ?, ?) [50200-232]
org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:199)
org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
jdk.proxy25/jdk.proxy25.$Proxy231.insertLastMetaSearch(Unknown Source)
de.haumacher.phoneblock.meta.SearchOperation.shouldSearch(SearchOperation.java:152)
de.haumacher.phoneblock.meta.SearchOperation.search(SearchOperation.java:81)
de.haumacher.phoneblock.meta.MetaSearchService.fetchComments(MetaSearchService.java:145)
de.haumacher.phoneblock.app.SearchServlet.analyzeDb(SearchServlet.java:360)
de.haumacher.phoneblock.app.SearchServlet.doGet(SearchServlet.java:298)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
de.haumacher.phoneblock.app.CacheControlFilter.doFilter(CacheControlFilter.java:46)
de.haumacher.phoneblock.app.ContentSecurityPolicyFilter.doFilter(ContentSecurityPolicyFilter.java:24)
de.haumacher.phoneblock.app.ContentTypeOptionFilter.doFilter(ContentTypeOptionFilter.java:27)
de.haumacher.phoneblock.app.render.ContentFilter.render(ContentFilter.java:306)
de.haumacher.phoneblock.app.render.ContentFilter.requestLogin(ContentFilter.java:165)
de.haumacher.phoneblock.app.LoginFilter.doFilter(LoginFilter.java:134)
de.haumacher.phoneblock.app.render.ContentFilter.doFilter(ContentFilter.java:128)
Root Cause
org.h2.jdbc.JdbcSQLTimeoutException: Timeout trying to lock table {0}; SQL statement:
insert into NUMBERS (PHONE, SHA1, ADDED, LASTMETA) values (?, ?, ?, ?) [50200-232]
org.h2.message.DbException.getJdbcSQLException(DbException.java:572)
org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
org.h2.message.DbException.get(DbException.java:212)
org.h2.command.Command.filterConcurrentUpdate(Command.java:375)
org.h2.command.Command.executeUpdate(Command.java:310)
org.h2.command.Command.executeUpdate(Command.java:248)
org.h2.jdbc.JdbcPreparedStatement.execute(JdbcPreparedStatement.java:262)
org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48)
org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75)
org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
jdk.proxy25/jdk.proxy25.$Proxy231.insertLastMetaSearch(Unknown Source)
de.haumacher.phoneblock.meta.SearchOperation.shouldSearch(SearchOperation.java:152)
de.haumacher.phoneblock.meta.SearchOperation.search(SearchOperation.java:81)
de.haumacher.phoneblock.meta.MetaSearchService.fetchComments(MetaSearchService.java:145)
de.haumacher.phoneblock.app.SearchServlet.analyzeDb(SearchServlet.java:360)
de.haumacher.phoneblock.app.SearchServlet.doGet(SearchServlet.java:298)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
de.haumacher.phoneblock.app.CacheControlFilter.doFilter(CacheControlFilter.java:46)
de.haumacher.phoneblock.app.ContentSecurityPolicyFilter.doFilter(ContentSecurityPolicyFilter.java:24)
de.haumacher.phoneblock.app.ContentTypeOptionFilter.doFilter(ContentTypeOptionFilter.java:27)
de.haumacher.phoneblock.app.render.ContentFilter.render(ContentFilter.java:306)
de.haumacher.phoneblock.app.render.ContentFilter.requestLogin(ContentFilter.java:165)
de.haumacher.phoneblock.app.LoginFilter.doFilter(LoginFilter.java:134)
de.haumacher.phoneblock.app.render.ContentFilter.doFilter(ContentFilter.java:128)
Root Cause
org.h2.message.DbException: Concurrent update in table "NUMBERS": another transaction has updated or deleted the same row [90131-232]
org.h2.message.DbException.get(DbException.java:223)
org.h2.message.DbException.get(DbException.java:199)
org.h2.mvstore.db.MVSecondaryIndex.checkUnique(MVSecondaryIndex.java:225)
org.h2.mvstore.db.MVSecondaryIndex.add(MVSecondaryIndex.java:184)
org.h2.mvstore.db.MVTable.addRow(MVTable.java:517)
org.h2.command.dml.Insert.insertRows(Insert.java:174)
org.h2.command.dml.Insert.update(Insert.java:135)
org.h2.command.dml.DataChangeStatement.update(DataChangeStatement.java:74)
org.h2.command.CommandContainer.update(CommandContainer.java:139)
org.h2.command.Command.executeUpdate(Command.java:304)
org.h2.command.Command.executeUpdate(Command.java:248)
org.h2.jdbc.JdbcPreparedStatement.execute(JdbcPreparedStatement.java:262)
org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48)
org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75)
org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
jdk.proxy25/jdk.proxy25.$Proxy231.insertLastMetaSearch(Unknown Source)
de.haumacher.phoneblock.meta.SearchOperation.shouldSearch(SearchOperation.java:152)
de.haumacher.phoneblock.meta.SearchOperation.search(SearchOperation.java:81)
de.haumacher.phoneblock.meta.MetaSearchService.fetchComments(MetaSearchService.java:145)
de.haumacher.phoneblock.app.SearchServlet.analyzeDb(SearchServlet.java:360)
de.haumacher.phoneblock.app.SearchServlet.doGet(SearchServlet.java:298)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
de.haumacher.phoneblock.app.CacheControlFilter.doFilter(CacheControlFilter.java:46)
de.haumacher.phoneblock.app.ContentSecurityPolicyFilter.doFilter(ContentSecurityPolicyFilter.java:24)
de.haumacher.phoneblock.app.ContentTypeOptionFilter.doFilter(ContentTypeOptionFilter.java:27)
de.haumacher.phoneblock.app.render.ContentFilter.render(ContentFilter.java:306)
de.haumacher.phoneblock.app.render.ContentFilter.requestLogin(ContentFilter.java:165)
de.haumacher.phoneblock.app.LoginFilter.doFilter(LoginFilter.java:134)
de.haumacher.phoneblock.app.render.ContentFilter.doFilter(ContentFilter.java:128)
Root Cause
org.h2.jdbc.JdbcSQLTransientException: Concurrent update in table "NUMBERS": another transaction has updated or deleted the same row [90131-232]
org.h2.message.DbException.getJdbcSQLException(DbException.java:694)
org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
org.h2.message.DbException.get(DbException.java:223)
org.h2.message.DbException.get(DbException.java:199)
org.h2.mvstore.db.MVSecondaryIndex.checkUnique(MVSecondaryIndex.java:225)
org.h2.mvstore.db.MVSecondaryIndex.add(MVSecondaryIndex.java:184)
org.h2.mvstore.db.MVTable.addRow(MVTable.java:517)
org.h2.command.dml.Insert.insertRows(Insert.java:174)
org.h2.command.dml.Insert.update(Insert.java:135)
org.h2.command.dml.DataChangeStatement.update(DataChangeStatement.java:74)
org.h2.command.CommandContainer.update(CommandContainer.java:139)
org.h2.command.Command.executeUpdate(Command.java:304)
org.h2.command.Command.executeUpdate(Command.java:248)
org.h2.jdbc.JdbcPreparedStatement.execute(JdbcPreparedStatement.java:262)
org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48)
org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75)
org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
jdk.proxy25/jdk.proxy25.$Proxy231.insertLastMetaSearch(Unknown Source)
de.haumacher.phoneblock.meta.SearchOperation.shouldSearch(SearchOperation.java:152)
de.haumacher.phoneblock.meta.SearchOperation.search(SearchOperation.java:81)
de.haumacher.phoneblock.meta.MetaSearchService.fetchComments(MetaSearchService.java:145)
de.haumacher.phoneblock.app.SearchServlet.analyzeDb(SearchServlet.java:360)
de.haumacher.phoneblock.app.SearchServlet.doGet(SearchServlet.java:298)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
de.haumacher.phoneblock.app.CacheControlFilter.doFilter(CacheControlFilter.java:46)
de.haumacher.phoneblock.app.ContentSecurityPolicyFilter.doFilter(ContentSecurityPolicyFilter.java:24)
de.haumacher.phoneblock.app.ContentTypeOptionFilter.doFilter(ContentTypeOptionFilter.java:27)
de.haumacher.phoneblock.app.render.ContentFilter.render(ContentFilter.java:306)
de.haumacher.phoneblock.app.render.ContentFilter.requestLogin(ContentFilter.java:165)
de.haumacher.phoneblock.app.LoginFilter.doFilter(LoginFilter.java:134)
de.haumacher.phoneblock.app.render.ContentFilter.doFilter(ContentFilter.java:128)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/10.1.16 (Ubuntu)
Metadata
Metadata
Assignees
Labels
No labels