diff options
Diffstat (limited to 'chef')
18 files changed, 49 insertions, 9 deletions
diff --git a/chef/lib/chef/checksum_cache.rb b/chef/lib/chef/checksum_cache.rb index b6eb03061e..61a69f589a 100644 --- a/chef/lib/chef/checksum_cache.rb +++ b/chef/lib/chef/checksum_cache.rb @@ -8,9 +8,9 @@ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -27,28 +27,28 @@ require 'chef/mixin/convert_to_class_name' require 'singleton' require 'moneta' -class Chef +class Chef class ChecksumCache include Chef::Mixin::ConvertToClassName include ::Singleton - + attr_reader :moneta - + def initialize(*args) self.reset!(*args) end - + def reset!(backend=nil, options=nil) backend ||= Chef::Config[:cache_type] options ||= Chef::Config[:cache_options] - + begin require "moneta/#{convert_to_snake_case(backend, 'Moneta')}" rescue LoadError => e Chef::Log.fatal("Could not load Moneta back end #{backend.inspect}") raise e end - + @moneta = Moneta.const_get(backend).new(options) end @@ -112,7 +112,7 @@ class Chef end def lookup_checksum(key, fstat) - cached = @moneta.fetch(key) + cached = fetch(key) if cached && file_unchanged?(cached, fstat) validate_checksum(key) cached["checksum"] @@ -146,6 +146,22 @@ class Chef private + def fetch(key) + @moneta.fetch(key) + rescue ArgumentError => e + Log.warn "Error loading cached checksum for key #{key.inspect}" + Log.warn(e) + repair_checksum_cache + nil + end + + def repair_checksum_cache + Chef::Log.info("Removing invalid checksum cache files") + Dir["#{Chef::Config[:cache_options][:path]}/*"].each do |file_path| + File.unlink(file_path) unless File.size?(file_path) + end + end + def file_unchanged?(cached, fstat) cached["mtime"].to_f == fstat.mtime.to_f end diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 index e69de29bb2..81836588d5 100644 --- a/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +++ b/chef/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 @@ -0,0 +1 @@ +checksum data here diff --git a/chef/spec/unit/checksum_cache_spec.rb b/chef/spec/unit/checksum_cache_spec.rb index 1896fedfa2..e86b52d195 100644 --- a/chef/spec/unit/checksum_cache_spec.rb +++ b/chef/spec/unit/checksum_cache_spec.rb @@ -193,6 +193,14 @@ describe Chef::ChecksumCache do Chef::ChecksumCache.cleanup_checksum_cache end + + it "cleans all 0byte checksum files when it encounters a Marshal error" do + @cache.moneta.stub!(:fetch).and_raise(ArgumentError) + # This cache file is 0 bytes, raises an argument error when + # attempting to Marshal.load + File.should_receive(:unlink).with(File.join(CHEF_SPEC_DATA, "checksum_cache", "chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0")) + @cache.lookup_checksum("chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0", "foo") + end end end |