diff options
author | Luke Kanies <luke@madstop.com> | 2009-04-08 18:05:34 -0500 |
---|---|---|
committer | James Turnbull <james@lovedthanlost.net> | 2009-04-22 14:39:36 +1000 |
commit | 89d91392b9fb98cc14a194729bb35cb1d87a72e2 (patch) | |
tree | ae1db8051035d7b085d14ffe091be4b064868ca4 | |
parent | ea4e3b286bd66e925c3ae5853a3a43fc5b30175f (diff) | |
download | puppet-89d91392b9fb98cc14a194729bb35cb1d87a72e2.tar.gz puppet-89d91392b9fb98cc14a194729bb35cb1d87a72e2.tar.xz puppet-89d91392b9fb98cc14a194729bb35cb1d87a72e2.zip |
Adding simplistic param_name/puppet_tag caching
This has a drastic affect on performance - cuts
about 25% off of the store time.
Signed-off-by: Luke Kanies <luke@madstop.com>
-rw-r--r-- | lib/puppet/rails/param_name.rb | 10 | ||||
-rw-r--r-- | lib/puppet/rails/puppet_tag.rb | 10 | ||||
-rw-r--r-- | lib/puppet/rails/resource.rb | 4 |
3 files changed, 22 insertions, 2 deletions
diff --git a/lib/puppet/rails/param_name.rb b/lib/puppet/rails/param_name.rb index 55d3727f9..818a90e35 100644 --- a/lib/puppet/rails/param_name.rb +++ b/lib/puppet/rails/param_name.rb @@ -5,6 +5,16 @@ class Puppet::Rails::ParamName < ActiveRecord::Base include Puppet::Util::CollectionMerger has_many :param_values, :dependent => :destroy + def self.accumulate_by_name(name) + @name_cache ||= {} + if instance = @name_cache[name] + return instance + end + instance = find_or_create_by_name(name) + @name_cache[name] = instance + instance + end + def to_resourceparam(resource, source) hash = {} hash[:name] = self.name.to_sym diff --git a/lib/puppet/rails/puppet_tag.rb b/lib/puppet/rails/puppet_tag.rb index 279eefc4e..53c39c5fd 100644 --- a/lib/puppet/rails/puppet_tag.rb +++ b/lib/puppet/rails/puppet_tag.rb @@ -2,4 +2,14 @@ require 'puppet/rails/resource_tag' class Puppet::Rails::PuppetTag < ActiveRecord::Base has_many :resource_tags, :dependent => :destroy has_many :resources, :through => :resource_tags + + def self.accumulate_by_name(name) + @name_cache ||= {} + if instance = @name_cache[name] + return instance + end + instance = find_or_create_by_name(name) + @name_cache[name] = instance + instance + end end diff --git a/lib/puppet/rails/resource.rb b/lib/puppet/rails/resource.rb index 0c8c9aa52..d91bb8209 100644 --- a/lib/puppet/rails/resource.rb +++ b/lib/puppet/rails/resource.rb @@ -35,7 +35,7 @@ class Puppet::Rails::Resource < ActiveRecord::Base end def add_resource_tag(tag) - pt = Puppet::Rails::PuppetTag.find_or_create_by_name(tag) + pt = Puppet::Rails::PuppetTag.accumulate_by_name(tag) resource_tags.build(:puppet_tag => pt) end @@ -139,7 +139,7 @@ class Puppet::Rails::Resource < ActiveRecord::Base values = param.value.is_a?(Array) ? param.value : [param.value] values.each do |v| - param_values.build(:value => serialize_value(v), :line => param.line, :param_name => Puppet::Rails::ParamName.find_or_create_by_name(name)) + param_values.build(:value => serialize_value(v), :line => param.line, :param_name => Puppet::Rails::ParamName.accumulate_by_name(name)) end end end |