Author: mircea.markus
Date: 2009-01-07 12:46:39 -0500 (Wed, 07 Jan 2009)
New Revision: 7388
Modified:
core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyDataGravitatorInterceptor.java
Log:
bug fix: consider the response from buddy call ready when first GroupResponse is sent
back.
Modified:
core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyDataGravitatorInterceptor.java
===================================================================
---
core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyDataGravitatorInterceptor.java 2009-01-07
17:43:08 UTC (rev 7387)
+++
core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyDataGravitatorInterceptor.java 2009-01-07
17:46:39 UTC (rev 7388)
@@ -355,7 +355,7 @@
GravitateDataCommand command = commandsFactory.buildGravitateDataCommand(fqn,
searchSubtrees);
// doing a GET_ALL is crappy but necessary since JGroups' GET_FIRST could
return null results from nodes that do
// not have either the primary OR backup, and stop polling other valid nodes.
- List resps = rpcManager.callRemoteMethods(null, command, GroupRequest.GET_ALL,
buddyManager.getBuddyCommunicationTimeout(), new ResponseValidityFilter(mbrs,
rpcManager.getLocalAddress()), false);
+ List resps = rpcManager.callRemoteMethods(null, command, GroupRequest.GET_ALL,
buddyManager.getBuddyCommunicationTimeout(), new ResponseValidityFilter(), false);
if (trace) log.trace("got responses " + resps);
@@ -459,25 +459,14 @@
public static class ResponseValidityFilter implements RspFilter
{
- private int numValidResponses = 0;
- private List<Address> pendingResponders;
+ private boolean validResponseFound;
- public ResponseValidityFilter(List<Address> expected, Address localAddress)
- {
- // so for now I used a list to keep it consistent
- this.pendingResponders = new ArrayList<Address>(expected);
- // We'll never get a response from ourself
- this.pendingResponders.remove(localAddress);
- }
-
public boolean isAcceptable(Object object, Address address)
{
- pendingResponders.remove(address);
-
if (object instanceof GravitateResult)
{
GravitateResult response = (GravitateResult) object;
- if (response.isDataFound()) numValidResponses++;
+ validResponseFound = response.isDataFound();
}
// always return true to make sure a response is logged by the JGroups
RpcDispatcher.
return true;
@@ -485,7 +474,7 @@
public boolean needMoreResponses()
{
- return numValidResponses < 1 && pendingResponders.size() == 0;
+ return !validResponseFound;
}
}
}
Show replies by date