[Spread-users] Re: partition detection
Guido van Rossum
guido at python.org
Mon Apr 22 16:18:29 EDT 2002
> > > 1) JOIN: This means a single member joined the group. Noone failed and the
> > >
> > > 2) LEAVE: A single member left the group (someone called SP_leave). the
> > >
> > > 3) DISCONNECT: A single member 'disconnected' from the daemon it had been
> >
> > I believe the API provides for multiple members joining, leaving or
> > disconnecting in this way. Does Spread guarantee that you get a
> > separate message for each join/leave/disconnect event? Could this
> > change in the future? (IOW should I write code that can handle
> > multiple members, or can I safely assume this will never happen?)
>
> Currently the API specifys that a caused_by_join, caused_by_leave and
> caused_by_disconnect will always be a single member. So changing that would
> be an API break and major change. Because of the way it is implemented I
> don't anticipate that changing anytime soon, if at all.
Thanks. I think I was confused by the data structure returned by
SP_receive(), which is declared as char groups[][MAX_GROUP_NAME]
suggesting an array of group names. But the explanation of
CAUSED_BY_JOIN clarifies that it's only one process that joined.
(As a result of this confusion, the Python API returns a list of
member names here. :-( )
> You may be thinking of the sp_multigroup_multicast which sends a
> message to multiple groups at once. Or it would be possible to have
> an API allowing you to join multiple groups in one "join" call, but
> that would still cause each group to see a join of a single member.
Agreed.
> Because join/leave/disconnect events are naturally generated one at
> a time for a single connection at a time, the only way they could be
> aggregated into multi-member joins is if we waited before handling
> one to see if more arrived and that would not give much gain at all
> for the added complexity (and increase in latency)
Good point!
> Now the Network events can easily have multiple members join or
> leave at once because they represent actual topology changes which
> effect lots of daemons and members. So if you receive a network
> event you must be able to handle any possible membership change of
> possibly many members.
Understood.
Perhaps you can also write up a clarification of the TRANS_MEMB_MESS
message? That's still a mystery to me. I have no idea how I can
force it so as to test my application's response to it! This makes it
hard to even think about writing code to handle it...
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Spread-users
mailing list