Uploaded image for project: 'AMQ Broker'
  1. AMQ Broker
  2. ENTMQBR-5344

Proton LargeMessageDeliveryContext doesn't check for closed connection / sender before attempting to send

    XMLWordPrintable

Details

    Description

      ProtonServerSenderContext checks for a closed endpoint before sending a normal message but does not check before sending a Large message (ProtonServerSenderContext$LargeMessageDeliveryContext::deliver()), resulting in an IllegalStateException bubbling up from the client:

      2021-08-13 10:50:45,734 WARN  [org.apache.activemq.artemis.protocol.amqp.proton.ProtonServerSenderContext] send not allowed after the sender is closed.: java.lang.IllegalStateException: send not allowed after the sender is closed.
      	at org.apache.qpid.proton.engine.impl.SenderImpl.send(SenderImpl.java:67) [proton-j-0.33.6.redhat-00001.jar:0.33.6.redhat-00001]
      	at org.apache.activemq.artemis.protocol.amqp.proton.ProtonServerSenderContext$LargeMessageDeliveryContext.deliver(ProtonServerSenderContext.java:602) [artemis-amqp-protocol-2.16.0.redhat-00022.jar:2.16.0.redhat-00022]
      	at org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler.runNow(ProtonHandler.java:346) [artemis-amqp-protocol-2.16.0.redhat-00022.jar:2.16.0.redhat-00022]
      	at org.apache.activemq.artemis.protocol.amqp.proton.AMQPConnectionContext.runNow(AMQPConnectionContext.java:275) [artemis-amqp-protocol-2.16.0.redhat-00022.jar:2.16.0.redhat-00022]
      	at org.apache.activemq.artemis.protocol.amqp.proton.ProtonServerSenderContext$LargeMessageDeliveryContext.resume(ProtonServerSenderContext.java:561) [artemis-amqp-protocol-2.16.0.redhat-00022.jar:2.16.0.redhat-00022]
      	at org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnection.lambda$fireReady$0(NettyConnection.java:183) [artemis-core-client-2.16.0.redhat-00022.jar:2.16.0.redhat-00022]
      	at java.util.ArrayList.forEach(ArrayList.java:1255) [rt.jar:1.8.0_151]
      	at org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnection.fireReady(NettyConnection.java:181) [artemis-core-client-2.16.0.redhat-00022.jar:2.16.0.redhat-00022]
      	at org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptor$Listener.connectionReadyForWrites(NettyAcceptor.java:1006) [artemis-server-2.16.0.redhat-00022.jar:2.16.0.redhat-00022]
      	at org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelWritabilityChanged(ActiveMQChannelHandler.java:65) [artemis-core-client-2.16.0.redhat-00022.jar:2.16.0.redhat-00022]
      	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:441) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:428) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.AbstractChannelHandlerContext.fireChannelWritabilityChanged(AbstractChannelHandlerContext.java:421) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelWritabilityChanged(DefaultChannelPipeline.java:1433) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:441) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:428) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.DefaultChannelPipeline.fireChannelWritabilityChanged(DefaultChannelPipeline.java:931) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.ChannelOutboundBuffer.fireChannelWritabilityChanged(ChannelOutboundBuffer.java:628) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.ChannelOutboundBuffer.setWritable(ChannelOutboundBuffer.java:594) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.ChannelOutboundBuffer.decrementPendingOutboundBytes(ChannelOutboundBuffer.java:196) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:273) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:352) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.epoll.AbstractEpollStreamChannel.writeBytesMultiple(AbstractEpollStreamChannel.java:305) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.epoll.AbstractEpollStreamChannel.doWriteMultiple(AbstractEpollStreamChannel.java:510) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.epoll.AbstractEpollStreamChannel.doWrite(AbstractEpollStreamChannel.java:422) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:953) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:570) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:470) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.63.Final-redhat-00001.jar:4.1.63.Final-redhat-00001]
      	at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) [artemis-commons-2.16.0.redhat-00022.jar:2.16.0.redhat-00022]
      

      Following this, the broker logs an "AMQ222151: removing consumer which did not handle a message" warning.

      Attachments

        Issue Links

          Activity

            People

              csuconic@redhat.com Clebert Suconic
              rhn-support-dhawkins Duane Hawkins
              Roman Vais Roman Vais
              Votes:
              0 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: