summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2009-04-08 18:05:34 -0500
committerJames Turnbull <james@lovedthanlost.net>2009-04-22 14:39:36 +1000
commit89d91392b9fb98cc14a194729bb35cb1d87a72e2 (patch)
treeae1db8051035d7b085d14ffe091be4b064868ca4 /lib/puppet
parentea4e3b286bd66e925c3ae5853a3a43fc5b30175f (diff)
downloadpuppet-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>
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/rails/param_name.rb10
-rw-r--r--lib/puppet/rails/puppet_tag.rb10
-rw-r--r--lib/puppet/rails/resource.rb4
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