[
https://issues.apache.org/jira/browse/ARTEMIS-5308?focusedWorklogId=956987&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-956987
]
ASF GitHub Bot logged work on ARTEMIS-5308:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 13/Feb/25 22:06
Start Date: 13/Feb/25 22:06
Worklog Time Spent: 10m
Work Description: clebertsuconic commented on code in PR #5499:
URL: https://github.com/apache/activemq-artemis/pull/5499#discussion_r1955278702
##########
tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/replication/ReplicationTest.java:
##########
@@ -363,6 +363,60 @@ public void testSendPacketsWithFailure() throws Exception {
}
}
+ @TestTemplate
+ public void testSendMessageWithLargeHeader() throws Exception {
+ setupServer(true, TestInterceptor.class.getName());
+
+ manager = liveServer.getReplicationManager();
+ waitForComponent(manager);
+
+ ClientSessionFactory sf = createSessionFactory(locator);
+
+ try (ClientSession producerSession = sf.createSession();
+ ClientSession consumerSession = sf.createSession()) {
+
+ producerSession.start();
+ producerSession.createQueue(QueueConfiguration.of(ADDRESS));
+ ClientProducer producer = producerSession.createProducer(ADDRESS);
+
+ consumerSession.start();
+ ClientConsumer consumer = consumerSession.createConsumer(ADDRESS);
+
+ ClientMessage messageBefore = producerSession.createMessage(true);
+ setBody(0, messageBefore);
+ messageBefore.putIntProperty("counter", 0);
+ producer.send(messageBefore);
+
+ ClientMessage messageReceivedBefore = consumer.receive(1000);
+ assertNotNull(messageReceivedBefore, "Message should exist!");
+ assertMessageBody(0, messageReceivedBefore);
+ assertEquals(0,
messageReceivedBefore.getIntProperty("counter").intValue());
+ messageReceivedBefore.acknowledge();
+
+ ClientMessage messageWithLargeHeader =
producerSession.createMessage(true);
+ setBody(1, messageWithLargeHeader);
+ messageWithLargeHeader.putIntProperty("counter", 1);
+ messageWithLargeHeader.putStringProperty("large-property",
"z".repeat(512 * 1024));
+ try {
+ producer.send(messageWithLargeHeader);
+ fail();
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("AMQ149005"));
+ }
+
+ ClientMessage messageAfter = producerSession.createMessage(true);
+ setBody(2, messageAfter);
+ messageAfter.putIntProperty("counter", 2);
+ producer.send(messageAfter);
+
+ ClientMessage messageReceivedAfter = consumer.receive(1000);
+ assertNotNull(messageReceivedAfter, "Message should exist!");
+ assertMessageBody(2, messageReceivedAfter);
+ assertEquals(2,
messageReceivedAfter.getIntProperty("counter").intValue());
+ messageReceivedAfter.acknowledge();
Review Comment:
It's such a small thing.. I'm doing it myself and amending it as your
commit...
Issue Time Tracking
-------------------
Worklog Id: (was: 956987)
Time Spent: 1h 40m (was: 1.5h)
> Messages are blocked after sending too large header
> ---------------------------------------------------
>
> Key: ARTEMIS-5308
> URL: https://issues.apache.org/jira/browse/ARTEMIS-5308
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Reporter: Domenico Francesco Bruscino
> Assignee: Domenico Francesco Bruscino
> Priority: Major
> Labels: pull-request-available
> Time Spent: 1h 40m
> Remaining Estimate: 0h
>
> When using a high available setup, an issue occurs when sending a message
> with a header that is too large. The main broker rejects the message, but at
> the same time, it seems that it is trying to perform replication to the
> backup broker.
> The backup broker also rejects this replication message, but after this it
> seems that all further messages are blocked. Only after killing the backup
> broker, the messages will be processed. Seems like this is related to journal
> related operations being blocked until backup acknowledges the completion of
> synchronization
> (https://activemq.apache.org/components/artemis/documentation/latest/ha.html#replication)
> {code:java}
> [Thread-2
> (org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnector)]
> 17:41:25,854 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 524513 bytes is bigger than the max record size of 102400 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)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendAddRecordTransactional(JournalImpl.java:1269)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.journal.Journal.appendAddRecordTransactional(Journal.java:188)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.journal.impl.JournalBase.appendAddRecordTransactional(JournalBase.java:115)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendAddRecordTransactional(JournalImpl.java:105)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.replication.ReplicationEndpoint.handleAppendAddTXRecord(ReplicationEndpoint.java:766)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.replication.ReplicationEndpoint.handlePacket(ReplicationEndpoint.java:211)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:852)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:419)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:392)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl$DelegatingBufferHandler.bufferReceived(ClientSessionFactoryImpl.java:1334)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnection$1.run(InVMConnection.java:223)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
> ~[classes/:?]
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> [?:?]
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> [?:?]
> at
> org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
> [classes/:?]
> [Thread-4 (ActiveMQ-server-ActiveMQServerImpl::Server 1)] 17:41:25,887 WARN
> [org.apache.activemq.artemis.protocol.amqp.broker.AMQPSessionCallback]
> AMQ149005: Message of 524513 bytes is bigger than the max record size of
> 102400 bytes. You should try to move large application properties to the
> message body.
> org.apache.activemq.artemis.api.core.ActiveMQIOErrorException: AMQ149005:
> Message of 524513 bytes is bigger than the max record size of 102400 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)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendAddRecordTransactional(JournalImpl.java:1269)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.replication.ReplicatedJournal.appendAddRecordTransactional(ReplicatedJournal.java:192)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.storeMessageTransactional(AbstractJournalStorageManager.java:571)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.storeDurableReference(PostOfficeImpl.java:1790)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.processRouteToDurableQueues(PostOfficeImpl.java:1770)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.processRoute(PostOfficeImpl.java:1706)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:1244)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:1135)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.doSend(ServerSessionImpl.java:2368)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.send(ServerSessionImpl.java:1963)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.protocol.amqp.broker.AMQPSessionCallback.inSessionSend(AMQPSessionCallback.java:624)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.protocol.amqp.broker.AMQPSessionCallback.lambda$serverSend$2(AMQPSessionCallback.java:580)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32)
> ~[classes/:?]
> at
> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
> ~[classes/:?]
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> [?:?]
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> [?:?]
> at
> org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
> [classes/:?]
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact