[infinispan-dev] Why does ClusteredGetResponseValidityFilter maintain pendingResponders?

Bela Ban bban at redhat.com
Thu Jul 9 08:15:57 EDT 2009



Manik Surtani wrote:
>
> On 9 Jul 2009, at 12:08, Bela Ban wrote:
>
>> What's the issue here ?
>
> The issue is that the RspFilter never finds a valid response (assume 
> that this is because the "right answer" does not exist).

So if you have 10 members when you send the request, and expect 10 
responses, if none of them are acceptable, simply return false at the 
10th response from needMoreResponses().

The problem is that if you install a RspFilter, it will *override* the 
response collection normally done in JGroups, ie. normally we'd return 
after 10 responses (with GET_ALL and/or a timeout).


OK, so we have either the normal completion checking or your overridden 
needsMoreResponses() callback.

Currently the logical is as follows:

if( rsp filter installed): call needsMoreResponses()
else: regular completion check

I could change this, and essentially OR these 2 checks together, as follows:

boolean regular_complete=regular completion checking
boolean needs_more_rsps=call needsMoreResponses()

boolean complete=regular_complete || needs_more_responses;

This would return after 10 responses even if needsMoreResponses() 
returns true.

Note that this won't work though isAcceptable() flags 1 or more 
responses as false. In this case, the regular response completion check 
would return false.

> In this case, needMoreResponses() would always return true.  I 
> remember that in JBC3, when this happened, JGroups timed out waiting 
> for responses even though all responses had come in; the filter just 
> rejected all of them.

Correct. This is as designed.

> I found that the workaround was for needMoreResponses() to return true 
> if we hadn't found the right answer AND there were more responses we 
> hadn't considered yet.  

Exactly

> Otherwise return false, since you know there are no more responses to 
> consider anyway.

Yes. Let me know if you think the above change would help. Again, this 
change would only help if isAcceptable() returns true !



-- 
Bela Ban
Lead JGroups / Clustering Team
JBoss (by Red Hat)



More information about the infinispan-dev mailing list