diff options
author | Jesse Wolfe <jes5199@gmail.com> | 2010-07-27 10:20:27 -0700 |
---|---|---|
committer | Jesse Wolfe <jes5199@gmail.com> | 2010-07-27 10:20:45 -0700 |
commit | d5db8db116aff58215ab0feebd7ec02086040f51 (patch) | |
tree | 58489a37bd0ee14b3d053a0e23f9638b4f6205e7 /lib/puppet/node | |
parent | 865282ae7b9332fdbdfa51b2814755b8a13d244b (diff) | |
parent | b53e7d78e2e87571ae53170e9716b9ccd75da6e2 (diff) | |
download | puppet-d5db8db116aff58215ab0feebd7ec02086040f51.tar.gz puppet-d5db8db116aff58215ab0feebd7ec02086040f51.tar.xz puppet-d5db8db116aff58215ab0feebd7ec02086040f51.zip |
Merge branch 'next'
This synchronizes the 2.7 master branch with 2.6.1RC1
Diffstat (limited to 'lib/puppet/node')
-rw-r--r-- | lib/puppet/node/environment.rb | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/puppet/node/environment.rb b/lib/puppet/node/environment.rb index 762599cff..3f67474f9 100644 --- a/lib/puppet/node/environment.rb +++ b/lib/puppet/node/environment.rb @@ -1,4 +1,5 @@ require 'puppet/util/cacher' +require 'monitor' # Just define it, so this class has fewer load dependencies. class Puppet::Node @@ -67,14 +68,23 @@ class Puppet::Node::Environment def initialize(name) @name = name + extend MonitorMixin end def known_resource_types - if @known_resource_types.nil? or @known_resource_types.stale? - @known_resource_types = Puppet::Resource::TypeCollection.new(self) - @known_resource_types.perform_initial_import - end - @known_resource_types + # This makes use of short circuit evaluation to get the right thread-safe + # per environment semantics with an efficient most common cases; we almost + # always just return our thread's known-resource types. Only at the start + # of a compilation (after our thread var has been set to nil) or when the + # 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? + @known_resource_types = Puppet::Resource::TypeCollection.new(self) + @known_resource_types.perform_initial_import + end + @known_resource_types + } end def module(name) |