[ https://issues.apache.org/jira/browse/ARTEMIS-2583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17009155#comment-17009155 ]
Justin Bertram edited comment on ARTEMIS-2583 at 1/8/20 3:21 AM: ----------------------------------------------------------------- I've identified the issue as being caused by ARTEMIS-2567. I've sent a PR to deal with it. was (Author: jbertram): I've created ARTEMIS-2588 to deal with this issue. > Message permanently in "delivering" state if a JMS XA client crashes > -------------------------------------------------------------------- > > Key: ARTEMIS-2583 > URL: https://issues.apache.org/jira/browse/ARTEMIS-2583 > Project: ActiveMQ Artemis > Issue Type: Bug > Components: Broker, Web Console > Affects Versions: 2.10.1 > Environment: Windows 10 > Reporter: miroch > Priority: Critical > Attachments: ArtemisXaReceiveCrashTest.java, ArtemisXaSender.java, > pom.xml > > > h2. Symptoms: > If a message is created and sent to a queue using the *ArtemisMQ Web console* > and then read by the JMS XA client program, but the client crashes before it > completes its XA transaction, the ArtemisMQ server correctly recognizes that > the client has died. However, the message does not "return" to the queue. > Instead, it remains "delivering" permanently and thus it is not accessible > anymore (until ArtemisMQ server is restarted: the things normalize > afterwards). > h2. Steps to reproduce: > 1. Note that due to a nature of this bug it is not possible to demonstrate it > in an embedded environment. A separate instance of Artemis MQ is needed > instead. Therefore install the ArtemisMQ 2.10.1 > (https://www.apache.org/dyn/closer.cgi?filename=activemq/activemq-artemis/2.10.1/apache-artemis-2.10.1-bin.zip&action=download) > and use its out-of-the-box configuration with only a single change: add the > address for exampleQueue into broker.xml, so that the queue is permanently > visible in the WebConsole: > {{<address name="exampleQueue">}} > {{ <anycast>}} > {{ <queue name="exampleQueue" />}} > {{ </anycast>}} > {{</address>}} > 2. Access the WebConsole and navigate to exampleQueue. Then send a durable > plain text message *via WebConsole (this is important)* into this queue. > 3. Setup the XA client. The attached source-code is based on the example > "xa-recieve" from > https://github.com/apache/activemq-artemis/tree/master/examples/features/standard/xa-receive > The client code is located in ArtemisXaReceiveCrashTest. In order to get it > running, add DummyXid and jndi.properties from > https://github.com/apache/activemq-artemis/blob/master/examples/features/standard/xa-receive/src/main/java/org/apache/activemq/artemis/jms/example/DummyXid.java > and > https://github.com/apache/activemq-artemis/blob/master/examples/features/standard/xa-receive/src/main/resources/jndi.properties, > respectively. The only library needed is artemis-jms-client-all (version > 2.10.1): see the attached pom.xml > 4. Run the main method of ArtemisXaReceiveCrashTest. It reads the message out > of exampleQueue within an XA-transaction, however, it terminates the Java VM > before rolling-back or committing the transaction. > 5. If you now execute the method "browse()" for the queue exampleQueue via > WebConsole, it returns an empty list. If you execute the method > listDeliveringMessages() for the queue exampleQueue via WebConsole, it > returns an empty list. If you execute the method countDeliveringMessages() > for the queue exampleQueue via WebConsole, it returns 1. This state is > permanent: the message does not reappear back in the queue. The situation > normalizes after the ArtemisMQ server is restarted: the message is then again > available for delivery. > h2. Variations: > * The situation does not improve, if the JMS XA client closes the connection > and session properly and terminates without rolling-back or committing the > transaction. The behaviour is the same. This can be simulated, if the line > containing "System.exit(0)" in ArtemisXaReceiveCrashTest is commented out. > * On the other hand, if the message is created and sent programmatically > using the attached program ArtemisXaSender (again based on an ArtemisMQ > example "xa-receive") instead of the WebConsole, the server behaviour is > correct: after the reading XA client crashes, the message correctly appears > back in the exampleQueue. Therefore it seems that the problem is somehow > related to the way the WebConsole sends and/or formats the message. > * If the reading client is transacted, but no XA-client, there is no > problem, even if the message is sent via WebConsole. -- This message was sent by Atlassian Jira (v8.3.4#803005)