summaryrefslogtreecommitdiff
path: root/lib/chef/provider/remote_file.rb
diff options
context:
space:
mode:
authorLamont Granquist <lamont@opscode.com>2013-03-27 13:19:17 -0700
committerLamont Granquist <lamont@opscode.com>2013-03-27 13:19:17 -0700
commit3f7eb37e71eae94d81981f193bd3b7757e69b0ab (patch)
tree05a841c49e714b79821147489801226452b5a17a /lib/chef/provider/remote_file.rb
parent289baefe9d8d034412ff2f56e9614c45dba286cc (diff)
downloadchef-3f7eb37e71eae94d81981f193bd3b7757e69b0ab.tar.gz
- debugging around etag/last-modified cache
- move checksumming current_resource back into l_c_r - update new_resource.checksum immediately after deployingt
Diffstat (limited to 'lib/chef/provider/remote_file.rb')
-rw-r--r--lib/chef/provider/remote_file.rb22
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/chef/provider/remote_file.rb b/lib/chef/provider/remote_file.rb
index c3d98a27e7..fedd7ec5fd 100644
--- a/lib/chef/provider/remote_file.rb
+++ b/lib/chef/provider/remote_file.rb
@@ -31,11 +31,18 @@ class Chef
def load_current_resource
@current_resource = Chef::Resource::RemoteFile.new(@new_resource.name)
super
- fileinfo = load_fileinfo
- if fileinfo && fileinfo["checksum"] == @current_resource.checksum
- @current_resource.etag fileinfo["etag"]
- @current_resource.last_modified fileinfo["last_modified"]
- @current_resource.source fileinfo["src"]
+ unless fileinfo.nil? || fileinfo["checksum"].nil? || fileinfo["checksum"] == ""
+ Chef::Log.debug("found cached file information at #{Chef::Config[:file_cache_path]}/remote_file/#{new_resource.name}")
+ if fileinfo["checksum"] == @current_resource.checksum
+ @current_resource.etag fileinfo["etag"]
+ @current_resource.last_modified fileinfo["last_modified"]
+ @current_resource.source fileinfo["src"]
+ Chef::Log.debug("loaded etag %s, last_modified %s, source %s from file metadata cache" % [fileinfo["etag"], fileinfo["last_modified"], fileinfo["src"]])
+ else
+ Chef::Log.debug("checksum of current resource does not match cached checksum, not loading metadata...")
+ end
+ else
+ Chef::Log.debug("no cached file information found")
end
end
@@ -50,8 +57,8 @@ class Chef
save_fileinfo(@content.raw_file_source)
end
- def load_fileinfo
- begin
+ def fileinfo
+ @fileinfo ||= begin
Chef::JSONCompat.from_json(Chef::FileCache.load("remote_file/#{new_resource.name}"))
rescue Chef::Exceptions::FileNotFound
nil
@@ -66,6 +73,7 @@ class Chef
cache["checksum"] = @new_resource.checksum
cache_path = new_resource.name.sub(/^([A-Za-z]:)/, "") # strip drive letter on Windows
Chef::FileCache.store("remote_file/#{cache_path}", cache.to_json)
+ Chef::Log.debug("stored etag '%s', last_modified '%s', checksum '%s' for source '%s' into %s" % [cache["etag"], cache["last_modified"], cache["checksum"], source, "#{Chef::Config[:file_cache_path]}/remote_file/#{cache_path}"] )
end
end
end