Re: Individual Members of PeerGroup
Mohamed Abdelaziz <[email protected]> Mon, 12 Sep 2005 08:24:44 -0700
| Newsgroups | gmane.comp.java.jxta.user |
|---|---|
| Message-ID | <[email protected]> |
Creating a propagate output pipe has very little cost associated with it. I suggest creating a new one when needed, then discarding it. Mohamed -- http://blogs.sun.com/roller/page/hamada http://weblogs.java.net/blog/hamada Poole, Paul P1 wrote: >Vitaly and Mohamed: Thanks so much for your time with this... I know >that my solution will be so much better for it! > >Mohamed: I see the API spec for OutputPipe op = >pipeSerivce.createOutputPipe(propPipeAdv, >Collections.singleton(src_pid), 1); > >Should I use this in a loop adding the src_pids that I need one at a >time? Is there a lot of overhead for creating these new pipes? If so >(and even if not), would it be at all efficient to cache these for a >(brief?) period of time in the event I need to reuse these for future >recovery? > >Thanks, > >Paul > >-----Original Message----- >From: Mohamed Abdelaziz [mailto:[email protected]] >Sent: Friday, September 09, 2005 7:09 PM >To: [email protected] >Subject: Re: [JXTA user] Individual Members of PeerGroup > > >I'll expand a little on the propagate pipes protocol and implementation, > >as it will help you understand the suggestions below. Propagate pipes >are implemented similarly to IGMP as follows : > >Propagate pipe Membership > - Nodes issue a propagate pipe Membership in the form of an SRDI >message to it's rendezvous > - Rendezvous peers maintain membership lists for their clients > >Resolution > - There is no resolution of a propagate > - Creation of an OutputPipe defines the destination propagate endpoint, > >and possible peer endpoints. > >Message routing > - In addition to Multicast (if available), a message is always walked >to the nodes rendezvous > - On a rendezvous the message is deliver to all subscribers of the >channel, and walked the length of the peerview, where this step is >repeated. > - If a set of peers is specified, then the message is delivered to only > >those specified. > >Propagate pipe resignation > - Nodes issue a propagate pipe resignation in the form of an SRDI >message (expiring the entry) to it's rendezvous. > >That said, the simplest solution I can suggest, is for the recovery >thread is to create an OutputPipe with the same propagate pipe adv and >the intended set of peers. The set may only contain one peer (the peer >that just sent the message), or a set peers picked randomly from a list >maintained by the app through communication history. > >The PipeService supports this kind of functionality, and provides the >API to do so. Also, as noted above, the implementation leverages >rendezvous propagation, walkers, SRDI, and the pipe protocol to deliver >messages. Bypassing the PipeService will only result in message >delivery failures. The API I am referring to, goes as follows : > >OutputPipe op = pipeSerivce.createOutputPipe(propPipeAdv, >Collections.singleton(src_pid), 1); > >If you find in practice that the above does not meet your goals, then >the other alternative is to enhance the propagate pipe protocol to >provide access to propagate pipe group membership, etc. > > >Mohamed > > >Poole, Paul P1 wrote: > > > >>Mohamed, >> >>Thanks for taking the time to respond... Here is what I am trying to >>accomplish: >> >>I have designed a system where each message generated by a peer for a >>group is numbered. This numbering is used by the other peers to >>determine if they have received all of the messages from a given peer. >>If a message received is larger than expected, then it is threaded into >> >> > > > >>recovery mode (after a short sleep cycle since some messages are >>received out of order). In recovery mode, I want a peer to be able to >>request from other peers the messages that were missed. However, I do >>not want the query to be propagated to the entire group, just a couple >>of them (at most 3). I am trying to develop this for a very unstable >>network - peers are coming and going at a high rate. Thus, I want to >>be able to obtain the "latest" list from the rendezvous and send my >>recovery requests to a few members of the group that are currently >>connected (preferentially connected with least latency, but that will >>be tackled later). I thought that perhaps grabbing the current list >> >> >>from rdv and sending a recovery message to a few of them would work, > > >>but I am unable to get the propagate method to work (I have created a >>separate thread for that problem). >> >>I would love to hear alternative suggestions. >> >>My current problem with performing a unicast loop is that I do not >>understand how to obtain a pipe for each peer that I chose from the >>list of connected peers. If I can get a unicast pipe from each of >>those peers, then I could set this up to simply unicast the recovery >>message. >> >>Thanks for your help!!! >> >>-----Original Message----- >>From: Mohamed Abdelaziz [mailto:[email protected]] >>Sent: Thursday, September 08, 2005 8:12 PM >>To: [email protected] >>Subject: Re: [JXTA user] Individual Members of PeerGroup >> >> >>Mohamed Abdelaziz wrote: >> >> >> >> >> >>>Paul, >>> >>>Creating an OutputPipe object with the desired set of peers should >>>provide the functionality you seek. Using rendezvous propagation may >>>work given the correct service name and param, however, we advise >>>against it, mainly due to the potential flood everywhere, and as a >>>result it has become more restrictive in the upcoming release 2.3.5. >>> >>>Is this a static set of peers, or you looking for suggestions on how >>>to dynamically create one? >>> >>>if it is the latter, perhaps a ping message over the propagate pipe >>>results into a unicast response over the same propagate pipe. >>> >>> >>> >>> >>Another suggestion is to keep track of peers over the course of >>communication and dynamically augment the random set of peers. >> >>