[
https://issues.apache.org/jira/browse/ARTEMIS-1881?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Justin Bertram resolved ARTEMIS-1881.
-------------------------------------
Resolution: Cannot Reproduce
I can't reproduce this with HEAD (i.e. fa439375e9dc950e9047ea661ebf53a05e08e7c6)
> Queue autocreate together with multiple producers/consumers on the same
> session stopped working with AMQP protocol
> ------------------------------------------------------------------------------------------------------------------
>
> Key: ARTEMIS-1881
> URL: https://issues.apache.org/jira/browse/ARTEMIS-1881
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Components: AMQP
> Affects Versions: 2.5.0, 2.6.0
> Reporter: Jiri Daněk
> Priority: Major
>
> Usage of a JMS Pool ConnectionFactory means that the pattern where there is
> multiple producers and consumers created on a single session is fairly
> natural.
> I am using an autocreated address. For every send or receive operation in the
> following sequence, a new Message\{Producer,Consumer} is created: send,
> receive, receive, send, receive.
> This (and the attached test for AMQP) used to work as expected in 2.4.0, but
> broke in 2.5.0 and is broken since.
> The OpenWire version of test usually passes, but sometimes fails. Log is
> provided in comment.
> According to {{git bisect}} the AMQP breakage occurred due to
> {noformat}
> 1d1d6c8b4686f869df0ca5fc09c20128f8481cff is the first bad commit
> commit 1d1d6c8b4686f869df0ca5fc09c20128f8481cff
> Author: Clebert Suconic [email protected]
> Date: Tue Nov 21 10:12:20 2017 -0500
> ARTEMIS-1416 Implementing cache on queue and address querying
> This will cache the last query, optimizing most of the cases
> This won't optimize the case where you are sending producers with different
> address,
> but this is not the one I'm after now.
> :040000 040000 315357d1cfdfb9a71a081b8976ad54f5f5070ab3
> 50eb2ba0ae07fdb77b46575d9d7a5f84bd4f6483 M artemis-protocols{noformat}
> Test
> {code:java|title=activemq-artemis/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AutoCreateTests.java}
> package org.apache.activemq.artemis.tests.integration.amqp;
> import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
> import org.apache.qpid.jms.JmsConnectionFactory;
> import org.junit.Test;
> import org.junit.runner.RunWith;
> import org.junit.runners.Parameterized;
> import javax.jms.*;
> import java.util.Arrays;
> import java.util.Collection;
> import java.util.UUID;
> import static org.hamcrest.CoreMatchers.notNullValue;
> import static org.hamcrest.CoreMatchers.nullValue;
> @RunWith(Parameterized.class)
> public class AutoCreateTests extends JMSClientTestSupport {
> enum Protocol {
> AMQP, CORE, OPENWIRE
> }
> // @Parameterized.Parameters
> // public static Object[] data() {
> // return new Object[]{Protocol.AMQP, Protocol.CORE,
> Protocol.OPENWIRE};
> // }
> @Parameterized.Parameters(name = "protocol={0}")
> public static Collection<Object[]> data() {
> return Arrays.asList(new Object[][]{
> {Protocol.AMQP}, {Protocol.CORE}, {Protocol.OPENWIRE}
> });
> }
> @Override
> protected String getConfiguredProtocols() {
> return "AMQP,OPENWIRE,CORE";
> }
> @Parameterized.Parameter
> public Protocol protocol;
> ConnectionFactory getConnectionFactory() {
> switch (protocol) {
> case AMQP:
> return new JmsConnectionFactory("amqp://127.0.0.1:" +
> AMQP_PORT);
> case CORE:
> return new ActiveMQConnectionFactory("tcp://127.0.0.1:" +
> AMQP_PORT);
> case OPENWIRE:
> return new
> org.apache.activemq.ActiveMQConnectionFactory("tcp://127.0.0.1:" + AMQP_PORT);
> }
> throw new IllegalArgumentException("Unknown value of protocol:" +
> protocol);
> }
> @Test
> public void autocreateSendReceiveReceiveSendReceiveOnTheSameSession()
> throws JMSException {
> ConnectionFactory f = getConnectionFactory();
> Connection c = f.createConnection();
> c.start();
> Session s = c.createSession(false, Session.AUTO_ACKNOWLEDGE);
> Queue d = s.createQueue(UUID.randomUUID().toString());
> try {
> {
> MessageProducer p = s.createProducer(d);
> p.send(s.createMessage());
> p.close();
> }
> {
> MessageConsumer co = s.createConsumer(d);
> assertThat(co.receive(2000), notNullValue());
> co.close();
> }
> {
> MessageConsumer co = s.createConsumer(d);
> assertThat(co.receive(2000), nullValue());
> co.close();
> }
> {
> MessageProducer p = s.createProducer(d);
> p.send(s.createMessage());
> p.close();
> }
> {
> MessageConsumer co = s.createConsumer(d);
> assertThat(co.receive(2000), notNullValue()); // <-- AMQP
> fails here
> co.close();
> }
> } finally {
> s.close();
> c.close();
> }
> }
> }
> {code}
> See the "// <-- AMQP fails here" comment for the assert which is broken for
> AMQP. No message is received by the last consumer.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)