[ https://issues.apache.org/jira/browse/ARTEMIS-4993?focusedWorklogId=968255&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-968255 ]
ASF GitHub Bot logged work on ARTEMIS-4993: ------------------------------------------- Author: ASF GitHub Bot Created on: 30/Apr/25 21:38 Start Date: 30/Apr/25 21:38 Worklog Time Spent: 10m Work Description: tabish121 merged PR #5664: URL: https://github.com/apache/activemq-artemis/pull/5664 Issue Time Tracking ------------------- Worklog Id: (was: 968255) Time Spent: 20m (was: 10m) > ActiveMQIOErrorException for transformed messages > ------------------------------------------------- > > Key: ARTEMIS-4993 > URL: https://issues.apache.org/jira/browse/ARTEMIS-4993 > Project: ActiveMQ Artemis > Issue Type: Bug > Components: Broker, OpenWire > Affects Versions: 2.36.0, 2.37.0 > Reporter: Arno Schuerhoff > Assignee: Justin Bertram > Priority: Major > Labels: pull-request-available > Attachments: client.zip > > Time Spent: 20m > Remaining Estimate: 0h > > Our backbone application uses OpenWire client to connect to ArtemisMQ because > only ActiveMQ Classic JMS client is supported by vendor. We experience > several times in a week a message is rejected by broker with an > ActiveMQIOErrorException AMQ149005. > We found out this issue is caused by a divert with a transformer, what adds > properties to the message. If incoming message has these characteristics: > # Message is durable. > # Message is not a large message, so body shall be persisted in journal. > # Message encoded size is near journal record size. > Then if adding properties pushes message encoding size above journal record > size broker still tries to persist complete message in journal and exception > comes up. > *Steps to Reproduce the Error* > We plan to upgrade ArtemisMQ from 2.31.2 to 2.36.0. Issue on 2.36.0 is even > worser, because connection hangs if using replicating broker pair: > 1.) Create primary broker: > {noformat} > apache-artemis-2.36.0\bin\artemis.cmd create --host=localhost > --default-port=61611 --http-port=8111 --clustered --cluster-user=cls > --cluster-password=cls --replicated --name=br11 --user=usr --password=usr > --allow-anonymous --no-autotune --no-amqp-acceptor --no-hornetq-acceptor > --no-mqtt-acceptor --no-stomp-acceptor br11{noformat} > 2.) Create backup broker: > {noformat} > apache-artemis-2.36.0\bin\artemis.cmd create --host=localhost > --default-port=61612 --http-port=8112 --clustered --cluster-user=cls > --cluster-password=cls --replicated --backup --name=br12 --user=usr > --password=usr --allow-anonymous --no-autotune --no-amqp-acceptor > --no-hornetq-acceptor --no-mqtt-acceptor --no-stomp-acceptor br12{noformat} > 3.) Start brokers > 4.) Add test addresses primary broker.xml: > {code:xml} > <address name="TEST.IN"> > <anycast> > <queue name="TEST.IN"/> > </anycast> > </address> > <address name="TEST.OUT"> > <anycast> > <queue name="TEST.OUT"/> > </anycast> > </address>{code} > 5.) Add divert with transformer to primary broker.xml: > {code:xml} > <diverts> > <divert name="TEST-DIVERT"> > <address>TEST.IN</address> > <forwarding-address>TEST.OUT</forwarding-address> > <filter string="LABEL='Test'"/> > <transformer> > > <class-name>org.apache.activemq.artemis.core.server.transformer.AddHeadersTransformer</class-name> > <property key="Property01" value="0123456789abcdef"/> > <property key="Property02" value="0123456789abcdef"/> > <property key="Property03" value="0123456789abcdef"/> > <property key="Property04" value="0123456789abcdef"/> > <property key="Property05" value="0123456789abcdef"/> > </transformer> > </divert> > </diverts>{code} > 6.) Use this Java code to reproduce issue: > {code:java} > > public class Client { > > private static final Logger logger = > LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); > private static final int numberChars = 250270; > public static void main(final String[] args) throws Exception { > ActiveMQConnectionFactory connectionFactory = new > ActiveMQConnectionFactory("tcp://localhost:61611"); > logger.info("Connecting to tcp://localhost:61611"); > Connection connection = connectionFactory.createConnection("usr", > "usr"); > Session session = connection.createSession(true, 0); > Queue queue = session.createQueue("TEST.IN"); > MessageProducer messageProducer = session.createProducer(queue); > StringBuilder stringBuilder = new StringBuilder(); > for (int i = 0; i < numberChars; ++i) { > stringBuilder.append('x'); > } > Message message = session.createTextMessage(stringBuilder.toString()); > message.setStringProperty("LABEL", "Test"); > logger.info("Sending message with body of {} characters to queue > TEST.IN", numberChars); > messageProducer.send(message); > session.commit(); > logger.info("Cleaning..."); > session.close(); > connection.close(); > logger.info("Done!"); > } > } > {code} > I have attached Maven project, > {code:java} > mvn exec:java{code} > will compile and start that java code. > > *Result* > Client connection hangs, no broker response. Log of primary broker: > {noformat} > 2024-08-15 08:29:55,259 WARN [org.apache.activemq.artemis.journal] > AMQ144012: Journal Record sized at 501800, which is too close to the max > record Size at 501760. Record = CoreMessage[messageID=2928, durable=true, > userID=c93af8c6-5acf-11ef-9eca-00155d1c6e82, priority=4, timestamp=Thu Aug 15 > 08:29:55 CEST 2024, expiration=0, durable=true, address=TEST.OUT, > size=501735, properties=TypedProperties[_AMQ_GROUP_SEQUENCE=0, > Property05=0123456789abcdef, __HDR_BROKER_IN_TIME=1723703395259, > Property04=0123456789abcdef, __HDR_COMMAND_ID=6, _AMQ_ORIG_MESSAGE_ID=2927, > Property03=0123456789abcdef, Property02=0123456789abcdef, > __HDR_MESSAGE_ID=ID:D-6T3WW14-58398-1723703395079-1:1:1:1:1, > Property01=0123456789abcdef, __HDR_DROPPABLE=false, > __AMQ_CID=ID:D-6T3WW14-58398-1723703395079-0:1, __HDR_ARRIVAL=0, > _AMQ_ORIG_QUEUE=TEST-DIVERT, _AMQ_ORIG_ROUTING_TYPE=1, LABEL=Test, > _AMQ_ORIG_ADDRESS=TEST.IN, > __HDR_PRODUCER_ID=ID:D-6T3WW14-58398-1723703395079-1:1:1:1]]@531753705. > Internal broker operations such as redistribution and DLQ may be compromised. > Move large headers into the body of messages. > 2024-08-15 08:29:55,271 WARN > [org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection] > Errors occurred during the buffering operation > org.apache.activemq.artemis.api.core.ActiveMQIOErrorException: AMQ149005: > Message of 501800 bytes is bigger than the max record size of 501760 bytes. > You should try to move large application properties to the message body. > at > org.apache.activemq.artemis.core.journal.impl.JournalImpl.checkRecordSize(JournalImpl.java:1011) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendAddRecordTransactional(JournalImpl.java:1269) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.replication.ReplicatedJournal.appendAddRecordTransactional(ReplicatedJournal.java:192) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.storeMessageTransactional(AbstractJournalStorageManager.java:524) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.storeDurableReference(PostOfficeImpl.java:1772) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.processRouteToDurableQueues(PostOfficeImpl.java:1752) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.processRoute(PostOfficeImpl.java:1688) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:1242) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:1136) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.server.impl.DivertImpl.route(DivertImpl.java:147) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.DivertBinding.route(DivertBinding.java:103) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.BindingsImpl.lambda$simpleRouting$0(BindingsImpl.java:418) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.CopyOnWriteBindings.forEachBindings(CopyOnWriteBindings.java:175) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.BindingsImpl.simpleRouting(BindingsImpl.java:408) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.BindingsImpl.route(BindingsImpl.java:355) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.BindingsImpl.route(BindingsImpl.java:305) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.simpleRoute(PostOfficeImpl.java:1304) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:1206) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:1136) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.doSend(ServerSessionImpl.java:2368) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.send(ServerSessionImpl.java:1963) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.send(ServerSessionImpl.java:1902) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.send(ServerSessionImpl.java:1893) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.protocol.openwire.amq.AMQSession.send(AMQSession.java:427) > ~[artemis-openwire-protocol-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection$CommandProcessor.processMessage(OpenWireConnection.java:1740) > ~[artemis-openwire-protocol-2.36.0.jar:2.36.0] > at > org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:769) > ~[activemq-client-5.18.5.jar:5.18.5] > at > org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection.act(OpenWireConnection.java:366) > ~[artemis-openwire-protocol-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.ThresholdActor.doTask(ThresholdActor.java:68) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) > [?:?] > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) > [?:?] > at > org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) > [artemis-commons-2.36.0.jar:2.36.0] > 2024-08-15 08:29:55,291 WARN > [org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection] > Errors occurred during the buffering operation > org.apache.activemq.artemis.api.core.ActiveMQException: AMQ149005: Message of > 501800 bytes is bigger than the max record size of 501760 bytes. You should > try to move large application properties to the message body. > at > org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection$CommandProcessor.processMessage(OpenWireConnection.java:1743) > ~[artemis-openwire-protocol-2.36.0.jar:2.36.0] > at > org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:769) > ~[activemq-client-5.18.5.jar:5.18.5] > at > org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection.act(OpenWireConnection.java:366) > ~[artemis-openwire-protocol-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.ThresholdActor.doTask(ThresholdActor.java:68) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68) > ~[artemis-commons-2.36.0.jar:2.36.0] > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) > [?:?] > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) > [?:?] > at > org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) > [artemis-commons-2.36.0.jar:2.36.0]{noformat} > Log of backup broker: > {noformat} > 2024-08-15 08:29:55,269 WARN [org.apache.activemq.artemis.journal] > AMQ144012: Journal Record sized at 501800, which is too close to the max > record Size at 501760. Record = > org.apache.activemq.artemis.core.journal.impl.dataformat.ByteArrayEncoding@55dd046c. > Internal broker operations such as redistribution and DLQ may be > compromised. Move large headers into the body of messages. > 2024-08-15 08:29:55,290 WARN > [org.apache.activemq.artemis.core.replication.ReplicationEndpoint] AMQ149005: > Message of 501800 bytes is bigger than the max record size of 501760 bytes. > You should try to move large application properties to the message body. > org.apache.activemq.artemis.api.core.ActiveMQIOErrorException: AMQ149005: > Message of 501800 bytes is bigger than the max record size of 501760 bytes. > You should try to move large application properties to the message body. > at > org.apache.activemq.artemis.core.journal.impl.JournalImpl.checkRecordSize(JournalImpl.java:1011) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendAddRecordTransactional(JournalImpl.java:1269) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.journal.Journal.appendAddRecordTransactional(Journal.java:188) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.journal.impl.JournalBase.appendAddRecordTransactional(JournalBase.java:115) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendAddRecordTransactional(JournalImpl.java:105) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.replication.ReplicationEndpoint.handleAppendAddTXRecord(ReplicationEndpoint.java:766) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.replication.ReplicationEndpoint.handlePacket(ReplicationEndpoint.java:210) > [artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:835) > [artemis-core-client-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:419) > [artemis-core-client-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:392) > [artemis-core-client-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl$DelegatingBufferHandler.bufferReceived(ClientSessionFactoryImpl.java:1355) > [artemis-core-client-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:73) > [artemis-core-client-2.36.0.jar:2.36.0] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) > [netty-codec-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) > [netty-codec-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1407) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994) > [netty-common-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) > [netty-common-4.1.112.Final.jar:4.1.112.Final] > at > org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) > [artemis-commons-2.36.0.jar:2.36.0] > 2024-08-15 08:29:55,300 WARN [org.apache.activemq.artemis.core.server] > AMQ222086: error handling packet ReplicationAddTXMessage[type=92, > channelID=2, responseAsync=false, requiresResponse=false, correlationID=-1] > for replication > org.apache.activemq.artemis.api.core.ActiveMQIOErrorException: AMQ149005: > Message of 501800 bytes is bigger than the max record size of 501760 bytes. > You should try to move large application properties to the message body. > at > org.apache.activemq.artemis.core.journal.impl.JournalImpl.checkRecordSize(JournalImpl.java:1011) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendAddRecordTransactional(JournalImpl.java:1269) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.journal.Journal.appendAddRecordTransactional(Journal.java:188) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.journal.impl.JournalBase.appendAddRecordTransactional(JournalBase.java:115) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendAddRecordTransactional(JournalImpl.java:105) > ~[artemis-journal-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.replication.ReplicationEndpoint.handleAppendAddTXRecord(ReplicationEndpoint.java:766) > ~[artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.replication.ReplicationEndpoint.handlePacket(ReplicationEndpoint.java:210) > [artemis-server-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:835) > [artemis-core-client-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:419) > [artemis-core-client-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:392) > [artemis-core-client-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl$DelegatingBufferHandler.bufferReceived(ClientSessionFactoryImpl.java:1355) > [artemis-core-client-2.36.0.jar:2.36.0] > at > org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:73) > [artemis-core-client-2.36.0.jar:2.36.0] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) > [netty-codec-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) > [netty-codec-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1407) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) > [netty-transport-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994) > [netty-common-4.1.112.Final.jar:4.1.112.Final] > at > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) > [netty-common-4.1.112.Final.jar:4.1.112.Final] > at > org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) > [artemis-commons-2.36.0.jar:2.36.0]{noformat} > Stopping backup broker frees connection to client . Output on client after > stopping backup is: > {noformat} > [client.Client.main()] INFO org.apache.activemq.TransactionContext - commit > failed for transaction TX:ID:D-6T3WW14-58398-1723703395079-1:1:1 > javax.jms.JMSException: > org.apache.activemq.artemis.api.core.ActiveMQException: AMQ149005: Message of > 501800 bytes is bigger than the max record size of 501760 bytes. You should > try to move large application properties to the message body.{noformat} > > *Further Analysis* > 1.) > This issue affects OpenWire clients only. For Core clients the parameter > _amqpMinLargeMessageSize=102400_ in acceptor configuration avoids creating > such messages on the edge as used in my example. A similar parameter for > OpenWire protocol would be appreciated. > 2.) > Class DivertImpl has a reference to used StorageManager. I did add a check > after transform if StorageManager is candidate for using journal and forced > conversion of too big messages to LargeMessage if so: > {code:java} > if (transformer != null) { > copy = transformer.transform(copy); > if (this.storageManager instanceof > AbstractJournalStorageManager) { > copy = LargeServerMessageImpl.checkLargeMessage(copy, > this.storageManager); > } > } > {code} > Testing ArtemisMQ 2.36.0 with patched DivertImpl gives this particular issue > has disappeared, but it's a hack and I cannot judge the consequences for > overall broker. > 3.) > LargeServerMessageImpl uses hard coded value _ESTIMATE_RECORD_TRAIL = 512_ as > size for reserve buffer for possible added headers. This is eaten up rather > fast, because this is 256 characters for properties names and values. Divert > also add some properties prefixed by {_}\_AMQ_ORIG\_{_} by default, what also > need some of the reserve buffer. Increasing to 2048 or making that to a > parameter in broker.xml would also be appreciated. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@activemq.apache.org For additional commands, e-mail: issues-h...@activemq.apache.org For further information, visit: https://activemq.apache.org/contact