diff options
author | Jacob Helwig <jacob@puppetlabs.com> | 2011-04-01 11:15:47 -0700 |
---|---|---|
committer | Jacob Helwig <jacob@puppetlabs.com> | 2011-04-01 11:15:47 -0700 |
commit | 1b66c28fb2ac5f5f10ce32b87ec459a480dcf161 (patch) | |
tree | b44a18ed0290079cde2e2c04a5d9ff1634e4a6f1 /lib/puppet | |
parent | d7a1424fa9b4626a2faa96d4673308ff91e5deb8 (diff) | |
download | puppet-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.rb | 2 | ||||
-rw-r--r-- | lib/puppet/resource/type_collection.rb | 6 |
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 |