diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-11-10 16:48:28 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-11-10 16:48:28 -0800 |
commit | 45f519f571cf88e1710e8175cff5742bed070ff9 (patch) | |
tree | 650eef6718fd283c9c120427a679f8aefa97a140 | |
parent | 8a54ed8e52e428cb3790d71bed2b99ac52e0b991 (diff) | |
download | mogilefs-client-45f519f571cf88e1710e8175cff5742bed070ff9.tar.gz |
We may use this for pipelining
-rw-r--r-- | lib/mogilefs/backend.rb | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/lib/mogilefs/backend.rb b/lib/mogilefs/backend.rb index 518e67e..a56abf1 100644 --- a/lib/mogilefs/backend.rb +++ b/lib/mogilefs/backend.rb @@ -160,25 +160,29 @@ class MogileFS::Backend end end + def dispatch_unlocked(request) # :nodoc: + begin + io = socket + io.timed_write(request, @timeout) + io + rescue SystemCallError => err + @dead[@active_host] = [ Time.now, err ] + shutdown_unlocked + retry + end + end + # Performs the +cmd+ request with +args+. def do_request(cmd, args, idempotent = false) request = make_request cmd, args @mutex.synchronize do begin - io = socket - begin - io.timed_write(request, @timeout) - rescue SystemCallError => err - @dead[@active_host] = [ Time.now, err ] - shutdown_unlocked - io = socket - retry - end - + io = dispatch_unlocked(request) line = io.timed_gets(@timeout) and return parse_response(line) idempotent or raise EOFError, "end of file reached after: #{request.inspect}" + # fall through to retry in loop rescue SystemCallError, MogileFS::UnreadableSocketError, MogileFS::InvalidResponseError, # truncated response |