[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