[Spread-cvs] commit: r254 - in trunk: daemon flush include

jschultz at spread.org jschultz at spread.org
Fri Aug 5 19:18:38 EDT 2005


Author: jschultz
Date: 2005-08-05 19:18:38 -0400 (Fri, 05 Aug 2005)
New Revision: 254

Modified:
   trunk/daemon/groups.c
   trunk/daemon/sp.c
   trunk/flush/fl.c
   trunk/flush/fl_time_memb.c
   trunk/flush/user.c
   trunk/include/sp_func.h
Log:
Added final code to flush to handle Spread's new vs_set semantics.  Added FL_lib_init calls to user and fl_time_memb as needed.  I still need to add documentation about FL_lib_init, this will probably break most deployed FL apps.  Exported an additional offset fcn in sp_func.h; probably need another one for scat structs.  Updated sp.c to have matching fcn prototypes.  Possible bug still in the SP_get_local_vs_offset fcn.



Modified: trunk/daemon/groups.c
===================================================================
--- trunk/daemon/groups.c	2005-07-31 10:51:40 UTC (rev 253)
+++ trunk/daemon/groups.c	2005-08-05 23:18:38 UTC (rev 254)
@@ -1136,15 +1136,14 @@
 
         vs_set_offset_ptr = &Mess_buf[num_bytes];
         num_bytes        += sizeof( int32u );
+        temp = 0;
+        memcpy( vs_set_offset_ptr, &temp, sizeof(int32u) ); /* offset is zero, always */
 
         num_vs_ptr = &Mess_buf[ num_bytes ];
         num_bytes += sizeof( int32u );
         temp       = 1;
         memcpy( num_vs_ptr, &temp, sizeof( int32u ) );      /* with 1 member */
 
-        temp = 0;
-        memcpy( vs_set_offset_ptr, &temp, sizeof(int32u) ); /* offset is zero, always */
-
         vs_ptr = (char *)&Mess_buf[ num_bytes ];            /* vs_set has joiner/leaver/disconnecter */
         memcpy( vs_ptr, private_group_name, MAX_GROUP_NAME );
         num_bytes += MAX_GROUP_NAME;

Modified: trunk/daemon/sp.c
===================================================================
--- trunk/daemon/sp.c	2005-07-31 10:51:40 UTC (rev 253)
+++ trunk/daemon/sp.c	2005-08-05 23:18:38 UTC (rev 254)
@@ -1603,32 +1603,32 @@
 	else return( 0 );
 }
 
-int     SP_get_gid_offset_memb_mess() 
+int     SP_get_gid_offset_memb_mess(void) 
 {
         return 0;
 }
 
-int     SP_get_num_vs_sets_offset_memb_mess() 
+int     SP_get_num_vs_sets_offset_memb_mess(void) 
 {
         return sizeof(group_id);
 }
 
-static  int  SP_get_offset_to_local_vs_set_offset()
+int  SP_get_offset_to_local_vs_set_offset(void)
 {
         return sizeof(group_id) + sizeof(int32u);
 }
 
-int     SP_get_first_vs_set_offset_memb_mess() 
+int     SP_get_first_vs_set_offset_memb_mess(void) 
 {
         return sizeof(group_id) + 2*sizeof(int32u);
 }
 
-int     SP_get_vs_set_size_offset_vs_set()
+int     SP_get_vs_set_size_offset_vs_set(void)
 {
         return 0;
 }
 
-int     SP_get_vs_set_members_offset_vs_set()
+int     SP_get_vs_set_members_offset_vs_set(void)
 {
         return sizeof(int32u);
 }

Modified: trunk/flush/fl.c
===================================================================
--- trunk/flush/fl.c	2005-07-31 10:51:40 UTC (rev 253)
+++ trunk/flush/fl.c	2005-08-05 23:18:38 UTC (rev 254)
@@ -631,7 +631,7 @@
 }
 
 static void fill_view(view *v, service memb_type, int num_membs, 
-				 char (*membs)[MAX_GROUP_NAME], int16 index) {
+		      char (*membs)[MAX_GROUP_NAME], int16 index) {
   size_t byte_size = num_membs * MAX_GROUP_NAME;
 
   DEBUG(std_stkfprintf(stderr, 1, "fill_view: view %p, serv 0x%X, num_membs %d, index %d\n",
@@ -1364,6 +1364,8 @@
       assert(m->ret >= sizeof(group_id) + sizeof(int) + MAX_GROUP_NAME);    /* ensure received */
       err = scatp_begin(&pos, scat);
       assert(err == 0);
+      err = scatp_jforward(&pos, SP_get_gid_offset_memb_mess());
+      assert(err == SP_get_gid_offset_memb_mess());
       err = scatp_cpy1((char*) &m->dst_gid, &pos, sizeof(group_id));       /* copy out new gid */
       assert(err == sizeof(group_id));                             /* already endian corrected */
       DEBUG(std_stkfprintf(stderr, 0, "Recvd a SP reg memb mess: New SP gid is %d %d %d\n", 
@@ -1904,11 +1906,13 @@
 
 static char*
 determine_leavers(stdhash *leavers, view *last_sp_view, gc_recv_mess *m) {
-  char delta[MAX_GROUP_NAME], *delta_ptr = delta, *ret = 0;
-  int num_vs, i, *num_vs_ptr = &num_vs;
+  char     delta[MAX_GROUP_NAME], *delta_ptr = delta, *ret = 0;
+  int      i;
   scatter *scat;
-  scatp pos;
-  long err;
+  scatp    pos;
+  long     err;
+  stduint32   offset;
+  stduint32   num_membs;
 
   DEBUG(std_stkfprintf(stderr, 1, "determine_leavers: old gid %d %d %d -> new gid %d %d %d\n", 
 		       last_sp_view->gid.id[0], last_sp_view->gid.id[1], 
@@ -1916,13 +1920,32 @@
 		       m->dst_gid.id[2]));
 
   get_scat_info(m, &i, &scat);                                   /* i is a dummy variable here */
+
+  err = scatp_set(&pos, scat, SP_get_offset_to_local_vs_set_offset(), SEEK_SET);
+  assert(err == 0);
+
+  err = scatp_cpy1((char*) &offset, &pos, sizeof(stduint32));
+  assert(err == sizeof(stduint32));
+
+  offset += SP_get_first_vs_set_offset_memb_mess();                     /* get local VS offset */
+
+  err = scatp_set(&pos, scat, offset, SEEK_SET);
+  assert(err == offset);
+
+  err = scatp_cpy1((char*) &num_membs, &pos, sizeof(stduint32));                    /* read out num membs */
+  assert(err == sizeof(stduint32));
+
+  err = scatp_jforward(&pos, sizeof(stduint32));                             /* advance to vs_set */
+  assert(err == sizeof(stduint32));
+
   if (!Is_caused_network_mess(*m->serv_type)) {               /* join, leave, or disconnection */
+    assert(num_membs == 1);
+
     DEBUG(std_stkfprintf(stderr, 0, "Not caused by network! "));
+ 
     stdhash_construct(leavers, sizeof(char*), 0, 
 		      group_name_ptr_cmp, group_name_ptr_hashcode, 0);
-
-    err = scatp_set(&pos, scat, sizeof(group_id) + sizeof(int), SEEK_SET);
-    assert(err == 0);
+    
     err = scatp_cpy1(delta, &pos, MAX_GROUP_NAME);      /* read out joiner/leaver/disconnector */
     assert(err == MAX_GROUP_NAME);
     delta[MAX_GROUP_NAME - 1] = 0;                                  /* ensure null termination */
@@ -1936,19 +1959,16 @@
       DEBUG(std_stkfprintf(stderr, 0, "Wasn't a JOIN: adding delta to leavers\n"));
       stdhash_insert(leavers, 0, &ret, 0);
     }
+
   } else {
     DEBUG(std_stkfprintf(stderr, 0, "Caused by network! "));
     stdhash_copy_construct(leavers, &last_sp_view->orig_membs);     /* copy last SP membership */
 
-    err = scatp_set(&pos, scat, sizeof(group_id), SEEK_SET);
-    assert(err == 0);
-    err = scatp_adv_cpy1((char**) &num_vs_ptr, &pos, sizeof(int), 0, 1);    /* read out num_vs */
-    assert(err == sizeof(int));
-
-    DEBUG(std_stkfprintf(stderr, 0, "Num_vs %d\n", num_vs));
-    for (i = 0; i < num_vs; ++i) {        /* remove members that came with me: leaves who left */
+    DEBUG(std_stkfprintf(stderr, 0, "Num_membs %u\n", num_membs));
+    for (i = 0; i < num_membs; ++i) {        /* remove members that came with me: leaves who left */
       err = scatp_adv_cpy1(&delta_ptr, &pos, MAX_GROUP_NAME, 0, 1);
       assert(err == MAX_GROUP_NAME);
+
       delta[MAX_GROUP_NAME - 1] = 0;                                /* ensure null termination */
       err = stdhash_size(leavers);
       stdhash_erase_key(leavers, &delta_ptr);

Modified: trunk/flush/fl_time_memb.c
===================================================================
--- trunk/flush/fl_time_memb.c	2005-07-31 10:51:40 UTC (rev 253)
+++ trunk/flush/fl_time_memb.c	2005-08-05 23:18:38 UTC (rev 254)
@@ -96,6 +96,8 @@
   exe = *argv;
   usage(argc, argv);
 
+  FL_lib_init();
+
   if ((err = FL_connect(daemon_name, user_name, 0, &mbox, priv_name)) != ACCEPT_SESSION) {
     fprintf(stderr, "FL_connect failure: ");
     FL_error(err);

Modified: trunk/flush/user.c
===================================================================
--- trunk/flush/user.c	2005-07-31 10:51:40 UTC (rev 253)
+++ trunk/flush/user.c	2005-08-05 23:18:38 UTC (rev 254)
@@ -53,6 +53,8 @@
   FL_version(&major, &minor, &patch);
   printf("Flush library version is %d.%d.%d\n", major, minor, patch);
 
+  FL_lib_init();
+
   ret = FL_connect( Spread_name, User, LOW_PRIORITY, &Mbox, Private_group );
   if( ret < 0 ) {
     FL_error( ret );

Modified: trunk/include/sp_func.h
===================================================================
--- trunk/include/sp_func.h	2005-07-31 10:51:40 UTC (rev 253)
+++ trunk/include/sp_func.h	2005-08-05 23:18:38 UTC (rev 254)
@@ -100,7 +100,8 @@
 int     SP_get_vs_set_size_offset_vs_set(void);
 int     SP_get_vs_set_members_offset_vs_set(void);
 /* returns value from regular membership message */
-int     SP_get_local_vs_set_offset_memb_mess( char *reg_memb_mess );
+int     SP_get_offset_to_local_vs_set_offset(void);
+int     SP_get_local_vs_set_offset_memb_mess( char *reg_memb_mess );  /* TODO: jonathan we need one for scat's too! */
 
 int	SP_poll( mailbox mbox );
 




More information about the Spread-cvs mailing list