Karl Wright created CONNECTORS-571:
--------------------------------------

             Summary: 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.1, ManifoldCF 1.0
            Reporter: 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

Reply via email to