[comp.sys.isis] pg_leave in an "active" group

ken@gvax.cs.cornell.edu (Ken Birman) (08/04/89)

Two "features" that will be eliminated in future ISIS releases (meanwhile,
being aware of them should be enough to avoid problems)

1) In private mail, Jim Muldner asks "... what can I assume, if anything,
   about what a process will see between when it invokes pg_leave and when
   the pg_leave returns?  I think I have seen a race condition between
   a process doing a pg_join and one doing a pg_leave in which the pg_join
   causes a state transfer WHILE the pg_leave is running!  Is this normal?"

   KB: I looked into this, and indeed the system treats a process as a
   full-fledged member of a process group until the GBCAST that pg_leave
   sends is delivered to the other members -- possibly a long delay after
   pg_leave is first initiated.  Thus, a process trying to leave could
   continue to receive requests and could even be asked to do a state 
   transfer to other members!

   We are modifying the system to allow a process that doesn't want to
   participate in a state transfer to call ``cc_refuse()'' in the state-xfer
   out routine (or, in general, in the action routine of any coordinator-
   cohort algorithm).  

   However, it is not possible to arrange for a process to drop out of
   a group at the instant it calls pg_leave -- this leads to non virtually
   synchronous executions and can cause many things to break.  You'll
   just have to program with this in mind.  

2) Also in private mail, Mark Wood asks "... is it possible that when a
   group has multiple clients monitoring group membership and the last
   member drops out, that gv_departed is not set correctly on the last 
   group view reported to the clients (the one with nmembs == 0)?"

   KB:  Mark is right.  We'll fix this so that if a group has 1 member
   who exits, the last view shows the address of this member in gv_departed.
   Currently, gv_departed is meaningless if gv_nmemb==0

   Note that if the group terminates by a pg_delete, several members could
   drop out simultaneously.  In this case, I'll make sure that gv_departed
   contains NULLADDRESS.  (We could also pass in multiple "fake" views in
   this case, if anyone wants to make a strong argument in favor of this.)