diff options
author | Eric Wong <normalperson@yhbt.net> | 2009-03-24 18:56:50 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2009-03-24 19:18:24 -0700 |
commit | c07be896889f13235bda1bd32983261e73513a70 (patch) | |
tree | 073f5a3741b84576088eb1d332ddd5f50bfb0fe9 /lib/mogilefs/mogilefs.rb | |
parent | a69925d4b4671fe65e54e34a009e17fb1fa47700 (diff) | |
download | mogilefs-client-c07be896889f13235bda1bd32983261e73513a70.tar.gz |
This adds a sysread_full utility method with configurable timeouts. Individual reads can be timed out as well as the entire sysread_full call.
Diffstat (limited to 'lib/mogilefs/mogilefs.rb')
-rw-r--r-- | lib/mogilefs/mogilefs.rb | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb index c7c33ed..14fc0c2 100644 --- a/lib/mogilefs/mogilefs.rb +++ b/lib/mogilefs/mogilefs.rb @@ -71,17 +71,8 @@ class MogileFS::MogileFS < MogileFS::Client when /^http:\/\// then begin sock = http_get_sock(URI.parse(path)) - return( if block_given? - yield(sock) - else - begin - sock.read - rescue Errno::EAGAIN - IO.select([sock]) - retry - end - end ) - # return block_given? ? yield(sock) : sock.read + return yield(sock) if block_given? + return sysread_full(sock, sock.mogilefs_size, @get_file_data_timeout) rescue MogileFS::Timeout, Errno::ECONNREFUSED, EOFError, SystemCallError, MogileFS::InvalidResponseError next @@ -288,6 +279,7 @@ class MogileFS::MogileFS < MogileFS::Client buf = sock.recv(4096, Socket::MSG_PEEK) head, body = buf.split(/\r\n\r\n/, 2) if head =~ HTTP_200_OK + sock.mogilefs_size = head[/^Content-Length:\s*(\d+)/i, 1].to_i sock.recv(head.size + 4, 0) return sock end |