On 12/21/2011 12:04 PM, Bergquist, Brett wrote:
Nothing in the Derby log other than it logging a deadlock with the
statements and a lock timeout with its statements and it indicating
that cleanup had started and completed.
I will enable tracing with the documented (undocumented system
property). Thanks for that information!
I will check for the XA transactions the next time I reproduce this.
Maybe you could point me into the correct area to look. This seems to
be triggered either through a lock timeout or a deadlock. The
connection that this is occurring through is an XA connection. I see
the logging of this in the server log but I am trying to find out
where that would be logged from. It seems after this occurs and
because of the way connection pool is being validated and recreated on
error by Glassfish (configured to do so), it gets into this state.
What I don't understand is why this type of error would cause the
connection to appear to be invalid and I am trying to work through
both the Glassfish source and the Derby source to find out. The
connection is correctly handling other errors such as a duplication
trying to be inserted and this does not trigger the connection to
appear to be invalid. So I am trying to understand why a lock
timeout or deadlock detection might do so.
This problem has only cropped up recently when they started performing
multiple requests that I know have a deadlock path through them. I
can fix that problem later but this is a system level problem that I
need to resolve.
I really do appreciate the help and guidance and am willing to try to
work though this. I have to figure this out and either patch
Glassfish or Derby in any case as my customer (think very very large
wireless carrier) is getting pretty PO'ed.
The one thing I think of specifically with a deadlock is that it will
automatically rollback the victim transaction and that might throw off
this client logic regarding the state of the server. But I would
think if there were just a simple problem with deadlocks it would have
showed up before now. That said I don't see any specific tests in our XA
tests: org.apache.derbyTesting.functionTests.tests.jdbapi.XATest or
org.apache.derbyTesting.functionTests.tests.jdbcapi.XATransactionTest
that test XAConnections with deadlocks.
Is this a local transaction on an XA connection or a real XA
transaction with two phase commit?
You might want to try to test and an XAConnection with a simple
deadlock case locally to see if that pops a reproduction.
org.apache.derbyTesting.functionTests.tests.lang.DeadlockDetectionTest
and org.apache.derbyTesting.functionTests.tests.lang have some examples
of deadlocks.
HTH,
Kathey