Uploaded image for project: 'ActiveMQ Artemis'
  1. ActiveMQ Artemis
  2. ARTEMIS-1707

[openwire] error on create of queue if another connection creates one of the same name

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.4.0
    • 2.5.0
    • OpenWire
    • None
    • OpenWire protocol head using ActiveMQ JMS client

    Description

      When two OpenWire client resources (Producer or Consumer) attempt to create a Queue destination (generally from two different connections) at the same time the following exception can be seen:

      java.lang.RuntimeException: javax.jms.JMSException: org.apache.activemq.artemis.api.core.ActiveMQQueueExistsException: AMQ119018: Binding already exists LocalQueueBinding [address=q2, queue=QueueImpl[name=q2, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=5e9fa4c0-1bf8-11e8-ada3-2c56dc3896a2], temp=false]@6ca8009b, filter=null, name=q2, clusterName=q25e9fa4c0-1bf8-11e8-ada3-2c56dc3896a2]
          at net.ssorj.quiver.Client.run(QuiverArrowJms.java:126)
          at net.ssorj.quiver.QuiverArrowJms.doMain(QuiverArrowJms.java:67)
          at net.ssorj.quiver.QuiverArrowJms.main(QuiverArrowJms.java:29)
      Caused by: javax.jms.JMSException: org.apache.activemq.artemis.api.core.ActiveMQQueueExistsException: AMQ119018: Binding already exists LocalQueueBinding [address=q2, queue=QueueImpl[name=q2, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=5e9fa4c0-1bf8-11e8-ada3-2c56dc3896a2], temp=false]@6ca8009b, filter=null, name=q2, clusterName=q25e9fa4c0-1bf8-11e8-ada3-2c56dc3896a2]
          at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:54)
          at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1399)
          at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1428)
          at org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:2086)
          at org.apache.activemq.ActiveMQMessageProducer.<init>(ActiveMQMessageProducer.java:124)
          at org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:1117)
          at net.ssorj.quiver.Client.sendMessages(QuiverArrowJms.java:136)
          at net.ssorj.quiver.Client.run(QuiverArrowJms.java:113)
          ... 2 more
      Caused by: java.lang.Throwable: org.apache.activemq.artemis.api.core.ActiveMQQueueExistsException: AMQ119018: Binding already exists LocalQueueBinding [address=q2, queue=QueueImpl[name=q2, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=5e9fa4c0-1bf8-11e8-ada3-2c56dc3896a2], temp=false]@6ca8009b, filter=null, name=q2, clusterName=q25e9fa4c0-1bf8-11e8-ada3-2c56dc3896a2]
          at org.apache.activemq.artemis.core.postoffice.impl.SimpleAddressManager.addBinding(SimpleAddressManager.java:85)
          at org.apache.activemq.artemis.core.postoffice.impl.WildcardAddressManager.addBinding(WildcardAddressManager.java:90)
          at org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.addBinding(PostOfficeImpl.java:599)
          at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.createQueue(ActiveMQServerImpl.java:2765)
          at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.createQueue(ActiveMQServerImpl.java:1676)
          at org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.createQueue(ServerSessionImpl.java:588)
          at org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.createQueue(ServerSessionImpl.java:668)
          at org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection.addDestination(OpenWireConnection.java:768)
          at org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection$CommandProcessor.processAddProducer(OpenWireConnection.java:1086)
          at org.apache.activemq.command.ProducerInfo.visit(ProducerInfo.java:108)
          at org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection.bufferReceived(OpenWireConnection.java:289)
          at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:646)
          at org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:68)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
          at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
          at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
          at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
          at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
          at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1359)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
          at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:935)
          at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800)
          at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:404)
          at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:304)
          at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
          at java.lang.Thread.run(Thread.java:748)
      quiver-arrow: Error: Sender exited with code 1
      
      

      This appears to be a race that should be handled in the protocol head if the requested address being created springs into existence by a similar request by another client.

       

      Attachments

        Issue Links

          Activity

            People

              tabish Timothy A. Bish
              tabish Timothy A. Bish
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: