[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