summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-19 01:44:44 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-19 01:44:44 +0000
commit61b34906552ca4bd46f9a07dec419a44bac94652 (patch)
tree7647474ac30c22167d978ad2ba31a23789b3a2b9
parent5f7ae353a0ca9cadaf8fdc8803e1227ee6583d25 (diff)
Fixing the fact caching so that facts are only downloaded and retrieved once, rather than once during fresh checking and once during config compile.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2304 980ebf18-57e1-0310-9a29-db15c13687c0
-rw-r--r--lib/puppet/network/client/master.rb13
-rwxr-xr-xtest/network/client/master.rb9
2 files changed, 14 insertions, 8 deletions
diff --git a/lib/puppet/network/client/master.rb b/lib/puppet/network/client/master.rb
index 506ed09e8..518110a63 100644
--- a/lib/puppet/network/client/master.rb
+++ b/lib/puppet/network/client/master.rb
@@ -128,7 +128,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
end
# Have the facts changed since we last compiled?
- def facts_changed?
+ def facts_changed?(facts)
oldfacts = Puppet::Util::Storage.cache(:configuration)[:facts]
newfacts = self.class.facts
if oldfacts == newfacts
@@ -139,10 +139,10 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
end
# Check whether our configuration is up to date
- def fresh?
+ def fresh?(facts)
return false if Puppet[:ignorecache]
return false unless self.compile_time
- return false if self.facts_changed?
+ return false if self.facts_changed?(facts)
# We're willing to give a 2 second drift
if @driver.freshness - @compile_time.to_i < 1
@@ -167,8 +167,11 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
# use the cached copy.
def getconfig
dostorage()
+
+ facts = self.class.facts
+
if self.objects or FileTest.exists?(self.cachefile)
- if self.fresh?
+ if self.fresh?(facts)
Puppet.info "Config is up to date"
begin
@objects = YAML.load(self.retrievecache).to_type
@@ -185,8 +188,6 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
getplugins()
end
- facts = self.class.facts
-
unless facts.length > 0
raise Puppet::Network::ClientError.new(
"Could not retrieve any facts"
diff --git a/test/network/client/master.rb b/test/network/client/master.rb
index 12f25820a..a8b09c0de 100755
--- a/test/network/client/master.rb
+++ b/test/network/client/master.rb
@@ -590,10 +590,15 @@ end
Facter.add(:testfact) do
setcode { $value }
end
+ facts = master.class.facts
assert_equal("two", Facter.value(:testfact), "fact did not change")
- assert(master.facts_changed?, "master does not think facts changed")
- assert(! master.fresh?, "master is considered fresh after facts changed")
+ assert(master.facts_changed?(facts), "master does not think facts changed")
+ assert(! master.fresh?(facts), "master is considered fresh after facts changed")
+
+ assert_nothing_raised("Could not recompile when facts changed") do
+ master.getconfig
+ end
end
end