[
https://issues.apache.org/jira/browse/ARTEMIS-2156?focusedWorklogId=187898&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-187898
]
ASF GitHub Bot logged work on ARTEMIS-2156:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 21/Jan/19 20:31
Start Date: 21/Jan/19 20:31
Worklog Time Spent: 10m
Work Description: jbertram commented on pull request #2510:
[ARTEMIS-2156] Message Duplication when using exclusive divert and clustering
URL: https://github.com/apache/activemq-artemis/pull/2510#discussion_r249572071
##########
File path:
artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/BindingsImpl.java
##########
@@ -117,7 +117,9 @@ public void addBinding(final Binding binding) {
logger.trace("addBinding(" + binding + ") being called");
}
if (binding.isExclusive()) {
- exclusiveBindings.add(binding);
+ if (!exclusiveBindings.contains(binding)) {
Review comment:
@michaelandrepearce, according to the
[JavaDoc](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CopyOnWriteArraySet.html)
order is maintained as you note. However, `getNextBinding` indexes into the
list so changing to a set would require that method to be refactored
substantially. I think it's probably safer just to make the contains/add atomic
than to change to a set.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 187898)
Time Spent: 3h 50m (was: 3h 40m)
> Message Duplication when using exclusive divert and clustering
> --------------------------------------------------------------
>
> Key: ARTEMIS-2156
> URL: https://issues.apache.org/jira/browse/ARTEMIS-2156
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Components: Broker
> Affects Versions: 1.5.5, 2.6.3
> Reporter: Luis Miguel De Bello
> Priority: Major
> Attachments: ArtemisClient1.5.5.gif, ArtemisClient2.6.2.gif,
> Consumer.java, ConsumerClient2-6-0.java, Duplicate Object.png, Producer.java,
> ProducerClient2-6-0.java, broker1.xml, broker1Server2-6-3.xml, broker2.xml,
> broker2Server2-6-3.xml
>
> Time Spent: 3h 50m
> Remaining Estimate: 0h
>
> We bumped into the following issue, we start getting duplicate message after
> doing some analysis we saw the "exclusiveBindings" in
> "org.apache.activemq.artemis.core.postoffice.impl.BindingsImpl" got the same
> binding twice.
> The if statement in "addBinding"
> {code:java}
> if (binding.isExclusive()) {
> exclusiveBindings.add(binding);
> } else {
> SimpleString routingName = binding.getRoutingName();
> List<Binding> bindings = routingNameBindingMap.get(routingName);
> if (bindings == null) {
> bindings = new CopyOnWriteArrayList<>();
> List<Binding> oldBindings =
> routingNameBindingMap.putIfAbsent(routingName, bindings);
> if (oldBindings != null) {
> bindings = oldBindings;
> }
> }
> if (!bindings.contains(binding)) {
> bindings.add(binding);
> }
> }{code}
> Does not do any check in case the binding already exists, this kind of test
> is done for non exclusive binding.
> I was not able to create an automatic test in the base code because the issue
> seems related to the client version.
> Scenario:
> - Cluster of two instances (UDP) Artemis Server 1.5.5
> - Clean Up /data/bindings/\*, ../data/journal/\*, ../data/paging/\*
> - Exclusive Divert from jms.queue.\*.Provider.\*.Agent.\*.Status to
> jms.queue.Notifications
> - Java program using artemis client
> - Start Consumer in Instance 1 (jms.queue.Notifications)
> - Send Message to Instance 1
> - Send Message to Instance 2
> - Send Message to Instance 1
> Expectations:
> - We expect to get 3 message
> Results:
> We got 3 messages when the client uses version 1.5.5
> We got 5 messages when the client uses version 2.6.2
>
> I enclose two gif one for client
> "org.apache.activemq:artemis-jms-client:1.5.5" where it works ok and another
> for "org.apache.activemq:artemis-jms-client:2.6.2" where you can appreciate
> the issue.
> Also I enclose one screenshot where you can see the same object is added
> twice.
> I will also include the broker.xml file to configure the udp cluster + the
> code use for the producer and consumer.
> Note: The only difference when using client 1.5.5 is the queue name
> definition I needed to remove the jms.queue prefix.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)