From dda46f246f93ac31512582767c402957fb2fbaa1 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 30 Dec 2008 18:03:06 -0800 Subject: Cleanup and document http_get_sock Correctly fail when we get non-200 HTTP responses and retry on the next URI. --- lib/mogilefs/mogilefs.rb | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'lib/mogilefs/mogilefs.rb') 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 -- cgit v1.2.3-24-ge0c7