+1.  Much more readable too.

On Sun, Jul 18, 2010 at 7:40 PM, Markus Roberts <[email protected]> wrote:

> unevaluated_resources was a performance bottleneck and was doing a great
> deal
> of unneeded work, such as searching for the type of evaluated resources
> before
> ignoring them because only unevaluated resources were wanted.
>
> This patch is behaviour neutral but gives a 2-3x speedup for compiles with
> many
> defined resources.
>
> Signed-off-by: Markus Roberts <[email protected]>
> ---
>  lib/puppet/parser/compiler.rb     |   23 +++--------------------
>  lib/puppet/parser/resource.rb     |    9 +++------
>  lib/puppet/resource.rb            |    2 +-
>  lib/puppet/type.rb                |    8 ++------
>  spec/unit/parser/compiler_spec.rb |    2 +-
>  5 files changed, 10 insertions(+), 34 deletions(-)
>
> diff --git a/lib/puppet/parser/compiler.rb b/lib/puppet/parser/compiler.rb
> index 8598072..a901c0d 100644
> --- a/lib/puppet/parser/compiler.rb
> +++ b/lib/puppet/parser/compiler.rb
> @@ -251,19 +251,7 @@ class Puppet::Parser::Compiler
>   # evaluate_generators loop.
>   def evaluate_definitions
>     exceptwrap do
> -      if ary = unevaluated_resources
> -        evaluated = false
> -        ary.each do |resource|
> -          if not resource.virtual?
> -            resource.evaluate
> -            evaluated = true
> -          end
> -        end
> -        # If we evaluated, let the loop know.
> -        return evaluated
> -      else
> -        return false
> -      end
> +      !unevaluated_resources.each { |resource| resource.evaluate }.empty?
>     end
>   end
>
> @@ -482,12 +470,7 @@ class Puppet::Parser::Compiler
>   # Return an array of all of the unevaluated resources.  These will be
> definitions,
>   # which need to get evaluated into native resources.
>   def unevaluated_resources
> -    ary = resources.reject { |resource| resource.builtin? or
> resource.evaluated?  }
> -
> -    if ary.empty?
> -      return nil
> -    else
> -      return ary
> -    end
> +    # The order of these is significant for speed due to short-circuting
> +    resources.reject { |resource| resource.evaluated? or resource.virtual?
> or resource.builtin_type? }
>   end
>  end
> diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb
> index 3cccf4f..c956a11 100644
> --- a/lib/puppet/parser/resource.rb
> +++ b/lib/puppet/parser/resource.rb
> @@ -32,12 +32,9 @@ class Puppet::Parser::Resource < Puppet::Resource
>   end
>
>   # Set up some boolean test methods
> -  [:translated, :override, :evaluated].each do |method|
> -    newmeth = (method.to_s + "?").intern
> -    define_method(newmeth) do
> -      self.send(method)
> -    end
> -  end
> +  def translated?; !...@translated; end
> +  def override?;   !...@override;   end
> +  def evaluated?;  !...@evaluated;  end
>
>   def [](param)
>     param = symbolize(param)
> diff --git a/lib/puppet/resource.rb b/lib/puppet/resource.rb
> index d68e0ee..55874ae 100644
> --- a/lib/puppet/resource.rb
> +++ b/lib/puppet/resource.rb
> @@ -199,7 +199,7 @@ class Puppet::Resource
>   end
>
>   def resource_type
> -    case type
> +    @resource_type ||= case type
>     when "Class"; find_hostclass(title)
>     when "Node"; find_node(title)
>     else
> diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
> index 627271f..8807110 100644
> --- a/lib/puppet/type.rb
> +++ b/lib/puppet/type.rb
> @@ -1874,12 +1874,8 @@ class Type
>     self.to_trans.to_resource
>   end
>
> -  %w{exported virtual}.each do |m|
> -    define_method(m+"?") do
> -      self.send(m)
> -    end
> -  end
> -
> +  def virtual?;  !...@virtual;  end
> +  def exported?; !...@exported; end
>  end
>  end
>
> diff --git a/spec/unit/parser/compiler_spec.rb
> b/spec/unit/parser/compiler_spec.rb
> index a3fe56c..e8c06dd 100755
> --- a/spec/unit/parser/compiler_spec.rb
> +++ b/spec/unit/parser/compiler_spec.rb
> @@ -23,7 +23,7 @@ class CompilerTestResource
>     @evaluated
>   end
>
> -  def builtin?
> +  def builtin_type?
>     @builtin
>   end
>
> --
> 1.6.4
>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Developers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<puppet-dev%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/puppet-dev?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to