[
http://jira.jboss.com/jira/browse/JGRP-610?page=comments#action_12385051 ]
Bela Ban commented on JGRP-610:
-------------------------------
The problem is that, when a synchronous call is received via UNICAST, the thread acquires
a caller-based lock in UNICAST and then dispatches the request up the stack.
When the same thread is used to send a large return value, FRAG2 splits the response
message into many smaller messages, which then get sent to the sender (self in
RpcDispatcher.testLargeReturnValue()), thus blocking FC.
The thread pool for regular threads is blocked and all other messages (even OOB ones !)
are sitting in the IP buffers and don't even make it to the transport. This means,
credits (sent via OOB messages) are not received and we just block.
Solution (pick one or more):
- In the regular thread pool:
- Use a queue
- Increase the max thread
- Set rejection policy to "discard" rather than "run"
- Increase FC.max_credits to a value greater than the largest return value. Dangerous, as
this increases time without blocks
I'll keep looking for a better solution
Problems with large return value and FC
---------------------------------------
Key: JGRP-610
URL:
http://jira.jboss.com/jira/browse/JGRP-610
Project: JGroups
Issue Type: Bug
Reporter: Bela Ban
Assigned To: Bela Ban
Fix For: 2.6
When sending a return value whose size is larger than FC.max_credits, the call hangs.
Unit test RpcDispatcher.testLargeReturnValueUnicastCall() reproduces the issue.
--
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