コード例 #1
0
static TransitionStatus activate_new_mappings(GPtrArray *activation_array, GPtrArray *union_array, GPtrArray *target_array, GPtrArray *old_activation_mappings, const gboolean no_rollback, const gboolean dry_run)
{
    map_activation_mapping_function map_activation_mapping;
    
    g_print("[coordinator]: Executing activation of services:\n");
    
    if(dry_run)
        map_activation_mapping = dry_run_activate_mapping;
    else
        map_activation_mapping = activate_mapping;
    
    if(traverse_activation_mappings(activation_array, union_array, target_array, traverse_inter_dependency_mappings, map_activation_mapping, complete_activation) && !interrupted)
        return TRANSITION_SUCCESS;
    else
    {
        if(interrupted)
            g_printerr("[coordinator]: The activation has been interrupted, reverting back to the old state...\n");
        
        if(no_rollback)
        {
            g_printerr("[coordinator]: Activation failed, but not doing a rollback as it has been\n");
            g_printerr("disabled! Please manually diagnose the errors!\n");
            return TRANSITION_FAILED;
        }
        else
        {
            /* If the activation fails, perform a rollback */
            g_printerr("[coordinator]: Activation failed! Doing a rollback...\n");
            
            /* Roll back the new mappings */
            if(!rollback_new_mappings(activation_array, union_array, target_array, dry_run))
            {
                g_printerr("[coordinator]: Rollback failed!\n\n");
                return TRANSITION_ROLLBACK_FAILED; // If the rollback failed, stop and notify the user to take manual action
            }
            
            if(old_activation_mappings == NULL)
                return TRANSITION_FAILED;
            else
            {
                /* If the new mappings have been rolled backed, roll back to the old mappings */
                
                if(rollback_to_old_mappings(union_array, old_activation_mappings, target_array, dry_run))
                    return TRANSITION_FAILED;
                else
                    return TRANSITION_ROLLBACK_FAILED;
            }
        }
    }
}
コード例 #2
0
ファイル: transition.c プロジェクト: rowhit/disnix
static int activate_new_mappings(GPtrArray *activation_array, GPtrArray *union_array, GPtrArray *target_array, GPtrArray *old_activation_mappings, const gboolean dry_run)
{
    g_print("[coordinator]: Executing activation of services:\n");
    
    if(iterate_over_activation_or_deactivation_mappings(TRUE, activation_array, union_array, target_array, dry_run))
        return 0;
    else
    {
        /* If the activation fails, perform a rollback */
        g_printerr("[coordinator]: Activation failed! Doing a rollback...\n");
        
        rollback_new_mappings(activation_array, union_array, target_array, dry_run);
        
        if(old_activation_mappings != NULL)
            rollback_to_old_mappings(union_array, old_activation_mappings, target_array, dry_run);
        
        return 1;
    }
}
コード例 #3
0
static TransitionStatus deactivate_obsolete_mappings(GPtrArray *deactivation_array, GPtrArray *union_array, GPtrArray *target_array, GPtrArray *old_activation_mappings, const gboolean no_rollback, const gboolean dry_run)
{
    g_print("[coordinator]: Executing deactivation of services:\n");
    
    if(deactivation_array == NULL)
        return TRANSITION_SUCCESS;
    else
    {
        map_activation_mapping_function map_activation_mapping;
        
        if(dry_run)
            map_activation_mapping = dry_run_deactivate_mapping;
        else
            map_activation_mapping = deactivate_mapping;
        
        if(traverse_activation_mappings(deactivation_array, union_array, target_array, traverse_interdependent_mappings, map_activation_mapping, complete_deactivation) && !interrupted)
            return TRANSITION_SUCCESS;
        else
        {
            if(interrupted)
                g_printerr("[coordinator]: The deactivation phase has been interrupted, reactivating services again...\n");
            
            if(no_rollback)
            {
                g_printerr("[coordinator]: Deactivation failed, but not performing a rollback because it has\n");
                g_printerr("been disabled! Please manually diagnose the problems!\n");
                return TRANSITION_FAILED;
            }
            else
            {
                /* If the deactivation fails, perform a rollback */
                g_printerr("[coordinator]: Deactivation failed! Doing a rollback...\n");
                if(rollback_to_old_mappings(union_array, old_activation_mappings, target_array, dry_run))
                    return TRANSITION_FAILED;
                else
                {
                    g_printerr("[coordinator]: Rollback failed!\n\n");
                    return TRANSITION_ROLLBACK_FAILED;
                }
            }
        }
    }
}
コード例 #4
0
ファイル: transition.c プロジェクト: rowhit/disnix
static int deactivate_obsolete_mappings(GPtrArray *deactivation_array, GPtrArray *union_array, GPtrArray *target_array, GPtrArray *old_activation_mappings, const gboolean dry_run)
{
    g_print("[coordinator]: Executing deactivation of services:\n");

    if(deactivation_array == NULL)
        return 0;
    else
    {
        if(iterate_over_activation_or_deactivation_mappings(FALSE, deactivation_array, union_array, target_array, dry_run))
            return 0;
        else
        {
            /* If the deactivation fails, perform a rollback */
            g_print("[coordinator]: Deactivation failed! Doing a rollback...\n");
            rollback_to_old_mappings(union_array, old_activation_mappings, target_array, dry_run);
            return 1;
        }
    }
}