[ 
https://issues.apache.org/jira/browse/DERBY-5073?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13007722#comment-13007722
 ] 

Karl Wright commented on DERBY-5073:
------------------------------------

A trunk build does the same thing on my test case.  I got a thread dump when I 
thought it had locked itself up.  There were a whole pile of threads all 
waiting for grants, and then there was this thread:

Thread-24341" daemon prio=6 tid=0x05934400 nid=0x1cd4 runnable [0x0816e000]
   java.lang.Thread.State: RUNNABLE
        at java.util.Hashtable.get(Hashtable.java:333)
        - locked <0x29280528> (a java.util.Hashtable)
        at 
org.apache.derby.shared.common.sanity.SanityManager.DEBUG_ON(SanityManager.java:229)
        at 
org.apache.derby.impl.services.locks.AbstractPool.lockObject(AbstractPool.java:101)
        at 
org.apache.derby.impl.store.raw.xact.RowLocking2.lockRecordForRead(RowLocking2.java:165)
        at 
org.apache.derby.impl.store.access.heap.HeapController.lockRow(HeapController.java:520)
        at 
org.apache.derby.impl.store.access.heap.HeapController.lockRow(HeapController.java:638)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(B2IRowLocking3.java:280)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(B2IRowLocking3.java:599)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(B2IRowLockingRR.java:105)
        at 
org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(BTreeForwardScan.java:305)
        at 
org.apache.derby.impl.store.access.btree.BTreeScan.fetchNext(BTreeScan.java:1599)
        at 
org.apache.derby.impl.sql.execute.TableScanResultSet.getNextRowCore(TableScanResultSet.java:577)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(ProjectRestrictResultSet.java:261)
        at 
org.apache.derby.impl.sql.execute.JoinResultSet.reopenCore(JoinResultSet.java:181)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.reopenCore(ProjectRestrictResultSet.java:218)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.reopenCore(ProjectRestrictResultSet.java:218)
        at 
org.apache.derby.impl.sql.execute.AnyResultSet.reopenCore(AnyResultSet.java:139)
        at 
org.apache.derby.impl.sql.execute.AnyResultSet.openCore(AnyResultSet.java:103)
        at 
org.apache.derby.exe.ac74f89535x012exc0d8x72ccx000000d1a4e011.g0(Unknown Source)
        at 
org.apache.derby.exe.ac74f89535x012exc0d8x72ccx000000d1a4e011.e1(Unknown Source)
        at 
org.apache.derby.impl.services.reflect.DirectCall.invoke(ReflectGeneratedClass.java:141)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(ProjectRestrictResultSet.java:273)
        at 
org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(NormalizeResultSet.java:185)
        at 
org.apache.derby.impl.sql.execute.DMLWriteResultSet.getNextRowCore(DMLWriteResultSet.java:127)
        at 
org.apache.derby.impl.sql.execute.UpdateResultSet.collectAffectedRows(UpdateResultSet.java:440)
        at 
org.apache.derby.impl.sql.execute.UpdateResultSet.open(UpdateResultSet.java:264)
        at 
org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:436)
        at 
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:317)
        at 
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1242)
        - locked <0x29b139f0> (a org.apache.derby.impl.jdbc.EmbedConnection40)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1686)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(EmbedPreparedStatement.java:308)
        at 
org.apache.manifoldcf.core.database.Database.execute(Database.java:606)
        at 
org.apache.manifoldcf.core.database.Database$ExecuteQueryThread.run(Database.java:421)

A thread dump a couple of minutes later was identical, except for that one 
thread, which now looked like this:

"Thread-24341" daemon prio=6 tid=0x05934400 nid=0x1cd4 runnable [0x0816e000]
   java.lang.Thread.State: RUNNABLE
        at java.lang.Object.hashCode(Native Method)
        at org.apache.derby.impl.services.locks.Lock.hashCode(Lock.java:145)
        at java.util.HashMap.removeEntryForKey(HashMap.java:548)
        at java.util.HashMap.remove(HashMap.java:538)
        at 
org.apache.derby.impl.services.locks.ConcurrentLockSet.unlockReference(ConcurrentLockSet.java:799)
        at 
org.apache.derby.impl.services.locks.LockSpace.unlockReference(LockSpace.java:276)
        - locked <0x29b14878> (a org.apache.derby.impl.services.locks.LockSpace)
        at 
org.apache.derby.impl.services.locks.AbstractPool.unlock(AbstractPool.java:181)
        at 
org.apache.derby.impl.store.raw.xact.RowLocking2.unlockRecordAfterRead(RowLocking2.java:185)
        at 
org.apache.derby.impl.store.access.heap.HeapController.unlockRowAfterRead(HeapController.java:668)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLocking2.unlockScanRecordAfterRead(B2IRowLocking2.java:96)
        at 
org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(BTreeForwardScan.java:221)
        at 
org.apache.derby.impl.store.access.btree.BTreeScan.fetchNext(BTreeScan.java:1599)
        at 
org.apache.derby.impl.sql.execute.TableScanResultSet.getNextRowCore(TableScanResultSet.java:577)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(ProjectRestrictResultSet.java:261)
        at 
org.apache.derby.impl.sql.execute.JoinResultSet.reopenCore(JoinResultSet.java:181)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.reopenCore(ProjectRestrictResultSet.java:218)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.reopenCore(ProjectRestrictResultSet.java:218)
        at 
org.apache.derby.impl.sql.execute.AnyResultSet.reopenCore(AnyResultSet.java:139)
        at 
org.apache.derby.impl.sql.execute.AnyResultSet.openCore(AnyResultSet.java:103)
        at 
org.apache.derby.exe.ac74f89535x012exc0d8x72ccx000000d1a4e011.g0(Unknown Source)
        at 
org.apache.derby.exe.ac74f89535x012exc0d8x72ccx000000d1a4e011.e1(Unknown Source)
        at 
org.apache.derby.impl.services.reflect.DirectCall.invoke(ReflectGeneratedClass.java:141)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(ProjectRestrictResultSet.java:273)
        at 
org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(NormalizeResultSet.java:185)
        at 
org.apache.derby.impl.sql.execute.DMLWriteResultSet.getNextRowCore(DMLWriteResultSet.java:127)
        at 
org.apache.derby.impl.sql.execute.UpdateResultSet.collectAffectedRows(UpdateResultSet.java:440)
        at 
org.apache.derby.impl.sql.execute.UpdateResultSet.open(UpdateResultSet.java:264)
        at 
org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:436)
        at 
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:317)
        at 
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1242)
        - locked <0x29b139f0> (a org.apache.derby.impl.jdbc.EmbedConnection40)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1686)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(EmbedPreparedStatement.java:308)
        at 
org.apache.manifoldcf.core.database.Database.execute(Database.java:606)
        at 
org.apache.manifoldcf.core.database.Database$ExecuteQueryThread.run(Database.java:421)

This *could* just be a very-long-running query, blocking lots of other stuff. 
I'll have to run with the standard tricks to see what the locks wind up looking 
like.  Stay tuned.


> Derby deadlocks without recourse on simultaneous correlated subqueries
> ----------------------------------------------------------------------
>
>                 Key: DERBY-5073
>                 URL: https://issues.apache.org/jira/browse/DERBY-5073
>             Project: Derby
>          Issue Type: Bug
>          Components: Services
>    Affects Versions: 10.0.2.1, 10.1.2.1, 10.2.2.0, 10.3.3.0, 10.4.2.0, 
> 10.5.3.0, 10.6.2.1, 10.7.1.1, 10.8.0.0
>            Reporter: Karl Wright
>         Attachments: Derby5073.java, derby-5073-1a.diff, derby-5073-1b.diff
>
>
> When the following two queries are run against tables that contain the 
> necessary fields, using multiple threads, Derby deadlocks and none of the 
> queries ever returns.  Derby apparently detects no deadlock condition, either.
> SELECT t0.* FROM jobqueue t0 WHERE EXISTS(SELECT 'x' FROM carrydown t1 WHERE 
> t1.parentidhash IN (?) AND t1.childidhash=t0.dochash AND t0.jobid=t1.jobid) 
> AND t0.jobid=?
> SELECT t0.* FROM jobqueue t0 WHERE EXISTS(SELECT 'x' FROM carrydown t1 WHERE 
> t1.parentidhash IN (?) AND t1.childidhash=t0.dochash AND t0.jobid=t1.jobid 
> AND t1.newField=?) AND t0.jobid=?
> This code comes from Apache ManifoldCF, and has occurred when there are five 
> or more threads trying to execute these two queries at the same time.  
> Originally we found this on 10.5.3.0.  It was hoped that 10.7.1.1 would fix 
> the problem, but it hasn't.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to