Rolling back with ManagedConnectingMBean sometimes fails to rollback the
transaction or results in various exceptions propagated into a client.
------------------------------------------------------------------------------------------------------------------------------------------------
Key: QPID-3658
URL: https://issues.apache.org/jira/browse/QPID-3658
Project: Qpid
Issue Type: Bug
Components: Java Broker
Affects Versions: 0.15
Reporter: Alex Rudyy
Tests from org.apache.qpid.management.jmx.ManagedConnectionMBeanTest added as
part of introducing ManagedConnectionMBean on 0-10 path (QPID-2243) reviled
several issues with transaction rollback on both 0-9 and 0-10 paths.
1) The first issue sporadically occurs for test profiles java-bdb-spawn.0-9-1,
java-bdb-spawn.0-10.
Transaction can be not rolled back at all with ManagedConnectionMBean#rollback
and the following commit from a client can successfully commit all published
messages.
The failed test stack trace demonstrate the problem
{nowrap}
junit.framework.AssertionFailedError: Unexpected message received
at
org.apache.qpid.management.jmx.ManagedConnectionMBeanTest.testRollback(ManagedConnectionMBeanTest.java:217)
at
org.apache.qpid.test.utils.QpidBrokerTestCase.runBare(QpidBrokerTestCase.java:240)
at org.apache.qpid.test.utils.QpidTestCase.run(QpidTestCase.java:135)
{nowrap}
2) The second issue sporadically occurs on trying to rolled back transaction
for test profile java-bdb-spawn.0-9-1
The BDB native exception is thrown on rollback from ManagedConnectionMBean
{nowrap}
org.apache.qpid.management.jmx.ManagedConnectionMBeanTest.testRollback
Error Message
Transaction Id 11 has been closed.
Stacktrace
java.lang.IllegalStateException: Transaction Id 11 has been closed.
at com.sleepycat.je.Transaction.checkOpen(Transaction.java:764)
at com.sleepycat.je.Transaction.doCommit(Transaction.java:466)
at com.sleepycat.je.Transaction.commitNoSync(Transaction.java:388)
at
org.apache.qpid.server.store.berkeleydb.BDBMessageStore.commit(BDBMessageStore.java:1742)
at
org.apache.qpid.server.store.berkeleydb.BDBMessageStore.commitTranImpl(BDBMessageStore.java:1281)
at
org.apache.qpid.server.store.berkeleydb.BDBMessageStore.access$400(BDBMessageStore.java:94)
at
org.apache.qpid.server.store.berkeleydb.BDBMessageStore$StoredBDBMessage.flushToStore(BDBMessageStore.java:2053)
at
org.apache.qpid.server.store.berkeleydb.BDBMessageStore$StoredBDBMessage.remove(BDBMessageStore.java:2069)
at org.apache.qpid.server.AMQChannel$2.onRollback(AMQChannel.java:303)
at
org.apache.qpid.server.txn.LocalTransaction.rollback(LocalTransaction.java:293)
at org.apache.qpid.server.AMQChannel.rollback(AMQChannel.java:989)
at org.apache.qpid.server.AMQChannel.rollback(AMQChannel.java:966)
at
org.apache.qpid.server.protocol.AMQProtocolEngine.rollbackTransactions(AMQProtocolEngine.java:646)
at
org.apache.qpid.server.protocol.AMQProtocolSessionMBean.rollbackTransactions(AMQProtocolSessionMBean.java:173)
at
com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:93)
at
com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:27)
at
com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:208)
at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:120)
at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:262)
at javax.management.StandardMBean.invoke(StandardMBean.java:391)
at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
at
com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
at
org.apache.qpid.server.management.MBeanInvocationHandlerImpl.invoke(MBeanInvocationHandlerImpl.java:202)
at $Proxy11.invoke(Unknown Source)
at
javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427)
at
javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
at
javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265)
at java.security.AccessController.doPrivileged(Native Method)
at
javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1367)
at
javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
{nowrap}
3) The third issue sporadically happens for 0-10 bdb profile on trying to
receive a message in a separate session after transaction was previously rolled
back with MBean.
The stack trace is below
{nowrap}
Error Message
Message consumer forcibly closed due to error: org.apache.qpid.AMQException:
ch=1 id=0 ExecutionException(errorCode=INTERNAL_ERROR, commandId=3,
description=Exception processing command: java.lang.RuntimeException:
java.lang.IllegalArgumentException: Transaction 12 has been closed and is no
longer usable.) [error code 541: internal error]
Stacktrace
javax.jms.JMSException: Message consumer forcibly closed due to error:
org.apache.qpid.AMQException: ch=1 id=0
ExecutionException(errorCode=INTERNAL_ERROR, commandId=3, description=Exception
processing command: java.lang.RuntimeException:
java.lang.IllegalArgumentException: Transaction 12 has been closed and is no
longer usable.) [error code 541: internal error]
at
org.apache.qpid.client.BasicMessageConsumer.returnMessageOrThrow(BasicMessageConsumer.java:529)
at
org.apache.qpid.client.BasicMessageConsumer.receive(BasicMessageConsumer.java:417)
at
org.apache.qpid.management.jmx.ManagedConnectionMBeanTest.testRollback(ManagedConnectionMBeanTest.java:210)
at
org.apache.qpid.test.utils.QpidBrokerTestCase.runBare(QpidBrokerTestCase.java:240)
at org.apache.qpid.test.utils.QpidTestCase.run(QpidTestCase.java:135)
Caused by: org.apache.qpid.AMQException: ch=1 id=0
ExecutionException(errorCode=INTERNAL_ERROR, commandId=3, description=Exception
processing command: java.lang.RuntimeException:
java.lang.IllegalArgumentException: Transaction 12 has been closed and is no
longer usable.) [error code 541: internal error]
at
org.apache.qpid.client.AMQSession_0_10.setCurrentException(AMQSession_0_10.java:1056)
at
org.apache.qpid.client.AMQSession_0_10.exception(AMQSession_0_10.java:914)
at
org.apache.qpid.transport.SessionDelegate.executionException(SessionDelegate.java:160)
at
org.apache.qpid.transport.SessionDelegate.executionException(SessionDelegate.java:32)
at
org.apache.qpid.transport.ExecutionException.dispatch(ExecutionException.java:112)
at
org.apache.qpid.transport.SessionDelegate.command(SessionDelegate.java:50)
at
org.apache.qpid.transport.SessionDelegate.command(SessionDelegate.java:32)
at org.apache.qpid.transport.Method.delegate(Method.java:159)
at org.apache.qpid.transport.Session.received(Session.java:545)
at org.apache.qpid.transport.Connection.dispatch(Connection.java:422)
at
org.apache.qpid.transport.ConnectionDelegate.handle(ConnectionDelegate.java:64)
at
org.apache.qpid.transport.ConnectionDelegate.handle(ConnectionDelegate.java:40)
at
org.apache.qpid.transport.MethodDelegate.executionException(MethodDelegate.java:110)
at
org.apache.qpid.transport.ExecutionException.dispatch(ExecutionException.java:112)
at
org.apache.qpid.transport.ConnectionDelegate.command(ConnectionDelegate.java:54)
at
org.apache.qpid.transport.ConnectionDelegate.command(ConnectionDelegate.java:40)
at org.apache.qpid.transport.Method.delegate(Method.java:159)
at org.apache.qpid.transport.Connection.received(Connection.java:387)
at org.apache.qpid.transport.Connection.received(Connection.java:66)
at org.apache.qpid.transport.network.Assembler.emit(Assembler.java:95)
at
org.apache.qpid.transport.network.Assembler.assemble(Assembler.java:196)
at org.apache.qpid.transport.network.Assembler.frame(Assembler.java:129)
at org.apache.qpid.transport.network.Frame.delegate(Frame.java:133)
at
org.apache.qpid.transport.network.Assembler.received(Assembler.java:100)
at
org.apache.qpid.transport.network.Assembler.received(Assembler.java:42)
at
org.apache.qpid.transport.network.InputHandler.next(InputHandler.java:187)
at
org.apache.qpid.transport.network.InputHandler.received(InputHandler.java:103)
at
org.apache.qpid.transport.network.InputHandler.received(InputHandler.java:42)
at
org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:153)
at java.lang.Thread.run(Thread.java:662)
{nowrap}
--
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
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]