"clebert.suconic(a)jboss.com" wrote : - If we wait the replicatePacket to finish,
largeMessageDeliver.deliver will be done asynchronously
|
|
|
| | private void deliverLargeMessage(final MessageReference ref, final
ServerMessage message)
| | {
| | .....
| |
| |
| | if (!replicating)
| | largeMessageDeliver.deliver(); // synchronous call when not
replicating
| |
| | else
| | result.setResultRunner(new Runnable() // asynchronous call when
replicating
| | {
| | public void run()
| | {
| | largeMessageDeliverer.deliver();
| | }
| |
| | });
| | }
| |
|
|
| - the method doHandle which is calling deliverLargeMessage, will return immediately,
while the server is still deliveringChunks to the client.
|
| (promptDelivery BTW will try to send another message to the consumer, but it will be
rejected as BUSY)
|
|
| - As the ServerSessionPacketHandler is free, credits will arrive concurrently with the
delivery to the client, instead of coming after the method deliver returned. This
following logic on receiveCredits will not work:
|
|
| | public void receiveCredits(final int credits) throws Exception
| | {
| | if (credits == -1)
| | {
| | // No flow control
| | availableCredits = null;
| | }
| | else
| | {
| | int previous = availableCredits.getAndAdd(credits);
| |
| | if (previous <= 0 && previous + credits > 0)
| | {
| | promptDelivery(); // this is what would resume the delivery of the
largeMessage
| | }
| | }
| | }
| |
|
|
| - because of the credits coming on a different order than how they would usually
come,
|
The order the the credits arrive on the server should be the same. How is this different?
The only way the credits could arrive in a different order on the server is if the client
sent them in a different order. How is this the case? I think it needs more
explanation....
anonymous wrote :
| the delivery of messages is interrupted. We will get the credit before they became
negative.. so nothing will resume delivery.
|
| If we called largeMessageDeliver.deliver() synchronously the credits would only arrive
at the right time and the resume would work without any problem.
|
I'm not sure what do you mean by "called largeMessageDeliver.deliver()
synchronously"
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4202059#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...