about summary refs log tree commit homepage
path: root/lib/mogilefs/mogilefs.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-11-12 12:28:49 +0000
committerEric Wong <normalperson@yhbt.net>2011-11-12 12:28:49 +0000
commit7bedbf3ed5920a922da89874a2bd134fb1a82c83 (patch)
treeb5e00c841dcc372f8ef7e48dbbe6f74dcf71a52b /lib/mogilefs/mogilefs.rb
parent435d43d6b85481e7b678c3092dec7fcb246e30e8 (diff)
downloadmogilefs-client-7bedbf3ed5920a922da89874a2bd134fb1a82c83.tar.gz
Sometimes a server will shut down on us in the
middle of a pipeline.  That is bad.
Diffstat (limited to 'lib/mogilefs/mogilefs.rb')
-rw-r--r--lib/mogilefs/mogilefs.rb34
1 files changed, 20 insertions, 14 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index cfbf082..73827c3 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -263,21 +263,27 @@ class MogileFS::MogileFS < MogileFS::Client
       end
     end
     opts = { :domain => @domain }
-    keys.each do |key|
-      opts[:key] = key
-      @backend.pipeline_dispatch(:file_info, opts, &on_file_info)
-    end
-    @backend.pipeline_wait
-  rescue MogileFS::Backend::UnknownCommandError # MogileFS < 2.45
-    @backend.shutdown # reset the socket
-    args = { :pathcount => 0x7fffffff }
-    keys.each do |key|
-      paths = get_paths(key, args)
-      block.call(key, paths_size(paths), paths.size)
+    begin
+      keys.each do |key|
+        opts[:key] = key
+        @backend.pipeline_dispatch(:file_info, opts, &on_file_info)
+      end
+      @backend.pipeline_wait
+    rescue MogileFS::Backend::UnknownCommandError # MogileFS < 2.45
+      @backend.shutdown # reset the socket
+      args = { :pathcount => 0x7fffffff }
+      keys.each do |key|
+        paths = get_paths(key, args)
+        block.call(key, paths_size(paths), paths.size)
+      end
+    rescue MogileFS::PipelineError
+      @backend.shutdown
+      keys = ordered - ready.keys
+      retry
+    rescue
+      @backend.shutdown
+      raise
     end
-  rescue
-    @backend.shutdown
-    raise
   end
 
   # Return metadata about a file as a hash.