commit: r254 - in trunk: daemon flush include

[email protected]
Newsgroups gmane.network.spread.cvs
Message-ID <[email protected]>
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 );
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.