Bug in FailoverTransport results in messages that have been queued during a
network interruption being sent out of order upon call to restoreTransport()
--------------------------------------------------------------------------------------------------------------------------------------------------------
Key: AMQ-1488
URL: https://issues.apache.org/activemq/browse/AMQ-1488
Project: ActiveMQ
Issue Type: Bug
Components: Transport
Affects Versions: 4.0.2
Environment: Windows XP, AMQ 4.0.2, Client side message producer to an
embedded broker with a failover demand forwarding bridge to a persisting broker
Reporter: Chris Hofstaedter
FailoverTransport stores all queued messages during network interruptions in a
HashMap. When restoreTransport() is called, the map is traversed sending each
queued message.
However, because the messages are stored in a HashMap, the map is traversed in
hash-order - not message id order.
Problematic code in FailoverTransport::restoreTransport():
for (Iterator iter2 = requestMap.values().iterator(); iter2.hasNext();)
{
Command command = (Command) iter2.next();
t.oneway(command);
}
The following local patch resolves the issue:
// Convert the request map to a treemap. It's keyed off of the
commandid and by putting it into a treemap, we'll pull them off in commandid
order.
TreeMap treeMap = new TreeMap();
treeMap.putAll(requestMap);
for (Iterator iter2 = treeMap.values().iterator(); iter2.hasNext();) {
// for (Iterator iter2 = requestMap.values().iterator();
iter2.hasNext();) {
Command command = (Command) iter2.next();
t.oneway(command);
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.