[PATCH conductor 17/22] Deployment use provider selection algorithms
Imre Farkas
ifarkas at redhat.com
Tue Aug 14 14:29:04 UTC 2012
On 08/13/2012 08:26 PM, Jozef Zigmund wrote:
> 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.
As we discussed, it is not breaking the probability distribution since
with filtering the sampled data in a way which is not based on the
outcome of the random selection (like here: using only every other) you
still have the same probability distribution.
>
>> +
>> + 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