diff --git a/lib/remote_storage/riak.rb b/lib/remote_storage/riak.rb index c237d2b..d32ffd3 100644 --- a/lib/remote_storage/riak.rb +++ b/lib/remote_storage/riak.rb @@ -92,7 +92,7 @@ module RemoteStorage server.halt 412 unless required_match == object.etag end - object_exists = !object.raw_data.nil? + object_exists = !object.raw_data.nil? || !object.meta["binary_key"].nil? existing_object_size = object_size(object) server.halt 412 if object_exists && server.env["HTTP_IF_NONE_MATCH"] == "*" diff --git a/spec/riak_spec.rb b/spec/riak_spec.rb index 1e1c3ba..6b3b9f3 100644 --- a/spec/riak_spec.rb +++ b/spec/riak_spec.rb @@ -397,6 +397,27 @@ describe "App with Riak backend" do log_entry.data["category"].must_equal "documents" log_entry.indexes["user_id_bin"].must_include "jimmy" end + + context "overwriting existing file with different file" do + before do + header "Content-Type", "image/jpeg; charset=binary" + filename = File.join(File.expand_path(File.dirname(__FILE__)), "fixtures", "rockrule.jpeg") + @image = File.open(filename, "r").read + put "/jimmy/documents/jaypeg", @image+"foo" + end + + it "logs the operation changing only the size" do + objects = [] + opslog_bucket.keys.each { |k| objects << opslog_bucket.get(k) rescue nil } + + objects.size.must_equal 2 + + log_entry = objects.select{|o| o.data["count"] == 0}.first + log_entry.data["size"].must_equal 3 + log_entry.data["category"].must_equal "documents" + log_entry.indexes["user_id_bin"].must_include "jimmy" + end + end end context "no binary charset in content-type header" do