diff options
author | Brice Figureau <brice@daysofwonder.com> | 2008-08-11 10:52:50 +0200 |
---|---|---|
committer | James Turnbull <james@lovedthanlost.net> | 2008-08-17 23:47:30 +1000 |
commit | 2ec4e298c3274abc8eaad4230bca8d39a48d2e35 (patch) | |
tree | 6079621408d5d2291ac77648b3f5ef47564ad2dd /lib | |
parent | 9272df437c3cee6070f4e765bf61511cd85cb3a7 (diff) | |
download | puppet-2ec4e298c3274abc8eaad4230bca8d39a48d2e35.tar.gz puppet-2ec4e298c3274abc8eaad4230bca8d39a48d2e35.tar.xz puppet-2ec4e298c3274abc8eaad4230bca8d39a48d2e35.zip |
Fix #1502 - abysmal storeconfig performance - part2
Resource parameters whose values are a resource reference (ie require,
notify...) where always DELETEd/INSERTed because the code comparing
resource reference compared object instances instead of their values
(since Puppet::Parser::Resource::Reference doesn't override == ), leading
to storeconfig performance issues.
The correct fix would have been to define == in Puppet::Parser::Resource::Reference
but that might introduce some side effects I don't know.
Hence, the fix introduces a local compare() method that knows how to
compare Puppet::Parser::Resource::Reference.
Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/parser/resource/param.rb | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/puppet/parser/resource/param.rb b/lib/puppet/parser/resource/param.rb index 9dd3f26d2..c8dd78a26 100644 --- a/lib/puppet/parser/resource/param.rb +++ b/lib/puppet/parser/resource/param.rb @@ -66,6 +66,14 @@ class Puppet::Parser::Resource::Param def to_s "%s => %s" % [self.name, self.value] end + + def compare(v,db_value) + if (v.is_a?(Puppet::Parser::Resource::Reference)) + return v.to_s == db_value.to_s + else + return v == db_value + end + end def values_to_remove(db_values) values = munge_for_rails(value) @@ -73,7 +81,7 @@ class Puppet::Parser::Resource::Param db_values.collect do |db| db unless (db.line == line_number && values.find { |v| - v == db.value + compare(v,db.value) } ) end.compact end @@ -82,7 +90,7 @@ class Puppet::Parser::Resource::Param values = munge_for_rails(value) line_number = line_to_i() values.collect do |v| - v unless db_values.find { |db| (v == db.value && + v unless db_values.find { |db| (compare(v,db.value) && line_number == db.line) } end.compact end |