Merge "Update rule of disable & standby dependency"
This commit is contained in:
commit
002f5a79db
|
@ -93,7 +93,61 @@ static void sm_service_dependency_dependent_state_compare(
|
||||||
// ****************************************************************************
|
// ****************************************************************************
|
||||||
|
|
||||||
// ****************************************************************************
|
// ****************************************************************************
|
||||||
// Service Dependency - Go-Active Met
|
// Service Dependency - Dependent State in
|
||||||
|
// user_data = {service, => pointer to service object
|
||||||
|
// &dependency_met, => pointer to dependency met boolean variable
|
||||||
|
// &at_least_one, => pointer to boolean variable indicates
|
||||||
|
// if at least one dependency found
|
||||||
|
// qualified_states => an array of states that are qualified for
|
||||||
|
// depenedncy met condition of a dependency.
|
||||||
|
// array ends with SM_SERVICE_STATE_MAX
|
||||||
|
// };
|
||||||
|
// service_dependency => a service dependency record
|
||||||
|
// ============================================
|
||||||
|
static void sm_service_dependency_dependent_state_in(
|
||||||
|
void* user_data[], SmServiceDependencyT* service_dependency )
|
||||||
|
{
|
||||||
|
SmServiceT* service = (SmServiceT*) user_data[0];
|
||||||
|
bool* met = (bool*) user_data[1];
|
||||||
|
bool* at_least_one = (bool*) user_data[2];
|
||||||
|
SmServiceStateT* qualified_states = (SmServiceStateT*) user_data[3];
|
||||||
|
SmServiceT* dependent_service;
|
||||||
|
bool matched = false;
|
||||||
|
|
||||||
|
if( '\0' == service_dependency->dependent[0] )
|
||||||
|
{
|
||||||
|
DPRINTFI( "Service (%s) has no dependencies.", service->name );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dependent_service = sm_service_table_read( service_dependency->dependent );
|
||||||
|
if( NULL == dependent_service )
|
||||||
|
{
|
||||||
|
DPRINTFE( "Failed to read service (%s), error=%s.",
|
||||||
|
service_dependency->service_name,
|
||||||
|
sm_error_str(SM_NOT_FOUND) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*at_least_one = true;
|
||||||
|
|
||||||
|
for(SmServiceStateT* qs = qualified_states; *qs != SM_SERVICE_STATE_MAX; qs ++)
|
||||||
|
{
|
||||||
|
if(*qs == service_dependency->state)
|
||||||
|
{
|
||||||
|
matched = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!matched)
|
||||||
|
{
|
||||||
|
*met = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ****************************************************************************
|
||||||
|
|
||||||
|
// ****************************************************************************
|
||||||
|
// Service Dependency - Go-Active Met
|
||||||
// ==================================
|
// ==================================
|
||||||
SmErrorT sm_service_dependency_go_active_met( SmServiceT* service, bool* met )
|
SmErrorT sm_service_dependency_go_active_met( SmServiceT* service, bool* met )
|
||||||
{
|
{
|
||||||
|
@ -220,6 +274,7 @@ static void _sm_service_disable_dependency_met(
|
||||||
}
|
}
|
||||||
|
|
||||||
if( SM_SERVICE_STATE_DISABLED != dependent_service->state &&
|
if( SM_SERVICE_STATE_DISABLED != dependent_service->state &&
|
||||||
|
SM_SERVICE_STATE_ENABLED_STANDBY != dependent_service->state &&
|
||||||
SM_SERVICE_STATE_ENABLED_ACTIVE != dependent_service->desired_state)
|
SM_SERVICE_STATE_ENABLED_ACTIVE != dependent_service->desired_state)
|
||||||
{
|
{
|
||||||
*dependency_met = false;
|
*dependency_met = false;
|
||||||
|
@ -283,15 +338,17 @@ SmErrorT sm_service_dependency_enabled_standby_state_met( SmServiceT* service,
|
||||||
{
|
{
|
||||||
bool at_least_one = false;
|
bool at_least_one = false;
|
||||||
bool dependency_met = true;
|
bool dependency_met = true;
|
||||||
SmCompareOperatorT compare_operator = SM_COMPARE_OPERATOR_LE;
|
SmServiceStateT qualified_states[] = {SM_SERVICE_STATE_ENABLED_STANDBY,
|
||||||
void* user_data[] = {service, &dependency_met, &compare_operator,
|
SM_SERVICE_STATE_DISABLED,
|
||||||
&at_least_one};
|
SM_SERVICE_STATE_MAX};
|
||||||
|
|
||||||
|
void* user_data[] = {service, &dependency_met, &at_least_one, qualified_states};
|
||||||
|
|
||||||
*met = false;
|
*met = false;
|
||||||
|
|
||||||
sm_service_dependency_table_foreach( SM_SERVICE_DEPENDENCY_TYPE_STATE,
|
sm_service_dependency_table_foreach( SM_SERVICE_DEPENDENCY_TYPE_STATE,
|
||||||
service->name, SM_SERVICE_STATE_ENABLED_STANDBY, SM_SERVICE_ACTION_NA,
|
service->name, SM_SERVICE_STATE_ENABLED_STANDBY, SM_SERVICE_ACTION_NA,
|
||||||
user_data, sm_service_dependency_dependent_state_compare );
|
user_data, sm_service_dependency_dependent_state_in );
|
||||||
|
|
||||||
|
|
||||||
if( at_least_one )
|
if( at_least_one )
|
||||||
|
|
Loading…
Reference in New Issue