summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
authorJacob Helwig <jacob@puppetlabs.com>2011-04-01 11:15:47 -0700
committerJacob Helwig <jacob@puppetlabs.com>2011-04-01 11:15:47 -0700
commit1b66c28fb2ac5f5f10ce32b87ec459a480dcf161 (patch)
treeb44a18ed0290079cde2e2c04a5d9ff1634e4a6f1 /lib/puppet
parentd7a1424fa9b4626a2faa96d4673308ff91e5deb8 (diff)
downloadpuppet-1b66c28fb2ac5f5f10ce32b87ec459a480dcf161.tar.gz
puppet-1b66c28fb2ac5f5f10ce32b87ec459a480dcf161.tar.xz
puppet-1b66c28fb2ac5f5f10ce32b87ec459a480dcf161.zip
(#5437) Invalidate cached TypeCollection when there was an error parsing
The caching of the TypeCollection in Puppet::Node::Environment would cause parse errors to occur (and be reported) only once and never again, until the file had changed on disk. This would also cause empty catalogs to be sent down to the agents further hiding the problem. Now, when a file fails to parse, it will be re-parsed every time on every following compilation, causing the parse error to be reported every time, and preventing sending down empty catalogs to agents. Paired-with: Nick Lewis <nick@puppetlabs.com>
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/node/environment.rb2
-rw-r--r--lib/puppet/resource/type_collection.rb6
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/puppet/node/environment.rb b/lib/puppet/node/environment.rb
index b64fb8a1f..807479bc8 100644
--- a/lib/puppet/node/environment.rb
+++ b/lib/puppet/node/environment.rb
@@ -79,7 +79,7 @@ class Puppet::Node::Environment
# environment has changed do we delve deeper.
Thread.current[:known_resource_types] = nil if (krt = Thread.current[:known_resource_types]) && krt.environment != self
Thread.current[:known_resource_types] ||= synchronize {
- if @known_resource_types.nil? or @known_resource_types.stale?
+ if @known_resource_types.nil? or @known_resource_types.require_reparse?
@known_resource_types = Puppet::Resource::TypeCollection.new(self)
@known_resource_types.perform_initial_import
end
diff --git a/lib/puppet/resource/type_collection.rb b/lib/puppet/resource/type_collection.rb
index 347e1c0e0..4210475ad 100644
--- a/lib/puppet/resource/type_collection.rb
+++ b/lib/puppet/resource/type_collection.rb
@@ -166,12 +166,18 @@ class Puppet::Resource::TypeCollection
end
parser.parse
rescue => detail
+ @parse_failed = true
+
msg = "Could not parse for environment #{environment}: #{detail}"
error = Puppet::Error.new(msg)
error.set_backtrace(detail.backtrace)
raise error
end
+ def require_reparse?
+ @parse_failed || stale?
+ end
+
def stale?
@watched_files.values.detect { |file| file.changed? }
end