[
https://issues.apache.org/jira/browse/ARTEMIS-5956?focusedWorklogId=1010162&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-1010162
]
ASF GitHub Bot logged work on ARTEMIS-5956:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 18/Mar/26 19:59
Start Date: 18/Mar/26 19:59
Worklog Time Spent: 10m
Work Description: tabish121 commented on PR #6300:
URL: https://github.com/apache/artemis/pull/6300#issuecomment-4085232337
I have a feeling this might lead to some failure churn in the tests so I
full CI run is advised
The following tests can reproduce this with certainly and no looping:
```
@Test
@Timeout(20)
public void testTemporaryTopicDeletedOnConnectionClosed() throws
Exception {
doTestTemporaryDestinationIsDeletedOnConnectionClosed(true, true);
}
@Test
@Timeout(20)
public void testTemporaryQueueDeletedOnConnectionClosed() throws
Exception {
doTestTemporaryDestinationIsDeletedOnConnectionClosed(false, true);
}
@Test
@Timeout(20)
public void
testTemporaryTopicDeletedOnConnectionClosedWithoutExplicitConsumerClose()
throws Exception {
doTestTemporaryDestinationIsDeletedOnConnectionClosed(true, false);
}
@Test
@Timeout(20)
public void
testTemporaryQueueDeletedOnConnectionClosedWithoutExplicitConsumerClose()
throws Exception {
doTestTemporaryDestinationIsDeletedOnConnectionClosed(false, false);
}
private void
doTestTemporaryDestinationIsDeletedOnConnectionClosed(boolean topic, boolean
closeConsumer) throws Exception {
try (Connection connection = createConnection()) {
final Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
final Destination destination;
final String addressName;
if (topic) {
destination = session.createTemporaryTopic();
assertNotNull(destination);
assertTrue(destination instanceof TemporaryTopic);
addressName = ((TemporaryTopic) destination).getTopicName();
} else {
destination = session.createTemporaryQueue();
assertNotNull(destination);
assertTrue(destination instanceof TemporaryQueue);
addressName = ((TemporaryQueue) destination).getQueueName();
}
final MessageConsumer consumer =
session.createConsumer(destination);
final AddressInfo addressView = getProxyToAddress(addressName);
assertNotNull(addressView);
assertEquals(1,
server.bindingQuery(addressView.getName()).getQueueNames().size());
if (closeConsumer) {
consumer.close();
}
connection.close();
Wait.assertNull(() -> getProxyToAddress(addressName),
TimeUnit.SECONDS.toMillis(5), TimeUnit.MILLISECONDS.toMillis(50));
}
}
```
Issue Time Tracking
-------------------
Worklog Id: (was: 1010162)
Time Spent: 40m (was: 0.5h)
> Temporary Addresses may leak when consumer is not yet closed
> ------------------------------------------------------------
>
> Key: ARTEMIS-5956
> URL: https://issues.apache.org/jira/browse/ARTEMIS-5956
> Project: Artemis
> Issue Type: Bug
> Reporter: Clebert Suconic
> Priority: Major
> Labels: pull-request-available
> Time Spent: 40m
> Remaining Estimate: 0h
>
> say you create a temporary destination, and close the connection with the
> consumer open.
> Depending on pending executions the destination may leak:
> {code:java}
> try (Connection connection = createConnection()) {
> Session session = connection.createSession(false,
> Session.AUTO_ACKNOWLEDGE);
> Topic temporaryTopic = session.createTemporaryTopic();
> MessageProducer producer = session.createProducer(temporaryTopic);
> MessageConsumer consumer =
> session.createSharedConsumer(temporaryTopic, "mySub");
> connection.start();
> temporarytopicName = temporaryTopic.getTopicName();
> producer.send(session.createMessage());
> assertNotNull(consumer.receive(5000));
> }
> Wait.assertTrue(() ->
> server.getAddressInfo(SimpleString.of(temporarytopicName)) == null, 5000,
> 100);
> {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]