about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-11-10 16:48:28 -0800
committerEric Wong <normalperson@yhbt.net>2011-11-10 16:48:28 -0800
commit45f519f571cf88e1710e8175cff5742bed070ff9 (patch)
tree650eef6718fd283c9c120427a679f8aefa97a140
parent8a54ed8e52e428cb3790d71bed2b99ac52e0b991 (diff)
downloadmogilefs-client-45f519f571cf88e1710e8175cff5742bed070ff9.tar.gz
We may use this for pipelining
-rw-r--r--lib/mogilefs/backend.rb24
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