+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.
