[
https://issues.apache.org/jira/browse/DERBY-5552?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13176215#comment-13176215
]
Brett Bergquist commented on DERBY-5552:
----------------------------------------
It is the IndexStatisticsDaemonImpl that is invalidating the statement. To
verify this, I got my test case where it was in this loop. With my printouts I
was seeing that the isValid was being set by the thread that was stuck right
after the timeout occurred and then I immediately saw makeInvalid being called
with action = 40 (UPDATE_STATISTICS). So I attached the debugger to the
database engine and set a breakpoint in IndexStatisticsDaemonImpl and then set
"daemonDisabled" to be "false". Immediately the lock timeout got reported
and the loop terminated and my test case continued on the way it should.
So the IndexStatisticsDaemonImpl has the ability to invalidate statements in
use by other threads. In this case, it is being invoked right after lock
timeout occurs and before the lock timeout exception is being processed. The
code sees that the statement is invalid and swallows the lock exception and
sets up to recompile and run the statement again.
> Derby threads hanging when using ClientXADataSource and a deadlock or lock
> timeout occurs
> -----------------------------------------------------------------------------------------
>
> Key: DERBY-5552
> URL: https://issues.apache.org/jira/browse/DERBY-5552
> Project: Derby
> Issue Type: Bug
> Components: Network Server
> Affects Versions: 10.8.1.2
> Environment: Solaris 10, Glassfish V2.1.1,
> Reporter: Brett Bergquist
> Priority: Blocker
> Attachments: appserverstack.txt, client.tar.Z, derby.log,
> derbystackatshutdown.txt, execute.patch, transactionsleft.txt
>
>
> The issue arrives when multiple XA transactions are done in parallel and
> there is either a lock timeout or a lock deadlock detected. When this
> happens the connection is leaked in the Glassfish connection pool and the
> client thread hangs in
> "org.apache.derby.client.netReply.fill(Reply.java:172)".
> Shutting down the app server fails because the thread has a lock in
> "org.apache.derby.client.net.NetConnection40" and another task is calling
> "org.apache.derby.client.ClientPooledConnection.close(ClientPooledConnection.java:214)"
> which is waiting for the lock.
> Killing the appsever using "kill" and then attempting to shutdown Derby
> network server causes the Network Server to hang. One of the threads hangs
> waiting for a lock at
> "org.apache.derby.impl.drda.NeworkServerControlImpl.removeFromSessionTable(NetworkServerControlImpl.java:1525)"
> and the "main" thread has this locked at
> "org.apache.derby.impl.drda.NetworkServerControlImpl.executeWork(NetworkServerControlImpl.java:2242)"
> and it itself is waiting for a lock which belongs to a thread that is stuck
> at
> "org.apache.derby.impl.services.locks.ActiveLock.waitForGrant(ActiveLock.java:118)
> which is in the TIMED_WAITING state.
> Only by killing the Network Server using "kill" is possible at this point.
> There are transactions left even though all clients have been removed.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira