[
http://jira.jboss.com/jira/browse/JBMESSAGING-355?page=comments#action_12... ]
Tim Fox commented on JBMESSAGING-355:
-------------------------------------
I believe I have already fixed this in TRUNK - the change should be ported from TRUNK to
Branch_1_0.
BTW This bug report is not the same issue as the original issue of this JIRA task - so
should really be in a different task.
Remove possibility of delivery race conditions
----------------------------------------------
Key: JBMESSAGING-355
URL:
http://jira.jboss.com/jira/browse/JBMESSAGING-355
Project: JBoss Messaging
Issue Type: Task
Reporter: Tim Fox
Assigned To: Tim Fox
Fix For: 1.0.2.CR1
Attachments: race-condition.log
Original Estimate: 3 days
Remaining Estimate: 3 days
Currently race conditions can occur on message delivery where the delivery is
acknowledged or cancelled before the call to handle has returned.
In ChannelState we defensively program against this by synchronizing on the returned
delivery and by dealing with the situation where the delivery does not exist in the
channel state and ignoring.
See ChannelSupport::deliver() and ChannelState.cancelDelivery.
This approach has the following problems:
Complexity of code to maintain and understand.
Where acks return quickly we are likely to get contention on the lock in
ChannelSupport::deliver, thus reducing throughput.
A much simpler solution enables us to remove the possibility of such race conditions and
remove the corresponding lock contention.
This can be done by adding a confirm() method on Delivery.
When the receiver receives the message in it's handle() call, before dispatching the
message it calls Delivery::confirm. This results in the channel adding the delivery to the
channel state. Thus we can be assured that the delivery exists before any acknowledgment
or cancellation comes in.
This is a very simple change.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira