diff options
author | Luke Kanies <luke@madstop.com> | 2009-05-17 16:54:06 -0500 |
---|---|---|
committer | James Turnbull <james@lovedthanlost.net> | 2009-05-20 18:29:04 +1000 |
commit | 5f1c228767432591a7e4b77666e9b1c7d70a095c (patch) | |
tree | 17d23e81ce3918790e78d13c2dbdd485124bfa87 /lib/puppet/node/environment.rb | |
parent | 047ab782aed5555a6812131acdba3925b1274a55 (diff) | |
download | puppet-5f1c228767432591a7e4b77666e9b1c7d70a095c.tar.gz puppet-5f1c228767432591a7e4b77666e9b1c7d70a095c.tar.xz puppet-5f1c228767432591a7e4b77666e9b1c7d70a095c.zip |
Adding caching to the Environment class
Caching the module path (because we check which
directories exist, and this method can get called
often), and the complete list of modules.
The cache ttl uses the filetimeout, which defaults to
15 seconds.
Signed-off-by: Luke Kanies <luke@madstop.com>
Diffstat (limited to 'lib/puppet/node/environment.rb')
-rw-r--r-- | lib/puppet/node/environment.rb | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lib/puppet/node/environment.rb b/lib/puppet/node/environment.rb index 3d13af1f8..c053e0d5f 100644 --- a/lib/puppet/node/environment.rb +++ b/lib/puppet/node/environment.rb @@ -1,6 +1,14 @@ +require 'puppet/util/cacher' + +# Just define it, so this class has fewer load dependencies. +class Puppet::Node +end + # Model the environment that a node can operate in. This class just # provides a simple wrapper for the functionality around environments. class Puppet::Node::Environment + include Puppet::Util::Cacher + @seen = {} # Return an existing environment instance, or create a new one. @@ -18,6 +26,11 @@ class Puppet::Node::Environment @seen[symbol] = obj end + # This is only used for testing. + def self.clear + @seen.clear + end + attr_reader :name # Return an environment-specific setting. @@ -35,7 +48,9 @@ class Puppet::Node::Environment return mod end - def modulepath + # Cache the modulepath, so that we aren't searching through + # all known directories all the time. + cached_attr(:modulepath, :ttl => Puppet[:filetimeout]) do dirs = self[:modulepath].split(File::PATH_SEPARATOR) if ENV["PUPPETLIB"] dirs = ENV["PUPPETLIB"].split(File::PATH_SEPARATOR) + dirs @@ -52,7 +67,8 @@ class Puppet::Node::Environment end # Return all modules from this environment. - def modules + # Cache the list, because it can be expensive to create. + cached_attr(:modules, :ttl => Puppet[:filetimeout]) do result = [] Puppet::Module.each_module(modulepath) do |mod| result << mod |