]
Bela Ban commented on JGRP-168:
-------------------------------
I tried this on 2.6, and it worked. Attached is udp.xml and RpcDispatcherBlocking.
Note that you have to set UDP.loopback="true" and FD.shun="true".
#1 I started A, then B. Then I CTRL-Z'ed B. A suspected and excluded B. After fg on B,
B was shunned, left the group and rejoined.
#2 Ditto, but A was CTRL-Z'ed. Same result, A left and rejoined.
RpcDispatcher fails after shun
------------------------------
Key: JGRP-168
URL:
http://jira.jboss.com/jira/browse/JGRP-168
Project: JGroups
Issue Type: Bug
Affects Versions: 2.2.8
Environment: Linux
Reporter: sriram
Assigned To: Bela Ban
Fix For: 2.6
Attachments: RpcDispatcherBlocking.java, udp.xml
There are two members in a group say A and B. They call remote methods on each other
using RpcDistatcher over PullPushAdapter.
PullPushAdapter adapter=new PullPushAdapter(channel,this);
rpc=new RpcDispatcher(adapter,null,null,null,new RemoteCallHandler());
This is the code executed to make a remote RPC call.
Vector dest=view.getMembers();
rpc.callRemoteMethods(dest,methCall,GroupRequest.GET_NONE,0);
I freeze a member "A" (crtl-Z in linux) to simulate a shun. "B" gets
a viewAccepted notification that "A" is out of the group. Now I unfreeze
"A" (fg in linux). "A" is now shunned and it reconnects and joins the
group. (AUTO_RECONNECT configured as true in JChannel)
Issue: "A" is not receiving any method calls made by "B". On analysis
I found that RequestCorrelator in "A" is rejecting the rpc packets sent from
"B". The error message given in "A" was
discarded request from 172.16.1.198:1196 as we are not part of destination list
(local_addr=172.16.1.198:1190, hdr=[Header: name=MessageDispatcher, type=REQ,
id=1135858151530, rsp_expected=false], dest_mbrs=[172.16.1.193:1439, 172.16.1.198:1196])
Note that
172.16.1.198:1190 is the old address of "A" before shun/reconnect.
172.16.1.198:1196 is the new address of "A" after reconnect.
172.16.1.193:1439 is the address of "B"
The bug is that the local_addr field in RequestCorrelator.java is not updated when the
member reconnects.
Any workarounds for this problem will be appreciated.
thanks,
E.Sriram
Code snippets:
Creating the Channel and Blocks
String props="UDP(mcast_addr=229.2.3.4;mcast_port=45556;ip_ttl=32):"
+"PING(timeout=3000;num_initial_members=6;down_thread=false;up_thread=false):"
+"FD(max_tries=5;timeout=5000;down_thread=false;up_thread=false):"
+"MERGE2(down_thread=false;up_thread=false):"
+"VERIFY_SUSPECT(timeout=1500;down_thread=false;up_thread=false):"
+"pbcast.NAKACK(gc_lag=10;retransmit_timeout=600,1200,2400,4800;"
+"down_thread=false;up_thread=false):"
+"UNICAST(timeout=600,1200,2400,4800;down_thread=false;up_thread=false):"
+"pbcast.STABLE(desired_avg_gossip=10000;down_thread=false;up_thread=false):"
+"FRAG(down_thread=false;up_thread=false):"
+"pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;"
+"shun=true;print_local_addr=true)";
channel=new JChannel(props);
channel.setOpt(JChannel.AUTO_RECONNECT,Boolean.TRUE);
String clusterID=Configuration.get("jgroup-group-id");
logger.info("Connecting to clusterID:"+clusterID);
channel.connect(clusterID);
view=channel.getView();
PullPushAdapter adapter=new PullPushAdapter(channel,this);
rpc=new RpcDispatcher(adapter,null,null,null,new RemoteCallHandler());
rpc.addChannelListener(adapter);
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: