diff options
author | Eric Wong <normalperson@yhbt.net> | 2008-12-30 18:03:06 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-12-30 18:21:28 -0800 |
commit | dda46f246f93ac31512582767c402957fb2fbaa1 (patch) | |
tree | fdc8cfaf3496b2143577a4d307147318f5c9a916 /lib/mogilefs/mogilefs.rb | |
parent | e07b59855a61a4053810f72e5a9f2000d54964e5 (diff) | |
download | mogilefs-client-dda46f246f93ac31512582767c402957fb2fbaa1.tar.gz |
Correctly fail when we get non-200 HTTP responses and retry on the next URI.
Diffstat (limited to 'lib/mogilefs/mogilefs.rb')
-rw-r--r-- | lib/mogilefs/mogilefs.rb | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb index 6a070fd..95d44f6 100644 --- a/lib/mogilefs/mogilefs.rb +++ b/lib/mogilefs/mogilefs.rb @@ -69,7 +69,7 @@ class MogileFS::MogileFS < MogileFS::Client sock = http_get_sock(URI.parse(path)) return block_given? ? yield(sock) : sock.read rescue MogileFS::Timeout, Errno::ECONNREFUSED, - EOFError, SystemCallError + EOFError, SystemCallError, MogileFS::InvalidResponseError next end else @@ -256,15 +256,20 @@ class MogileFS::MogileFS < MogileFS::Client protected + # given a URI, this returns a readable socket with ready data from the + # body of the response. def http_get_sock(uri) sock = Socket.mogilefs_new_request(uri.host, uri.port, "GET #{uri.request_uri} HTTP/1.0\r\n\r\n", @get_file_data_timeout) buf = sock.recv(4096, Socket::MSG_PEEK) head, body = buf.split(/\r\n\r\n/, 2) - head = sock.recv(head.size + 4, 0) - - sock + if head =~ %r{\AHTTP/\d+\.\d+\s+200\s+} + sock.recv(head.size + 4, 0) + return sock + end + raise MogileFS::InvalidResponseError, + "GET on #{uri} returned: #{head.inspect}" end # def http_get_sock end |