You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Alex Rudyy (JIRA)" <ji...@apache.org> on 2015/11/13 14:27:11 UTC
[jira] [Updated] (QPID-6847) [JMS AMQP 1.0 Client] Deadlock during
commit on sending message
[ https://issues.apache.org/jira/browse/QPID-6847?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alex Rudyy updated QPID-6847:
-----------------------------
Description:
On committing publisher transaction client can run into deadlock
{noformat}
Found one Java-level deadlock:
=============================
"QpidConnectionInputThread-0":
waiting to lock monitor 0x00007f60a40047f8 (object 0x00000006c70614c8, a org.apache.qpid.amqp_1_0.client.TransactionController),
which is held by "main"
"main":
waiting to lock monitor 0x00007f60a4005be8 (object 0x00000006c700cc90, a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint),
which is held by "QpidConnectionInputThread-0"
Java stack information for the threads listed above:
===================================================
"QpidConnectionInputThread-0":
at org.apache.qpid.amqp_1_0.client.TransactionController.handle(TransactionController.java:203)
- waiting to lock <0x00000006c70614c8> (a org.apache.qpid.amqp_1_0.client.TransactionController)
at org.apache.qpid.amqp_1_0.transport.LinkEndpoint.receiveDeliveryState(LinkEndpoint.java:229)
- locked <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
at org.apache.qpid.amqp_1_0.transport.SendingLinkEndpoint.receiveDeliveryState(SendingLinkEndpoint.java:196)
at org.apache.qpid.amqp_1_0.transport.SessionEndpoint.receiveDisposition(SessionEndpoint.java:527)
at org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receiveDisposition(ConnectionEndpoint.java:664)
- eliminated <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
at org.apache.qpid.amqp_1_0.type.transport.Disposition.invoke(Disposition.java:180)
at org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receive(ConnectionEndpoint.java:808)
- locked <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
at org.apache.qpid.amqp_1_0.framing.FrameHandler.parse(FrameHandler.java:241)
at org.apache.qpid.amqp_1_0.framing.ConnectionHandler.parse(ConnectionHandler.java:75)
at org.apache.qpid.amqp_1_0.client.TCPTransportProvider.doRead(TCPTransportProvider.java:244)
at org.apache.qpid.amqp_1_0.client.TCPTransportProvider.access$000(TCPTransportProvider.java:47)
at org.apache.qpid.amqp_1_0.client.TCPTransportProvider$1.run(TCPTransportProvider.java:185)
at java.lang.Thread.run(Thread.java:745)
"main":
at org.apache.qpid.amqp_1_0.transport.LinkEndpoint.isDetached(LinkEndpoint.java:326)
- waiting to lock <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
at org.apache.qpid.amqp_1_0.client.TransactionController.waitForResponse(TransactionController.java:118)
- locked <0x00000006c70614c8> (a org.apache.qpid.amqp_1_0.client.TransactionController)
at org.apache.qpid.amqp_1_0.client.TransactionController.declare(TransactionController.java:108)
at org.apache.qpid.amqp_1_0.client.TransactionController.beginTransaction(TransactionController.java:71)
at org.apache.qpid.amqp_1_0.client.Session.createSessionLocalTransaction(Session.java:387)
at org.apache.qpid.amqp_1_0.jms.impl.SessionImpl.commit(SessionImpl.java:250)
at Test.main(Test.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Found 1 deadlock.
Heap
PSYoungGen total 110592K, used 56253K [0x000000076d000000, 0x000000077c800000, 0x00000007c0000000)
eden space 110080K, 51% used [0x000000076d000000,0x00000007706e7610,0x0000000773b80000)
from space 512K, 6% used [0x000000077c780000,0x000000077c788000,0x000000077c800000)
to space 5632K, 0% used [0x000000077bd00000,0x000000077bd00000,0x000000077c280000)
ParOldGen total 171008K, used 2372K [0x00000006c7000000, 0x00000006d1700000, 0x000000076d000000)
object space 171008K, 1% used [0x00000006c7000000,0x00000006c7251100,0x00000006d1700000)
Metaspace used 10155K, capacity 10336K, committed 10496K, reserved 1058816K
class space used 1191K, capacity 1248K, committed 1280K, reserved 1048576K
{noformat}
It can be reproduced with the following:
{code}
Properties jndi = new Properties();
jndi.put("java.naming.factory.initial", "org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory");
jndi.put("connectionfactory.qpidConnectionfactory", "amqp://guest:guest@localhost:5672?clientid=test-client&remote-host=default");
int numberOfMessages = 250000;
Context initialContext = new InitialContext(jndi);
ConnectionFactory connectionFactory = (ConnectionFactory)initialContext.lookup("qpidConnectionfactory");
Connection conn = connectionFactory.createConnection();
Session sess = conn.createSession(true, Session.SESSION_TRANSACTED);
Destination destination = sess.createQueue("test-queue");
MessageProducer prod = sess.createProducer(destination);
final Message message = sess.createTextMessage();
for (int i = 0 ; i < numberOfMessages; i++)
{
System.err.println("Sending Message " + i);
prod.send(message);
sess.commit();
}
{code}
was:
On committing sending transaction client can ran into deadlock
{noformat}
Found one Java-level deadlock:
=============================
"QpidConnectionInputThread-0":
waiting to lock monitor 0x00007f60a40047f8 (object 0x00000006c70614c8, a org.apache.qpid.amqp_1_0.client.TransactionController),
which is held by "main"
"main":
waiting to lock monitor 0x00007f60a4005be8 (object 0x00000006c700cc90, a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint),
which is held by "QpidConnectionInputThread-0"
Java stack information for the threads listed above:
===================================================
"QpidConnectionInputThread-0":
at org.apache.qpid.amqp_1_0.client.TransactionController.handle(TransactionController.java:203)
- waiting to lock <0x00000006c70614c8> (a org.apache.qpid.amqp_1_0.client.TransactionController)
at org.apache.qpid.amqp_1_0.transport.LinkEndpoint.receiveDeliveryState(LinkEndpoint.java:229)
- locked <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
at org.apache.qpid.amqp_1_0.transport.SendingLinkEndpoint.receiveDeliveryState(SendingLinkEndpoint.java:196)
at org.apache.qpid.amqp_1_0.transport.SessionEndpoint.receiveDisposition(SessionEndpoint.java:527)
at org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receiveDisposition(ConnectionEndpoint.java:664)
- eliminated <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
at org.apache.qpid.amqp_1_0.type.transport.Disposition.invoke(Disposition.java:180)
at org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receive(ConnectionEndpoint.java:808)
- locked <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
at org.apache.qpid.amqp_1_0.framing.FrameHandler.parse(FrameHandler.java:241)
at org.apache.qpid.amqp_1_0.framing.ConnectionHandler.parse(ConnectionHandler.java:75)
at org.apache.qpid.amqp_1_0.client.TCPTransportProvider.doRead(TCPTransportProvider.java:244)
at org.apache.qpid.amqp_1_0.client.TCPTransportProvider.access$000(TCPTransportProvider.java:47)
at org.apache.qpid.amqp_1_0.client.TCPTransportProvider$1.run(TCPTransportProvider.java:185)
at java.lang.Thread.run(Thread.java:745)
"main":
at org.apache.qpid.amqp_1_0.transport.LinkEndpoint.isDetached(LinkEndpoint.java:326)
- waiting to lock <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
at org.apache.qpid.amqp_1_0.client.TransactionController.waitForResponse(TransactionController.java:118)
- locked <0x00000006c70614c8> (a org.apache.qpid.amqp_1_0.client.TransactionController)
at org.apache.qpid.amqp_1_0.client.TransactionController.declare(TransactionController.java:108)
at org.apache.qpid.amqp_1_0.client.TransactionController.beginTransaction(TransactionController.java:71)
at org.apache.qpid.amqp_1_0.client.Session.createSessionLocalTransaction(Session.java:387)
at org.apache.qpid.amqp_1_0.jms.impl.SessionImpl.commit(SessionImpl.java:250)
at Test.main(Test.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Found 1 deadlock.
Heap
PSYoungGen total 110592K, used 56253K [0x000000076d000000, 0x000000077c800000, 0x00000007c0000000)
eden space 110080K, 51% used [0x000000076d000000,0x00000007706e7610,0x0000000773b80000)
from space 512K, 6% used [0x000000077c780000,0x000000077c788000,0x000000077c800000)
to space 5632K, 0% used [0x000000077bd00000,0x000000077bd00000,0x000000077c280000)
ParOldGen total 171008K, used 2372K [0x00000006c7000000, 0x00000006d1700000, 0x000000076d000000)
object space 171008K, 1% used [0x00000006c7000000,0x00000006c7251100,0x00000006d1700000)
Metaspace used 10155K, capacity 10336K, committed 10496K, reserved 1058816K
class space used 1191K, capacity 1248K, committed 1280K, reserved 1048576K
{noformat}
It can be reproduced with the following:
{code}
Properties jndi = new Properties();
jndi.put("java.naming.factory.initial", "org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory");
jndi.put("connectionfactory.qpidConnectionfactory", "amqp://guest:guest@localhost:5672?clientid=test-client&remote-host=default");
int numberOfMessages = 250000;
Context initialContext = new InitialContext(jndi);
ConnectionFactory connectionFactory = (ConnectionFactory)initialContext.lookup("qpidConnectionfactory");
Connection conn = connectionFactory.createConnection();
Session sess = conn.createSession(true, Session.SESSION_TRANSACTED);
Destination destination = sess.createQueue("test-queue");
MessageProducer prod = sess.createProducer(destination);
final Message message = sess.createTextMessage();
for (int i = 0 ; i < numberOfMessages; i++)
{
System.err.println("Sending Message " + i);
prod.send(message);
sess.commit();
}
{code}
> [JMS AMQP 1.0 Client] Deadlock during commit on sending message
> ---------------------------------------------------------------
>
> Key: QPID-6847
> URL: https://issues.apache.org/jira/browse/QPID-6847
> Project: Qpid
> Issue Type: Bug
> Components: JMS AMQP 1.0 Client
> Affects Versions: 0.32
> Reporter: Alex Rudyy
>
> On committing publisher transaction client can run into deadlock
> {noformat}
> Found one Java-level deadlock:
> =============================
> "QpidConnectionInputThread-0":
> waiting to lock monitor 0x00007f60a40047f8 (object 0x00000006c70614c8, a org.apache.qpid.amqp_1_0.client.TransactionController),
> which is held by "main"
> "main":
> waiting to lock monitor 0x00007f60a4005be8 (object 0x00000006c700cc90, a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint),
> which is held by "QpidConnectionInputThread-0"
> Java stack information for the threads listed above:
> ===================================================
> "QpidConnectionInputThread-0":
> at org.apache.qpid.amqp_1_0.client.TransactionController.handle(TransactionController.java:203)
> - waiting to lock <0x00000006c70614c8> (a org.apache.qpid.amqp_1_0.client.TransactionController)
> at org.apache.qpid.amqp_1_0.transport.LinkEndpoint.receiveDeliveryState(LinkEndpoint.java:229)
> - locked <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
> at org.apache.qpid.amqp_1_0.transport.SendingLinkEndpoint.receiveDeliveryState(SendingLinkEndpoint.java:196)
> at org.apache.qpid.amqp_1_0.transport.SessionEndpoint.receiveDisposition(SessionEndpoint.java:527)
> at org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receiveDisposition(ConnectionEndpoint.java:664)
> - eliminated <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
> at org.apache.qpid.amqp_1_0.type.transport.Disposition.invoke(Disposition.java:180)
> at org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receive(ConnectionEndpoint.java:808)
> - locked <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
> at org.apache.qpid.amqp_1_0.framing.FrameHandler.parse(FrameHandler.java:241)
> at org.apache.qpid.amqp_1_0.framing.ConnectionHandler.parse(ConnectionHandler.java:75)
> at org.apache.qpid.amqp_1_0.client.TCPTransportProvider.doRead(TCPTransportProvider.java:244)
> at org.apache.qpid.amqp_1_0.client.TCPTransportProvider.access$000(TCPTransportProvider.java:47)
> at org.apache.qpid.amqp_1_0.client.TCPTransportProvider$1.run(TCPTransportProvider.java:185)
> at java.lang.Thread.run(Thread.java:745)
> "main":
> at org.apache.qpid.amqp_1_0.transport.LinkEndpoint.isDetached(LinkEndpoint.java:326)
> - waiting to lock <0x00000006c700cc90> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
> at org.apache.qpid.amqp_1_0.client.TransactionController.waitForResponse(TransactionController.java:118)
> - locked <0x00000006c70614c8> (a org.apache.qpid.amqp_1_0.client.TransactionController)
> at org.apache.qpid.amqp_1_0.client.TransactionController.declare(TransactionController.java:108)
> at org.apache.qpid.amqp_1_0.client.TransactionController.beginTransaction(TransactionController.java:71)
> at org.apache.qpid.amqp_1_0.client.Session.createSessionLocalTransaction(Session.java:387)
> at org.apache.qpid.amqp_1_0.jms.impl.SessionImpl.commit(SessionImpl.java:250)
> at Test.main(Test.java:43)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
> Found 1 deadlock.
> Heap
> PSYoungGen total 110592K, used 56253K [0x000000076d000000, 0x000000077c800000, 0x00000007c0000000)
> eden space 110080K, 51% used [0x000000076d000000,0x00000007706e7610,0x0000000773b80000)
> from space 512K, 6% used [0x000000077c780000,0x000000077c788000,0x000000077c800000)
> to space 5632K, 0% used [0x000000077bd00000,0x000000077bd00000,0x000000077c280000)
> ParOldGen total 171008K, used 2372K [0x00000006c7000000, 0x00000006d1700000, 0x000000076d000000)
> object space 171008K, 1% used [0x00000006c7000000,0x00000006c7251100,0x00000006d1700000)
> Metaspace used 10155K, capacity 10336K, committed 10496K, reserved 1058816K
> class space used 1191K, capacity 1248K, committed 1280K, reserved 1048576K
> {noformat}
> It can be reproduced with the following:
> {code}
> Properties jndi = new Properties();
> jndi.put("java.naming.factory.initial", "org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory");
> jndi.put("connectionfactory.qpidConnectionfactory", "amqp://guest:guest@localhost:5672?clientid=test-client&remote-host=default");
> int numberOfMessages = 250000;
> Context initialContext = new InitialContext(jndi);
> ConnectionFactory connectionFactory = (ConnectionFactory)initialContext.lookup("qpidConnectionfactory");
> Connection conn = connectionFactory.createConnection();
> Session sess = conn.createSession(true, Session.SESSION_TRANSACTED);
> Destination destination = sess.createQueue("test-queue");
> MessageProducer prod = sess.createProducer(destination);
> final Message message = sess.createTextMessage();
> for (int i = 0 ; i < numberOfMessages; i++)
> {
> System.err.println("Sending Message " + i);
> prod.send(message);
> sess.commit();
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org