Merge "Reconfigure serivce and service group member lists"
This commit is contained in:
commit
84a616a258
|
@ -169,7 +169,8 @@ static SmErrorT sm_service_group_member_table_add( void* user_data[],
|
|||
service_group_member->service_failure_impact
|
||||
= db_service_group_member->service_failure_impact;
|
||||
service_group_member->service_failure_timestamp = 0;
|
||||
|
||||
service_group_member->provisioned = db_service_group_member->provisioned;
|
||||
|
||||
SM_LIST_PREPEND( _service_group_members,
|
||||
(SmListEntryDataPtrT) service_group_member );
|
||||
|
||||
|
@ -177,12 +178,65 @@ static SmErrorT sm_service_group_member_table_add( void* user_data[],
|
|||
service_group_member->id = db_service_group_member->id;
|
||||
service_group_member->service_failure_impact
|
||||
= db_service_group_member->service_failure_impact;
|
||||
service_group_member->provisioned = db_service_group_member->provisioned;
|
||||
}
|
||||
|
||||
return( SM_OKAY );
|
||||
}
|
||||
// ****************************************************************************
|
||||
|
||||
SmErrorT sm_service_group_member_provision(char service_group_name[], char service_name[])
|
||||
{
|
||||
SmErrorT error;
|
||||
SmDbServiceGroupMemberT db_service_group_member;
|
||||
SmServiceGroupMemberT* service_group_member;
|
||||
service_group_member = sm_service_group_member_table_read(service_group_name, service_name);
|
||||
if(NULL != service_group_member)
|
||||
{
|
||||
return SM_OKAY;
|
||||
}
|
||||
|
||||
error = sm_db_service_group_members_read( _sm_db_handle, service_group_name, service_name,
|
||||
&db_service_group_member );
|
||||
if(SM_OKAY != error)
|
||||
{
|
||||
DPRINTFE("Service group member %s:%s was not found", service_group_name, service_name);
|
||||
return SM_FAILED;
|
||||
}
|
||||
|
||||
error = sm_service_group_member_table_add(NULL, &db_service_group_member);
|
||||
if(SM_OKAY != error)
|
||||
{
|
||||
DPRINTFE("Failed to provision service group member %s:%s. Error %s",
|
||||
service_group_name, service_name, sm_error_str(error));
|
||||
return SM_FAILED;
|
||||
}
|
||||
|
||||
service_group_member = sm_service_group_member_table_read(service_group_name, service_name);
|
||||
if(NULL == service_group_member)
|
||||
{
|
||||
DPRINTFE("Service group member %s:%s not found", service_group_name, service_name);
|
||||
return SM_FAILED;
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
SmErrorT sm_service_group_member_deprovision(char service_group_name[], char service_name[])
|
||||
{
|
||||
SmServiceGroupMemberT* service_group_member;
|
||||
service_group_member = sm_service_group_member_table_read(service_group_name, service_name);
|
||||
if(NULL == service_group_member)
|
||||
{
|
||||
DPRINTFI("Service group member %s:%s was not found, already deprovisioned?",
|
||||
service_group_name, service_name);
|
||||
return SM_OKAY;
|
||||
}
|
||||
|
||||
SM_LIST_REMOVE( _service_group_members, (SmListEntryDataPtrT) service_group_member );
|
||||
return SM_OKAY;
|
||||
}
|
||||
|
||||
// ****************************************************************************
|
||||
// Service Group Member Table - Load
|
||||
// =================================
|
||||
|
@ -192,6 +246,12 @@ SmErrorT sm_service_group_member_table_load( void )
|
|||
SmDbServiceGroupMemberT service_group_member;
|
||||
SmErrorT error;
|
||||
|
||||
if( NULL != _service_group_members )
|
||||
{
|
||||
SM_LIST_CLEANUP_ALL( _service_group_members );
|
||||
_service_group_members = NULL;
|
||||
}
|
||||
|
||||
snprintf( db_query, sizeof(db_query), "%s = 'yes'",
|
||||
SM_SERVICE_GROUP_MEMBERS_TABLE_COLUMN_PROVISIONED );
|
||||
|
||||
|
@ -223,6 +283,7 @@ SmErrorT sm_service_group_member_table_persist(
|
|||
memset( &db_service_group_member, 0, sizeof(db_service_group_member) );
|
||||
|
||||
db_service_group_member.id = service_group_member->id;
|
||||
db_service_group_member.provisioned = service_group_member->provisioned;
|
||||
snprintf( db_service_group_member.name,
|
||||
sizeof(db_service_group_member.name),
|
||||
"%s", service_group_member->name );
|
||||
|
|
|
@ -25,6 +25,7 @@ typedef struct
|
|||
SmServiceConditionT service_condition;
|
||||
SmServiceSeverityT service_failure_impact;
|
||||
long service_failure_timestamp;
|
||||
bool provisioned;
|
||||
} SmServiceGroupMemberT;
|
||||
|
||||
typedef void (*SmServiceGroupMemberTableForEachCallbackT)
|
||||
|
@ -66,6 +67,10 @@ extern void sm_service_group_member_table_foreach_member(
|
|||
SmServiceGroupMemberTableForEachCallbackT callback );
|
||||
// ****************************************************************************
|
||||
|
||||
extern SmErrorT sm_service_group_member_provision(char service_group_name[], char service_name[]);
|
||||
|
||||
extern SmErrorT sm_service_group_member_deprovision(char service_group_name[], char service_name[]);
|
||||
|
||||
// ****************************************************************************
|
||||
// Service Group Member Table - Load
|
||||
// =================================
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
static SmListT* _services = NULL;
|
||||
static SmDbHandleT* _sm_db_handle = NULL;
|
||||
|
||||
static SmErrorT sm_service_table_add( void* user_data[], void* record );
|
||||
// ****************************************************************************
|
||||
// Service Table - Read
|
||||
// ====================
|
||||
|
@ -123,7 +124,7 @@ SmServiceT* sm_service_table_read_by_action_pid( int pid )
|
|||
// ****************************************************************************
|
||||
// Service Table - For Each
|
||||
// ========================
|
||||
void sm_service_table_foreach( void* user_data[],
|
||||
void sm_service_table_foreach( void* user_data[],
|
||||
SmServiceTableForEachCallbackT callback )
|
||||
{
|
||||
SmListT* entry = NULL;
|
||||
|
@ -145,6 +146,12 @@ static SmErrorT sm_service_table_add( void* user_data[], void* record )
|
|||
SmDbServiceT* db_service = (SmDbServiceT*) record;
|
||||
SmDbServiceInstanceT db_service_instance;
|
||||
SmErrorT error;
|
||||
int *count = NULL;
|
||||
if(user_data)
|
||||
{
|
||||
count = (int*)user_data[0];
|
||||
(*count) ++;
|
||||
}
|
||||
|
||||
error = sm_db_service_instances_read( _sm_db_handle, db_service->name,
|
||||
&db_service_instance );
|
||||
|
@ -183,7 +190,7 @@ static SmErrorT sm_service_table_add( void* user_data[], void* record )
|
|||
service->max_failures = db_service->max_failures;
|
||||
service->fail_count = 0;
|
||||
service->fail_countdown = db_service->fail_countdown;
|
||||
service->fail_countdown_interval_in_ms
|
||||
service->fail_countdown_interval_in_ms
|
||||
= db_service->fail_countdown_interval_in_ms;
|
||||
service->fail_countdown_timer_id = SM_TIMER_ID_INVALID;
|
||||
service->audit_timer_id = SM_TIMER_ID_INVALID;
|
||||
|
@ -222,7 +229,7 @@ static SmErrorT sm_service_table_add( void* user_data[], void* record )
|
|||
return( error );
|
||||
}
|
||||
|
||||
error = sm_service_enable_exists( service,
|
||||
error = sm_service_enable_exists( service,
|
||||
&service->enable_action_exists );
|
||||
if( SM_OKAY != error )
|
||||
{
|
||||
|
@ -270,7 +277,7 @@ static SmErrorT sm_service_table_add( void* user_data[], void* record )
|
|||
|
||||
SM_LIST_PREPEND( _services, (SmListEntryDataPtrT) service );
|
||||
|
||||
} else {
|
||||
} else {
|
||||
service->id = db_service->id;
|
||||
snprintf( service->instance_name, sizeof(service->instance_name),
|
||||
"%s", db_service_instance.instance_name );
|
||||
|
@ -278,33 +285,88 @@ static SmErrorT sm_service_table_add( void* user_data[], void* record )
|
|||
"%s", db_service_instance.instance_params );
|
||||
service->max_failures = db_service->max_failures;
|
||||
service->fail_countdown = db_service->fail_countdown;
|
||||
service->fail_countdown_interval_in_ms
|
||||
service->fail_countdown_interval_in_ms
|
||||
= db_service->fail_countdown_interval_in_ms;
|
||||
service->max_action_failures = db_service->max_action_failures;
|
||||
service->max_transition_failures = db_service->max_transition_failures;
|
||||
snprintf( service->pid_file, sizeof(service->pid_file), "%s",
|
||||
db_service->pid_file );
|
||||
}
|
||||
|
||||
service->provisioned = db_service->provisioned;
|
||||
return( SM_OKAY );
|
||||
}
|
||||
// ****************************************************************************
|
||||
|
||||
SmErrorT sm_service_provision(char service_name[])
|
||||
{
|
||||
SmServiceT* service = sm_service_table_read(service_name);
|
||||
if(NULL != service)
|
||||
{
|
||||
return SM_OKAY;
|
||||
}
|
||||
|
||||
SmErrorT error;
|
||||
SmDbServiceT db_service;
|
||||
error = sm_db_services_read( _sm_db_handle, service_name, &db_service );
|
||||
if(SM_OKAY != error)
|
||||
{
|
||||
return error;
|
||||
}
|
||||
|
||||
error = sm_service_table_add(NULL, &db_service);
|
||||
if(SM_OKAY != error)
|
||||
{
|
||||
DPRINTFE("Failed to provision service %s, error %s", service_name, sm_error_str(error));
|
||||
return SM_FAILED;
|
||||
}
|
||||
|
||||
service = sm_service_table_read(service_name);
|
||||
if(NULL == service)
|
||||
{
|
||||
DPRINTFE("Service %s not found.", service_name);
|
||||
return SM_FAILED;
|
||||
}
|
||||
|
||||
return SM_OKAY;
|
||||
}
|
||||
|
||||
|
||||
SmErrorT sm_service_deprovision(char service_name[])
|
||||
{
|
||||
SmServiceT* service = sm_service_table_read(service_name);
|
||||
if(NULL == service)
|
||||
{
|
||||
DPRINTFI("Service %s not found in provisioned list. Already deprovisioned?", service_name);
|
||||
return SM_OKAY;
|
||||
}
|
||||
|
||||
SM_LIST_REMOVE( _services, (SmListEntryDataPtrT) service );
|
||||
return SM_OKAY;
|
||||
}
|
||||
|
||||
// ****************************************************************************
|
||||
// Service Table - Load
|
||||
// ====================
|
||||
SmErrorT sm_service_table_load( void )
|
||||
{
|
||||
char db_query[SM_DB_QUERY_STATEMENT_MAX_CHAR];
|
||||
char db_query[SM_DB_QUERY_STATEMENT_MAX_CHAR];
|
||||
SmDbServiceT service;
|
||||
SmErrorT error;
|
||||
int count = 0;
|
||||
void* user_data[] = {&count};
|
||||
|
||||
if( NULL != _services )
|
||||
{
|
||||
SM_LIST_CLEANUP_ALL( _services );
|
||||
_services = NULL;
|
||||
}
|
||||
|
||||
snprintf( db_query, sizeof(db_query), "%s = 'yes'",
|
||||
SM_SERVICES_TABLE_COLUMN_PROVISIONED );
|
||||
|
||||
error = sm_db_foreach( SM_DATABASE_NAME, SM_SERVICES_TABLE_NAME,
|
||||
db_query, &service, sm_db_services_convert,
|
||||
sm_service_table_add, NULL );
|
||||
sm_service_table_add, user_data );
|
||||
if( SM_OKAY != error )
|
||||
{
|
||||
DPRINTFE( "Failed to loop over services in database, error=%s.",
|
||||
|
@ -312,6 +374,8 @@ SmErrorT sm_service_table_load( void )
|
|||
return( error );
|
||||
}
|
||||
|
||||
DPRINTFI("load %d services", count);
|
||||
|
||||
return( SM_OKAY );
|
||||
}
|
||||
// ****************************************************************************
|
||||
|
@ -327,6 +391,7 @@ SmErrorT sm_service_table_persist( SmServiceT* service )
|
|||
memset( &db_service, 0, sizeof(db_service) );
|
||||
|
||||
db_service.id = service->id;
|
||||
db_service.provisioned = service->provisioned;
|
||||
snprintf( db_service.name, sizeof(db_service.name), "%s", service->name );
|
||||
db_service.desired_state = service->desired_state;
|
||||
db_service.state = service->state;
|
||||
|
@ -334,7 +399,7 @@ SmErrorT sm_service_table_persist( SmServiceT* service )
|
|||
db_service.condition = service->condition;
|
||||
db_service.max_failures = service->max_failures;
|
||||
db_service.fail_countdown = service->fail_countdown;
|
||||
db_service.fail_countdown_interval_in_ms
|
||||
db_service.fail_countdown_interval_in_ms
|
||||
= service->fail_countdown_interval_in_ms;
|
||||
db_service.max_action_failures = service->max_action_failures;
|
||||
db_service.max_transition_failures = service->max_transition_failures;
|
||||
|
|
|
@ -57,6 +57,7 @@ typedef struct
|
|||
//flag to indicate disable a service without disabling its dependency
|
||||
bool disable_skip_dependent;
|
||||
char group_name[SM_SERVICE_GROUP_NAME_MAX_CHAR];
|
||||
bool provisioned;
|
||||
} SmServiceT;
|
||||
|
||||
typedef void (*SmServiceTableForEachCallbackT)
|
||||
|
@ -93,6 +94,10 @@ extern void sm_service_table_foreach( void* user_data[],
|
|||
SmServiceTableForEachCallbackT callback );
|
||||
// ****************************************************************************
|
||||
|
||||
extern SmErrorT sm_service_provision(char service_name[]);
|
||||
|
||||
extern SmErrorT sm_service_deprovision(char service_name[]);
|
||||
|
||||
// ****************************************************************************
|
||||
// Service Table - Load
|
||||
// ====================
|
||||
|
|
|
@ -233,6 +233,10 @@ SmErrorT sm_db_service_group_members_update( SmDbHandleT* sm_db_handle,
|
|||
sm_service_severity_str( record->service_failure_impact ) );
|
||||
}
|
||||
|
||||
len += snprintf( sql+len, sizeof(sql)-len, "%s = '%s', ",
|
||||
SM_SERVICE_GROUP_MEMBERS_TABLE_COLUMN_PROVISIONED,
|
||||
record->provisioned ? "yes": "no" );
|
||||
|
||||
snprintf( sql+len-2, sizeof(sql)-len, " WHERE %s = '%s' and %s = '%s';",
|
||||
SM_SERVICE_GROUP_MEMBERS_TABLE_COLUMN_NAME, record->name,
|
||||
SM_SERVICE_GROUP_MEMBERS_TABLE_COLUMN_SERVICE_NAME,
|
||||
|
|
|
@ -337,6 +337,10 @@ SmErrorT sm_db_services_update( SmDbHandleT* sm_db_handle,
|
|||
sm_service_condition_str( record->condition ) );
|
||||
}
|
||||
|
||||
len += snprintf( sql+len, sizeof(sql)-len, "%s = '%s', ",
|
||||
SM_SERVICES_TABLE_COLUMN_PROVISIONED,
|
||||
record->provisioned ? "yes": "no" );
|
||||
|
||||
len += snprintf( sql+len, sizeof(sql)-len, "%s = '%i', ",
|
||||
SM_SERVICES_TABLE_COLUMN_MAX_FAILURES,
|
||||
record->max_failures );
|
||||
|
|
Loading…
Reference in New Issue