Skip to content

Commit af64521

Browse files
ARTEMIS-5971 Advisories queues should not be paged
This is a fix for MaxMessagesPagingTest as well
1 parent fb41e16 commit af64521

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

  • artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq
  • tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire

artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQConsumer.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,18 @@
3939
import org.apache.activemq.artemis.api.core.SimpleString;
4040
import org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl;
4141
import org.apache.activemq.artemis.core.io.IOCallback;
42+
import org.apache.activemq.artemis.core.paging.PagingStore;
4243
import org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection;
4344
import org.apache.activemq.artemis.core.protocol.openwire.OpenWireConstants;
4445
import org.apache.activemq.artemis.core.protocol.openwire.OpenWireMessageConverter;
4546
import org.apache.activemq.artemis.core.server.MessageReference;
47+
import org.apache.activemq.artemis.core.server.Queue;
4648
import org.apache.activemq.artemis.core.server.QueueQueryResult;
4749
import org.apache.activemq.artemis.core.server.ServerConsumer;
4850
import org.apache.activemq.artemis.core.server.SlowConsumerDetectionListener;
4951
import org.apache.activemq.artemis.core.server.impl.QueueImpl;
5052
import org.apache.activemq.artemis.core.server.impl.ServerConsumerImpl;
53+
import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
5154
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
5255
import org.apache.activemq.artemis.core.transaction.Transaction;
5356
import org.apache.activemq.artemis.core.transaction.TransactionOperationAbstract;
@@ -256,7 +259,16 @@ private SimpleString createTopicSubscription(boolean isDurable,
256259
queueName = SimpleString.of(UUID.randomUUID().toString());
257260
}
258261

259-
session.getCoreSession().createQueue(QueueConfiguration.of(queueName).setAddress(address).setRoutingType(RoutingType.MULTICAST).setFilterString(selector).setDurable(false).setTemporary(true).setInternal(internalAddress));
262+
Queue queue = session.getCoreSession().createQueue(QueueConfiguration.of(queueName).setAddress(address).setRoutingType(RoutingType.MULTICAST).setFilterString(selector).setDurable(false).setTemporary(true).setInternal(internalAddress));
263+
264+
// Check if this is an advisory queue
265+
if (String.valueOf(address).startsWith(AdvisorySupport.ADVISORY_TOPIC_PREFIX)) {
266+
PagingStore store = queue.getPagingStore();
267+
if (store != null) { // could be null on tests perhaps
268+
// Advisory queues cannot be paged, we must enforce DROP
269+
store.enforceAddressFullMessagePolicy(AddressFullMessagePolicy.DROP);
270+
}
271+
}
260272
}
261273

262274
return queueName;

tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/AdvisoryOpenWireTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,16 @@
1717
package org.apache.activemq.artemis.tests.integration.openwire;
1818

1919
import static org.junit.jupiter.api.Assertions.assertEquals;
20+
import static org.junit.jupiter.api.Assertions.assertFalse;
2021
import static org.junit.jupiter.api.Assertions.assertNotNull;
2122
import static org.junit.jupiter.api.Assertions.assertTrue;
2223

2324
import org.apache.activemq.advisory.AdvisorySupport;
25+
import org.apache.activemq.artemis.api.core.SimpleString;
2426
import org.apache.activemq.artemis.api.core.management.AddressControl;
27+
import org.apache.activemq.artemis.core.paging.PagingStore;
28+
import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
29+
import org.apache.activemq.artemis.logs.AssertionLoggerHandler;
2530
import org.apache.activemq.artemis.tests.util.Wait;
2631
import org.junit.jupiter.api.BeforeEach;
2732
import org.junit.jupiter.api.Test;
@@ -77,6 +82,27 @@ public void testTempTopicLeak() throws Exception {
7782
}
7883
}
7984

85+
@Test
86+
public void testAdvisoryEnforcedToDrop() throws Exception {
87+
88+
try (AssertionLoggerHandler handler = new AssertionLoggerHandler()) {
89+
handler.start();
90+
try (Connection connection = factory.createConnection()) {
91+
connection.start();
92+
93+
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
94+
95+
TemporaryTopic temporaryTopic = session.createTemporaryTopic();
96+
assertNotNull(temporaryTopic);
97+
98+
PagingStore store = server.getPagingManager().getPageStore(SimpleString.of("ActiveMQ.Advisory.TempTopic"));
99+
assertNotNull(store);
100+
assertEquals(AddressFullMessagePolicy.DROP, store.getAddressFullMessagePolicy());
101+
}
102+
assertFalse(handler.hasLevel(AssertionLoggerHandler.LogLevel.WARN));
103+
}
104+
}
105+
80106
private AddressControl assertNonNullAddressControl(String match) {
81107
AddressControl advisoryAddressControl = null;
82108
List<AddressControl> addressResources = server.getManagementService().getAddressControls();

0 commit comments

Comments
 (0)