Sorry - the last part was a bit confusing - I will use getBodyBuffer... If I remember the code correctly, I think that after the exception is thrown, the getBodyBuffer() getDataBuffer() method defaults to the getReadOnlyBuffer path ... it attempts to use another path on largeMessages - and that is the path that yields an exception (it goes through a netty -> NIO internal use only buffer grab which has been deprecated in Netty... not clear if something flaky may be going on there). Anyway - it seems to deliver the content in the end - it just goes through the same path as small buffers do to achieve the results on exception....
On Tue, Feb 22, 2022 at 5:55 PM Tim Jones <t...@abcwxy.com> wrote: > Thanks, yes, I am using Core... I see this in the API for getBodyBuffer > which is what led me down that path: *The buffer to write the body. > Warning: If you just want to read the content of a message, use > getDataBuffer() or getReadOnlyBuffer();* > > I am reading content - so that is why I was using getDataBuffer() - should > I still use getBodyBuffer instead? I will take a look at getBodyBuffer. > > If I remember the code correctly, I think that after the exception is > thrown, the getBodyBuffer() method defaults to the getReadOnlyBuffer path > ... it attempts to use another path on largeMessages - and that is the path > that yields an exception (it goes through a netty -> NIO internal use only > buffer grab which has been deprecated in Netty... not clear if something > flaky may be going on there). Anyway - it seems to deliver the content in > the end - it just goes through the same path as small buffers do to achieve > the results on exception.... > > > > On Tue, Feb 22, 2022 at 11:18 AM Clebert Suconic < > clebert.suco...@gmail.com> wrote: > >> or use the JMS API instead.. that's another possibility. but if you >> want to use the core API, use getbodyBuffer instead. >> >> On Tue, Feb 22, 2022 at 1:17 PM Clebert Suconic >> <clebert.suco...@gmail.com> wrote: >> > >> > Found the reason: >> > >> > >> > You should use getBoddyBuffer instead. >> > >> > >> > getbodybuffer() will perform a call to checkBuffer() before returning >> > you the large message. >> > >> > >> > This should fix your test / problem. >> > >> > On Tue, Feb 22, 2022 at 1:03 PM Clebert Suconic >> > <clebert.suco...@gmail.com> wrote: >> > > >> > > this is something done on the core API. >> > > >> > > I can't pinpoint the exact reason, but the JMS facade works fine with >> > > a similar sender and producer: >> > > >> > > >> https://gist.github.com/clebertsuconic/03fe7206914d8753e9bd966f805a0257 >> > > >> > > >> > > >> > > I created a branch with a test comparing Core and JMS API on my fork: >> > > >> > > https://github.com/clebertsuconic/activemq-artemis/tree/withCore >> > > >> > > >> > > >> > > I'm pasting the test here for future reference if the gist is ever >> > > gone (or the branch is gone): >> > > >> > > >> > > /** >> > > * Licensed to the Apache Software Foundation (ASF) under one or more >> > > * contributor license agreements. See the NOTICE file distributed >> with >> > > * this work for additional information regarding copyright ownership. >> > > * The ASF licenses this file to You under the Apache License, >> Version 2.0 >> > > * (the "License"); you may not use this file except in compliance >> with >> > > * the License. You may obtain a copy of the License at >> > > * <p> >> > > * http://www.apache.org/licenses/LICENSE-2.0 >> > > * <p> >> > > * Unless required by applicable law or agreed to in writing, software >> > > * distributed under the License is distributed on an "AS IS" BASIS, >> > > * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >> implied. >> > > * See the License for the specific language governing permissions and >> > > * limitations under the License. >> > > */ >> > > >> > > package org.apache.activemq.artemis.tests.integration.paging; >> > > >> > > import javax.jms.Connection; >> > > import javax.jms.ConnectionFactory; >> > > import javax.jms.MessageConsumer; >> > > import javax.jms.MessageProducer; >> > > import javax.jms.Queue; >> > > import javax.jms.Session; >> > > import javax.jms.TextMessage; >> > > import java.util.concurrent.atomic.AtomicInteger; >> > > >> > > import org.apache.activemq.artemis.api.core.QueueConfiguration; >> > > import org.apache.activemq.artemis.api.core.RoutingType; >> > > import org.apache.activemq.artemis.api.core.SimpleString; >> > > import org.apache.activemq.artemis.api.core.client.ActiveMQClient; >> > > import org.apache.activemq.artemis.api.core.client.ClientMessage; >> > > import org.apache.activemq.artemis.api.core.client.ClientProducer; >> > > import org.apache.activemq.artemis.api.core.client.ClientSession; >> > > import org.apache.activemq.artemis.core.config.Configuration; >> > > import org.apache.activemq.artemis.core.server.ActiveMQServer; >> > > import org.apache.activemq.artemis.core.server.impl.AddressInfo; >> > > import >> org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy; >> > > import org.apache.activemq.artemis.core.settings.impl.AddressSettings; >> > > import >> org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; >> > > import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; >> > > import org.apache.activemq.artemis.tests.util.Wait; >> > > import org.checkerframework.checker.units.qual.A; >> > > import org.junit.Assert; >> > > import org.junit.Before; >> > > import org.junit.Test; >> > > >> > > public class Main extends ActiveMQTestBase { >> > > >> > > private final static String QUEUE = "service.images.dev:: >> service.images.dev"; >> > > >> > > ActiveMQServer server; >> > > >> > > >> > > @Before >> > > @Override >> > > public void setUp() throws Exception { >> > > super.setUp(); >> > > >> > > Configuration config = createDefaultConfig(0, >> > > true).setJournalSyncNonTransactional(false); >> > > >> > > config.setMessageExpiryScanPeriod(-1); >> > > server = createServer(true, config, 100 * 1024 * 1024, 10 * >> 1024 * 1024); >> > > >> > > server.getAddressSettingsRepository().clear(); >> > > >> > > AddressSettings defaultSetting = new >> > > AddressSettings().setPageSizeBytes(100 * 1024 * >> > > 1024).setMaxSizeBytes(10 * 1024 * >> > > >> 1024).setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE).setAutoCreateAddresses(false).setAutoCreateQueues(false); >> > > >> > > server.getAddressSettingsRepository().addMatch("#", >> defaultSetting); >> > > >> > > >> > > server.start(); >> > > >> > > >> > > server.addAddressInfo(new >> > > AddressInfo(QUEUE).addRoutingType(RoutingType.ANYCAST)); >> > > server.createQueue(new >> > > QueueConfiguration(QUEUE).setRoutingType(RoutingType.ANYCAST)); >> > > >> > > } >> > > >> > > @Test >> > > public void testSending() throws Exception { >> > > >> > > final String username = null; >> > > final String password = null; >> > > >> > > var serverLocator = >> > > >> ActiveMQClient.createServerLocator("tcp://localhost:61616").setBlockOnDurableSend(true).setBlockOnNonDurableSend(true).setMinLargeMessageSize(1024); >> > > >> > > final var sessionFactory = serverLocator.createSessionFactory(); >> > > >> > > final var xa = false; >> > > final var autoCommitSends = true; >> > > final var autoCommitAcks = true; >> > > final var ackBatchSize = serverLocator.getAckBatchSize(); >> > > final var preAcknowledge = serverLocator.isPreAcknowledge(); >> > > final var clientSession = sessionFactory.createSession(username, >> > > password, xa, autoCommitSends, autoCommitAcks, preAcknowledge, >> > > ackBatchSize); >> > > >> > > var queueQueryResult = >> > > clientSession.queueQuery(SimpleString.toSimpleString(QUEUE)); >> > > if (!queueQueryResult.isExists()) { >> > > clientSession.createQueue(_ServiceQueueConfiguration(new >> > > SimpleString(QUEUE))); >> > > } >> > > >> > > final var consumer = clientSession.createConsumer(QUEUE); >> > > >> > > clientSession.start(); >> > > >> > > AtomicInteger errors = new AtomicInteger(0); >> > > AtomicInteger received = new AtomicInteger(0); >> > > >> > > consumer.setMessageHandler((msg) -> { >> > > try { >> > > msg.getDataBuffer(); >> > > received.incrementAndGet(); >> > > } catch (Throwable e) { >> > > e.printStackTrace(); >> > > errors.incrementAndGet(); >> > > } >> > > }); >> > > >> > > >> > > try (ClientSession producerSession = >> sessionFactory.createSession()) { >> > > ClientProducer producer = >> producerSession.createProducer(QUEUE); >> > > for (int i = 0; i < 100; i++) { >> > > ClientMessage message = >> producerSession.createMessage(true); >> > > message.getBodyBuffer().writeBytes(new byte[1024 * 1024]); >> > > producer.send(message); >> > > } >> > > } >> > > >> > > Wait.assertEquals(100, received::get); >> > > Assert.assertEquals(0, errors.get()); >> > > } >> > > >> > > @Test >> > > public void testWithJMSListener() throws Exception { >> > > >> > > final String username = null; >> > > final String password = null; >> > > >> > > ActiveMQConnectionFactory factory = new >> ActiveMQConnectionFactory(); >> > > factory.setMinLargeMessageSize(1024); >> > > Connection connection = factory.createConnection(); >> > > Session sessionProducer = connection.createSession(true, >> > > Session.SESSION_TRANSACTED); >> > > >> > > Session sessionConsumer = connection.createSession(false, >> > > Session.AUTO_ACKNOWLEDGE); >> > > >> > > Queue jmsQueue = sessionProducer.createQueue(QUEUE); >> > > >> > > MessageConsumer consumer = >> sessionConsumer.createConsumer(jmsQueue); >> > > >> > > >> > > connection.start(); >> > > >> > > AtomicInteger errors = new AtomicInteger(0); >> > > AtomicInteger received = new AtomicInteger(0); >> > > >> > > consumer.setMessageListener((msg) -> { >> > > try { >> > > System.out.println("Received: " + >> > > ((TextMessage)msg).getText().length()); >> > > received.incrementAndGet(); >> > > } catch (Throwable e) { >> > > e.printStackTrace(); >> > > errors.incrementAndGet(); >> > > } >> > > >> > > }); >> > > >> > > MessageProducer producer = >> sessionProducer.createProducer(jmsQueue); >> > > >> > > StringBuffer buffer = new StringBuffer(); >> > > while (buffer.length() < 100 * 1024) { >> > > buffer.append("*****"); >> > > } >> > > >> > > for (int i = 0; i < 100; i++) { >> > > TextMessage message = >> > > sessionProducer.createTextMessage(buffer.toString()); >> > > producer.send(message); >> > > } >> > > sessionProducer.commit(); >> > > >> > > Wait.assertEquals(100, received::get); >> > > Assert.assertEquals(0, errors.get()); >> > > } >> > > >> > > private static QueueConfiguration >> > > _ServiceQueueConfiguration(SimpleString queueName) { >> > > final var config = new QueueConfiguration(queueName); >> > > config.setMaxConsumers(1); >> > > config.setPurgeOnNoConsumers(false); >> > > config.setDurable(false); >> > > config.setAutoDelete(false); >> > > config.setRoutingType(RoutingType.MULTICAST); >> > > return config; >> > > } >> > > } >> > > >> > > On Mon, Feb 21, 2022 at 2:00 PM Justin Bertram <jbert...@apache.org> >> wrote: >> > > > >> > > > No. The test was super-simple. Just send one large message and then >> consume >> > > > it. >> > > > >> > > > >> > > > Justin >> > > > >> > > > On Mon, Feb 21, 2022 at 12:57 PM Clebert Suconic < >> clebert.suco...@gmail.com> >> > > > wrote: >> > > > >> > > > > It did not involved paging ? >> > > > > >> > > > > On Mon, Feb 21, 2022 at 11:07 AM Justin Bertram < >> jbert...@apache.org> >> > > > > wrote: >> > > > > >> > > > > > I recreated this exception with a very simple test-case. I took >> the >> > > > > > consumer code pasted earlier in the thread and just added a >> producer >> > > > > > sending a large message. I lowered the minLargeMessageSize to >> make it >> > > > > > faster. I thought I still had that code laying around >> somewhere, but I >> > > > > > can't find it at the moment. >> > > > > > >> > > > > > >> > > > > > Justin >> > > > > > >> > > > > > On Sun, Feb 20, 2022 at 9:03 AM Clebert Suconic < >> > > > > clebert.suco...@gmail.com >> > > > > > > >> > > > > > wrote: >> > > > > > >> > > > > > > I have seen (and fixed) cases where the large message file is >> gone. I >> > > > > > > would need a reproducer creating the issue from scratch (send >> and >> > > > > > consume) >> > > > > > > >> > > > > > > Typically it could be associated with paging ? Did you have >> the >> > > > > > > destination in page mode ? >> > > > > > > >> > > > > > > On Thu, Feb 17, 2022 at 6:53 PM Tim Jones <t...@abcwxy.com> >> wrote: >> > > > > > > >> > > > > > > > The client code below the stack trace - will reproduce it >> - the >> > > > > > > > msg.getDataBuffer() inside the handler of that code will >> trigger it >> > > > > > when >> > > > > > > a >> > > > > > > > large message is sent to the address. The exception in >> question >> > > > > > > > (IndexOutOfBoundsException) is being caught in line 249 of >> the apache >> > > > > > > > CoreMessage code... and turned into a logged warning on >> line 250. >> > > > > The >> > > > > > > > CoreMessage code then returns the buffer from >> getReadOnlyBuffer() >> > > > > > (which >> > > > > > > > appears to be fine from a quick survey - data also seems to >> be >> > > > > > preserved >> > > > > > > > and accessible from client code) - it is just not clear >> what the >> > > > > intent >> > > > > > > is >> > > > > > > > if the exception code is executed... is it a "don't worry >> about it" - >> > > > > > or >> > > > > > > a >> > > > > > > > "something is wrong here" and I should concern myself with >> something? >> > > > > > > (the >> > > > > > > > warning level is making me believe that it is more than a >> "don't >> > > > > worry >> > > > > > > > about it" - but the fact that the exception was caught and >> a valid >> > > > > > buffer >> > > > > > > > is returned makes me think it is just a fallback for the >> other >> > > > > choices >> > > > > > of >> > > > > > > > buffers - and I should not worry about it?). >> > > > > > > > >> > > > > > > > Thanks for any insight you may have.... >> > > > > > > > >> > > > > > > > logged warning from the caught exception is: >> > > > > > > > >> > > > > > > > 16:26:50.923 [Thread-0 (ActiveMQ-client-global-threads)] >> WARN >> > > > > > > > org.apache.activemq.artemis.core.message.impl.CoreMessage - >> > > > > > > readerIndex(4) >> > > > > > > > + length(270740) exceeds writerIndex(4): >> > > > > > > > >> UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: >> > > > > 4, >> > > > > > > > widx: 4, cap: 270740) >> > > > > > > > java.lang.IndexOutOfBoundsException: readerIndex(4) + >> length(270740) >> > > > > > > > exceeds writerIndex(4): >> > > > > > > > >> UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: >> > > > > 4, >> > > > > > > > widx: 4, cap: 270740) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1442) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1428) >> > > > > > > > at >> > > > > >> io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:937) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.core.client.impl.ClientMessageImpl$DecodingContext.readInto(ClientMessageImpl.java:407) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.core.message.impl.CoreMessage.getLargeMessageBuffer(CoreMessage.java:264) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.core.message.impl.CoreMessage.getDataBuffer(CoreMessage.java:241) >> > > > > > > > at io.m45.sart.Main.lambda$main$0(Main.java:57) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1013) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1133) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:65) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) >> > > > > > > > at >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) >> > > > > > > > 16:26:50.924 [Thread-0 (ActiveMQ-client-netty-threads)] >> DEBUG >> > > > > > > > >> org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl - >> > > > > > Sending >> > > > > > > > 65962 from flow-control >> > > > > > > > >> > > > > > > > Simple Client Code below: >> > > > > > > > >> > > > > > > > >> > > > > > > > public class Main { >> > > > > > > > >> > > > > > > > private final static String ACCEPTOR = >> "tcp://localhost:9322"; >> > > > > > > > private final static String QUEUE="service.images.dev:: >> > > > > > > > service.images.dev"; >> > > > > > > > >> > > > > > > > public static void main(String[] args) throws Exception >> { >> > > > > > > > >> > > > > > > > final String username = null; >> > > > > > > > final String password = null; >> > > > > > > > >> > > > > > > > var serverLocator = ActiveMQClient >> > > > > > > > .createServerLocator(ACCEPTOR) >> > > > > > > > .setBlockOnDurableSend(true) >> > > > > > > > .setBlockOnNonDurableSend(true); >> > > > > > > > >> > > > > > > > final var sessionFactory = >> > > > > > serverLocator.createSessionFactory(); >> > > > > > > > >> > > > > > > > final var xa = false; >> > > > > > > > final var autoCommitSends = true; >> > > > > > > > final var autoCommitAcks = true; >> > > > > > > > final var ackBatchSize = >> serverLocator.getAckBatchSize(); >> > > > > > > > final var preAcknowledge = >> serverLocator.isPreAcknowledge(); >> > > > > > > > final var clientSession = >> sessionFactory.createSession( >> > > > > > > > username, >> > > > > > > > password, >> > > > > > > > xa, >> > > > > > > > autoCommitSends, >> > > > > > > > autoCommitAcks, >> > > > > > > > preAcknowledge, >> > > > > > > > ackBatchSize >> > > > > > > > ); >> > > > > > > > >> > > > > > > > var queueQueryResult = >> > > > > > > > >> clientSession.queueQuery(SimpleString.toSimpleString(QUEUE)); >> > > > > > > > if (!queueQueryResult.isExists()) { >> > > > > > > > >> clientSession.createQueue(_ServiceQueueConfiguration(new >> > > > > > > > SimpleString(QUEUE))); >> > > > > > > > } >> > > > > > > > >> > > > > > > > final var consumer = >> clientSession.createConsumer(QUEUE); >> > > > > > > > >> > > > > > > > clientSession.start(); >> > > > > > > > >> > > > > > > > consumer.setMessageHandler((msg) -> { >> > > > > > > > >> > > > > > > > System.out.println("Received: >> "+msg.getBodySize()); >> > > > > > > > msg.getDataBuffer(); >> > > > > > > > >> > > > > > > > }); >> > > > > > > > >> > > > > > > > while(true) { >> > > > > > > > Thread.sleep(1000); >> > > > > > > > } >> > > > > > > > >> > > > > > > > } >> > > > > > > > >> > > > > > > > private static QueueConfiguration >> > > > > > > > _ServiceQueueConfiguration(SimpleString queueName) { >> > > > > > > > final var config = new >> QueueConfiguration(queueName); >> > > > > > > > config.setMaxConsumers(1); >> > > > > > > > config.setPurgeOnNoConsumers(false); >> > > > > > > > config.setDurable(false); >> > > > > > > > config.setAutoDelete(false); >> > > > > > > > config.setRoutingType(RoutingType.MULTICAST); >> > > > > > > > return config; >> > > > > > > > } >> > > > > > > > >> > > > > > > > >> > > > > > > > On Thu, Feb 17, 2022 at 2:28 PM Justin Bertram < >> jbert...@apache.org> >> > > > > > > > wrote: >> > > > > > > > >> > > > > > > > > Typically an IndexOutOfBoundsException indicates a bug. >> Do you >> > > > > have a >> > > > > > > way >> > > > > > > > > to reproduce this? >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > Justin >> > > > > > > > > >> > > > > > > > > On Thu, Feb 17, 2022 at 3:17 PM Tim Jones <t...@abcwxy.com> >> wrote: >> > > > > > > > > >> > > > > > > > > > This seems to appear on larger messages only - I am >> getting a >> > > > > > warning >> > > > > > > > > when >> > > > > > > > > > calling getDataBuffer (2.20.0 Artemis Client). Curious >> if there >> > > > > is >> > > > > > > > > > something I may be missing - or if this is completely >> ignorable? >> > > > > > > > Thanks - >> > > > > > > > > > Tim >> > > > > > > > > > >> > > > > > > > > > 2022-02-17T21:06:11,908+01:00 [Thread-2 >> > > > > > > > (ActiveMQ-client-global-threads)] >> > > > > > > > > > WARN o.a.a.a.c.m.i.CoreMessage [Thread-2 >> > > > > > > > > (ActiveMQ-client-global-threads)] >> > > > > > > > > > readerIndex(270740) + length(270740) exceeds >> writerIndex(271572): >> > > > > > > > > > >> > > > > > >> UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: >> > > > > > > > > > 270740, widx: 271572, cap: 271572) >> > > > > > > > > > java.lang.IndexOutOfBoundsException: >> readerIndex(270740) + >> > > > > > > > length(270740) >> > > > > > > > > > exceeds writerIndex(271572): >> > > > > > > > > > >> > > > > > >> UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: >> > > > > > > > > > 270740, widx: 271572, cap: 271572) >> > > > > > > > > > at >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1442) >> > > > > > > > > > at >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1428) >> > > > > > > > > > at >> > > > > > > >> io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:937) >> > > > > > > > > > at >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.core.client.impl.ClientMessageImpl$DecodingContext.readInto(ClientMessageImpl.java:407) >> > > > > > > > > > at >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.core.message.impl.CoreMessage.getLargeMessageBuffer(CoreMessage.java:264) >> > > > > > > > > > at >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> org.apache.activemq.artemis.core.message.impl.CoreMessage.getDataBuffer(CoreMessage.java:241) >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > -- >> > > > > > > Clebert Suconic >> > > > > > > >> > > > > > >> > > > > -- >> > > > > Clebert Suconic >> > > > > >> > > >> > > >> > > >> > > -- >> > > Clebert Suconic >> > >> > >> > >> > -- >> > Clebert Suconic >> >> >> >> -- >> Clebert Suconic >> >