You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2020/06/01 15:12:45 UTC

[activemq-artemis] branch master updated: ARTEMIS-2785 test Netty direct ByteBuf memory leak due to compression

This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new 6db63ac  ARTEMIS-2785 test Netty direct ByteBuf memory leak due to compression
     new 86360a2  This closes #3155
6db63ac is described below

commit 6db63acee2355a54bd17dc9f63bd9d65f12a3f3b
Author: Francesco Nigro <ni...@gmail.com>
AuthorDate: Mon Jun 1 12:50:25 2020 +0200

    ARTEMIS-2785 test Netty direct ByteBuf memory leak due to compression
---
 .../client/LargeMessageCompressTest.java           | 45 ++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/LargeMessageCompressTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/LargeMessageCompressTest.java
index 573ac1b..e2eae05 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/LargeMessageCompressTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/LargeMessageCompressTest.java
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.concurrent.atomic.AtomicLong;
 
+import io.netty.util.internal.PlatformDependent;
 import org.apache.activemq.artemis.api.core.Message;
 import org.apache.activemq.artemis.api.core.QueueConfiguration;
 import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
@@ -38,8 +39,12 @@ import org.apache.activemq.artemis.core.management.impl.QueueControlImpl;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
 import org.apache.activemq.artemis.utils.RandomUtil;
 import org.junit.Assert;
+import org.junit.Assume;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.not;
+
 import javax.management.openmbean.CompositeData;
 
 /**
@@ -130,6 +135,46 @@ public class LargeMessageCompressTest extends LargeMessageTest {
    }
 
    @Test
+   public void testNoDirectByteBufLeaksOnLargeMessageCompression() throws Exception {
+      Assume.assumeThat(PlatformDependent.usedDirectMemory(), not(equalTo(Long.valueOf(-1))));
+      final int messageSize = (int) (3.5 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE);
+
+      ActiveMQServer server = createServer(true, isNetty());
+
+      server.start();
+
+      ClientSessionFactory sf = createSessionFactory(locator);
+
+      ClientSession session = addClientSession(sf.createSession(false, false, false));
+
+      session.createQueue(new QueueConfiguration(ADDRESS).setAddress(ADDRESS).setDurable(false).setTemporary(true));
+
+      ClientProducer producer = session.createProducer(ADDRESS);
+
+      Message clientFile = createLargeClientMessageStreaming(session, messageSize, true);
+
+      producer.send(clientFile);
+
+      session.commit();
+
+      session.start();
+
+      ClientConsumer consumer = session.createConsumer(ADDRESS);
+      final long usedDirectMemoryBeforeReceive = PlatformDependent.usedDirectMemory();
+      ClientMessage msg1 = consumer.receive(1000);
+      Assert.assertNotNull(msg1);
+      final long usedDirectMemoryAfterReceive = PlatformDependent.usedDirectMemory();
+      Assert.assertEquals("large message compression is leaking some Netty direct ByteBuff",
+                          usedDirectMemoryBeforeReceive, usedDirectMemoryAfterReceive);
+      msg1.acknowledge();
+      session.commit();
+
+      consumer.close();
+
+      session.close();
+   }
+
+   @Test
    public void testLargeMessageCompression() throws Exception {
       final int messageSize = (int) (3.5 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE);