RE: Individual Members of PeerGroup
"Poole, Paul P1" <[email protected]> Wed, 21 Sep 2005 14:55:13 -0400
| Newsgroups | gmane.comp.java.jxta.user |
|---|---|
| Message-ID | <[email protected]> |
Mohamed, Thanks for the quick response (and patch). I have looked over the patch and tried it. The patch, unfortunately, doesn't resolve this particular problem. The patch you provided ensures that the node that initiates the message will receive it. For example, if there are 2 nodes A and B. If A is the rdv node and B is the node trying to send a message to A (via the method described below), this patch will send the message to B (itself) as well as attempt to send it to A. For some reason, A never receives the message. Here is the problem, using the same example above (no patch)... Node A is the rdv and B is an edge peer. If B sends a message to A, A will not receive the message. However, if A sends a message to B, B will receive the message. To expand on this, if there are 5 nodes: A, B, C, D, and E, where node A is the rdv node. If B sends a message to A and C, C will receive the message, but A will not. I hope this is clear. I am mucking around in the source code for Jxta right now. If I solve this problem, I will post it here. Thanks, -----Original Message----- From: Mohamed Abdelaziz [mailto:[email protected]] Sent: Wednesday, September 21, 2005 12:11 PM To: [email protected] Subject: Re: [JXTA user] Individual Members of PeerGroup Yes that's bug. Looking through the WirePipe the logic which deals with such messages (destined to a specific set of nodes) on a rendezvous ends up bypassing any local listener during hand off between the incoming, and the outgoing threads. The attached patch will address the issue. Keep in mind it may not be the final patch. Mohamed Index: WirePipe.java =================================================================== RCS file: /cvs/platform/binding/java/impl/src/net/jxta/impl/pipe/WirePipe.java,v retrieving revision 1.38 diff -u -r1.38 WirePipe.java --- WirePipe.java 27 Jul 2005 16:31:49 -0000 1.38 +++ WirePipe.java 21 Sep 2005 16:06:36 -0000 @@ -465,10 +465,8 @@ */ void sendMessage(Message msg, Set peers) throws IOException { - // do local listeners if we are to be one of the destinations - if(peers.isEmpty() || peers.contains(myGroup.getPeerID())) { - callLocalListeners(msg, null, null); - } + + callLocalListeners(msg, null, null); if(peers.isEmpty()) { if (myGroup.isRendezvous()) { Poole, Paul P1 wrote: > Mohamed, > > Regarding: "OutputPipe op = pipeSerivce.createOutputPipe(propPipeAdv, > Collections.singleton(src_pid), 1);" > > I ran into one problem with this... If the src_pid belongs to the > rendezvous peer, it fails. Is this a bug? Do you know of any good > workarounds? I am using a history list (based on an LRU cache, per > your > suggestion) to obtain a list of peers. Sometimes one of the peers > selected is a rendezvous... When this happens, a message is sent, but > the rdv peer never receives this message. This is problematic for > message recovery in a two node scenario since the only other node to > request missed messages from is the rendezvous. > > Thanks for your assistance, > > Paul > > -----Original Message----- > From: Mohamed Abdelaziz [mailto:[email protected]] > Sent: Monday, September 12, 2005 3:55 PM > To: [email protected] > Subject: Re: [JXTA user] Individual Members of PeerGroup > > > PipeMessage should define and include source PID, IMO is it a missing > feature. However, in the interim. Exchange src id in the message, and to > > convert a string into a peerid can be easily done through : > > try { > pid =(PeerID) IDFactory.fromURI(new URI(pidStr)); } > catch (Exception ex) {} > > > The problem with using the list of peers connected to a rendezvous, is > the assumption that such peers are subscribers to the communication > channel, in addition, the pipe service does not expose any api's to > access the list of subscribers. That said, the simplest way to do this > without extending the core services is to use a dynamic list. > > I would also add the dynamic list should be an LRU cache to ensure a > fresh list (the JXME project has a class which fits this purpose see: > http://jxme.jxta.org/source/browse/jxme/proxyless/proto/src/net/jxta/imp > l/cm/LRUCache.java?rev=1.2&view=auto&content-type=text/vnd.viewcvs-marku > p). > > > Mohamed > > -- http://blogs.sun.com/roller/page/hamada http://weblogs.java.net/blog/hamada --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]