[Spread-cvs] cvs commit: spread/daemon Readme.txt membership.c

jonathan at spread.org jonathan at spread.org
Sun Feb 8 09:13:38 EST 2004


jonathan    04/02/08 09:13:38

  Modified:    daemon   Readme.txt membership.c
  Log:
  Decrease the number of daemon probe messages sent when the configuration
  consists of a single segment.
  
  Revision  Changes    Path
  1.44      +1 -0      spread/daemon/Readme.txt
  
  Index: Readme.txt
  ===================================================================
  RCS file: /storage/cvsroot/spread/daemon/Readme.txt,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- Readme.txt	2 Feb 2004 21:36:46 -0000	1.43
  +++ Readme.txt	8 Feb 2004 14:13:38 -0000	1.44
  @@ -69,6 +69,7 @@
      not start. Suggested by Tim Peters. 
   *) Zero buffer in c library before sending multicast. 
      Reported by Panagiotis Kougiouris. 
  +*) Send fewer lookup probe messages when only a single segment is configured.
   
   June 20, 2003 Ver 3.17.1
   ----------------------------
  
  
  
  1.4       +24 -5     spread/daemon/membership.c
  
  Index: membership.c
  ===================================================================
  RCS file: /storage/cvsroot/spread/daemon/membership.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- membership.c	24 Oct 2003 21:47:37 -0000	1.3
  +++ membership.c	8 Feb 2004 14:13:38 -0000	1.4
  @@ -188,6 +188,12 @@
   		Lookup_timeout.sec =  60; Lookup_timeout.usec = 0;
   	}
   
  +        /* Lookup timeout when only one segment exists can be longer,
  +         * since a no remote segments need to be probed
  +         */
  +        if ( Cn.num_segments == 1 )
  +            Lookup_timeout.sec = 300;
  +
   	Membership = Conf();
   	My_conf_seg = Cn.segments[My.seg_index];
   	for( i=0; i < Conf().num_segments; i++ )
  @@ -390,7 +396,7 @@
       switch( State )
       {
   	case OP:
  -	    /* if sender belongs to my ring then my token is lost 
  +	    /* if sender belongs to my ring then my token is lost (except for single segment confs)
   	       otherwise if I am a ring leader shift_to_gather */
   	    Alarm( MEMB, "Handle_join in OP\n");
   	    if( Conf_id_in_conf( &Membership, pack_ptr->proc_id ) == -1 )
  @@ -420,7 +426,13 @@
   		}
   	    }else{
   	        /* sender belongs to my ring - my token is lost */
  -	        Memb_token_loss();
  +                /* If only one segment exists, then token is not lost, but rather
  +                 * a JOIN probe for merged segments was received. This can be
  +                 * ignored because a real token loss will trigger an ALIVE broadcast
  +                 * packet which will force the membership change.
  +                 */
  +                if ( Cn.num_segments > 1 )
  +                    Memb_token_loss();
   	    }
   	    break;
   
  @@ -1006,8 +1018,14 @@
   	pack_ptr->data_len = Send_pack.elements[1].len + Send_pack.elements[2].len;
   
   	num_missing = 0;
  -	for( i=0; i < Cn.num_segments; i++ )
  -	{
  +        /* For single segment configured, send local broadcast of join to entire segment -- current members will ignore */
  +        if ( Cn.num_segments == 1 ) {
  +            Net_scast( My.seg_index, &Send_pack );
  +            num_missing++;
  +        } else {
  +            /* Send unicasts to each host that is not in the current membership. */
  +            for( i=0; i < Cn.num_segments; i++ )
  +            {
   		for( j=0; j < Cn.segments[i].num_procs; j++ )
   		{
   		    if( Conf_id_in_conf( &Reg_membership, Cn.segments[i].procs[j]->id ) == -1 )
  @@ -1016,7 +1034,8 @@
   			num_missing++;
   		    }
   		}
  -	}
  +            }
  +        }
   	if( num_missing ) Shift_to_gather();
   }
   
  
  
  




More information about the Spread-cvs mailing list