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

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


The following commit(s) were added to refs/heads/main by this push:
     new d158e7eff0 ARTEMIS-3925 LVQ pruning nulls
     new aa11a82e0b This closes #4176
d158e7eff0 is described below

commit d158e7eff0f984d844fbb4e7ea040552d8d56b94
Author: Justin Bertram <[email protected]>
AuthorDate: Thu Aug 11 11:50:00 2022 -0500

    ARTEMIS-3925 LVQ pruning nulls
    
    Messages without a last-value property sent to an LVQ are being pruned
    rather than just passing through. Only messages with a non-null
    last-value property should be subject to pruning.
---
 .../artemis/core/server/impl/LastValueQueue.java   |  3 +++
 .../artemis/tests/integration/server/LVQTest.java  | 22 ++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/LastValueQueue.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/LastValueQueue.java
index 50dc850c09..82cc672450 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/LastValueQueue.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/LastValueQueue.java
@@ -224,6 +224,9 @@ public class LastValueQueue extends QueueImpl {
          if (current == ref) {
             currentLastValue = true;
          }
+      } else {
+         // if the ref has no last value
+         return true;
       }
       return currentLastValue;
    }
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/LVQTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/LVQTest.java
index 763f6ee3cd..e9a1049ebb 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/LVQTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/LVQTest.java
@@ -140,6 +140,28 @@ public class LVQTest extends ActiveMQTestBase {
       Assert.assertEquals(m.getBodyBuffer().readString(), "m4");
    }
 
+   @Test
+   public void testMultipleMessagesWithoutLastValue() throws Exception {
+      ClientProducer producer = clientSession.createProducer(address);
+      ClientMessage m1 = createTextMessage(clientSession, "message1");
+      ClientMessage m2 = createTextMessage(clientSession, "message2");
+      producer.send(m1);
+      producer.send(m2);
+
+      Wait.assertEquals(2L, () -> 
server.locateQueue(qName1).getMessageCount(), 2000, 100);
+
+      ClientConsumer consumer = clientSession.createConsumer(qName1);
+      clientSession.start();
+      ClientMessage m = consumer.receive(1000);
+      Assert.assertNotNull(m);
+      m.acknowledge();
+      Assert.assertEquals("message1", m.getBodyBuffer().readString());
+      m = consumer.receive(1000);
+      Assert.assertNotNull(m);
+      m.acknowledge();
+      Assert.assertEquals("message2", m.getBodyBuffer().readString());
+   }
+
    @Test
    public void testMultipleRollback() throws Exception {
       AddressSettings qs = new AddressSettings();

Reply via email to