[PATCH conductor 17/22] Deployment use provider selection algorithms

Jozef Zigmund jzigmund at redhat.com
Mon Aug 13 18:26:48 UTC 2012


On Thu, 2012-08-02 at 14:25 +0200, ifarkas at redhat.com wrote:
> From: Imre Farkas <ifarkas at redhat.com>
> 
> ---
>  src/app/models/deployment.rb | 21 +++++++++++----------
>  1 file changed, 11 insertions(+), 10 deletions(-)
> 
> diff --git a/src/app/models/deployment.rb b/src/app/models/deployment.rb
> index 277f9b3..81f1155 100644
> --- a/src/app/models/deployment.rb
> +++ b/src/app/models/deployment.rb
> @@ -566,10 +566,6 @@ class Deployment < ActiveRecord::Base
>      end
>    end
>  
> -  # Find account (w/ highest priority) where all instances can be launched.
> -  # 1. find all matches for each instance
> -  # 2. for each account (ordered by priority) try to find match for each
> -  # instance
>    def find_match_with_common_account
>      errors = []
>      all_matches = instances.map do |instance|
> @@ -579,17 +575,22 @@ class Deployment < ActiveRecord::Base
>        m.select {|inst_match| !instance.includes_instance_match?(inst_match)}
>      end
>  
> -    pool.pool_family.provider_accounts_by_priority.each do |account|
> +    provider_selection_strategy = ProviderSelection::Base.new(instances)
> +    pool.provider_selection_strategies.enabled.each do  |strategy|
> +      provider_selection_strategy.chain_strategy(strategy.name)
> +    end
> +
> +    match = provider_selection_strategy.next_match

^^ this is breaking the probability of choosing provider account,
because it(the method find_match_with_common_account) is called also as
part of def check_assemblies_matches, that is called in
deployment#launch_time_params & #overview actions.

> +
> +    if match.present?
> +      account = match.provider_account
>        matches_by_account = all_matches.map do |m|
>          m.find {|m| m.provider_account.id == account.id}
>        end
> -      next if matches_by_account.include?(nil)
> -      unless account.quota.can_start? instances
> -        errors << I18n.t('instances.errors.provider_account_quota_too_low', :match_provider_account => account)
> -        next
> -      end
> +
>        return [matches_by_account, account, errors] unless matches_by_account.include?(nil)
>      end

^^ in fact this is else branch
> +
>      [nil, nil, errors]
>    end
>  





More information about the aeolus-devel mailing list