From 45f519f571cf88e1710e8175cff5742bed070ff9 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 10 Nov 2011 16:48:28 -0800 Subject: backend: factor out dispatch unlocked We may use this for pipelining --- lib/mogilefs/backend.rb | 24 ++++++++++++++---------- 1 file 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 -- cgit v1.2.3-24-ge0c7