about summary refs log tree commit homepage
path: root/lib/mogilefs
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-11-10 05:28:08 +0000
committerEric Wong <normalperson@yhbt.net>2011-11-10 05:28:08 +0000
commitfebf8fc2aab898218333e245bab4bda972de5692 (patch)
tree1e2a9e38e7d526335d4d5570fd53c3f2ad57861c /lib/mogilefs
parent9c0a7c670494fb55fb8ef98838fa0f53aab38d0d (diff)
downloadmogilefs-client-febf8fc2aab898218333e245bab4bda972de5692.tar.gz
We don't want to silently truncate data on our users,
that would be bad.
Diffstat (limited to 'lib/mogilefs')
-rw-r--r--lib/mogilefs/http_reader.rb7
-rw-r--r--lib/mogilefs/mogilefs.rb2
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/mogilefs/http_reader.rb b/lib/mogilefs/http_reader.rb
index d7a36e6..c338e70 100644
--- a/lib/mogilefs/http_reader.rb
+++ b/lib/mogilefs/http_reader.rb
@@ -19,6 +19,13 @@ class MogileFS::HTTPReader < MogileFS::Socket
           "read=#{buf.size} bytes, expected=#@content_length from #@uri", []
   end
 
+  def stream_to(dest)
+    rv = MogileFS::X.copy_stream(self, dest)
+    return rv if rv == @content_length
+    raise MogileFS::SizeMismatchError,
+          "read=#{rv} bytes, expected=#@content_length from #@uri", []
+  end
+
   def self.first(paths, timeout, count = nil, offset = nil)
     errors = nil
     if offset || count
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index e1b3eb6..d926926 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -62,7 +62,7 @@ class MogileFS::MogileFS < MogileFS::Client
     sock = MogileFS::HTTPReader.first(paths, @get_file_data_timeout,
                                       count, offset)
     if dest
-      MogileFS::X.copy_stream(sock, dest)
+      sock.stream_to(dest)
     elsif block_given?
       yield(sock)
     else