[PATCH Conductor] BZ 785216 - Fix priority comparison for provider accounts

Imre Farkas ifarkas at redhat.com
Wed Feb 1 13:00:56 UTC 2012


On 01/31/2012 09:57 PM, gblomqui at redhat.com wrote:
> From: Greg Blomquist<gblomqui at redhat.com>
>
> https://bugzilla.redhat.com/show_bug.cgi?id=785216
>
> Launching a deployment should not fail if any of the provider accounts' priority
> value is nil.
> ---
>   src/app/models/deployment.rb       |   12 +++++++++++-
>   src/spec/models/deployment_spec.rb |   18 ++++++++++++++++++
>   2 files changed, 29 insertions(+), 1 deletions(-)
>
> diff --git a/src/app/models/deployment.rb b/src/app/models/deployment.rb
> index 68b5a57..8f6fac1 100644
> --- a/src/app/models/deployment.rb
> +++ b/src/app/models/deployment.rb
> @@ -236,7 +236,17 @@ class Deployment<  ActiveRecord::Base
>         return status
>       end
>       # grab the account with the best priority that can launch this deployment
> -    account = account_matches.keys.sort{|a,b| a.priority<=>  b.priority}.first
> +    account = account_matches.keys.sort do |a,b|
> +      if a.priority.nil? and b.priority.nil?
> +        0
> +      elsif a.priority.nil?
> +        1
> +      elsif b.priority.nil?
> +        -1
> +      else
> +        a.priority<=>  b.priority
> +      end
> +    end.first
>       instances_matches = account_matches[account]
>
>       if deployable_xml.requires_config_server?
> diff --git a/src/spec/models/deployment_spec.rb b/src/spec/models/deployment_spec.rb
> index 38b2b19..b8806e7 100644
> --- a/src/spec/models/deployment_spec.rb
> +++ b/src/spec/models/deployment_spec.rb
> @@ -224,6 +224,24 @@ describe Deployment do
>         deployment2.instances[1].provider_account.should == @provider_account2
>       end
>
> +    it "should not fail to launch if a provider account has a nil priority" do
> +      @deployment.save!
> +      @deployment.instances.should be_empty
> +
> +      @provider_account1.priority = nil
> +      @provider_account1.save!
> +
> +      Instance.any_instance.stub(:provider_images_for_match).and_return([@provider_image])
> +      Taskomatic.stub!(:create_dcloud_instance).and_return(true)
> +      Taskomatic.stub!(:handle_dcloud_error).and_return(true)
> +      Taskomatic.stub!(:handle_instance_state).and_return(true)
> +      @deployment.launch(@user_for_launch)[:errors].should be_empty
> +      @deployment.reload
> +      @deployment.instances.count.should == 2
> +      @deployment.instances[0].provider_account.should == @provider_account2
> +      @deployment.instances[1].provider_account.should == @provider_account2
> +    end
> +
>       it "should not launch instances if user has no access to hardware profile" do
>         @deployment.save!
>         @deployment.instances.should be_empty

ACK



More information about the aeolus-devel mailing list