## $Id: CONFIGURATIONS,v 1.1.1.1 2003/09/09 01:24:04 belaban Exp $


	    Frequently used protocol stack specifications
	    =============================================




Virtual Synchrony & State Transfer Protocol Stack
-------------------------------------------------

UDP:
PING(num_initial_members=2;timeout=3000):
FD:
STABLE:
NAKACK:
UNICAST:
FRAG:
FLUSH:
GMS:
VIEW_ENFORCER:
STATE_TRANSFER:
QUEUE


Properties: 

Uses Virtual Synchrony. All messages sent in a view V1 are delivered in
that view. The FLUSH protocol makes sure that, when a new view V2 is to
be installed, that all messages sent in V1 will be seen by all members
of V1 before V2 is installed. The FLUSH protocol stops all sending
until V2 has been installed successfully at all members. Messages sent
after the block has been received and before V2 is installed will be
sent in V2.


Protocols:

UDP: uses UDP/IP multicast as transport

PING: discovers initial set of members, determines coordinator to
      which the join-request will be sent

FD: failure detection based on periodic pinging of member 'to the
    right' in the membership ring

STABLE: garbage collection of messages seen by all members

NAKACK: guarantees lossless 1-m message delivery, uses negative acks
        to retransmit lost messages

UNICAST: guarantees lossless 1-1 message delivery, uses positive acks
        to retransmit lost messages

FRAG: fragments large messages into smaller ones and reassembles them
      at the receiving side

FLUSH: flushes all pending multicasts out of the system before
       transitioning to a new view. Ensures that all members of view
       V1 agree on the set of messages they delivered in V1.

GMS: group membership service. Takes care of joining/leaving members

VIEW_ENFORCER: only accepts messages from senders in the same
               view. Stores messages for future view, discards messages
               sent in previous view.

STATE_TRANSFER: allows any member to fetch the state from any other
                member (usually done immediately after joining)

QUEUE: queues messages sent during a view transition. When the new
       view is installed, the stored messages will be sent.






Pbcast-based Protocol Stack
---------------------------

UDP(mcast_addr=228.1.2.3;mcast_port=45566;ip_ttl=0):
PING(timeout=5000;num_initial_members=6):
FD_SOCK:
VERIFY_SUSPECT(timeout=1500):
pbcast.STABLE(desired_avg_gossip=10000):
pbcast.NAKACK(gc_lag=5;retransmit_timeout=3000;trace=true):
UNICAST(timeout=5000;min_wait_time=2000):
FRAG(down_thread=false;up_thread=false):
pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=true)


Properties:

Defines a stack with weaker reliability semantics than the Virtual Synchrony protocol
stack. The biggest difference is that there is no guarantee that the set of messages
sent between views is the same (no FLUSH protocol). Essentially defines a reliable 1-m
protocol, where views are just regular messages and have no special semantics.


Protocols:

UDP: uses UDP/IP multicast as transport. Uses a time-to-live of 0

PING: discovers initial set of members, determines coordinator to
      which the join-request will be sent. Will wait for 5 seconds or 6 members to
      respond (whichever is first)

FD_SOCK: failure detection based on TCP socket connection from each member to the
         member 'to the right' in the membership ring. When connection breaks, member
         is suspected. Compared to FD, there are no periodic ping messages sent

VERIFY_SUSPECT: reduces false suspicions. Verifies that a member P that is suspected
                is really dead by sending a ping message to P.

pbcast.STABLE: garbage collection of messages seen by all members using gossips. A
               gossip is multicast every 10 seconds on average by each member.

pbcast.NAKACK: guarantees lossless 1-m message delivery, uses negative acks
               to retransmit lost messages

UNICAST: guarantees lossless 1-1 message delivery, uses positive acks
        to retransmit lost messages

FRAG: fragments large messages into smaller ones and reassembles them
      at the receiving side

pbcast.GMS: group membership service. Takes care of joining/leaving members




