db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] Updated: (DERBY-4711) Hung thread after another thread is interrupted
Date Mon, 28 Jun 2010 08:59:49 GMT

     [ https://issues.apache.org/jira/browse/DERBY-4711?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Knut Anders Hatlen updated DERBY-4711:
--------------------------------------

    Attachment: junit-timing-fix.diff

A problem with the new test was reported on derby-dev: http://mail-archives.apache.org/mod_mbox/db-derby-dev/201006.mbox/%3C4C27C93C.2020403@gmail.com%3E

The problem appears to be that the commit in the main thread may allow the waiting thread
to continue before it has received the interrupt, and thus it doesn't fail as it is supposed
to. Adding a sleep between t1.interrupt() and commit() gives the interrupt time to propagate
to the waiter before the main thread commits and releases its locks. See the attached patch
junit-timing-fix.diff.

The test failed on almost every run in my environment when using insane jars. After patching
the test, I've run it 200 times without seeing the failure.

> Hung thread after another thread is interrupted
> -----------------------------------------------
>
>                 Key: DERBY-4711
>                 URL: https://issues.apache.org/jira/browse/DERBY-4711
>             Project: Derby
>          Issue Type: Bug
>          Components: Services
>    Affects Versions: 10.5.3.0
>         Environment: Windows server 2008
>            Reporter: Luke Quinane
>            Assignee: Luke Quinane
>             Fix For: 10.7.0.0
>
>         Attachments: interrupted-exception-fix.diff, interrupted-exception-fix.patch,
junit-timing-fix.diff, junit.diff
>
>
> We've seen a problem today where we have several threads querying our database and when
one gets interrupted the others are stuck waiting for a lock. Here is the stack trace for
the stuck thread(s):
> daemon prio=4
> "DefaultExecutorService-pool-1-thread-47" Id=98 WAITING on org.apache.derby.impl.services.locks.ActiveLock@6e6f45a1
> 	at java.lang.Object.wait(Native Method)
> 	-  waiting on org.apache.derby.impl.services.locks.ActiveLock@6e6f45a1
> 	at java.lang.Object.wait(Object.java:485)
> 	at org.apache.derby.impl.services.locks.ActiveLock.waitForGrant(ActiveLock.java:115)
> 	at org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(ConcurrentLockSet.java:463)
> 	at org.apache.derby.impl.services.locks.ConcurrentLockSet.zeroDurationLockObject(ConcurrentLockSet.java:855)
> 	at org.apache.derby.impl.services.locks.AbstractPool.zeroDurationlockObject(AbstractPool.java:297)
> 	at org.apache.derby.impl.services.locks.ConcurrentPool.zeroDurationlockObject(ConcurrentPool.java:28)
> 	at org.apache.derby.impl.store.raw.xact.RowLocking2nohold.lockRecordForRead(RowLocking2nohold.java:89)
> 	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:309)
> 	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.fetchNextGroup(BTreeScan.java:1585)
> 	at org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(BulkTableScanResultSet.java:327)
> 	at org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(BulkTableScanResultSet.java:282)
> 	at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:460)
> 	at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:427)
> 	-  locked org.apache.derby.impl.jdbc.EmbedConnection40@445d374b
> 	at org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:371)
>         ...

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message