about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-11-08 09:40:16 +0000
committerEric Wong <normalperson@yhbt.net>2011-11-08 09:40:16 +0000
commit9be9c8b2ca91938025d9066ebde5c832da04f0ef (patch)
treebe66c4f77a21994e4c4d22eaacea5b1c044e0172
parentb07078b19046b485d758ebe46eeadbecf3b61db1 (diff)
downloadmogilefs-client-9be9c8b2ca91938025d9066ebde5c832da04f0ef.tar.gz
This is only needed for users on old MogileFS servers
-rw-r--r--lib/mogilefs/mogilefs.rb6
-rw-r--r--lib/mogilefs/paths_size.rb24
2 files changed, 27 insertions, 3 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index 625e26f..e253de5 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -198,9 +198,9 @@ class MogileFS::MogileFS < MogileFS::Client
     end
   end
 
-  def paths_size(paths)
-    sock = MogileFS::HTTPReader.first(paths, "HEAD", @get_file_data_timeout)
-    sock.content_length
+  def paths_size(paths) # :nodoc:
+    require "mogilefs/paths_size"
+    MogileFS::PathsSize.call(paths)
   end
 
   ##
diff --git a/lib/mogilefs/paths_size.rb b/lib/mogilefs/paths_size.rb
new file mode 100644
index 0000000..ba61f9e
--- /dev/null
+++ b/lib/mogilefs/paths_size.rb
@@ -0,0 +1,24 @@
+# -*- encoding: binary -*-
+# This is only a hack for old MogileFS installs that didn't have file_info
+require "net/http"
+require "uri"
+module MogileFS::PathsSize
+  def self.call(paths)
+    errors = {}
+    paths.each do |path|
+      uri = URI.parse(path)
+      begin
+        case r = Net::HTTP.start(uri.host, uri.port) { |x| x.head(uri.path) }
+        when Net::HTTPOK
+          return r["Content-Length"].to_i
+        else
+          errors[path] = r
+        end
+      rescue => err
+        errors[path] = err
+      end
+    end
+    errors = errors.map { |path,err| "#{path} - #{err.message} (#{err.class})" }
+    raise MogileFS::Error, "all paths failed with HEAD: #{errors.join(', ')}"
+  end
+end