diff options
author | Jesse Wolfe <jes5199@gmail.com> | 2010-08-12 13:51:14 -0700 |
---|---|---|
committer | Jesse Wolfe <jes5199@gmail.com> | 2010-08-12 13:51:14 -0700 |
commit | 0f56c1b02d40f1f8552d933dd78b24745937b137 (patch) | |
tree | 3c6495838d1b876528cb4522de3484c44749140d /lib/puppet/util/autoload.rb | |
parent | b53e7d78e2e87571ae53170e9716b9ccd75da6e2 (diff) | |
parent | 0aa27b5cc5df818e3878601e83f83a20590e161a (diff) | |
download | puppet-0f56c1b02d40f1f8552d933dd78b24745937b137.tar.gz puppet-0f56c1b02d40f1f8552d933dd78b24745937b137.tar.xz puppet-0f56c1b02d40f1f8552d933dd78b24745937b137.zip |
Merge commit '2.6.1rc2' into next
Diffstat (limited to 'lib/puppet/util/autoload.rb')
-rw-r--r-- | lib/puppet/util/autoload.rb | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/puppet/util/autoload.rb b/lib/puppet/util/autoload.rb index c293ac14a..f0dd0a5c5 100644 --- a/lib/puppet/util/autoload.rb +++ b/lib/puppet/util/autoload.rb @@ -131,11 +131,23 @@ class Puppet::Util::Autoload # We have to require this late in the process because otherwise we might have # load order issues. require 'puppet/node/environment' - Puppet::Node::Environment.new(env).modulepath.collect do |dir| - Dir.entries(dir).reject { |f| f =~ /^\./ }.collect { |f| File.join(dir, f) } - end.flatten.collect { |d| [File.join(d, "plugins"), File.join(d, "lib")] }.flatten.find_all do |d| - FileTest.directory?(d) - end + + real_env = Puppet::Node::Environment.new(env) + + # We're using a per-thread cache of said module directories, so that + # we don't scan the filesystem each time we try to load something with + # this autoload instance. But since we don't want to cache for the eternity + # this env_module_directories gets reset after the compilation on the master. + # This is also reset after an agent ran. + # One of the side effect of this change is that this module directories list will be + # shared among all autoload that we have running at a time. But that won't be an issue + # as by definition those directories are shared by all autoload. + Thread.current[:env_module_directories] ||= {} + Thread.current[:env_module_directories][real_env] ||= real_env.modulepath.collect do |dir| + Dir.entries(dir).reject { |f| f =~ /^\./ }.collect { |f| File.join(dir, f) } + end.flatten.collect { |d| [File.join(d, "plugins"), File.join(d, "lib")] }.flatten.find_all do |d| + FileTest.directory?(d) + end end def search_directories(env=nil) |