[
https://issues.apache.org/jira/browse/CONNECTORS-571?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Karl Wright resolved CONNECTORS-571.
------------------------------------
Resolution: Fixed
> MySQL operations time out when long transaction undertaken and need to be
> restarted
> -----------------------------------------------------------------------------------
>
> Key: CONNECTORS-571
> URL: https://issues.apache.org/jira/browse/CONNECTORS-571
> Project: ManifoldCF
> Issue Type: Bug
> Components: Framework core
> Affects Versions: ManifoldCF 1.0, ManifoldCF 1.0.1
> Reporter: Karl Wright
> Assignee: Karl Wright
> Fix For: ManifoldCF 1.1
>
>
> If a transaction takes too long, MySQL handles this by aborting other threads
> that are trying to get locks on the resources being held. When it does this
> ManifoldCF does not handle the situation properly, and does not retry the
> aborted threads.
> The SQLException that is thrown is:
> ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
> The context that this happens in is varied:
> {code}
> 2012/11/22 23:39:28 ERROR (Job start thread) - Job start thread aborting and
> restarting due to database connection reset: Database exception: Exception
> doing query: Lock wait timeout exceeded; try restarting transaction
> org.apache.manifoldcf.core.interfaces.ManifoldCFException: Database
> exception: Exception doing query: Lock wait timeout exceeded; try restarting
> transaction
> at
> org.apache.manifoldcf.core.database.Database.executeViaThread(Database.java:681)
> at
> org.apache.manifoldcf.core.database.Database.executeUncachedQuery(Database.java:709)
> at
> org.apache.manifoldcf.core.database.Database$QueryCacheExecutor.create(Database.java:1394)
> at
> org.apache.manifoldcf.core.cachemanager.CacheManager.findObjectsAndExecute(CacheManager.java:144)
> at
> org.apache.manifoldcf.core.database.Database.executeQuery(Database.java:186)
> at
> org.apache.manifoldcf.core.database.DBInterfaceMySQL.performQuery(DBInterfaceMySQL.java:852)
> at
> org.apache.manifoldcf.crawler.jobs.JobManager.startJobs(JobManager.java:4711)
> at
> org.apache.manifoldcf.crawler.system.JobStartThread.run(JobStartThread.java:68)
> Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting
> transaction
> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
> at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:1578)
> at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1434)
> at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2925)
> at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:477)
> at
> com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2631)
> at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1800)
> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2221)
> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
> at
> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
> at
> com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293)
> at
> org.apache.manifoldcf.core.database.Database.execute(Database.java:826)
> at
> org.apache.manifoldcf.core.database.Database$ExecuteQueryThread.run(Database.java:641)
> 2012/11/22 23:39:28 ERROR (Finisher thread) - Finisher thread aborting and
> restarting due to database connection reset: Database exception: Exception
> doing query: Lock wait timeout exceeded; try restarting transaction
> org.apache.manifoldcf.core.interfaces.ManifoldCFException: Database
> exception: Exception doing query: Lock wait timeout exceeded; try restarting
> transaction
> at
> org.apache.manifoldcf.core.database.Database.executeViaThread(Database.java:681)
> at
> org.apache.manifoldcf.core.database.Database.executeUncachedQuery(Database.java:709)
> at
> org.apache.manifoldcf.core.database.Database$QueryCacheExecutor.create(Database.java:1394)
> at
> org.apache.manifoldcf.core.cachemanager.CacheManager.findObjectsAndExecute(CacheManager.java:144)
> at
> org.apache.manifoldcf.core.database.Database.executeQuery(Database.java:186)
> at
> org.apache.manifoldcf.core.database.DBInterfaceMySQL.performQuery(DBInterfaceMySQL.java:852)
> at
> org.apache.manifoldcf.crawler.jobs.JobManager.finishJobs(JobManager.java:6469)
> at
> org.apache.manifoldcf.crawler.system.FinisherThread.run(FinisherThread.java:64)
> Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting
> transaction
> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
> at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:1578)
> at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1434)
> at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2925)
> at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:477)
> at
> com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2631)
> at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1800)
> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2221)
> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
> at
> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
> at
> com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293)
> at
> org.apache.manifoldcf.core.database.Database.execute(Database.java:826)
> at
> org.apache.manifoldcf.core.database.Database$ExecuteQueryThread.run(Database.java:641)
> 2012/11/22 23:39:30 ERROR (Worker thread '253') - Worker thread aborting and
> restarting due to database connection reset: Database exception: Exception
> doing query: Lock wait timeout exceeded; try restarting transaction
> org.apache.manifoldcf.core.interfaces.ManifoldCFException: Database
> exception: Exception doing query: Lock wait timeout exceeded; try restarting
> transaction
> at
> org.apache.manifoldcf.core.database.Database.executeViaThread(Database.java:681)
> at
> org.apache.manifoldcf.core.database.Database.executeUncachedQuery(Database.java:709)
> at
> org.apache.manifoldcf.core.database.Database$QueryCacheExecutor.create(Database.java:1394)
> at
> org.apache.manifoldcf.core.cachemanager.CacheManager.findObjectsAndExecute(CacheManager.java:144)
> at
> org.apache.manifoldcf.core.database.Database.executeQuery(Database.java:186)
> at
> org.apache.manifoldcf.core.database.DBInterfaceMySQL.performModification(DBInterfaceMySQL.java:678)
> at
> org.apache.manifoldcf.core.database.DBInterfaceMySQL.performUpdate(DBInterfaceMySQL.java:275)
> at
> org.apache.manifoldcf.core.database.BaseTable.performUpdate(BaseTable.java:80)
> at
> org.apache.manifoldcf.crawler.jobs.JobQueue.updateCompletedRecord(JobQueue.java:722)
> at
> org.apache.manifoldcf.crawler.jobs.JobManager.markDocumentCompletedMultiple(JobManager.java:2435)
> at
> org.apache.manifoldcf.crawler.system.WorkerThread.run(WorkerThread.java:765)
> Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting
> transaction
> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
> at
> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
> at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
> at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
> at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
> at
> org.apache.manifoldcf.core.database.Database.execute(Database.java:840)
> at
> org.apache.manifoldcf.core.database.Database$ExecuteQueryThread.run(Database.java:641)
> {code}
> and
> {code}
> ERROR 2012-11-22 19:36:28,593 (Worker thread '16') - Worker thread aborting
> and restarting due to database connection reset: Database exception:
> Exception doing query: Lock wait timeout exceeded; try restarting transaction
> org.apache.manifoldcf.core.interfaces.ManifoldCFException: Database
> exception: Exception doing query: Lock wait timeout exceeded; try restarting
> transaction
> at
> org.apache.manifoldcf.core.database.Database.executeViaThread(Database.java:681)
> at
> org.apache.manifoldcf.core.database.Database.executeUncachedQuery(Database.java:709)
> at
> org.apache.manifoldcf.core.database.Database$QueryCacheExecutor.create(Database.java:1394)
> at
> org.apache.manifoldcf.core.cachemanager.CacheManager.findObjectsAndExecute(CacheManager.java:144)
> at
> org.apache.manifoldcf.core.database.Database.executeQuery(Database.java:186)
> at
> org.apache.manifoldcf.core.database.DBInterfaceMySQL.performModification(DBInterfaceMySQL.java:678)
> at
> org.apache.manifoldcf.core.database.DBInterfaceMySQL.performUpdate(DBInterfaceMySQL.java:275)
> at
> org.apache.manifoldcf.core.database.BaseTable.performUpdate(BaseTable.java:80)
> at
> org.apache.manifoldcf.crawler.jobs.HopCount.markForDelete(HopCount.java:1426)
> at
> org.apache.manifoldcf.crawler.jobs.HopCount.doDeleteInvalidation(HopCount.java:1356)
> at
> org.apache.manifoldcf.crawler.jobs.HopCount.doFinish(HopCount.java:1057)
> at
> org.apache.manifoldcf.crawler.jobs.HopCount.finishParents(HopCount.java:389)
> at
> org.apache.manifoldcf.crawler.jobs.JobManager.finishDocuments(JobManager.java:4309)
> at
> org.apache.manifoldcf.crawler.system.WorkerThread.run(WorkerThread.java:557)
> Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting
> transaction
> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
> at
> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
> at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
> at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
> at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
> at
> org.apache.manifoldcf.core.database.Database.execute(Database.java:840)
> at
> org.apache.manifoldcf.core.database.Database$ExecuteQueryThread.run(Database.java:641)
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira