You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2025/04/30 19:41:00 UTC
[jira] [Work logged] (ARTEMIS-4993) ActiveMQIOErrorException for transformed messages
[ https://issues.apache.org/jira/browse/ARTEMIS-4993?focusedWorklogId=968251&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-968251 ]
ASF GitHub Bot logged work on ARTEMIS-4993:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 30/Apr/25 19:40
Start Date: 30/Apr/25 19:40
Worklog Time Spent: 10m
Work Description: jbertram opened a new pull request, #5664:
URL: https://github.com/apache/activemq-artemis/pull/5664
(no comment)
Issue Time Tracking
-------------------
Worklog Id: (was: 968251)
Remaining Estimate: 0h
Time Spent: 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
> Priority: Major
> Labels: pull-request-available
> Attachments: client.zip
>
> Time Spent: 10m
> 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-unsubscribe@activemq.apache.org
For additional commands, e-mail: issues-help@activemq.apache.org
For further information, visit: https://activemq.apache.org/contact