From a8d9976d0a11c4dc50b2ef49c63f3f745cb4eccb Mon Sep 17 00:00:00 2001 From: Luke Kanies Date: Fri, 14 Nov 2008 19:15:37 -0600 Subject: Catalogs always consider resource data to be expired if not mid-transaction. This way we'll cache when in a transaction, but otherwise always hit the disk so the data is fresh. This works because we really only use resources mid-transaction, but it behaves correctly if we happen to use a resource outside of a transaction. Signed-off-by: Luke Kanies --- lib/puppet/node/catalog.rb | 8 ++++++++ spec/unit/node/catalog.rb | 11 +++++++++++ spec/unit/type/file.rb | 4 +++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/puppet/node/catalog.rb b/lib/puppet/node/catalog.rb index a438a4764..e82e63444 100644 --- a/lib/puppet/node/catalog.rb +++ b/lib/puppet/node/catalog.rb @@ -183,6 +183,14 @@ class Puppet::Node::Catalog < Puppet::SimpleGraph resource end + def expired?(ts) + if applying? + return super + else + return true + end + end + # Make sure we support the requested extraction format. def extraction_format=(value) unless respond_to?("extract_to_%s" % value) diff --git a/spec/unit/node/catalog.rb b/spec/unit/node/catalog.rb index 3c4da5908..e23c53d3a 100755 --- a/spec/unit/node/catalog.rb +++ b/spec/unit/node/catalog.rb @@ -615,6 +615,17 @@ describe Puppet::Node::Catalog do Puppet::Node::Catalog.ancestors.should be_include(Puppet::Util::Cacher::Expirer) end + it "should always be expired if it's not applying" do + @catalog.expects(:applying?).returns false + @catalog.should be_expired(Time.now) + end + + it "should not be expired if it's applying and the timestamp is late enough" do + @catalog.expire + @catalog.expects(:applying?).returns true + @catalog.should_not be_expired(Time.now) + end + describe "when applying" do it "should create and evaluate a transaction" do @transaction.expects(:evaluate) diff --git a/spec/unit/type/file.rb b/spec/unit/type/file.rb index 6fd27d75b..45f9689a3 100755 --- a/spec/unit/type/file.rb +++ b/spec/unit/type/file.rb @@ -164,13 +164,15 @@ describe Puppet::Type.type(:file) do @resource.stat.should == "mystat" end - it "should cache the stat instance if it has a catalog" do + it "should cache the stat instance if it has a catalog and is applying" do stat = mock 'stat' File.expects(:lstat).returns stat catalog = Puppet::Node::Catalog.new @resource.catalog = catalog + catalog.stubs(:applying?).returns true + @resource.stat.should equal(@resource.stat) end end -- cgit