[Spread-cvs] commit: r510 - branches/reconfig_groups_crash_bugfix/daemon

jonathan at spread.org jonathan at spread.org
Tue Apr 17 10:03:23 EDT 2012


Author: jonathan
Date: 2012-04-17 10:03:23 -0400 (Tue, 17 Apr 2012)
New Revision: 510

Modified:
   branches/reconfig_groups_crash_bugfix/daemon/conf_body.h
   branches/reconfig_groups_crash_bugfix/daemon/config_parse.y
   branches/reconfig_groups_crash_bugfix/daemon/configuration.c
   branches/reconfig_groups_crash_bugfix/daemon/configuration.h
Log:
Add new API to lookup id/name in config for any conf structure. Rework all existing users to new api, old API just calls new more general API. Remove unneeded special fucntions for handling conf file reconfigs as they can use new API.

Modified: branches/reconfig_groups_crash_bugfix/daemon/conf_body.h
===================================================================
--- branches/reconfig_groups_crash_bugfix/daemon/conf_body.h	2012-04-16 16:10:10 UTC (rev 509)
+++ branches/reconfig_groups_crash_bugfix/daemon/conf_body.h	2012-04-17 14:03:23 UTC (rev 510)
@@ -57,7 +57,6 @@
 
 ext     configuration	*Config;
 ext     FILE		*yyin;
-ext	proc           	*Config_procs;
 ext     int       LinkWeights[MAX_SEGMENTS][MAX_SEGMENTS];
 
 #define MAX_CONF_STRING 20000

Modified: branches/reconfig_groups_crash_bugfix/daemon/config_parse.y
===================================================================
--- branches/reconfig_groups_crash_bugfix/daemon/config_parse.y	2012-04-16 16:10:10 UTC (rev 509)
+++ branches/reconfig_groups_crash_bugfix/daemon/config_parse.y	2012-04-17 14:03:23 UTC (rev 510)
@@ -169,9 +169,9 @@
 
 	for ( i=0; i < num_procs; i++ )
 	{
-		if ( strcmp( Config_procs[i].name, name ) == 0 )
+		if ( strcmp( Config->allprocs[i].name, name ) == 0 )
 		{
-			*p = Config_procs[i];
+			*p = Config->allprocs[i];
 			return( i );
 		}
 	}
@@ -567,11 +567,11 @@
 				segment_procs);
 			  for(i=(num_procs - segment_procs); i<num_procs; i++) {
                                   /* This '1' is to keep each proc with the same port as the segment.*/
-			    if( 1 || Config_procs[i].port==0)  {
-			      Config_procs[i].port=
+			    if( 1 || Config->allprocs[i].port==0)  {
+			      Config->allprocs[i].port=
 				Config->segments[segments].port;
 			    }
-			    alarm_print_proc(&Config_procs[i],
+			    alarm_print_proc(&(Config->allprocs[i]),
 			    	Config->segments[segments].port);
 			  }
                           /* generate string representation of segment */
@@ -597,14 +597,14 @@
                           SEGMENT_SIZE_CHECK( segment_procs, $1.string );
                           if (procs_interfaces == 0)
                                   yyerror("Interfaces section declared but no actual interface addresses defined\n");
-                          strcpy(Config_procs[num_procs].name, $1.string);
-                          Config_procs[num_procs].id = $2.ip.addr.s_addr;
- 		          Config_procs[num_procs].port = $2.ip.port;
-			  Config_procs[num_procs].seg_index = segments;
-			  Config_procs[num_procs].index_in_seg = segment_procs;
-                          Config_procs[num_procs].num_if = procs_interfaces;
+                          strcpy(Config->allprocs[num_procs].name, $1.string);
+                          Config->allprocs[num_procs].id = $2.ip.addr.s_addr;
+ 		          Config->allprocs[num_procs].port = $2.ip.port;
+			  Config->allprocs[num_procs].seg_index = segments;
+			  Config->allprocs[num_procs].index_in_seg = segment_procs;
+                          Config->allprocs[num_procs].num_if = procs_interfaces;
 			  Config->segments[segments].procs[segment_procs] = 
-                                  &Config_procs[num_procs];
+                              &(Config->allprocs[num_procs]);
 			  num_procs++;
 			  segment_procs++;
                           procs_interfaces = 0;
@@ -617,15 +617,15 @@
                           SEGMENT_SIZE_CHECK( segment_procs, $1.string );
                           if (procs_interfaces == 0)
                                   yyerror("Interfaces section declared but no actual interface addresses defined\n");
-                          strcpy(Config_procs[num_procs].name, $1.string);
-                          Config_procs[num_procs].id =
-			    name2ip(Config_procs[num_procs].name);
- 		          Config_procs[num_procs].port = 0;
-			  Config_procs[num_procs].seg_index = segments;
-			  Config_procs[num_procs].index_in_seg = segment_procs;
-                          Config_procs[num_procs].num_if = procs_interfaces;
+                          strcpy(Config->allprocs[num_procs].name, $1.string);
+                          Config->allprocs[num_procs].id =
+			    name2ip(Config->allprocs[num_procs].name);
+ 		          Config->allprocs[num_procs].port = 0;
+			  Config->allprocs[num_procs].seg_index = segments;
+			  Config->allprocs[num_procs].index_in_seg = segment_procs;
+                          Config->allprocs[num_procs].num_if = procs_interfaces;
 			  Config->segments[segments].procs[segment_procs] = 
-                                  &Config_procs[num_procs];
+                              &(Config->allprocs[num_procs]);
 			  num_procs++;
 			  segment_procs++;
                           procs_interfaces = 0;
@@ -636,17 +636,17 @@
                           PROCS_CHECK( num_procs, $1.string );
                           SEGMENT_CHECK( segments, $1.string );
                           SEGMENT_SIZE_CHECK( segment_procs, $1.string );
-                          strcpy(Config_procs[num_procs].name, $1.string);
-                          Config_procs[num_procs].id = $2.ip.addr.s_addr;
- 		          Config_procs[num_procs].port = $2.ip.port;
-			  Config_procs[num_procs].seg_index = segments;
-			  Config_procs[num_procs].index_in_seg = segment_procs;
-                          Config_procs[num_procs].num_if = 1;
-                          Config_procs[num_procs].ifc[0].ip = Config_procs[num_procs].id;
-                          Config_procs[num_procs].ifc[0].port = Config_procs[num_procs].port;
-                          Config_procs[num_procs].ifc[0].type = IFTYPE_ALL | IFTYPE_ANY;
+                          strcpy(Config->allprocs[num_procs].name, $1.string);
+                          Config->allprocs[num_procs].id = $2.ip.addr.s_addr;
+ 		          Config->allprocs[num_procs].port = $2.ip.port;
+			  Config->allprocs[num_procs].seg_index = segments;
+			  Config->allprocs[num_procs].index_in_seg = segment_procs;
+                          Config->allprocs[num_procs].num_if = 1;
+                          Config->allprocs[num_procs].ifc[0].ip = Config->allprocs[num_procs].id;
+                          Config->allprocs[num_procs].ifc[0].port = Config->allprocs[num_procs].port;
+                          Config->allprocs[num_procs].ifc[0].type = IFTYPE_ALL | IFTYPE_ANY;
 			  Config->segments[segments].procs[segment_procs] = 
-                                  &Config_procs[num_procs];
+                              &(Config->allprocs[num_procs]);
 			  num_procs++;
 			  segment_procs++;
                           procs_interfaces = 0;
@@ -657,18 +657,18 @@
                           PROCS_CHECK( num_procs, $1.string );
                           SEGMENT_CHECK( segments, $1.string );
                           SEGMENT_SIZE_CHECK( segment_procs, $1.string );
-                          strcpy(Config_procs[num_procs].name, $1.string);
-                          Config_procs[num_procs].id =
-			    name2ip(Config_procs[num_procs].name);
- 		          Config_procs[num_procs].port = 0;
-			  Config_procs[num_procs].seg_index = segments;
-			  Config_procs[num_procs].index_in_seg = segment_procs;
-                          Config_procs[num_procs].num_if = 1;
-                          Config_procs[num_procs].ifc[0].ip = Config_procs[num_procs].id;
-                          Config_procs[num_procs].ifc[0].port = Config_procs[num_procs].port;
-                          Config_procs[num_procs].ifc[0].type = IFTYPE_ALL | IFTYPE_ANY;
+                          strcpy(Config->allprocs[num_procs].name, $1.string);
+                          Config->allprocs[num_procs].id =
+			    name2ip(Config->allprocs[num_procs].name);
+ 		          Config->allprocs[num_procs].port = 0;
+			  Config->allprocs[num_procs].seg_index = segments;
+			  Config->allprocs[num_procs].index_in_seg = segment_procs;
+                          Config->allprocs[num_procs].num_if = 1;
+                          Config->allprocs[num_procs].ifc[0].ip = Config->allprocs[num_procs].id;
+                          Config->allprocs[num_procs].ifc[0].port = Config->allprocs[num_procs].port;
+                          Config->allprocs[num_procs].ifc[0].type = IFTYPE_ALL | IFTYPE_ANY;
 			  Config->segments[segments].procs[segment_procs] = 
-                                  &Config_procs[num_procs];
+                              &(Config->allprocs[num_procs]);
 			  num_procs++;
 			  segment_procs++;
                           procs_interfaces = 0;
@@ -697,12 +697,12 @@
                           SEGMENT_CHECK( segments, $1.string );
                           SEGMENT_SIZE_CHECK( segment_procs, $1.string );
                           INTERFACE_NUM_CHECK( procs_interfaces, $1.string );
-                          Config_procs[num_procs].ifc[procs_interfaces].ip = $2.ip.addr.s_addr;
-                          Config_procs[num_procs].ifc[procs_interfaces].port = $2.ip.port;
+                          Config->allprocs[num_procs].ifc[procs_interfaces].ip = $2.ip.addr.s_addr;
+                          Config->allprocs[num_procs].ifc[procs_interfaces].port = $2.ip.port;
                           if ($1.mask == 0)
-                                  Config_procs[num_procs].ifc[procs_interfaces].type = IFTYPE_ALL;
+                                  Config->allprocs[num_procs].ifc[procs_interfaces].type = IFTYPE_ALL;
                           else 
-                                  Config_procs[num_procs].ifc[procs_interfaces].type = $1.mask;
+                                  Config->allprocs[num_procs].ifc[procs_interfaces].type = $1.mask;
                           procs_interfaces++;
 			}
 		;

Modified: branches/reconfig_groups_crash_bugfix/daemon/configuration.c
===================================================================
--- branches/reconfig_groups_crash_bugfix/daemon/configuration.c	2012-04-16 16:10:10 UTC (rev 509)
+++ branches/reconfig_groups_crash_bugfix/daemon/configuration.c	2012-04-17 14:03:23 UTC (rev 510)
@@ -110,13 +110,11 @@
 static  bool    Conf_Reload_State = FALSE;
 static  bool    Conf_Reload_Singleton_State = FALSE;
 static  configuration *Config_Previous;
-static  proc    *Config_Previous_Procs;
 static  char    Conf_FileName[80];
 static  char    Conf_MyName_buf[80];
 static  char    *Conf_MyName;
 
-static  int	Conf_prev_proc_by_id( int32u id, proc *p );
-static  void    Conf_config_copy( configuration *src_conf, configuration *dst_conf, proc *src_procs, proc *dst_procs);
+static  void    Conf_config_copy( configuration *src_conf, configuration *dst_conf);
 
 /* Hash function for string to 32 bit int */
 static LOC_INLINE int32u conf_hash_string(const void * key, int32u key_len)
@@ -143,6 +141,7 @@
 
 void	Conf_init( char *file_name, char *my_name )
 {
+        proc *config_procs;
         strncpy(Conf_FileName, file_name, 80);
         if (my_name != NULL) {
                 strncpy(Conf_MyName_buf, my_name, 80);
@@ -155,11 +154,13 @@
         if (Config == NULL) {
                 Alarmp( SPLOG_FATAL, CONF_SYS, "Conf_init: Failed to allocate memory for configuration structure\n");
         }
-        Config_procs = Mem_alloc( MAX_PROCS_RING * sizeof( proc ) );
-        if (Config_procs == NULL) {
+        config_procs = Mem_alloc( MAX_PROCS_RING * sizeof( proc ) );
+        if (config_procs == NULL) {
                 Alarmp( SPLOG_FATAL, CONF_SYS, "Conf_init: Failed to allocate memory for configuration procs array\n");
         }
 
+        Config->allprocs = config_procs;
+
         Conf_load_conf_file( file_name, my_name);
 }
 
@@ -218,19 +219,16 @@
         proc    np, op;
         int     i, pi;
 
-        Config_Previous = Config;
-        Config_Previous_Procs = Config_procs;
-
         Config_Previous = Mem_alloc( sizeof( configuration ) );
         if (Config_Previous == NULL) {
                 Alarmp( SPLOG_FATAL, CONF_SYS, "Conf_reload_initiate: Failed to allocate memory for old configuration structure\n");
         }
-        Config_Previous_Procs = Mem_alloc( MAX_PROCS_RING * sizeof( proc ) );
-        if (Config_Previous_Procs == NULL) {
+        Config_Previous->allprocs = Mem_alloc( MAX_PROCS_RING * sizeof( proc ) );
+        if (Config_Previous->allprocs == NULL) {
                 Alarmp( SPLOG_FATAL, CONF_SYS, "Conf_reload_initiate: Failed to allocate memory for old configuration procs array\n");
         }
 
-        Conf_config_copy( Config, Config_Previous, Config_procs, Config_Previous_Procs );
+        Conf_config_copy( Config, Config_Previous);
 
         Conf_load_conf_file( Conf_FileName, Conf_MyName );
 
@@ -243,7 +241,7 @@
                 /* I am no longer in config */
                 Alarmp(SPLOG_FATAL, CONF_SYS, "Conf_reload_initiate: I (%d.%d.%d.%d) am no longer in config, so exiting.\n", IP1(My.id), IP2(My.id), IP3(My.id), IP4(My.id));
         }
-        if ( Conf_prev_proc_by_id( My.id, &op ) < 0 ) {
+        if ( Conf_proc_by_id_in_conf( Config_Previous, My.id, &op ) < 0 ) {
                 Alarmp(SPLOG_FATAL, CONF_SYS, "Conf_reload_initiate: BUG! I (%d.%d.%d.%d) am not in previous config, so exiting.\n", IP1(My.id), IP2(My.id), IP3(My.id), IP4(My.id));
         } 
 
@@ -266,8 +264,8 @@
         /* Check if only new configuration contains only additions and subtractions of daemons and no changes */
 	for ( pi=0; pi < Config->num_total_procs; pi++ )
 	{
-                np = Config_procs[pi];
-                if ( Conf_prev_proc_by_id( np.id, &op ) < 0 ) {
+                np = Config->allprocs[pi];
+                if ( Conf_proc_by_id_in_conf( Config_Previous, np.id, &op ) < 0 ) {
                         Alarmp( SPLOG_INFO, CONF_SYS, "Conf_reload_initiate: Config Added daemon at %d.%d.%d.%d \n", IP1(np.id), IP2(np.id), IP3(np.id), IP4(np.id));
                 } else {
                         /* compare proc entries to check if identical */
@@ -292,11 +290,10 @@
 	} /* for */
 
         /* free old config structs and arrays since they will never be used again */
+        dispose( Config_Previous->allprocs );
         dispose( Config_Previous );
-        dispose( Config_Previous_Procs );
 
         Config_Previous = NULL;
-        Config_Previous_Procs = NULL;
         
         Alarmp( SPLOG_DEBUG, CONF_SYS, "Conf_reload_initiate: Return need_partition = %d\n", need_partition);
         return(need_partition);
@@ -354,7 +351,7 @@
         ConfStringRep[0] = '\0';
         ConfStringLen = 0;
 
-	/* init Config, Config_procs from file
+	/* init Config from file
 	   init My from host
 	 */
         configfile_location[0] = '\0';
@@ -505,15 +502,25 @@
 
 int	Conf_proc_by_id( int32u id, proc *p )
 {
+        return( Conf_proc_by_id_in_conf( Config, id, p ));
+}
+
+int 	Conf_proc_by_name( char *name, proc *p )
+{
+        return( Conf_proc_by_name_in_conf( Config, name, p));
+}
+
+int	Conf_proc_by_id_in_conf( configuration *config, int32u id, proc *p )
+{
 	int	i,j;
 
-	for ( i=0; i < Config->num_total_procs; i++ )
+	for ( i=0; i < config->num_total_procs; i++ )
 	{
-                for ( j=0; j < Config_procs[i].num_if; j++)
+                for ( j=0; j < config->allprocs[i].num_if; j++)
                 {
-                        if ( Config_procs[i].ifc[j].ip == id )
+                        if ( config->allprocs[i].ifc[j].ip == id )
                         {
-                                *p =  Config_procs[i] ;
+                                *p =  config->allprocs[i] ;
                                 return( i );
                         }
                 }
@@ -521,21 +528,22 @@
 	return( -1 );
 }
 
-int 	Conf_proc_by_name( char *name, proc *p )
+int 	Conf_proc_by_name_in_conf( configuration *config, char *name, proc *p )
 {
 	int	i;
 
-	for ( i=0; i < Config->num_total_procs; i++ )
+	for ( i=0; i < config->num_total_procs; i++ )
 	{
-		if ( strcmp( Config_procs[i].name, name ) == 0 )
+		if ( strcmp( config->allprocs[i].name, name ) == 0 )
 		{
-			*p = Config_procs[i];
+			*p = config->allprocs[i];
 			return( i );
 		}
 	}
 	return( -1 );
 }
 
+
 int	Conf_id_in_seg( segment *seg, int32u id )
 {
 	int 	i,j;
@@ -550,41 +558,26 @@
 	}
 	return( -1 );
 }
-static  int     Conf_config_lookup_id( configuration *conf, proc *procs, int32u id)
-{
-	int	i,j;
 
-	for ( i=0; i < conf->num_total_procs; i++ )
-	{
-                for ( j=0; j < procs[i].num_if; j++)
-                {
-                        if ( procs[i].ifc[j].ip == id )
-                        {
-                                return( i );
-                        }
-                }
-	}
-	return( -1 );
-}
-
-static  void    Conf_config_copy( configuration *src_conf, configuration *dst_conf, proc *src_procs, proc *dst_procs)
+static  void    Conf_config_copy( configuration *src_conf, configuration *dst_conf)
 {
     int i,j,p_index;
+    proc p;
 
     *dst_conf = *src_conf;
 
     for (i=0; i < src_conf->num_total_procs; i++ )
     {
-        dst_procs[i] = src_procs[i];
+        dst_conf->allprocs[i] = src_conf->allprocs[i];
     }
 
     for (i=0; i < src_conf->num_segments; i++ )
     {
         for ( j=0; j < src_conf->segments[i].num_procs; j++ )
         {
-            p_index = Conf_config_lookup_id(dst_conf, dst_procs, src_conf->segments[i].procs[j]->id);
+            p_index = Conf_proc_by_id_in_conf(dst_conf, src_conf->segments[i].procs[j]->id, &p);
             assert(p_index != -1);
-            dst_conf->segments[i].procs[j] = &dst_procs[p_index];
+            dst_conf->segments[i].procs[j] = &(dst_conf->allprocs[p_index]);
         }
     }        
 
@@ -606,11 +599,11 @@
 
 	for ( i=0; i < Config->num_total_procs; i++ )
 	{
-                for ( j=0; j < Config_procs[i].num_if; j++)
+                for ( j=0; j < Config->allprocs[i].num_if; j++)
                 {
-                        if ( Config_procs[i].ifc[j].ip == id )
+                        if ( Config->allprocs[i].ifc[j].ip == id )
                         {
-                                *p = &Config_procs[i];
+                                *p = &Config->allprocs[i];
                                 return( i );
                         }
                 }
@@ -618,24 +611,6 @@
 	return( -1 );
 }
 
-static  int	Conf_prev_proc_by_id( int32u id, proc *p )
-{
-	int	i,j;
-
-	for ( i=0; i < Config_Previous->num_total_procs; i++ )
-	{
-                for ( j=0; j < Config_Previous_Procs[i].num_if; j++)
-                {
-                        if ( Config_Previous_Procs[i].ifc[j].ip == id )
-                        {
-                                *p =  Config_Previous_Procs[i] ;
-                                return( i );
-                        }
-                }
-	}
-	return( -1 );
-}
-
 int     Conf_append_id_to_seg( segment *seg, int32u id)
 {
         proc *p;
@@ -766,10 +741,30 @@
 			Alarm( PRINT, "\t\t%-20s\t%-16s\n", pr.name, ip );
 		}
 	}
-	Alarm( PRINT, "====================" );
+	Alarm( PRINT, "====================\n" );
 	return( '\n' );
 }
 
+
+char	Conf_print_procs(configuration *config)
+{
+	int 	i;
+	char	ip[16];
+
+	Alarm( PRINT, "--------------------\n" );
+	Alarm( PRINT, "Configured Procs\n");
+	Alarm( PRINT, "Total Num %d\n",config->num_total_procs );
+	for ( i=0; i < config->num_total_procs; i++ )
+	{
+                Conf_id_to_str( config->allprocs[i].id, ip );
+                Alarm( PRINT, "\t%s:%d\tID: %-16s NumIF: %d\n",
+                       config->allprocs[i].name, config->allprocs[i].port,
+                       ip, config->allprocs[i].num_if);
+        }
+	Alarm( PRINT, "====================\n" );
+	return( '\n' );
+}
+
 bool    Conf_get_dangerous_monitor_state(void)
 {
         return(EnableDangerousMonitor);

Modified: branches/reconfig_groups_crash_bugfix/daemon/configuration.h
===================================================================
--- branches/reconfig_groups_crash_bugfix/daemon/configuration.h	2012-04-16 16:10:10 UTC (rev 509)
+++ branches/reconfig_groups_crash_bugfix/daemon/configuration.h	2012-04-17 14:03:23 UTC (rev 510)
@@ -81,6 +81,7 @@
         int32u  hash_code;
 	int	num_segments;
         int     num_total_procs;
+        proc    *allprocs;
 	segment	segments[MAX_SEGMENTS];
 } configuration;
 
@@ -97,6 +98,8 @@
 proc		Conf_my(void);
 int		Conf_proc_by_id( int32u id, proc *p );
 int		Conf_proc_by_name( char *name, proc *p );
+int		Conf_proc_by_id_in_conf( configuration *config, int32u id, proc *p );
+int		Conf_proc_by_name_in_conf( configuration *config, char *name, proc *p );
 int		Conf_id_in_seg( segment *seg, int32u id );	
 int		Conf_id_in_conf( configuration *config, int32u id );	
 int		Conf_num_procs( configuration *config );
@@ -109,6 +112,7 @@
 int	        Conf_num_procs_in_seg( configuration *config, int16 seg_index );
 void		Conf_id_to_str( int32u id, char *str );
 char 		Conf_print(configuration *config);
+char	        Conf_print_procs(configuration *config);
 
 bool            Conf_in_reload_state(void);
 void            Conf_reload_state_begin(void);




More information about the Spread-cvs mailing list